diff -Nru openjdk-6-6b33-1.13.5/acinclude.m4 openjdk-6-6b34-1.13.6/acinclude.m4 --- openjdk-6-6b33-1.13.5/acinclude.m4 2015-01-27 16:24:27.000000000 +0000 +++ openjdk-6-6b34-1.13.6/acinclude.m4 2015-01-27 16:24:32.000000000 +0000 @@ -1563,7 +1563,7 @@ PKG_CHECK_MODULES(LCMS2, lcms2,[LCMS2_FOUND=yes],[LCMS2_FOUND=no]) if test "x${LCMS2_FOUND}" = xno then - AC_MSG_ERROR([Could not find LCMS >= 2.5; install it or build with --disable-system-lcms to use the in-tree copy.]) + AC_MSG_ERROR([Could not find LCMS 2; install it or build with --disable-system-lcms to use the in-tree copy.]) fi AC_SUBST(LCMS2_CFLAGS) AC_SUBST(LCMS2_LIBS) @@ -2323,3 +2323,49 @@ AC_MSG_RESULT([$enable_werror]) AM_CONDITIONAL([ENABLE_WERROR], test x"${enable_werror}" = "xyes") ]) + +AC_DEFUN_ONCE([IT_PR64174_CHECK],[ +AC_REQUIRE([IT_CHECK_JAVA_AND_JAVAC_WORK]) +AC_CACHE_CHECK([if java.text.SimpleDateFormat exhibits Classpath bug 64174], it_cv_cp64174, [ + CLASS=Test.java + BYTECODE=$(echo $CLASS|sed 's#\.java##') + mkdir tmp.$$ + cd tmp.$$ + cat << \EOF > $CLASS +[/* [#]line __oline__ "configure" */ +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Locale; +import java.util.TimeZone; + +public class Test +{ + public static void main(String[] args) + throws ParseException + { + SimpleDateFormat format; + + format = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.US); + format.setTimeZone(TimeZone.getTimeZone("GMT")); + format.setLenient(false); + System.out.println(format.parse("2014-12-31-22-00-00")); + } +}] +EOF + if $JAVAC -cp . $JAVACFLAGS -source 5 -target 5 $CLASS >&AS_MESSAGE_LOG_FD 2>&1; then + if $JAVA -classpath . $BYTECODE >&AS_MESSAGE_LOG_FD 2>&1; then + it_cv_cp64174=no; + else + it_cv_cp64174=yes; + fi + else + it_cv_cp64174=yes; + fi + rm -f $CLASS *.class + cd .. + rmdir tmp.$$ + ]) +AM_CONDITIONAL([CP64174], test x"${it_cv_cp64174}" = "xyes") +AC_PROVIDE([$0])dnl +]) diff -Nru openjdk-6-6b33-1.13.5/ChangeLog openjdk-6-6b34-1.13.6/ChangeLog --- openjdk-6-6b33-1.13.5/ChangeLog 2014-10-09 02:07:22.000000000 +0000 +++ openjdk-6-6b34-1.13.6/ChangeLog 2015-01-23 18:50:41.000000000 +0000 @@ -1,3 +1,269 @@ +2015-01-23 Andrew John Hughes + + * NEWS: Update release date and fix + description of PR2184. + +2015-01-07 Andrew John Hughes + + PR2190: JamVM lacks JVM_FindClassFromCaller introduced + by security patch in 1.13.5 + * Makefile.am: + (ICEDTEA_PATCHES): Add new patch when building + JamVM. + (EXTRA_DIST): Include patches from JamVM directory. + * NEWS: Updated. + * patches/jamvm/pr2190-find_class_from_caller.patch: + Backport JamVM patch to implement FindClassFromCaller. + +2015-01-21 Andrew John Hughes + + * Makefile.am: + (ICEDTEA_PATCHES): Add patches below. + * NEWS: Updated. + * patches/openjdk/6730740-pr2186-64-bit_breakage_in_6729881.patch, + * patches/openjdk/7031830-pr2183-bad_record_mac_failure.patch, + * patches/openjdk/oj51-pr2187-sync_4873188.patch, + * patches/openjdk/oj52-pr2185-no_serbia_montenegro.patch, + * patches/openjdk/oj53-pr2181-strict_aliasing_on_ppc32.patch, + * patches/openjdk/oj54-pr2182-6911104_reintroduces_test_fragment.patch: + New patches to fix issues found in b34. + +2014-10-29 Andrew John Hughes + + * Makefile.am: + (ICEDTEA_PATCHES): Add new patch for CACAO + builds. + * NEWS: Updated. + * patches/cacao/pr2184.patch: + Implement JVM_FindClassFromCaller as same + as JVM_FindClassFromClassLoader for now. + +2015-01-19 Andrew John Hughes + + * Makefile.am: + (extract-openjdk): Use abs_top_builddir + instead of builddir to please older + versions of autotools. No need to set + fsg.sh executable either as we run it + via sh. + * NEWS: Updated. + +2015-01-19 Andrew John Hughes + + * Makefile.am: + (OPENJDK_SHA256SUM): Update for new b34 tarball. + * NEWS: Updated. + +2015-01-19 Andrew John Hughes + + * Makefile.am: + (OPENJDK_SHA256SUM): Update for new b34 tarball. + (ICEDTEA_PATCHES): Add fix for PR2179. + * NEWS: Updated. + * patches/pr2179-avoid_x86_workaround_on_zero.patch: + Don't apply 8023956 when building Zero on x86. + +2015-01-19 Andrew John Hughes + + * NEWS: Set release date to 20th of January, + 2015 for 1.13.6. + * configure.ac: Bump to 1.13.6. + +2015-01-19 Andrew John Hughes + + * Makefile.am: + (OPENJDK_DATE): Bump to security update release date; + 20th of January, 2015. + (OPENJDK_SHA256SUM): Update for b34 tarball. + +2015-01-19 Andrew John Hughes + + * patches/openjdk/8000897-use_corresponding_digest_length.patch: + Moved to... + * Makefile.am: + (ICEDTEA_PATCHES): Add new patches. + * NEWS: Updated. + * patches/openjdk/8000897-pr2173-vm_crash_in_compilebroker.patch: + ...here. + * patches/openjdk/8020190-pr2174-jfieldid_must_match_object.patch, + * patches/openjdk/8028623-pr2177-hash_code_mismatch_for_extended_characters.patch, + * patches/openjdk/8061785-pr2177-test_bug-corrupted_utf8_character.patch, + * patches/pr2070-type_punning_warnings.patch, + * patches/pr2082-s390_type_fixes.patch, + * patches/pr2096-4096-bit_dh.patch: + New backports from IcedTea 2.x. + +2015-01-19 Andrew John Hughes + + * patches/openjdk/6541350-tz_display_names_l10n.patch, + * patches/openjdk/6706974-krb5_test_infrastructure.patch, + * patches/openjdk/6761072-new_krb5_tests_fail_on_multiple_platforms.patch, + * patches/openjdk/6821191-tz_display_names_l10n.patch, + * patches/openjdk/6925851-pt_br.patch, + * patches/openjdk/6977550-tzdata2010l.patch, + * patches/openjdk/6996686-tzdata2010o.patch, + * patches/openjdk/7017800-tzdata2011b.patch, + * patches/openjdk/7027387-tzdata2011d.patch, + * patches/openjdk/7033174-tzdata2011e.patch, + * patches/openjdk/7035073-missing_pt_br_timezones.patch, + * patches/openjdk/7039469-tzdata2011g.patch, + * patches/openjdk/7090843-tzdata2011j.patch, + * patches/openjdk/7103108-tzdata2011l.patch, + * patches/openjdk/7103405-correct_display_names.patch, + * patches/openjdk/7104126-headers_tzdata.patch, + * patches/openjdk/7158483-tzdata2012c.patch, + * patches/openjdk/7198570-tzdata2012f.patch, + * patches/openjdk/8002225-tzdata2012i.patch, + * patches/openjdk/8009987-tzdata2013b.patch, + * patches/openjdk/8014469-tzdata2013c.patch, + * patches/openjdk/8020054-tzdata2013d.patch, + * patches/openjdk/8025255-tzdata2013g.patch: + Remove patches included upstream. + * Makefile.am: + (ICEDTEA_PATCHES): Remove above patches. + * NEWS: Updated. + * patches/hotspot/hs23/remove_jsr292_tests.patch: + Regenerated. + * patches/hotspot/hs23/type_fixes.patch: + Remove threadLocalAllocBuffer.cpp hunk which is + no longer applicable. + +2015-01-19 Andrew John Hughes + + * patches/clean-crypto.patch: Removed; replaced by + inclusion of UNLIMITED_CRYPTO=true solution upstream. + * patches/openjdk/7122142-annotation_race_condition.patch, + * patches/openjdk/7161796-wrong_fetch_in_fetch_static_field.patch: + Remove patches included upstream. + * Makefile.am: + (ICEDTEA_PATCHES): Remove above patches. + (ICEDTEA_ENV): Set UNLIMITED_CRYPTO=true. + * NEWS: Updated. + * patches/openjdk/4963723-implement_sha-224.patch: + Regenerated following backport of 6647452 upstream. + * patches/openjdk/7044060-support_nsa_suite_b.patch: + Likewise. + * patches/openjdk/7106773-512_bits_rsa.patch: Likewise. + * patches/openjdk/8006935-long_keys_in_hmac_prf.patch: Likewise. + * patches/openjdk/p11cipher-4898461-support_ecb_and_cbc.patch: + Likewise. + * patches/openjdk/p11cipher-6604496-support_ckm_aes_ctr.patch: + Likewise. + +2015-01-05 Andrew John Hughes + + * patches/ecj/pr64174.patch: Drop the Lithuanian + changeover date now, as it's in the past. + +2014-12-04 Andrew John Hughes + + * Makefile.am: + (ICEDTEA_ECJ_PATCHES): Add workaround for bug + in parsing end-of-year dates (Classpath PR64174). + * acinclude.m4: + (IT_PR64174_CHECK): Detect if the boot JDK suffers + from PR64174 and apply the patch if so. + * configure.ac: Call IT_PR64174_CHECK. + * patches/ecj/pr64174.patch: Drop the Latvian + Euro changeover date, which is in the past anyway, + and move Lithuania's two hours forward so it enters + 2015 and avoids the bug. + +2014-10-24 Andrew John Hughes + + * Makefile.am: + (OPENJDK_VERSION): Bump to next release, b34. + +2014-12-05 Andrew John Hughes + + PR2125: Synchronise elliptic curves in + sun.security.ec.NamedCurve with those listed by NSS + * fsg.sh: Moved to... + * Makefile.am: + (EXTRA_DIST): Remove fsg.sh, now generated + by configure. + (extract-openjdk): Fix path to new generated + fsg.sh and mark as executable + * NEWS: Updated. + * configure.ac: Add fsg.sh to AC_CONFIG_FILES. + * fsg.sh.in: ... here and added application + of PR2125 patch. + * patches/pr2125.patch: Patch to remove curves + unsupported by NSS. + +2015-01-06 Andrew John Hughes + + PR2062: Unset OS before running OpenJDK build + * Makefile.am: + (ICEDTEA_UNSET): Introduce variable to + store unsetting of environment variables. + (ICEDTEA_ENV): Move JAVAC, JAVA_HOME and + JDK_HOME to ICEDTEA_UNSET. + (icedtea): Unset variables prior to running + $(MAKE). + (icedtea-debug): Likewise. + (icedtea-ecj): Likewise. + * NEWS: Updated. + +2014-06-10 Andrew John Hughes + + PR1832, RH1022017: Report elliptic curves + supported by NSS, not the SunEC library + * Makefile.am: + (ICEDTEA_PATCHES): Add new patch when + PKCS11+NSS is enabled, so + that the NSS set of curves are announced + via SSL. + * NEWS: Updated. + * patches/rh1022017.patch: + Reduce number of curves announced over SSL + to just those supported by NSS. + +2014-06-10 Andrew John Hughes + + PR1831: Drop version requirement for LCMS 2 + * INSTALL: Document lcms2 requirement. + * NEWS: Updated. + * acinclude.m4: + (IT_CHECK_FOR_LCMS): Drop 2.5 requirement. + +2014-10-24 Andrew John Hughes + + * Makefile.am, + (ICEDTEA_PATCHES): Add new patch. + * NEWS: Updated. + * patches/openjdk/8000897-use_corresponding_digest_length.patch: + Fix for SHA-2 bug discovered in RH1155012. + +2014-10-24 Andrew John Hughes + + * Makefile.am: + (ICEDTEA_PATCHES): Add new patches. + * NEWS: Updated. + * patches/openjdk/7122142-annotation_race_condition.patch: + Backport fix for annotation race condition. + * patches/openjdk/7161796-wrong_fetch_in_fetch_static_field.patch: + Fix for HotSpot bug hit by 7122142. + +2014-10-15 Andrew John Hughes + + PR2033: patches/ecj/jaxws-getdtdtype.patch no + longer applies since removal of JAXWS drop + * NEWS: Updated. + * patches/ecj/jaxws-getdtdtype.patch: + Regenerated as a normal patch against the + OpenJDK source tree. + +2014-10-14 Andrew John Hughes + + * NEWS: Add 1.13.6 section. + * configure.ac: Bump to 1.13.6pre. + +2014-10-14 Andrew John Hughes + + * NEWS: Correct formatting in 1.13.5 + release notes. + 2014-10-09 Andrew John Hughes * configure.ac: Bump to 1.13.5. diff -Nru openjdk-6-6b33-1.13.5/configure openjdk-6-6b34-1.13.6/configure --- openjdk-6-6b33-1.13.5/configure 2015-01-27 16:24:27.000000000 +0000 +++ openjdk-6-6b34-1.13.6/configure 2015-01-27 16:24:32.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for icedtea6 1.13.5. +# Generated by GNU Autoconf 2.69 for icedtea6 1.13.6. # # Report bugs to . # @@ -580,8 +580,8 @@ # Identity of this package. PACKAGE_NAME='icedtea6' PACKAGE_TARNAME='icedtea6' -PACKAGE_VERSION='1.13.5' -PACKAGE_STRING='icedtea6 1.13.5' +PACKAGE_VERSION='1.13.6' +PACKAGE_STRING='icedtea6 1.13.6' PACKAGE_BUGREPORT='distro-pkg-dev@openjdk.java.net' PACKAGE_URL='' @@ -787,6 +787,8 @@ ENABLE_PULSE_JAVA_TRUE SYSTEM_ANT_DIR XVFB_RUN_CMD +CP64174_FALSE +CP64174_TRUE LACKS_JAVA_SQL_EXCEPTION_REASON_STATE_CODE_THROWABLE_FALSE LACKS_JAVA_SQL_EXCEPTION_REASON_STATE_CODE_THROWABLE_TRUE LACKS_JAVA_SQL_EXCEPTION_REASON_STATE_THROWABLE_FALSE @@ -1667,7 +1669,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures icedtea6 1.13.5 to adapt to many kinds of systems. +\`configure' configures icedtea6 1.13.6 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1738,7 +1740,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of icedtea6 1.13.5:";; + short | recursive ) echo "Configuration of icedtea6 1.13.6:";; esac cat <<\_ACEOF @@ -1955,7 +1957,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -icedtea6 configure 1.13.5 +icedtea6 configure 1.13.6 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2524,7 +2526,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by icedtea6 $as_me 1.13.5, which was +It was created by icedtea6 $as_me 1.13.6, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3449,7 +3451,7 @@ # Define the identity of the package. PACKAGE='icedtea6' - VERSION='1.13.5' + VERSION='1.13.6' cat >>confdefs.h <<_ACEOF @@ -3570,7 +3572,7 @@ -ac_config_files="$ac_config_files Makefile" +ac_config_files="$ac_config_files Makefile fsg.sh" @@ -9348,7 +9350,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 9351 "configure" */ +/* [#]line 9353 "configure" */ public class Test { @@ -9390,7 +9392,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 9393 "configure" */ +/* [#]line 9395 "configure" */ import java.lang.reflect.Method; public class Test @@ -9457,7 +9459,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 9460 "configure" */ +/* [#]line 9462 "configure" */ public class Test { public static void main(String[] args) @@ -9505,7 +9507,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 9508 "configure" */ +/* [#]line 9510 "configure" */ import java.lang.reflect.Method; public class Test @@ -9572,7 +9574,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 9575 "configure" */ +/* [#]line 9577 "configure" */ import java.lang.reflect.Constructor; public class Test @@ -9641,7 +9643,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 9644 "configure" */ +/* [#]line 9646 "configure" */ import java.lang.reflect.Constructor; public class Test @@ -9711,7 +9713,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 9714 "configure" */ +/* [#]line 9716 "configure" */ import java.lang.reflect.Method; public class Test @@ -9777,7 +9779,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 9780 "configure" */ +/* [#]line 9782 "configure" */ import java.lang.reflect.Method; public class Test @@ -9843,7 +9845,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 9846 "configure" */ +/* [#]line 9848 "configure" */ import java.lang.reflect.Method; public class Test @@ -9909,7 +9911,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 9912 "configure" */ +/* [#]line 9914 "configure" */ import java.lang.reflect.Method; public class Test @@ -9975,7 +9977,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 9978 "configure" */ +/* [#]line 9980 "configure" */ import java.lang.reflect.Method; public class Test @@ -10041,7 +10043,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 10044 "configure" */ +/* [#]line 10046 "configure" */ import java.lang.reflect.Method; public class Test @@ -10108,7 +10110,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 10111 "configure" */ +/* [#]line 10113 "configure" */ import java.lang.reflect.Field; public class Test @@ -10170,7 +10172,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 10173 "configure" */ +/* [#]line 10175 "configure" */ import java.lang.reflect.Method; public class Test @@ -10236,7 +10238,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 10239 "configure" */ +/* [#]line 10241 "configure" */ import java.lang.reflect.Method; public class Test @@ -10304,7 +10306,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 10307 "configure" */ +/* [#]line 10309 "configure" */ import java.lang.reflect.Constructor; public class Test @@ -10374,7 +10376,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 10377 "configure" */ +/* [#]line 10379 "configure" */ import java.lang.reflect.Method; public class Test @@ -10441,7 +10443,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 10444 "configure" */ +/* [#]line 10446 "configure" */ import java.lang.reflect.Method; public class Test @@ -10508,7 +10510,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 10511 "configure" */ +/* [#]line 10513 "configure" */ import java.lang.reflect.Constructor; public class Test @@ -10577,7 +10579,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 10580 "configure" */ +/* [#]line 10582 "configure" */ import java.lang.reflect.Constructor; public class Test @@ -10646,7 +10648,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 10649 "configure" */ +/* [#]line 10651 "configure" */ import java.lang.reflect.Constructor; public class Test @@ -10715,7 +10717,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 10718 "configure" */ +/* [#]line 10720 "configure" */ import java.lang.reflect.Constructor; public class Test @@ -10772,6 +10774,66 @@ + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if java.text.SimpleDateFormat exhibits Classpath bug 64174" >&5 +$as_echo_n "checking if java.text.SimpleDateFormat exhibits Classpath bug 64174... " >&6; } +if ${it_cv_cp64174+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CLASS=Test.java + BYTECODE=$(echo $CLASS|sed 's#\.java##') + mkdir tmp.$$ + cd tmp.$$ + cat << \EOF > $CLASS +/* [#]line 10790 "configure" */ +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Locale; +import java.util.TimeZone; + +public class Test +{ + public static void main(String[] args) + throws ParseException + { + SimpleDateFormat format; + + format = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.US); + format.setTimeZone(TimeZone.getTimeZone("GMT")); + format.setLenient(false); + System.out.println(format.parse("2014-12-31-22-00-00")); + } +} +EOF + if $JAVAC -cp . $JAVACFLAGS -source 5 -target 5 $CLASS >&5 2>&1; then + if $JAVA -classpath . $BYTECODE >&5 2>&1; then + it_cv_cp64174=no; + else + it_cv_cp64174=yes; + fi + else + it_cv_cp64174=yes; + fi + rm -f $CLASS *.class + cd .. + rmdir tmp.$$ + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $it_cv_cp64174" >&5 +$as_echo "$it_cv_cp64174" >&6; } + if test x"${it_cv_cp64174}" = "xyes"; then + CP64174_TRUE= + CP64174_FALSE='#' +else + CP64174_TRUE='#' + CP64174_FALSE= +fi + + + # Use xvfb-run if found to run gui tests (check-jdk). # Extract the first word of "xvfb-run", so it can be a program name with args. set dummy xvfb-run; ac_word=$2 @@ -11938,7 +12000,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 11941 "configure" */ +/* [#]line 12003 "configure" */ public class Test { @@ -12593,7 +12655,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $CLASS -/* [#]line 12596 "configure" */ +/* [#]line 12658 "configure" */ import javax.xml.namespace.QName; import javax.xml.stream.Location; import javax.xml.stream.events.Attribute; @@ -12683,7 +12745,7 @@ mkdir tmp.$$ cd tmp.$$ cat << \EOF > $SUPERCLASS -/* #line 12686 "configure" */ +/* #line 12748 "configure" */ public class Test { public static final int POTATO = 0; @@ -12691,7 +12753,7 @@ } EOF cat << \EOF > $SUBCLASS -/* #line 12694 "configure" */ +/* #line 12756 "configure" */ public class TestImpl extends Test { @@ -13592,7 +13654,7 @@ fi if test "x${LCMS2_FOUND}" = xno then - as_fn_error $? "Could not find LCMS >= 2.5; install it or build with --disable-system-lcms to use the in-tree copy." "$LINENO" 5 + as_fn_error $? "Could not find LCMS 2; install it or build with --disable-system-lcms to use the in-tree copy." "$LINENO" 5 fi @@ -15219,6 +15281,10 @@ as_fn_error $? "conditional \"LACKS_JAVA_SQL_EXCEPTION_REASON_STATE_CODE_THROWABLE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${CP64174_TRUE}" && test -z "${CP64174_FALSE}"; then + as_fn_error $? "conditional \"CP64174\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${ENABLE_PULSE_JAVA_TRUE}" && test -z "${ENABLE_PULSE_JAVA_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PULSE_JAVA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -15800,7 +15866,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by icedtea6 $as_me 1.13.5, which was +This file was extended by icedtea6 $as_me 1.13.6, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -15857,7 +15923,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -icedtea6 config.status 1.13.5 +icedtea6 config.status 1.13.6 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -15976,6 +16042,7 @@ do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "fsg.sh") CONFIG_FILES="$CONFIG_FILES fsg.sh" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "jvm.cacao.cfg") CONFIG_FILES="$CONFIG_FILES jvm.cacao.cfg" ;; "jvm.jamvm.cfg") CONFIG_FILES="$CONFIG_FILES jvm.jamvm.cfg" ;; diff -Nru openjdk-6-6b33-1.13.5/configure.ac openjdk-6-6b34-1.13.6/configure.ac --- openjdk-6-6b33-1.13.5/configure.ac 2015-01-27 16:24:27.000000000 +0000 +++ openjdk-6-6b34-1.13.6/configure.ac 2015-01-27 16:24:32.000000000 +0000 @@ -1,8 +1,8 @@ -AC_INIT([icedtea6],[1.13.5],[distro-pkg-dev@openjdk.java.net]) +AC_INIT([icedtea6],[1.13.6],[distro-pkg-dev@openjdk.java.net]) AC_CANONICAL_HOST AC_CANONICAL_TARGET AM_INIT_AUTOMAKE([1.9 tar-pax foreign]) -AC_CONFIG_FILES([Makefile]) +AC_CONFIG_FILES([Makefile fsg.sh]) AM_MAINTAINER_MODE @@ -169,6 +169,9 @@ IT_CHECK_FOR_CONSTRUCTOR([JAVA_SQL_EXCEPTION_REASON_STATE_THROWABLE],[java.sql.SQLException],[String.class,String.class,Throwable.class],["Something went wrong","",new Throwable()]) IT_CHECK_FOR_CONSTRUCTOR([JAVA_SQL_EXCEPTION_REASON_STATE_CODE_THROWABLE],[java.sql.SQLException],[String.class,String.class,Integer.TYPE,Throwable.class],["Something went wrong","",666,new Throwable()]) +dnl Check whether the JDK can parse the dates used in the currency file +IT_PR64174_CHECK + # Use xvfb-run if found to run gui tests (check-jdk). AC_CHECK_PROG(XVFB_RUN_CMD, xvfb-run, [xvfb-run -a -e xvfb-errors], []) AC_SUBST(XVFB_RUN_CMD) diff -Nru openjdk-6-6b33-1.13.5/corba/src/share/classes/com/sun/tools/corba/se/logutil/IndentingPrintWriter.java openjdk-6-6b34-1.13.6/corba/src/share/classes/com/sun/tools/corba/se/logutil/IndentingPrintWriter.java --- openjdk-6-6b33-1.13.5/corba/src/share/classes/com/sun/tools/corba/se/logutil/IndentingPrintWriter.java 2014-10-08 15:33:46.000000000 +0000 +++ openjdk-6-6b34-1.13.6/corba/src/share/classes/com/sun/tools/corba/se/logutil/IndentingPrintWriter.java 2015-01-20 02:20:41.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2003, 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it diff -Nru openjdk-6-6b33-1.13.5/debian/changelog openjdk-6-6b34-1.13.6/debian/changelog --- openjdk-6-6b33-1.13.5/debian/changelog 2015-01-27 16:24:27.000000000 +0000 +++ openjdk-6-6b34-1.13.6/debian/changelog 2015-01-27 16:24:32.000000000 +0000 @@ -1,14 +1,50 @@ -openjdk-6 (6b33-1.13.5-1ubuntu0.14.04) trusty-security; urgency=medium +openjdk-6 (6b34-1.13.6-1ubuntu0.14.04.1) trusty-security; urgency=medium - * Backport for trusty. + * Backport for trusty - -- Matthias Klose Wed, 15 Oct 2014 11:25:22 +0200 + -- Jamie Strandboge Tue, 27 Jan 2015 09:50:36 -0600 -openjdk-6 (6b33-1.13.5-1ubuntu1) utopic; urgency=medium +openjdk-6 (6b34-1.13.6-1ubuntu1) vivid; urgency=medium * Regenerate the control file. - -- Matthias Klose Wed, 15 Oct 2014 11:17:57 +0200 + -- Matthias Klose Mon, 26 Jan 2015 15:14:22 +0100 + +openjdk-6 (6b34-1.13.6-1) unstable; urgency=high + + * IcedTea 1.13.6 release. + * Security fixes: + - S8046656: Update protocol support. + - S8047125, CVE-2015-0395: (ref) More phantom object references. + - S8047130: Fewer escapes from escape analysis. + - S8048035, CVE-2015-0400: Ensure proper proxy protocols. + - S8049253: Better GC validation. + - S8050807, CVE-2015-0383: Better performing performance data handling. + - S8054367, CVE-2015-0412: More references for endpoints. + - S8055304, CVE-2015-0407: More boxing for DirectoryComboBoxModel. + - S8055309, CVE-2015-0408: RMI needs better transportation considerations. + - S8055479: TLAB stability. + - S8055489, CVE-2014-6585: Better substitution formats. + - S8056264, CVE-2014-6587: Multicast support improvements. + - S8056276, CVE-2014-6591: Fontmanager feature improvements. + - S8057555, CVE-2014-6593: Less cryptic cipher suite management. + - S8058982, CVE-2014-6601: Better verification of an exceptional + invokespecial. + - S8059485, CVE-2015-0410: Resolve parsing ambiguity. + - S8061210, CVE-2014-3566: Issues in TLS. + * Fix applying the fontconfig-dejavu patch for older releases. + * Fix build on mips64 and mips64el. Addresses #776295. + + -- Matthias Klose Mon, 26 Jan 2015 13:48:18 +0100 + +openjdk-6 (6b33-1.13.5-2) unstable; urgency=medium + + * Fix libjpeg runtime dependency. + * Fix regression running JamVM after the 2.5.3 security update. + * Fix regression running CACAO after the 2.5.3 security update. + * Fix typo in package description. Closes: #706341. + + -- Matthias Klose Thu, 13 Nov 2014 12:15:51 +0100 openjdk-6 (6b33-1.13.5-1) unstable; urgency=medium diff -Nru openjdk-6-6b33-1.13.5/debian/control openjdk-6-6b34-1.13.6/debian/control --- openjdk-6-6b33-1.13.5/debian/control 2015-01-27 16:24:27.000000000 +0000 +++ openjdk-6-6b34-1.13.6/debian/control 2015-01-27 16:24:32.000000000 +0000 @@ -1,7 +1,8 @@ Source: openjdk-6 Section: java Priority: optional -Maintainer: OpenJDK Team +Maintainer: Ubuntu Developers +XSBC-Original-Maintainer: OpenJDK Team Uploaders: Torsten Werner , Matthias Klose , Damien Raude-Morvan Build-Depends: debhelper (>= 5), binutils-dev [armel armhf], m4, lsb-release, wget, zip, unzip, sharutils, gawk, cpio, pkg-config, procps, time, fastjar (>= 2:0.96-0ubuntu2), autoconf, automake1.11, autotools-dev, ant, ant-optional, libtool [alpha amd64 armel armhf i386 lpia m68k mips mipsel powerpc s390], g++-4.8, ecj-gcj [amd64 armel armhf arm64 hppa i386 ia64 lpia powerpc powerpcspe ppc64 ppc64el m68k mips mipsel sh4 sparc sparc64 s390 s390x], gcj-jdk [amd64 armel armhf arm64 hppa i386 ia64 lpia powerpc powerpcspe ppc64 ppc64el m68k mips mipsel sh4 sparc sparc64 s390 s390x], openjdk-6-jdk (>= 6b27) [alpha], libxtst-dev, libxi-dev, libxt-dev, libxaw7-dev, libxrender-dev, libcups2-dev, libasound2-dev, liblcms2-dev, libfreetype6-dev (>= 2.2.1), libgtk2.0-dev, libxinerama-dev, xsltproc, libkrb5-dev, rhino, fonts-ipafont-mincho, libffi-dev, zlib1g-dev, libpng-dev, libjpeg-dev, libgif-dev, libpulse-dev (>= 0.9.12), libnss3-dev (>= 2:3.12.3), mauve, xvfb, xauth, xfonts-base, libgl1-mesa-dri, twm, dbus-x11, x11-xkb-utils, Standards-Version: 3.9.6 @@ -36,8 +37,8 @@ Replaces: openjdk-6-jre-lib (<< 6b23~pre10), openjdk-6-jre (<< 6b23~pre1), openjdk-6-jdk (<< 6b20-1.9.1-0ubuntu2) Conflicts: ${multiarch:Conflicts}, openjdk-6-jre-lib (<< 6b17~pre3-1), openjdk-6-jre (<< 6b17~pre3-1), openjdk-6-jdk (<< 6b17~pre3-1), openjdk-6-demo (<< 6b17~pre3-1), openjdk-6-source (<< 6b17~pre3-1), openjdk-6-doc (<< 6b17~pre3-1), openjdk-6-dbg (<< 6b17~pre3-1), openjdk-6-jre-zero (<< 6b17~pre3-1) Description: OpenJDK Java runtime, using ${vm:Name} (headless) - Minimal Java runtime - needed for executing non GUI Java programs. - Using ${vm:Name}. + Minimal Java runtime - needed for executing non GUI Java programs, + using ${vm:Name}. . The packages are built using the IcedTea build support and patches from the IcedTea project. @@ -54,7 +55,7 @@ Provides: java-runtime, java2-runtime, java5-runtime, java6-runtime Description: OpenJDK Java runtime, using ${vm:Name} Full Java runtime environment - needed for executing Java GUI and Webstart - programs. Using ${vm:Name}. + programs, using ${vm:Name}. . The packages are built using the IcedTea build support and patches from the IcedTea project. diff -Nru openjdk-6-6b33-1.13.5/debian/control.in openjdk-6-6b34-1.13.6/debian/control.in --- openjdk-6-6b33-1.13.5/debian/control.in 2015-01-27 16:24:27.000000000 +0000 +++ openjdk-6-6b34-1.13.6/debian/control.in 2015-01-27 16:24:32.000000000 +0000 @@ -1,7 +1,8 @@ Source: @basename@ Section: java Priority: optional -Maintainer: OpenJDK Team +Maintainer: Ubuntu Developers +XSBC-Original-Maintainer: OpenJDK Team Uploaders: Torsten Werner , Matthias Klose , Damien Raude-Morvan Build-Depends: debhelper (>= 5), binutils-dev [armel armhf], m4, lsb-release, wget, zip, unzip, sharutils, gawk, cpio, pkg-config, procps, time, @bd_fastjar@ @bd_compress@ @bd_autotools@ @bd_ant@ @bd_cacao@ @bd_gcc@ @bd_bootstrap@ @bd_openjdk@ @bd_zero@ @bd_shark@ @bd_syslibs@ @bd_pulsejava@ @bd_nss@ @bd_systemtap@ @bd_mauve@ @bd_xvfb@ Standards-Version: 3.9.6 @@ -36,8 +37,8 @@ Replaces: @basename@-jre-lib (<< 6b23~pre10), @basename@-jre (<< 6b23~pre1), @basename@-jdk (<< 6b20-1.9.1-0ubuntu2) Conflicts: ${multiarch:Conflicts}, @basename@-jre-lib (<< 6b17~pre3-1), @basename@-jre (<< 6b17~pre3-1), @basename@-jdk (<< 6b17~pre3-1), @basename@-demo (<< 6b17~pre3-1), @basename@-source (<< 6b17~pre3-1), @basename@-doc (<< 6b17~pre3-1), @basename@-dbg (<< 6b17~pre3-1), @basename@-jre-zero (<< 6b17~pre3-1) Description: OpenJDK Java runtime, using ${vm:Name} (headless) - Minimal Java runtime - needed for executing non GUI Java programs. - Using ${vm:Name}. + Minimal Java runtime - needed for executing non GUI Java programs, + using ${vm:Name}. . The packages are built using the IcedTea build support and patches from the IcedTea project. @@ -54,7 +55,7 @@ Provides: java-runtime, java2-runtime, java5-runtime, java6-runtime Description: OpenJDK Java runtime, using ${vm:Name} Full Java runtime environment - needed for executing Java GUI and Webstart - programs. Using ${vm:Name}. + programs, using ${vm:Name}. . The packages are built using the IcedTea build support and patches from the IcedTea project. diff -Nru openjdk-6-6b33-1.13.5/debian/generate-debian-orig.sh openjdk-6-6b34-1.13.6/debian/generate-debian-orig.sh --- openjdk-6-6b33-1.13.5/debian/generate-debian-orig.sh 2015-01-27 16:24:27.000000000 +0000 +++ openjdk-6-6b34-1.13.6/debian/generate-debian-orig.sh 2015-01-27 16:24:32.000000000 +0000 @@ -1,6 +1,6 @@ -tarball=openjdk-6-src-b33-14_oct_2014.tar.xz -version=6b33-1.13.5 +tarball=openjdk-6-src-b34-20_jan_2015.tar.xz +version=6b34-1.13.6 hotspot=hotspot-hs20.tar.gz cacaotb=cacao-0.99.4.tar.bz2 cacaotb=cacao-68fe50ac34ec.tar.gz @@ -8,10 +8,10 @@ base=openjdk-6 pkgdir=$base-$version origtar=${base}_${version}.orig.tar.gz -tarballdir=6b33 +tarballdir=6b34 icedtea_checkout=icedtea6-1.13 -icedtea_checkout=icedtea6-1.13.5 +icedtea_checkout=icedtea6-1.13.6 debian_checkout=openjdk6 if [ -d $pkgdir ]; then diff -Nru openjdk-6-6b33-1.13.5/debian/icedtea-patch.diff openjdk-6-6b34-1.13.6/debian/icedtea-patch.diff --- openjdk-6-6b33-1.13.5/debian/icedtea-patch.diff 2015-01-27 16:24:27.000000000 +0000 +++ openjdk-6-6b34-1.13.6/debian/icedtea-patch.diff 2015-01-27 16:24:32.000000000 +0000 @@ -1,5 +1,5 @@ ---- openjdk-6-6b33-1.13.5.orig/Makefile.am -+++ openjdk-6-6b33-1.13.5/Makefile.am +--- openjdk-6-6b34-1.13.6.orig/Makefile.am ++++ openjdk-6-6b34-1.13.6/Makefile.am @@ -11,8 +11,8 @@ CACAO_URL = $(CACAO_BASE_URL)/$(CACAO_VERSION).tar.gz CACAO_SRC_ZIP = cacao-$(CACAO_VERSION).tar.gz @@ -11,15 +11,39 @@ JAMVM_BASE_URL = http://icedtea.classpath.org/download/drops/jamvm JAMVM_URL = $(JAMVM_BASE_URL)/jamvm-$(JAMVM_VERSION).tar.gz JAMVM_SRC_ZIP = jamvm-$(JAMVM_VERSION).tar.gz -@@ -810,6 +810,7 @@ +@@ -646,11 +646,6 @@ + patches/hotspot/hs23/systemtap-alloc-size-workaround.patch + endif + +-if BUILD_JAMVM +-ICEDTEA_PATCHES += \ +- patches/jamvm/pr2190-find_class_from_caller.patch +-endif +- + if ENABLE_NSS + ICEDTEA_PATCHES += patches/rh1022017.patch + NSS_PATCHES = patches/nss-config.patch +@@ -688,6 +683,11 @@ + patches/libraries-gif.patch + endif + ++if BUILD_JAMVM ++ICEDTEA_PATCHES += \ ++ patches/jamvm-2.5.3-fix.diff ++endif ++ + ICEDTEA_PATCHES += $(DISTRIBUTION_PATCHES) + + # Bootstrapping patches +@@ -816,6 +816,7 @@ ALT_OUTPUTDIR="$(BUILD_OUTPUT_DIR)" \ STATIC_CXX="false" \ BUILD_GCC=gcc$(GCC_SUFFIX) \ + BUILD_CPP=g++$(GCC_SUFFIX) \ BUILD_CXX=g++$(GCC_SUFFIX) \ - COMPILER_WARNINGS_FATAL="$(WERROR_STATUS)" - -@@ -2385,7 +2386,7 @@ + COMPILER_WARNINGS_FATAL="$(WERROR_STATUS)" \ + UNLIMITED_CRYPTO="true" +@@ -2392,7 +2393,7 @@ if BUILD_JAMVM cd jamvm/jamvm && \ LDFLAGS="-Xlinker -z -Xlinker noexecstack" \ @@ -28,7 +52,7 @@ --prefix=$(abs_top_builddir)/jamvm/install ; \ $(MAKE) ; \ $(MAKE) install -@@ -2526,13 +2527,15 @@ +@@ -2533,13 +2534,15 @@ ADD_ZERO_CONFIGURE_ARGS += \ --enable-shark endif @@ -49,8 +73,8 @@ $(CONFIGURE_ARGS)) \ $(if $(findstring --with-openjdk-src-zip=, $(CONFIGURE_ARGS)),, \ --with-openjdk-src-zip=$(abs_top_builddir)/$(OPENJDK_SRC_ZIP)) ---- openjdk-6-6b33-1.13.5.orig/acinclude.m4 -+++ openjdk-6-6b33-1.13.5/acinclude.m4 +--- openjdk-6-6b34-1.13.6.orig/acinclude.m4 ++++ openjdk-6-6b34-1.13.6/acinclude.m4 @@ -22,6 +22,12 @@ JRE_ARCH_DIR=alpha CROSS_TARGET_ARCH=alpha @@ -64,17 +88,8 @@ arm*) BUILD_ARCH_DIR=arm INSTALL_ARCH_DIR=arm -@@ -1554,7 +1560,7 @@ - AC_MSG_RESULT(${ENABLE_SYSTEM_LCMS}) - if test x"${ENABLE_SYSTEM_LCMS}" = "xyes"; then - dnl Check for LCMS2 headers and libraries. -- PKG_CHECK_MODULES(LCMS2, lcms2 >= 2.5,[LCMS2_FOUND=yes],[LCMS2_FOUND=no]) -+ PKG_CHECK_MODULES(LCMS2, lcms2,[LCMS2_FOUND=yes],[LCMS2_FOUND=no]) - if test "x${LCMS2_FOUND}" = xno - then - AC_MSG_ERROR([Could not find LCMS >= 2.5; install it or build with --disable-system-lcms to use the in-tree copy.]) ---- openjdk-6-6b33-1.13.5.orig/autogen.sh -+++ openjdk-6-6b33-1.13.5/autogen.sh +--- openjdk-6-6b34-1.13.6.orig/autogen.sh ++++ openjdk-6-6b34-1.13.6/autogen.sh @@ -101,7 +101,7 @@ HAVE_ACLOCAL=false @@ -93,14 +108,93 @@ if ${AUTOMAKE} --version > /dev/null 2>&1; then AUTOMAKE_VERSION=`${AUTOMAKE} --version | head -1 | sed 's/^[^0-9]*\([0-9.][0-9.]*\).*/\1/'` # echo ${AUTOMAKE_VERSION} ---- openjdk-6-6b33-1.13.5.orig/configure.ac -+++ openjdk-6-6b33-1.13.5/configure.ac +--- openjdk-6-6b34-1.13.6.orig/configure.ac ++++ openjdk-6-6b34-1.13.6/configure.ac @@ -4,6 +4,8 @@ AM_INIT_AUTOMAKE([1.9 tar-pax foreign]) - AC_CONFIG_FILES([Makefile]) + AC_CONFIG_FILES([Makefile fsg.sh]) +AM_MAINTAINER_MODE + # Older automake doesn't generate these correctly abs_top_builddir=`pwd -P` AC_SUBST(abs_top_builddir) +--- openjdk-6-6b34-1.13.6.orig/patches/jamvm-2.5.3-fix.diff ++++ openjdk-6-6b34-1.13.6/patches/jamvm-2.5.3-fix.diff +@@ -0,0 +1,76 @@ ++--- jamvm/jamvm/src/classlib/openjdk/jvm.c +++++ jamvm/jamvm/src/classlib/openjdk/jvm.c ++@@ -517,6 +517,48 @@ jclass JVM_FindClassFromBootLoader(JNIEnv *env, const char *name) { ++ } ++ ++ +++/* JVM_FindClassFromCaller +++ * Find a class from a given class loader. Throws ClassNotFoundException. +++ * name: name of class +++ * init: whether initialization is done +++ * loader: class loader to look up the class. +++ * This may not be the same as the caller's class loader. +++ * caller: initiating class. The initiating class may be null when a security +++ * manager is not installed. +++ * +++ * Find a class with this name in this loader, +++ * using the caller's "protection domain". +++ */ +++ +++jclass JVM_FindClassFromCaller(JNIEnv *env, const char *name, +++ jboolean init, jobject loader, +++ jclass caller) { +++ Class *class; +++ +++ TRACE("JVM_FindClassFromCaller(env=%p, name=%s, init=%d, loader=%p," +++ " caller=%p)", env, name, init, loader, caller); +++ +++ /* XXX The caller's protection domain should be used during +++ the findClassFromClassLoader but there is no specification or +++ unit-test in OpenJDK documenting the desired effect */ +++ +++ class = findClassFromClassLoader((char *)name, loader); +++ +++ if(class == NULL) { +++ Object *excep = exceptionOccurred(); +++ char *dot_name = slash2DotsDup((char*)name); +++ +++ clearException(); +++ signalChainedException(java_lang_ClassNotFoundException, +++ dot_name, excep); +++ sysFree(dot_name); +++ } else if(init) +++ initClass(class); +++ +++ return class; +++} +++ +++ ++ /* JVM_FindClassFromClassLoader */ ++ ++ jclass JVM_FindClassFromClassLoader(JNIEnv *env, const char *name, ++@@ -2965,6 +3007,24 @@ void JVM_GetVersionInfo(JNIEnv *env, jvm_version_info *info, size_t info_size) { ++ } ++ ++ +++/* JVM_GetTemporaryDirectory +++ * Return the temporary directory that the VM uses for the attach +++ * and perf data files. +++ * +++ * It is important that this directory is well-known and the +++ * same for all VM instances. It cannot be affected by configuration +++ * variables such as java.io.tmpdir. +++ * +++ * JamVM do not support the jvmstat framework thus this is left unimplemented. +++ */ +++ +++jstring JVM_GetTemporaryDirectory(JNIEnv *env) { +++ UNIMPLEMENTED("JVM_GetTemporaryDirectory"); +++ +++ return 0; +++} +++ +++ ++ /* JVM_RegisterSignal */ ++ ++ extern void signalHandler(int sig); diff -Nru openjdk-6-6b33-1.13.5/debian/patches/enumipv6-fix.patch openjdk-6-6b34-1.13.6/debian/patches/enumipv6-fix.patch --- openjdk-6-6b33-1.13.5/debian/patches/enumipv6-fix.patch 2015-01-27 16:24:27.000000000 +0000 +++ openjdk-6-6b34-1.13.6/debian/patches/enumipv6-fix.patch 2015-01-27 16:24:32.000000000 +0000 @@ -1,12 +1,11 @@ -diff -ru openjdk-orig/jdk/src/solaris/native/java/net/NetworkInterface.c openjdk/jdk/src/solaris/native/java/net/NetworkInterface.c ---- openjdk.orig/jdk/src/solaris/native/java/net/NetworkInterface.c 2011-07-05 14:36:10.000000000 -0400 -+++ openjdk/jdk/src/solaris/native/java/net/NetworkInterface.c 2012-02-01 11:54:32.000000000 -0500 -@@ -811,7 +811,7 @@ +--- openjdk/jdk/src/solaris/native/java/net/NetworkInterface.c ++++ openjdk/jdk/src/solaris/native/java/net/NetworkInterface.c +@@ -1099,7 +1099,7 @@ uint8_t ipv6addr[16]; if ((f = fopen(_PATH_PROCNET_IFINET6, "r")) != NULL) { - while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n", + while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %x %x %x %x %20s\n", - addr6p[0], addr6p[1], addr6p[2], addr6p[3], - addr6p[4], addr6p[5], addr6p[6], addr6p[7], - &if_idx, &plen, &scope, &dad_status, devname) != EOF) { + addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6], addr6p[7], + &if_idx, &plen, &scope, &dad_status, devname) != EOF) { + diff -Nru openjdk-6-6b33-1.13.5/debian/patches/fontconfig-dejavu.diff openjdk-6-6b34-1.13.6/debian/patches/fontconfig-dejavu.diff --- openjdk-6-6b33-1.13.5/debian/patches/fontconfig-dejavu.diff 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/debian/patches/fontconfig-dejavu.diff 2015-01-27 16:24:32.000000000 +0000 @@ -0,0 +1,46 @@ +--- openjdk/jdk/src/solaris/classes/sun/awt/fontconfigs/linux.fontconfig.Ubuntu.properties ++++ openjdk/jdk/src/solaris/classes/sun/awt/fontconfigs/linux.fontconfig.Ubuntu.properties +@@ -26,7 +26,7 @@ + + # Version + +-# Uses Ubuntu 8.04 (hardy), Debian 6.0 (Squeeze) (and more recent releases) fonts and file paths. ++# Uses Ubuntu 14.04 (trusty), Debian 8.0 (jessie) (and more recent releases) fonts and file paths. + version=1 + + # Component Font Mappings +@@ -219,20 +219,20 @@ + + # Font File Names + +-filename.DejaVu_Sans=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf +-filename.DejaVu_Sans_Bold=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf +-filename.DejaVu_Sans_Oblique=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Oblique.ttf +-filename.DejaVu_Sans_Bold_Oblique=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-BoldOblique.ttf +- +-filename.DejaVu_Sans_Mono=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf +-filename.DejaVu_Sans_Mono_Bold=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-Bold.ttf +-filename.DejaVu_Sans_Mono_Oblique=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-Oblique.ttf +-filename.DejaVu_Sans_Mono_Bold_Oblique=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-BoldOblique.ttf +- +-filename.DejaVu_Serif=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf +-filename.DejaVu_Serif_Bold=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif-Bold.ttf +-filename.DejaVu_Serif_Oblique=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif-Oblique.ttf +-filename.DejaVu_Serif_Bold_Oblique=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif-BoldOblique.ttf ++filename.DejaVu_Sans=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf ++filename.DejaVu_Sans_Bold=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf ++filename.DejaVu_Sans_Oblique=/usr/share/fonts/truetype/dejavu/DejaVuSans-Oblique.ttf ++filename.DejaVu_Sans_Bold_Oblique=/usr/share/fonts/truetype/dejavu/DejaVuSans-BoldOblique.ttf ++ ++filename.DejaVu_Sans_Mono=/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf ++filename.DejaVu_Sans_Mono_Bold=/usr/share/fonts/truetype/dejavu/DejaVuSansMono-Bold.ttf ++filename.DejaVu_Sans_Mono_Oblique=/usr/share/fonts/truetype/dejavu/DejaVuSansMono-Oblique.ttf ++filename.DejaVu_Sans_Mono_Bold_Oblique=/usr/share/fonts/truetype/dejavu/DejaVuSansMono-BoldOblique.ttf ++ ++filename.DejaVu_Serif=/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf ++filename.DejaVu_Serif_Bold=/usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf ++filename.DejaVu_Serif_Oblique=/usr/share/fonts/truetype/dejavu/DejaVuSerif-Oblique.ttf ++filename.DejaVu_Serif_Bold_Oblique=/usr/share/fonts/truetype/dejavu/DejaVuSerif-BoldOblique.ttf + + filename.AR_PL_UMing_CN=/usr/share/fonts/truetype/arphic/uming.ttc + filename.AR_PL_UMing_HK=/usr/share/fonts/truetype/arphic/uming.ttc diff -Nru openjdk-6-6b33-1.13.5/debian/rules openjdk-6-6b34-1.13.6/debian/rules --- openjdk-6-6b33-1.13.5/debian/rules 2015-01-27 16:24:27.000000000 +0000 +++ openjdk-6-6b34-1.13.6/debian/rules 2015-01-27 16:24:32.000000000 +0000 @@ -188,8 +188,8 @@ $(error unknown bootstrap method for architecture $(DEB_HOST_ARCH)) endif -OPENJDK_VERSION = b33 -OPENJDK_SRC_ZIP = openjdk-6-src-$(OPENJDK_VERSION)-14_oct_2014.tar.xz +OPENJDK_VERSION = b34 +OPENJDK_SRC_ZIP = openjdk-6-src-$(OPENJDK_VERSION)-20_jan_2015.tar.xz # the version of the build dependency for non-bootstrap builds; only adjust if # the package is installable on all these architectures. req_openjdk_bd_ver = 6b27 @@ -365,6 +365,11 @@ debian/patches/m68k-text-relocations.diff \ debian/patches/add-zero-ports.diff \ +ifneq (,$(filter $(distrel),squeeze wheezy lucid maverick natty oneiric precise quantal raring)) + DISTRIBUTION_PATCHES += \ + debian/patches/fontconfig-dejavu.diff +endif + ifneq (,$(filter $(DEB_HOST_ARCH), sparc sparc64)) export COMPILER_WARNINGS_FATAL = false endif @@ -764,6 +769,10 @@ liblcms$(if $(filter 1,$(lcms_version)),1,2-2), ifneq (,$(filter $(distrel),lenny squeeze oneiric natty maverick lucid karmic jaunty intrepid hardy gutsy feisty edgy dapper)) dlopen_hl_depends += libjpeg62, +else ifneq (,$(filter $(distrel),wheezy precise quantal raring saucy)) + dlopen_hl_depends += libjpeg8, +else ifneq (,$(filter $(distrel), jessie sid)) + dlopen_hl_depends += libjpeg62-turbo, else dlopen_hl_depends += libjpeg8, endif @@ -1017,7 +1026,7 @@ -cat /etc/hosts mkdir -p bin -ifeq (,$(filter $(DEB_HOST_ARCH), alpha amd64 arm64 hppa ppc64 ppc64el s390x sparc64 x32)) +ifeq (,$(filter $(DEB_HOST_ARCH), alpha amd64 arm64 hppa mips64 mips64el ppc64 ppc64el s390x sparc64 x32)) ( \ echo '#! /bin/sh'; \ echo 'if [ -x /usr/bin/linux32 ]; then'; \ @@ -1561,7 +1570,6 @@ : # remove empty directories rmdir $(d)/$(basedir)/jre/lib/management rmdir $(d)/$(basedir)/jre/lib/applet - rmdir $(d)/$(basedir)/jre/lib/security : # TODO: why do we provide a custom font.properties.ja? : # cp -p debian/font.properties.ja $(d_jbin)/$(etcdir)/. @@ -1577,6 +1585,7 @@ echo 'etc'; \ echo '$(basedir)/jre/lib/jexec'; \ echo '$(basedir)/jre/lib/rt.jar'; \ + echo '$(basedir)/jre/lib/security/*_policy.jar'; \ echo '$(basedir)/jre/man/ja'; \ echo '$(basedir)/man/ja'; \ echo '$(basedir)/bin/java-rmi.cgi'; \ diff -Nru openjdk-6-6b33-1.13.5/fsg.sh openjdk-6-6b34-1.13.6/fsg.sh --- openjdk-6-6b33-1.13.5/fsg.sh 2014-10-08 18:39:25.000000000 +0000 +++ openjdk-6-6b34-1.13.6/fsg.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,91 +0,0 @@ -#!/bin/sh - -echo "Further liberating OpenJDK..." - -# PRx denotes bug x in the IcedTea bug database (http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=x) -# Sx denotes bug x in the Sun bug database (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=x) - -# PR146/S6713083 -# Remove binaries -rm -f \ - openjdk/jdk/test/sun/management/windows/revokeall.exe \ - openjdk/jdk/test/sun/management/jmxremote/bootstrap/linux-i586/launcher \ - openjdk/jdk/test/sun/management/jmxremote/bootstrap/solaris-sparc/launcher \ - openjdk/jdk/test/sun/management/jmxremote/bootstrap/solaris-i586/launcher - -rm -f \ - openjdk/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/linux-i586/libLauncher.so \ - openjdk/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/solaris-i586/libLauncher.so \ - openjdk/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/solaris-sparc/libLauncher.so \ - openjdk/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/solaris-sparcv9/libLauncher.so \ - openjdk/jdk/test/tools/launcher/lib/i386/lib32/lib32/liblibrary.so \ - openjdk/jdk/test/tools/launcher/lib/i386/lib32/liblibrary.so \ - openjdk/jdk/test/tools/launcher/lib/sparc/lib32/lib32/liblibrary.so \ - openjdk/jdk/test/tools/launcher/lib/sparc/lib32/liblibrary.so \ - openjdk/jdk/test/tools/launcher/lib/sparc/lib64/lib64/liblibrary.so \ - openjdk/jdk/test/tools/launcher/lib/sparc/lib64/liblibrary.so - -rm -f \ - openjdk/jdk/test/java/util/Locale/data/deflocale.exe \ - openjdk/jdk/test/java/util/Locale/data/deflocale.jds3 \ - openjdk/jdk/test/java/util/Locale/data/deflocale.rhel4 \ - openjdk/jdk/test/java/util/Locale/data/deflocale.sh \ - openjdk/jdk/test/java/util/Locale/data/deflocale.sol10 \ - openjdk/jdk/test/java/util/Locale/data/deflocale.winvista \ - openjdk/jdk/test/java/util/Locale/data/deflocale.winxp \ - -# Remove test sources with questionable license headers. -rm -f \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource3.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_IE.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4165815Test.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4177489_Resource_jf.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_CA.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Getter.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4177489Test.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource2.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_US.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4083270Test.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4177489_Resource.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Test.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource2_en_US.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Class.java \ - openjdk/jdk/test/java/util/Locale/Bug4175998Test.java \ - openjdk/jdk/test/java/util/ResourceBundle/RBTestFmwk.java \ - openjdk/jdk/test/java/util/ResourceBundle/TestResource_fr.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4179766Resource.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4179766Getter.java \ - openjdk/jdk/test/java/util/ResourceBundle/Bug4179766Class.java \ - openjdk/jdk/test/java/util/ResourceBundle/TestResource.java \ - openjdk/jdk/test/java/util/ResourceBundle/FakeTestResource.java \ - openjdk/jdk/test/java/util/ResourceBundle/TestResource_de.java \ - openjdk/jdk/test/java/util/ResourceBundle/TestBug4179766.java \ - openjdk/jdk/test/java/util/ResourceBundle/TestResource_fr_CH.java \ - openjdk/jdk/test/java/util/ResourceBundle/ResourceBundleTest.java \ - openjdk/jdk/test/java/util/ResourceBundle/TestResource_it.java \ - openjdk/jdk/test/java/util/Locale/PrintDefaultLocale.java \ - openjdk/jdk/test/java/util/Locale/LocaleTest.java \ - openjdk/jdk/test/java/util/Locale/LocaleTestFmwk.java \ - openjdk/jdk/test/java/util/Locale/Bug4184873Test.java \ - openjdk/jdk/test/sun/text/resources/LocaleDataTest.java - -# Remove J2DBench sources, some of which have questionable license -# headers. -rm -rf \ - openjdk/jdk/src/share/demo/java2d/J2DBench - -# BEGIN Debian/Ubuntu additions - -# binary files -rm -f \ - openjdk/jdk/test/sun/net/idn/*.spp - -# END Debian/Ubuntu additions - -# Remove man page for proprietary javaws -rm -f openjdk/jdk/src/linux/doc/man/javaws.1 \ - openjdk/jdk/src/linux/doc/man/ja/javaws.1 \ - openjdk/jdk/src/solaris/doc/sun/man/man1/javaws.1 \ - openjdk/jdk/src/solaris/doc/sun/man/man1/ja/javaws.1 diff -Nru openjdk-6-6b33-1.13.5/fsg.sh.in openjdk-6-6b34-1.13.6/fsg.sh.in --- openjdk-6-6b33-1.13.5/fsg.sh.in 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/fsg.sh.in 2015-01-20 09:12:43.000000000 +0000 @@ -0,0 +1,94 @@ +#!/bin/sh + +echo "Further liberating OpenJDK..." + +# PRx denotes bug x in the IcedTea bug database (http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=x) +# Sx denotes bug x in the Sun bug database (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=x) + +# PR146/S6713083 +# Remove binaries +rm -f \ + openjdk/jdk/test/sun/management/windows/revokeall.exe \ + openjdk/jdk/test/sun/management/jmxremote/bootstrap/linux-i586/launcher \ + openjdk/jdk/test/sun/management/jmxremote/bootstrap/solaris-sparc/launcher \ + openjdk/jdk/test/sun/management/jmxremote/bootstrap/solaris-i586/launcher + +rm -f \ + openjdk/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/linux-i586/libLauncher.so \ + openjdk/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/solaris-i586/libLauncher.so \ + openjdk/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/solaris-sparc/libLauncher.so \ + openjdk/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/solaris-sparcv9/libLauncher.so \ + openjdk/jdk/test/tools/launcher/lib/i386/lib32/lib32/liblibrary.so \ + openjdk/jdk/test/tools/launcher/lib/i386/lib32/liblibrary.so \ + openjdk/jdk/test/tools/launcher/lib/sparc/lib32/lib32/liblibrary.so \ + openjdk/jdk/test/tools/launcher/lib/sparc/lib32/liblibrary.so \ + openjdk/jdk/test/tools/launcher/lib/sparc/lib64/lib64/liblibrary.so \ + openjdk/jdk/test/tools/launcher/lib/sparc/lib64/liblibrary.so + +rm -f \ + openjdk/jdk/test/java/util/Locale/data/deflocale.exe \ + openjdk/jdk/test/java/util/Locale/data/deflocale.jds3 \ + openjdk/jdk/test/java/util/Locale/data/deflocale.rhel4 \ + openjdk/jdk/test/java/util/Locale/data/deflocale.sh \ + openjdk/jdk/test/java/util/Locale/data/deflocale.sol10 \ + openjdk/jdk/test/java/util/Locale/data/deflocale.winvista \ + openjdk/jdk/test/java/util/Locale/data/deflocale.winxp \ + +# Remove test sources with questionable license headers. +rm -f \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource3.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_IE.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4165815Test.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4177489_Resource_jf.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_CA.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Getter.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4177489Test.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource2.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_US.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4083270Test.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4177489_Resource.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Test.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource2_en_US.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Class.java \ + openjdk/jdk/test/java/util/Locale/Bug4175998Test.java \ + openjdk/jdk/test/java/util/ResourceBundle/RBTestFmwk.java \ + openjdk/jdk/test/java/util/ResourceBundle/TestResource_fr.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4179766Resource.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4179766Getter.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4179766Class.java \ + openjdk/jdk/test/java/util/ResourceBundle/TestResource.java \ + openjdk/jdk/test/java/util/ResourceBundle/FakeTestResource.java \ + openjdk/jdk/test/java/util/ResourceBundle/TestResource_de.java \ + openjdk/jdk/test/java/util/ResourceBundle/TestBug4179766.java \ + openjdk/jdk/test/java/util/ResourceBundle/TestResource_fr_CH.java \ + openjdk/jdk/test/java/util/ResourceBundle/ResourceBundleTest.java \ + openjdk/jdk/test/java/util/ResourceBundle/TestResource_it.java \ + openjdk/jdk/test/java/util/Locale/PrintDefaultLocale.java \ + openjdk/jdk/test/java/util/Locale/LocaleTest.java \ + openjdk/jdk/test/java/util/Locale/LocaleTestFmwk.java \ + openjdk/jdk/test/java/util/Locale/Bug4184873Test.java \ + openjdk/jdk/test/sun/text/resources/LocaleDataTest.java + +# Remove J2DBench sources, some of which have questionable license +# headers. +rm -rf \ + openjdk/jdk/src/share/demo/java2d/J2DBench + +# BEGIN Debian/Ubuntu additions + +# binary files +rm -f \ + openjdk/jdk/test/sun/net/idn/*.spp + +# END Debian/Ubuntu additions + +# Remove man page for proprietary javaws +rm -f openjdk/jdk/src/linux/doc/man/javaws.1 \ + openjdk/jdk/src/linux/doc/man/ja/javaws.1 \ + openjdk/jdk/src/solaris/doc/sun/man/man1/javaws.1 \ + openjdk/jdk/src/solaris/doc/sun/man/man1/ja/javaws.1 + +echo "Syncing EC list with NSS" +patch -Np0 < @abs_top_srcdir@/patches/pr2125.patch diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp openjdk-6-6b34-1.13.6/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -196,7 +196,38 @@ } -// check if the given path is considered a secure directory for +// Check if the given statbuf is considered a secure directory for +// the backing store files. Returns true if the directory is considered +// a secure location. Returns false if the statbuf is a symbolic link or +// if an error occurred. +// +static bool is_statbuf_secure(struct stat *statp) { + if (S_ISLNK(statp->st_mode) || !S_ISDIR(statp->st_mode)) { + // The path represents a link or some non-directory file type, + // which is not what we expected. Declare it insecure. + // + return false; + } + // We have an existing directory, check if the permissions are safe. + // + if ((statp->st_mode & (S_IWGRP|S_IWOTH)) != 0) { + // The directory is open for writing and could be subjected + // to a symlink or a hard link attack. Declare it insecure. + // + return false; + } + // See if the uid of the directory matches the effective uid of the process. + // + if (statp->st_uid != geteuid()) { + // The directory was not created by this user, declare it insecure. + // + return false; + } + return true; +} + + +// Check if the given path is considered a secure directory for // the backing store files. Returns true if the directory exists // and is considered a secure location. Returns false if the path // is a symbolic link or if an error occurred. @@ -210,26 +241,184 @@ return false; } - // the path exists, now check it's mode - if (S_ISLNK(statbuf.st_mode) || !S_ISDIR(statbuf.st_mode)) { - // the path represents a link or some non-directory file type, - // which is not what we expected. declare it insecure. - // + // The path exists, see if it is secure. + return is_statbuf_secure(&statbuf); +} + + +// Check if the given directory file descriptor is considered a secure +// directory for the backing store files. Returns true if the directory +// exists and is considered a secure location. Returns false if the path +// is a symbolic link or if an error occurred. +// +static bool is_dirfd_secure(int dir_fd) { + struct stat statbuf; + int result = 0; + + RESTARTABLE(::fstat(dir_fd, &statbuf), result); + if (result == OS_ERR) { return false; } - else { - // we have an existing directory, check if the permissions are safe. - // - if ((statbuf.st_mode & (S_IWGRP|S_IWOTH)) != 0) { - // the directory is open for writing and could be subjected - // to a symlnk attack. declare it insecure. - // - return false; + + // The path exists, now check its mode. + return is_statbuf_secure(&statbuf); +} + + +// Check to make sure fd1 and fd2 are referencing the same file system object. +// +static bool is_same_fsobject(int fd1, int fd2) { + struct stat statbuf1; + struct stat statbuf2; + int result = 0; + + RESTARTABLE(::fstat(fd1, &statbuf1), result); + if (result == OS_ERR) { + return false; + } + RESTARTABLE(::fstat(fd2, &statbuf2), result); + if (result == OS_ERR) { + return false; + } + + if ((statbuf1.st_ino == statbuf2.st_ino) && + (statbuf1.st_dev == statbuf2.st_dev)) { + return true; + } else { + return false; + } +} + + +// Open the directory of the given path and validate it. +// Return a DIR * of the open directory. +// +static DIR *open_directory_secure(const char* dirname) { + // Open the directory using open() so that it can be verified + // to be secure by calling is_dirfd_secure(), opendir() and then check + // to see if they are the same file system object. This method does not + // introduce a window of opportunity for the directory to be attacked that + // calling opendir() and is_directory_secure() does. + int result; + DIR *dirp = NULL; + RESTARTABLE(::open(dirname, O_RDONLY|O_NOFOLLOW), result); + if (result == OS_ERR) { + // Directory doesn't exist or is a symlink, so there is nothing to cleanup. + if (PrintMiscellaneous && Verbose) { + if (errno == ELOOP) { + warning("directory %s is a symlink and is not secure\n", dirname); + } else { + warning("could not open directory %s: %s\n", dirname, strerror(errno)); + } } + return dirp; } - return true; + int fd = result; + + // Determine if the open directory is secure. + if (!is_dirfd_secure(fd)) { + // The directory is not a secure directory. + os::close(fd); + return dirp; + } + + // Open the directory. + dirp = ::opendir(dirname); + if (dirp == NULL) { + // The directory doesn't exist, close fd and return. + os::close(fd); + return dirp; + } + + // Check to make sure fd and dirp are referencing the same file system object. + if (!is_same_fsobject(fd, dirfd(dirp))) { + // The directory is not secure. + os::close(fd); + os::closedir(dirp); + dirp = NULL; + return dirp; + } + + // Close initial open now that we know directory is secure + os::close(fd); + + return dirp; } +// NOTE: The code below uses fchdir(), open() and unlink() because +// fdopendir(), openat() and unlinkat() are not supported on all +// versions. Once the support for fdopendir(), openat() and unlinkat() +// is available on all supported versions the code can be changed +// to use these functions. + +// Open the directory of the given path, validate it and set the +// current working directory to it. +// Return a DIR * of the open directory and the saved cwd fd. +// +static DIR *open_directory_secure_cwd(const char* dirname, int *saved_cwd_fd) { + + // Open the directory. + DIR* dirp = open_directory_secure(dirname); + if (dirp == NULL) { + // Directory doesn't exist or is insecure, so there is nothing to cleanup. + return dirp; + } + int fd = dirfd(dirp); + + // Open a fd to the cwd and save it off. + int result; + RESTARTABLE(::open(".", O_RDONLY), result); + if (result == OS_ERR) { + *saved_cwd_fd = -1; + } else { + *saved_cwd_fd = result; + } + + // Set the current directory to dirname by using the fd of the directory. + result = fchdir(fd); + + return dirp; +} + +// Close the directory and restore the current working directory. +// +static void close_directory_secure_cwd(DIR* dirp, int saved_cwd_fd) { + + int result; + // If we have a saved cwd change back to it and close the fd. + if (saved_cwd_fd != -1) { + result = fchdir(saved_cwd_fd); + ::close(saved_cwd_fd); + } + + // Close the directory. + os::closedir(dirp); +} + +// Check if the given file descriptor is considered a secure. +// +static bool is_file_secure(int fd, const char *filename) { + + int result; + struct stat statbuf; + + // Determine if the file is secure. + RESTARTABLE(::fstat(fd, &statbuf), result); + if (result == OS_ERR) { + if (PrintMiscellaneous && Verbose) { + warning("fstat failed on %s: %s\n", filename, strerror(errno)); + } + return false; + } + if (statbuf.st_nlink > 1) { + // A file with multiple links is not expected. + if (PrintMiscellaneous && Verbose) { + warning("file %s has multiple links\n", filename); + } + return false; + } + return true; +} // return the user name for the given user id // @@ -316,9 +505,11 @@ const char* tmpdirname = os::get_temp_directory(); + // open the temp directory DIR* tmpdirp = os::opendir(tmpdirname); if (tmpdirp == NULL) { + // Cannot open the directory to get the user name, return. return NULL; } @@ -343,25 +534,14 @@ strcat(usrdir_name, "/"); strcat(usrdir_name, dentry->d_name); - DIR* subdirp = os::opendir(usrdir_name); + // open the user directory + DIR* subdirp = open_directory_secure(usrdir_name); if (subdirp == NULL) { FREE_C_HEAP_ARRAY(char, usrdir_name); continue; } - // Since we don't create the backing store files in directories - // pointed to by symbolic links, we also don't follow them when - // looking for the files. We check for a symbolic link after the - // call to opendir in order to eliminate a small window where the - // symlink can be exploited. - // - if (!is_directory_secure(usrdir_name)) { - FREE_C_HEAP_ARRAY(char, usrdir_name); - os::closedir(subdirp); - continue; - } - struct dirent* udentry; char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name)); errno = 0; @@ -463,27 +643,6 @@ } } - -// remove file -// -// this method removes the file with the given file name in the -// named directory. -// -static void remove_file(const char* dirname, const char* filename) { - - size_t nbytes = strlen(dirname) + strlen(filename) + 2; - char* path = NEW_C_HEAP_ARRAY(char, nbytes); - - strcpy(path, dirname); - strcat(path, "/"); - strcat(path, filename); - - remove_file(path); - - FREE_C_HEAP_ARRAY(char, path); -} - - // cleanup stale shared memory resources // // This method attempts to remove all stale shared memory files in @@ -495,16 +654,11 @@ // static void cleanup_sharedmem_resources(const char* dirname) { - // open the user temp directory - DIR* dirp = os::opendir(dirname); - + int saved_cwd_fd; + // open the directory and set the current working directory to it + DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd); if (dirp == NULL) { - // directory doesn't exist, so there is nothing to cleanup - return; - } - - if (!is_directory_secure(dirname)) { - // the directory is not a secure directory + // directory doesn't exist or is insecure, so there is nothing to cleanup return; } @@ -518,6 +672,7 @@ // struct dirent* entry; char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname)); + errno = 0; while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { @@ -528,7 +683,7 @@ if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) { // attempt to remove all unexpected files, except "." and ".." - remove_file(dirname, entry->d_name); + unlink(entry->d_name); } errno = 0; @@ -551,11 +706,14 @@ if ((pid == os::current_process_id()) || (kill(pid, 0) == OS_ERR && (errno == ESRCH || errno == EPERM))) { - remove_file(dirname, entry->d_name); + unlink(entry->d_name); } errno = 0; } - os::closedir(dirp); + + // close the directory and reset the current working directory + close_directory_secure_cwd(dirp, saved_cwd_fd); + FREE_C_HEAP_ARRAY(char, dbuf); } @@ -612,19 +770,54 @@ return -1; } - int result; + int saved_cwd_fd; + // open the directory and set the current working directory to it + DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd); + if (dirp == NULL) { + // Directory doesn't exist or is insecure, so cannot create shared + // memory file. + return -1; + } - RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_TRUNC, S_IREAD|S_IWRITE), result); + // Open the filename in the current directory. + // Cannot use O_TRUNC here; truncation of an existing file has to happen + // after the is_file_secure() check below. + int result; + RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_NOFOLLOW, S_IREAD|S_IWRITE), result); if (result == OS_ERR) { if (PrintMiscellaneous && Verbose) { - warning("could not create file %s: %s\n", filename, strerror(errno)); + if (errno == ELOOP) { + warning("file %s is a symlink and is not secure\n", filename); + } else { + warning("could not create file %s: %s\n", filename, strerror(errno)); + } } + // close the directory and reset the current working directory + close_directory_secure_cwd(dirp, saved_cwd_fd); + return -1; } + // close the directory and reset the current working directory + close_directory_secure_cwd(dirp, saved_cwd_fd); // save the file descriptor int fd = result; + // check to see if the file is secure + if (!is_file_secure(fd, filename)) { + ::close(fd); + return -1; + } + + // truncate the file to get rid of any existing data + RESTARTABLE(::ftruncate(fd, (off_t)0), result); + if (result == OS_ERR) { + if (PrintMiscellaneous && Verbose) { + warning("could not truncate shared memory file: %s\n", strerror(errno)); + } + ::close(fd); + return -1; + } // set the file size RESTARTABLE(::ftruncate(fd, (off_t)size), result); if (result == OS_ERR) { @@ -682,8 +875,15 @@ THROW_MSG_0(vmSymbols::java_io_IOException(), strerror(errno)); } } + int fd = result; - return result; + // check to see if the file is secure + if (!is_file_secure(fd, filename)) { + ::close(fd); + return -1; + } + + return fd; } // create a named shared memory region. returns the address of the @@ -715,13 +915,21 @@ char* dirname = get_user_tmp_dir(user_name); char* filename = get_sharedmem_filename(dirname, vmid); + // get the short filename + char* short_filename = strrchr(filename, '/'); + if (short_filename == NULL) { + short_filename = filename; + } else { + short_filename++; + } + // cleanup any stale shared memory files cleanup_sharedmem_resources(dirname); assert(((size > 0) && (size % os::vm_page_size() == 0)), "unexpected PerfMemory region size"); - fd = create_sharedmem_resources(dirname, filename, size); + fd = create_sharedmem_resources(dirname, short_filename, size); FREE_C_HEAP_ARRAY(char, user_name); FREE_C_HEAP_ARRAY(char, dirname); @@ -835,12 +1043,12 @@ // constructs for the file and the shared memory mapping. if (mode == PerfMemory::PERF_MODE_RO) { mmap_prot = PROT_READ; - file_flags = O_RDONLY; + file_flags = O_RDONLY | O_NOFOLLOW; } else if (mode == PerfMemory::PERF_MODE_RW) { #ifdef LATER mmap_prot = PROT_READ | PROT_WRITE; - file_flags = O_RDWR; + file_flags = O_RDWR | O_NOFOLLOW; #else THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Unsupported access mode"); diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/os/linux/vm/os_linux.cpp openjdk-6-6b34-1.13.6/hotspot/src/os/linux/vm/os_linux.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/os/linux/vm/os_linux.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/os/linux/vm/os_linux.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -4228,6 +4228,10 @@ Linux::capture_initial_stack(JavaThread::stack_size_at_create()); +#if defined(IA32) + workaround_expand_exec_shield_cs_limit(); +#endif + Linux::libpthread_init(); if (PrintMiscellaneous && (Verbose || WizardMode)) { tty->print_cr("[HotSpot is running with %s, %s(%s)]\n", diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/os/linux/vm/perfMemory_linux.cpp openjdk-6-6b34-1.13.6/hotspot/src/os/linux/vm/perfMemory_linux.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/os/linux/vm/perfMemory_linux.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/os/linux/vm/perfMemory_linux.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -196,7 +196,38 @@ } -// check if the given path is considered a secure directory for +// Check if the given statbuf is considered a secure directory for +// the backing store files. Returns true if the directory is considered +// a secure location. Returns false if the statbuf is a symbolic link or +// if an error occurred. +// +static bool is_statbuf_secure(struct stat *statp) { + if (S_ISLNK(statp->st_mode) || !S_ISDIR(statp->st_mode)) { + // The path represents a link or some non-directory file type, + // which is not what we expected. Declare it insecure. + // + return false; + } + // We have an existing directory, check if the permissions are safe. + // + if ((statp->st_mode & (S_IWGRP|S_IWOTH)) != 0) { + // The directory is open for writing and could be subjected + // to a symlink or a hard link attack. Declare it insecure. + // + return false; + } + // See if the uid of the directory matches the effective uid of the process. + // + if (statp->st_uid != geteuid()) { + // The directory was not created by this user, declare it insecure. + // + return false; + } + return true; +} + + +// Check if the given path is considered a secure directory for // the backing store files. Returns true if the directory exists // and is considered a secure location. Returns false if the path // is a symbolic link or if an error occurred. @@ -210,22 +241,180 @@ return false; } - // the path exists, now check it's mode - if (S_ISLNK(statbuf.st_mode) || !S_ISDIR(statbuf.st_mode)) { - // the path represents a link or some non-directory file type, - // which is not what we expected. declare it insecure. - // + // The path exists, see if it is secure. + return is_statbuf_secure(&statbuf); +} + + +// Check if the given directory file descriptor is considered a secure +// directory for the backing store files. Returns true if the directory +// exists and is considered a secure location. Returns false if the path +// is a symbolic link or if an error occurred. +// +static bool is_dirfd_secure(int dir_fd) { + struct stat statbuf; + int result = 0; + + RESTARTABLE(::fstat(dir_fd, &statbuf), result); + if (result == OS_ERR) { return false; } - else { - // we have an existing directory, check if the permissions are safe. - // - if ((statbuf.st_mode & (S_IWGRP|S_IWOTH)) != 0) { - // the directory is open for writing and could be subjected - // to a symlnk attack. declare it insecure. - // - return false; + + // The path exists, now check its mode. + return is_statbuf_secure(&statbuf); +} + + +// Check to make sure fd1 and fd2 are referencing the same file system object. +// +static bool is_same_fsobject(int fd1, int fd2) { + struct stat statbuf1; + struct stat statbuf2; + int result = 0; + + RESTARTABLE(::fstat(fd1, &statbuf1), result); + if (result == OS_ERR) { + return false; + } + RESTARTABLE(::fstat(fd2, &statbuf2), result); + if (result == OS_ERR) { + return false; + } + + if ((statbuf1.st_ino == statbuf2.st_ino) && + (statbuf1.st_dev == statbuf2.st_dev)) { + return true; + } else { + return false; + } +} + + +// Open the directory of the given path and validate it. +// Return a DIR * of the open directory. +// +static DIR *open_directory_secure(const char* dirname) { + // Open the directory using open() so that it can be verified + // to be secure by calling is_dirfd_secure(), opendir() and then check + // to see if they are the same file system object. This method does not + // introduce a window of opportunity for the directory to be attacked that + // calling opendir() and is_directory_secure() does. + int result; + DIR *dirp = NULL; + RESTARTABLE(::open(dirname, O_RDONLY|O_NOFOLLOW), result); + if (result == OS_ERR) { + if (PrintMiscellaneous && Verbose) { + if (errno == ELOOP) { + warning("directory %s is a symlink and is not secure\n", dirname); + } else { + warning("could not open directory %s: %s\n", dirname, strerror(errno)); + } } + return dirp; + } + int fd = result; + + // Determine if the open directory is secure. + if (!is_dirfd_secure(fd)) { + // The directory is not a secure directory. + os::close(fd); + return dirp; + } + + // Open the directory. + dirp = ::opendir(dirname); + if (dirp == NULL) { + // The directory doesn't exist, close fd and return. + os::close(fd); + return dirp; + } + + // Check to make sure fd and dirp are referencing the same file system object. + if (!is_same_fsobject(fd, dirfd(dirp))) { + // The directory is not secure. + os::close(fd); + os::closedir(dirp); + dirp = NULL; + return dirp; + } + + // Close initial open now that we know directory is secure + os::close(fd); + + return dirp; +} + +// NOTE: The code below uses fchdir(), open() and unlink() because +// fdopendir(), openat() and unlinkat() are not supported on all +// versions. Once the support for fdopendir(), openat() and unlinkat() +// is available on all supported versions the code can be changed +// to use these functions. + +// Open the directory of the given path, validate it and set the +// current working directory to it. +// Return a DIR * of the open directory and the saved cwd fd. +// +static DIR *open_directory_secure_cwd(const char* dirname, int *saved_cwd_fd) { + + // Open the directory. + DIR* dirp = open_directory_secure(dirname); + if (dirp == NULL) { + // Directory doesn't exist or is insecure, so there is nothing to cleanup. + return dirp; + } + int fd = dirfd(dirp); + + // Open a fd to the cwd and save it off. + int result; + RESTARTABLE(::open(".", O_RDONLY), result); + if (result == OS_ERR) { + *saved_cwd_fd = -1; + } else { + *saved_cwd_fd = result; + } + + // Set the current directory to dirname by using the fd of the directory. + result = fchdir(fd); + + return dirp; +} + +// Close the directory and restore the current working directory. +// +static void close_directory_secure_cwd(DIR* dirp, int saved_cwd_fd) { + + int result; + // If we have a saved cwd change back to it and close the fd. + if (saved_cwd_fd != -1) { + result = fchdir(saved_cwd_fd); + ::close(saved_cwd_fd); + } + + // Close the directory. + os::closedir(dirp); +} + +// Check if the given file descriptor is considered a secure. +// +static bool is_file_secure(int fd, const char *filename) { + + int result; + struct stat statbuf; + + // Determine if the file is secure. + RESTARTABLE(::fstat(fd, &statbuf), result); + if (result == OS_ERR) { + if (PrintMiscellaneous && Verbose) { + warning("fstat failed on %s: %s\n", filename, strerror(errno)); + } + return false; + } + if (statbuf.st_nlink > 1) { + // A file with multiple links is not expected. + if (PrintMiscellaneous && Verbose) { + warning("file %s has multiple links\n", filename); + } + return false; } return true; } @@ -316,9 +505,11 @@ const char* tmpdirname = os::get_temp_directory(); + // open the temp directory DIR* tmpdirp = os::opendir(tmpdirname); if (tmpdirp == NULL) { + // Cannot open the directory to get the user name, return. return NULL; } @@ -343,7 +534,8 @@ strcat(usrdir_name, "/"); strcat(usrdir_name, dentry->d_name); - DIR* subdirp = os::opendir(usrdir_name); + // open the user directory + DIR* subdirp = open_directory_secure(usrdir_name); if (subdirp == NULL) { FREE_C_HEAP_ARRAY(char, usrdir_name); @@ -464,26 +656,6 @@ } -// remove file -// -// this method removes the file with the given file name in the -// named directory. -// -static void remove_file(const char* dirname, const char* filename) { - - size_t nbytes = strlen(dirname) + strlen(filename) + 2; - char* path = NEW_C_HEAP_ARRAY(char, nbytes); - - strcpy(path, dirname); - strcat(path, "/"); - strcat(path, filename); - - remove_file(path); - - FREE_C_HEAP_ARRAY(char, path); -} - - // cleanup stale shared memory resources // // This method attempts to remove all stale shared memory files in @@ -495,16 +667,11 @@ // static void cleanup_sharedmem_resources(const char* dirname) { - // open the user temp directory - DIR* dirp = os::opendir(dirname); - + int saved_cwd_fd; + // open the directory + DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd); if (dirp == NULL) { - // directory doesn't exist, so there is nothing to cleanup - return; - } - - if (!is_directory_secure(dirname)) { - // the directory is not a secure directory + // directory doesn't exist or is insecure, so there is nothing to cleanup return; } @@ -518,6 +685,7 @@ // struct dirent* entry; char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname)); + errno = 0; while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { @@ -526,9 +694,8 @@ if (pid == 0) { if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) { - // attempt to remove all unexpected files, except "." and ".." - remove_file(dirname, entry->d_name); + unlink(entry->d_name); } errno = 0; @@ -550,12 +717,14 @@ // if ((pid == os::current_process_id()) || (kill(pid, 0) == OS_ERR && (errno == ESRCH || errno == EPERM))) { - - remove_file(dirname, entry->d_name); + unlink(entry->d_name); } errno = 0; } - os::closedir(dirp); + + // close the directory and reset the current working directory + close_directory_secure_cwd(dirp, saved_cwd_fd); + FREE_C_HEAP_ARRAY(char, dbuf); } @@ -612,19 +781,54 @@ return -1; } - int result; + int saved_cwd_fd; + // open the directory and set the current working directory to it + DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd); + if (dirp == NULL) { + // Directory doesn't exist or is insecure, so cannot create shared + // memory file. + return -1; + } - RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_TRUNC, S_IREAD|S_IWRITE), result); + // Open the filename in the current directory. + // Cannot use O_TRUNC here; truncation of an existing file has to happen + // after the is_file_secure() check below. + int result; + RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_NOFOLLOW, S_IREAD|S_IWRITE), result); if (result == OS_ERR) { if (PrintMiscellaneous && Verbose) { - warning("could not create file %s: %s\n", filename, strerror(errno)); + if (errno == ELOOP) { + warning("file %s is a symlink and is not secure\n", filename); + } else { + warning("could not create file %s: %s\n", filename, strerror(errno)); + } } + // close the directory and reset the current working directory + close_directory_secure_cwd(dirp, saved_cwd_fd); + return -1; } + // close the directory and reset the current working directory + close_directory_secure_cwd(dirp, saved_cwd_fd); // save the file descriptor int fd = result; + // check to see if the file is secure + if (!is_file_secure(fd, filename)) { + ::close(fd); + return -1; + } + + // truncate the file to get rid of any existing data + RESTARTABLE(::ftruncate(fd, (off_t)0), result); + if (result == OS_ERR) { + if (PrintMiscellaneous && Verbose) { + warning("could not truncate shared memory file: %s\n", strerror(errno)); + } + ::close(fd); + return -1; + } // set the file size RESTARTABLE(::ftruncate(fd, (off_t)size), result); if (result == OS_ERR) { @@ -682,8 +886,15 @@ THROW_MSG_0(vmSymbols::java_io_IOException(), strerror(errno)); } } + int fd = result; + + // check to see if the file is secure + if (!is_file_secure(fd, filename)) { + ::close(fd); + return -1; + } - return result; + return fd; } // create a named shared memory region. returns the address of the @@ -714,6 +925,13 @@ char* dirname = get_user_tmp_dir(user_name); char* filename = get_sharedmem_filename(dirname, vmid); + // get the short filename + char* short_filename = strrchr(filename, '/'); + if (short_filename == NULL) { + short_filename = filename; + } else { + short_filename++; + } // cleanup any stale shared memory files cleanup_sharedmem_resources(dirname); @@ -721,7 +939,7 @@ assert(((size > 0) && (size % os::vm_page_size() == 0)), "unexpected PerfMemory region size"); - fd = create_sharedmem_resources(dirname, filename, size); + fd = create_sharedmem_resources(dirname, short_filename, size); FREE_C_HEAP_ARRAY(char, user_name); FREE_C_HEAP_ARRAY(char, dirname); @@ -835,12 +1053,12 @@ // constructs for the file and the shared memory mapping. if (mode == PerfMemory::PERF_MODE_RO) { mmap_prot = PROT_READ; - file_flags = O_RDONLY; + file_flags = O_RDONLY | O_NOFOLLOW; } else if (mode == PerfMemory::PERF_MODE_RW) { #ifdef LATER mmap_prot = PROT_READ | PROT_WRITE; - file_flags = O_RDWR; + file_flags = O_RDWR | O_NOFOLLOW; #else THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Unsupported access mode"); diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp openjdk-6-6b34-1.13.6/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -198,7 +198,38 @@ } -// check if the given path is considered a secure directory for +// Check if the given statbuf is considered a secure directory for +// the backing store files. Returns true if the directory is considered +// a secure location. Returns false if the statbuf is a symbolic link or +// if an error occurred. +// +static bool is_statbuf_secure(struct stat *statp) { + if (S_ISLNK(statp->st_mode) || !S_ISDIR(statp->st_mode)) { + // The path represents a link or some non-directory file type, + // which is not what we expected. Declare it insecure. + // + return false; + } + // We have an existing directory, check if the permissions are safe. + // + if ((statp->st_mode & (S_IWGRP|S_IWOTH)) != 0) { + // The directory is open for writing and could be subjected + // to a symlink or a hard link attack. Declare it insecure. + // + return false; + } + // See if the uid of the directory matches the effective uid of the process. + // + if (statp->st_uid != geteuid()) { + // The directory was not created by this user, declare it insecure. + // + return false; + } + return true; +} + + +// Check if the given path is considered a secure directory for // the backing store files. Returns true if the directory exists // and is considered a secure location. Returns false if the path // is a symbolic link or if an error occurred. @@ -212,26 +243,184 @@ return false; } - // the path exists, now check it's mode - if (S_ISLNK(statbuf.st_mode) || !S_ISDIR(statbuf.st_mode)) { - // the path represents a link or some non-directory file type, - // which is not what we expected. declare it insecure. - // + // The path exists, see if it is secure. + return is_statbuf_secure(&statbuf); +} + + +// Check if the given directory file descriptor is considered a secure +// directory for the backing store files. Returns true if the directory +// exists and is considered a secure location. Returns false if the path +// is a symbolic link or if an error occurred. +// +static bool is_dirfd_secure(int dir_fd) { + struct stat statbuf; + int result = 0; + + RESTARTABLE(::fstat(dir_fd, &statbuf), result); + if (result == OS_ERR) { return false; } - else { - // we have an existing directory, check if the permissions are safe. - // - if ((statbuf.st_mode & (S_IWGRP|S_IWOTH)) != 0) { - // the directory is open for writing and could be subjected - // to a symlnk attack. declare it insecure. - // - return false; + + // The path exists, now check its mode. + return is_statbuf_secure(&statbuf); +} + + +// Check to make sure fd1 and fd2 are referencing the same file system object. +// +static bool is_same_fsobject(int fd1, int fd2) { + struct stat statbuf1; + struct stat statbuf2; + int result = 0; + + RESTARTABLE(::fstat(fd1, &statbuf1), result); + if (result == OS_ERR) { + return false; + } + RESTARTABLE(::fstat(fd2, &statbuf2), result); + if (result == OS_ERR) { + return false; + } + + if ((statbuf1.st_ino == statbuf2.st_ino) && + (statbuf1.st_dev == statbuf2.st_dev)) { + return true; + } else { + return false; + } +} + + +// Open the directory of the given path and validate it. +// Return a DIR * of the open directory. +// +static DIR *open_directory_secure(const char* dirname) { + // Open the directory using open() so that it can be verified + // to be secure by calling is_dirfd_secure(), opendir() and then check + // to see if they are the same file system object. This method does not + // introduce a window of opportunity for the directory to be attacked that + // calling opendir() and is_directory_secure() does. + int result; + DIR *dirp = NULL; + RESTARTABLE(::open(dirname, O_RDONLY|O_NOFOLLOW), result); + if (result == OS_ERR) { + // Directory doesn't exist or is a symlink, so there is nothing to cleanup. + if (PrintMiscellaneous && Verbose) { + if (errno == ELOOP) { + warning("directory %s is a symlink and is not secure\n", dirname); + } else { + warning("could not open directory %s: %s\n", dirname, strerror(errno)); + } } + return dirp; } - return true; + int fd = result; + + // Determine if the open directory is secure. + if (!is_dirfd_secure(fd)) { + // The directory is not a secure directory. + os::close(fd); + return dirp; + } + + // Open the directory. + dirp = ::opendir(dirname); + if (dirp == NULL) { + // The directory doesn't exist, close fd and return. + os::close(fd); + return dirp; + } + + // Check to make sure fd and dirp are referencing the same file system object. + if (!is_same_fsobject(fd, dirp->dd_fd)) { + // The directory is not secure. + os::close(fd); + os::closedir(dirp); + dirp = NULL; + return dirp; + } + + // Close initial open now that we know directory is secure + os::close(fd); + + return dirp; } +// NOTE: The code below uses fchdir(), open() and unlink() because +// fdopendir(), openat() and unlinkat() are not supported on all +// versions. Once the support for fdopendir(), openat() and unlinkat() +// is available on all supported versions the code can be changed +// to use these functions. + +// Open the directory of the given path, validate it and set the +// current working directory to it. +// Return a DIR * of the open directory and the saved cwd fd. +// +static DIR *open_directory_secure_cwd(const char* dirname, int *saved_cwd_fd) { + + // Open the directory. + DIR* dirp = open_directory_secure(dirname); + if (dirp == NULL) { + // Directory doesn't exist or is insecure, so there is nothing to cleanup. + return dirp; + } + int fd = dirp->dd_fd; + + // Open a fd to the cwd and save it off. + int result; + RESTARTABLE(::open(".", O_RDONLY), result); + if (result == OS_ERR) { + *saved_cwd_fd = -1; + } else { + *saved_cwd_fd = result; + } + + // Set the current directory to dirname by using the fd of the directory. + result = fchdir(fd); + + return dirp; +} + +// Close the directory and restore the current working directory. +// +static void close_directory_secure_cwd(DIR* dirp, int saved_cwd_fd) { + + int result; + // If we have a saved cwd change back to it and close the fd. + if (saved_cwd_fd != -1) { + result = fchdir(saved_cwd_fd); + ::close(saved_cwd_fd); + } + + // Close the directory. + os::closedir(dirp); +} + +// Check if the given file descriptor is considered a secure. +// +static bool is_file_secure(int fd, const char *filename) { + + int result; + struct stat statbuf; + + // Determine if the file is secure. + RESTARTABLE(::fstat(fd, &statbuf), result); + if (result == OS_ERR) { + if (PrintMiscellaneous && Verbose) { + warning("fstat failed on %s: %s\n", filename, strerror(errno)); + } + return false; + } + if (statbuf.st_nlink > 1) { + // A file with multiple links is not expected. + if (PrintMiscellaneous && Verbose) { + warning("file %s has multiple links\n", filename); + } + return false; + } + return true; +} // return the user name for the given user id // @@ -307,9 +496,11 @@ const char* tmpdirname = os::get_temp_directory(); + // open the temp directory DIR* tmpdirp = os::opendir(tmpdirname); if (tmpdirp == NULL) { + // Cannot open the directory to get the user name, return. return NULL; } @@ -334,7 +525,8 @@ strcat(usrdir_name, "/"); strcat(usrdir_name, dentry->d_name); - DIR* subdirp = os::opendir(usrdir_name); + // open the user directory + DIR* subdirp = open_directory_secure(usrdir_name); if (subdirp == NULL) { FREE_C_HEAP_ARRAY(char, usrdir_name); @@ -501,26 +693,6 @@ } -// remove file -// -// this method removes the file with the given file name in the -// named directory. -// -static void remove_file(const char* dirname, const char* filename) { - - size_t nbytes = strlen(dirname) + strlen(filename) + 2; - char* path = NEW_C_HEAP_ARRAY(char, nbytes); - - strcpy(path, dirname); - strcat(path, "/"); - strcat(path, filename); - - remove_file(path); - - FREE_C_HEAP_ARRAY(char, path); -} - - // cleanup stale shared memory resources // // This method attempts to remove all stale shared memory files in @@ -532,16 +704,11 @@ // static void cleanup_sharedmem_resources(const char* dirname) { - // open the user temp directory - DIR* dirp = os::opendir(dirname); - + int saved_cwd_fd; + // open the directory + DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd); if (dirp == NULL) { - // directory doesn't exist, so there is nothing to cleanup - return; - } - - if (!is_directory_secure(dirname)) { - // the directory is not a secure directory + // directory doesn't exist or is insecure, so there is nothing to cleanup return; } @@ -555,6 +722,7 @@ // struct dirent* entry; char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname)); + errno = 0; while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { @@ -565,7 +733,7 @@ if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) { // attempt to remove all unexpected files, except "." and ".." - remove_file(dirname, entry->d_name); + unlink(entry->d_name); } errno = 0; @@ -588,11 +756,14 @@ if ((pid == os::current_process_id()) || (kill(pid, 0) == OS_ERR && (errno == ESRCH || errno == EPERM))) { - remove_file(dirname, entry->d_name); + unlink(entry->d_name); } errno = 0; } - os::closedir(dirp); + + // close the directory and reset the current working directory + close_directory_secure_cwd(dirp, saved_cwd_fd); + FREE_C_HEAP_ARRAY(char, dbuf); } @@ -649,19 +820,54 @@ return -1; } - int result; + int saved_cwd_fd; + // open the directory and set the current working directory to it + DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd); + if (dirp == NULL) { + // Directory doesn't exist or is insecure, so cannot create shared + // memory file. + return -1; + } - RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_TRUNC, S_IREAD|S_IWRITE), result); + // Open the filename in the current directory. + // Cannot use O_TRUNC here; truncation of an existing file has to happen + // after the is_file_secure() check below. + int result; + RESTARTABLE(::open(filename, O_RDWR|O_CREAT|O_NOFOLLOW, S_IREAD|S_IWRITE), result); if (result == OS_ERR) { if (PrintMiscellaneous && Verbose) { - warning("could not create file %s: %s\n", filename, strerror(errno)); + if (errno == ELOOP) { + warning("file %s is a symlink and is not secure\n", filename); + } else { + warning("could not create file %s: %s\n", filename, strerror(errno)); + } } + // close the directory and reset the current working directory + close_directory_secure_cwd(dirp, saved_cwd_fd); + return -1; } + // close the directory and reset the current working directory + close_directory_secure_cwd(dirp, saved_cwd_fd); // save the file descriptor int fd = result; + // check to see if the file is secure + if (!is_file_secure(fd, filename)) { + ::close(fd); + return -1; + } + + // truncate the file to get rid of any existing data + RESTARTABLE(::ftruncate(fd, (off_t)0), result); + if (result == OS_ERR) { + if (PrintMiscellaneous && Verbose) { + warning("could not truncate shared memory file: %s\n", strerror(errno)); + } + ::close(fd); + return -1; + } // set the file size RESTARTABLE(::ftruncate(fd, (off_t)size), result); if (result == OS_ERR) { @@ -697,8 +903,15 @@ THROW_MSG_0(vmSymbols::java_io_IOException(), strerror(errno)); } } + int fd = result; + + // check to see if the file is secure + if (!is_file_secure(fd, filename)) { + ::close(fd); + return -1; + } - return result; + return fd; } // create a named shared memory region. returns the address of the @@ -730,13 +943,21 @@ char* dirname = get_user_tmp_dir(user_name); char* filename = get_sharedmem_filename(dirname, vmid); + // get the short filename + char* short_filename = strrchr(filename, '/'); + if (short_filename == NULL) { + short_filename = filename; + } else { + short_filename++; + } + // cleanup any stale shared memory files cleanup_sharedmem_resources(dirname); assert(((size > 0) && (size % os::vm_page_size() == 0)), "unexpected PerfMemory region size"); - fd = create_sharedmem_resources(dirname, filename, size); + fd = create_sharedmem_resources(dirname, short_filename, size); FREE_C_HEAP_ARRAY(char, user_name); FREE_C_HEAP_ARRAY(char, dirname); @@ -850,12 +1071,12 @@ // constructs for the file and the shared memory mapping. if (mode == PerfMemory::PERF_MODE_RO) { mmap_prot = PROT_READ; - file_flags = O_RDONLY; + file_flags = O_RDONLY | O_NOFOLLOW; } else if (mode == PerfMemory::PERF_MODE_RW) { #ifdef LATER mmap_prot = PROT_READ | PROT_WRITE; - file_flags = O_RDWR; + file_flags = O_RDWR | O_NOFOLLOW; #else THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Unsupported access mode"); diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp openjdk-6-6b34-1.13.6/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp 2015-01-20 09:06:41.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -862,3 +862,46 @@ : "r" (fpu_cntrl) : "memory"); #endif // !AMD64 } + + +/* + * IA32 only: execute code at a high address in case buggy NX emulation is present. I.e. avoid CS limit + * updates (JDK-8023956). + */ +void os::workaround_expand_exec_shield_cs_limit() { +#if defined(IA32) + size_t page_size = os::vm_page_size(); + /* + * Take the highest VA the OS will give us and exec + * + * Although using -(pagesz) as mmap hint works on newer kernel as you would + * think, older variants affected by this work-around don't (search forward only). + * + * On the affected distributions, we understand the memory layout to be: + * + * TASK_LIMIT= 3G, main stack base close to TASK_LIMT. + * + * A few pages south main stack will do it. + * + * If we are embedded in an app other than launcher (initial != main stack), + * we don't have much control or understanding of the address space, just let it slide. + */ + char* hint = (char*) (Linux::initial_thread_stack_bottom() - + ((StackYellowPages + StackRedPages + 1) * page_size)); + char* codebuf = os::attempt_reserve_memory_at(page_size, hint); + if ( (codebuf == NULL) || (!os::commit_memory(codebuf, page_size, true)) ) { + return; // No matter, we tried, best effort. + } + if (PrintMiscellaneous && (Verbose || WizardMode)) { + tty->print_cr("[CS limit NX emulation work-around, exec code at: %p]", codebuf); + } + + // Some code to exec: the 'ret' instruction + codebuf[0] = 0xC3; + + // Call the code in the codebuf + __asm__ volatile("call *%0" : : "r"(codebuf)); + + // keep the page mapped so CS limit isn't reduced. +#endif +} diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.hpp openjdk-6-6b34-1.13.6/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.hpp --- openjdk-6-6b33-1.13.5/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.hpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.hpp 2015-01-20 02:20:42.000000000 +0000 @@ -36,4 +36,17 @@ // Note: Currently only used in 64 bit Windows implementations static bool register_code_area(char *low, char *high) { return true; } + /* + * Work-around for broken NX emulation using CS limit, Red Hat patch "Exec-Shield" + * (IA32 only). + * + * Map and execute at a high VA to prevent CS lazy updates race with SMP MM + * invalidation.Further code generation by the JVM will no longer cause CS limit + * updates. + * + * Affects IA32: RHEL 5 & 6, Ubuntu 10.04 (LTS), 10.10, 11.04, 11.10, 12.04. + * @see JDK-8023956 + */ + static void workaround_expand_exec_shield_cs_limit(); + #endif // OS_CPU_LINUX_X86_VM_OS_LINUX_X86_HPP diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -89,8 +89,8 @@ public: ArgumentMap *_vars; ArgumentMap *_stack; - short _stack_height; - short _max_stack; + int _stack_height; + int _max_stack; bool _initialized; ArgumentMap empty_map; diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/classfile/stackMapTable.cpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/classfile/stackMapTable.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/classfile/stackMapTable.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/classfile/stackMapTable.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -68,27 +68,29 @@ bool StackMapTable::match_stackmap( StackMapFrame* frame, int32_t target, - bool match, bool update, TRAPS) const { + bool match, bool update, bool handler, TRAPS) const { int index = get_index_from_offset(target); return match_stackmap( frame, target, index, match, - update, CHECK_VERIFY_(frame->verifier(), false)); + update, handler, CHECK_VERIFY_(frame->verifier(), false)); } // Match and/or update current_frame to the frame in stackmap table with // specified offset and frame index. Return true if the two frames match. +// handler is true if the frame in stackmap_table is for an exception handler. // -// The values of match and update are: _match__update_ +// The values of match and update are: _match__update__handler // -// checking a branch target/exception handler: true false +// checking a branch target: true false false +// checking an exception handler: true false true // linear bytecode verification following an -// unconditional branch: false true +// unconditional branch: false true false // linear bytecode verification not following an -// unconditional branch: true true +// unconditional branch: true true false bool StackMapTable::match_stackmap( StackMapFrame* frame, int32_t target, int32_t frame_index, - bool match, bool update, TRAPS) const { + bool match, bool update, bool handler, TRAPS) const { if (frame_index < 0 || frame_index >= _frame_count) { frame->verifier()->verify_error(frame->offset(), "Expecting a stackmap frame at branch target %d", target); @@ -98,12 +100,10 @@ bool result = true; StackMapFrame *stackmap_frame = _frame_array[frame_index]; if (match) { - // when checking handler target, match == true && update == false - bool is_exception_handler = !update; // Has direct control flow from last instruction, need to match the two // frames. result = frame->is_assignable_to( - stackmap_frame, is_exception_handler, + stackmap_frame, handler, CHECK_VERIFY_(frame->verifier(), false)); } if (update) { @@ -126,7 +126,7 @@ void StackMapTable::check_jump_target( StackMapFrame* frame, int32_t target, TRAPS) const { bool match = match_stackmap( - frame, target, true, false, CHECK_VERIFY(frame->verifier())); + frame, target, true, false, false, CHECK_VERIFY(frame->verifier())); if (!match || (target < 0 || target >= _code_length)) { frame->verifier()->verify_error(frame->offset(), "Inconsistent stackmap frames at branch target %d", target); @@ -134,7 +134,6 @@ } // check if uninitialized objects exist on backward branches check_new_object(frame, target, CHECK_VERIFY(frame->verifier())); - frame->verifier()->update_furthest_jump(target); } void StackMapTable::check_new_object( diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/classfile/stackMapTable.hpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/classfile/stackMapTable.hpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/classfile/stackMapTable.hpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/classfile/stackMapTable.hpp 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -73,12 +73,12 @@ // specified offset. Return true if the two frames match. bool match_stackmap( StackMapFrame* current_frame, int32_t offset, - bool match, bool update, TRAPS) const; + bool match, bool update, bool handler, TRAPS) const; // Match and/or update current_frame to the frame in stackmap table with // specified offset and frame index. Return true if the two frames match. bool match_stackmap( StackMapFrame* current_frame, int32_t offset, int32_t frame_index, - bool match, bool update, TRAPS) const; + bool match, bool update, bool handler, TRAPS) const; // Check jump instructions. Make sure there are no uninitialized // instances on backward branch. diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/classfile/systemDictionary.cpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/classfile/systemDictionary.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/classfile/systemDictionary.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/classfile/systemDictionary.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -1991,11 +1991,12 @@ instanceKlass::cast(WK_KLASS(Reference_klass))->set_reference_type(REF_OTHER); instanceRefKlass::update_nonstatic_oop_maps(WK_KLASS(Reference_klass)); - initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(PhantomReference_klass), scan, CHECK); + initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(Cleaner_klass), scan, CHECK); instanceKlass::cast(WK_KLASS(SoftReference_klass))->set_reference_type(REF_SOFT); instanceKlass::cast(WK_KLASS(WeakReference_klass))->set_reference_type(REF_WEAK); instanceKlass::cast(WK_KLASS(FinalReference_klass))->set_reference_type(REF_FINAL); instanceKlass::cast(WK_KLASS(PhantomReference_klass))->set_reference_type(REF_PHANTOM); + instanceKlass::cast(WK_KLASS(Cleaner_klass))->set_reference_type(REF_CLEANER); // JSR 292 classes WKID jsr292_group_start = WK_KLASS_ENUM_NAME(MethodHandle_klass); diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/classfile/systemDictionary.hpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/classfile/systemDictionary.hpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/classfile/systemDictionary.hpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/classfile/systemDictionary.hpp 2015-01-20 02:20:42.000000000 +0000 @@ -123,6 +123,7 @@ template(WeakReference_klass, java_lang_ref_WeakReference, Pre) \ template(FinalReference_klass, java_lang_ref_FinalReference, Pre) \ template(PhantomReference_klass, java_lang_ref_PhantomReference, Pre) \ + template(Cleaner_klass, sun_misc_Cleaner, Pre) \ template(Finalizer_klass, java_lang_ref_Finalizer, Pre) \ \ template(Thread_klass, java_lang_Thread, Pre) \ diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/classfile/verifier.cpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/classfile/verifier.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/classfile/verifier.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/classfile/verifier.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -379,8 +379,6 @@ // flow from current instruction to the next // instruction in sequence - set_furthest_jump(0); - Bytecodes::Code opcode; while (!bcs.is_last_bytecode()) { // Check for recursive re-verification before each bytecode. @@ -1230,14 +1228,14 @@ case Bytecodes::_invokespecial : case Bytecodes::_invokestatic : verify_invoke_instructions( - &bcs, code_length, ¤t_frame, - &this_uninit, return_type, cp, CHECK_VERIFY(this)); + &bcs, code_length, ¤t_frame, (bci >= ex_min && bci < ex_max), + &this_uninit, return_type, cp, &stackmap_table, CHECK_VERIFY(this)); no_control_flow = false; break; case Bytecodes::_invokeinterface : case Bytecodes::_invokedynamic : verify_invoke_instructions( - &bcs, code_length, ¤t_frame, - &this_uninit, return_type, cp, CHECK_VERIFY(this)); + &bcs, code_length, ¤t_frame, (bci >= ex_min && bci < ex_max), + &this_uninit, return_type, cp, &stackmap_table, CHECK_VERIFY(this)); no_control_flow = false; break; case Bytecodes::_new : { @@ -1455,7 +1453,7 @@ // If matched, current_frame will be updated by this method. bool match = stackmap_table->match_stackmap( current_frame, this_offset, stackmap_index, - !no_control_flow, true, CHECK_VERIFY_(this, 0)); + !no_control_flow, true, false, CHECK_VERIFY_(this, 0)); if (!match) { // report type error verify_error(bci, "Instruction type does not match stack map"); @@ -1499,7 +1497,7 @@ new_frame->push_stack(throwable, CHECK_VERIFY(this)); } bool match = stackmap_table->match_stackmap( - new_frame, handler_pc, true, false, CHECK_VERIFY(this)); + new_frame, handler_pc, true, false, true, CHECK_VERIFY(this)); if (!match) { verify_error(bci, "Stack map does not match the one at exception handler %d", @@ -1879,10 +1877,190 @@ } } +// Look at the method's handlers. If the bci is in the handler's try block +// then check if the handler_pc is already on the stack. If not, push it. +void ClassVerifier::push_handlers(typeArrayHandle exhandlers, + GrowableArray* handler_stack, + u4 bci) { + int exlength = exhandlers->length(); + for(int x = 0; x < exlength; x++) { + u2 start_pc = exhandlers->int_at(x++); + u2 end_pc = exhandlers->int_at(x++); + u2 handler_pc = exhandlers->int_at(x++); + + if (bci >= start_pc && bci < end_pc) { + handler_stack->append_if_missing(handler_pc); + } + } +} + +// Return TRUE if all code paths starting with start_bc_offset end in +// bytecode athrow or loop. +bool ClassVerifier::ends_in_athrow(u4 start_bc_offset, TRAPS) { + ResourceMark rm; + // Create bytecode stream. + RawBytecodeStream bcs(method()); + u4 code_length = method()->code_size(); + bcs.set_start(start_bc_offset); + u4 target; + // Create stack for storing bytecode start offsets for if* and *switch. + GrowableArray* bci_stack = new GrowableArray(30); + // Create stack for handlers for try blocks containing this handler. + GrowableArray* handler_stack = new GrowableArray(30); + // Create list of visited branch opcodes (goto* and if*). + GrowableArray* visited_branches = new GrowableArray(30); + typeArrayHandle exhandlers(THREAD, _method->exception_table()); + + while (true) { + if (bcs.is_last_bytecode()) { + // if no more starting offsets to parse or if at the end of the + // method then return false. + if ((bci_stack->is_empty()) || ((u4)bcs.end_bci() == code_length)) + return false; + // Pop a bytecode starting offset and scan from there. + bcs.set_start(bci_stack->pop()); + } + Bytecodes::Code opcode = bcs.raw_next(); + u4 bci = bcs.bci(); + + // If the bytecode is in a TRY block, push its handlers so they + // will get parsed. + push_handlers(exhandlers, handler_stack, bci); + + switch (opcode) { + case Bytecodes::_if_icmpeq: + case Bytecodes::_if_icmpne: + case Bytecodes::_if_icmplt: + case Bytecodes::_if_icmpge: + case Bytecodes::_if_icmpgt: + case Bytecodes::_if_icmple: + case Bytecodes::_ifeq: + case Bytecodes::_ifne: + case Bytecodes::_iflt: + case Bytecodes::_ifge: + case Bytecodes::_ifgt: + case Bytecodes::_ifle: + case Bytecodes::_if_acmpeq: + case Bytecodes::_if_acmpne: + case Bytecodes::_ifnull: + case Bytecodes::_ifnonnull: + target = bcs.dest(); + if (visited_branches->contains(bci)) { + if (bci_stack->is_empty()) return true; + // Pop a bytecode starting offset and scan from there. + bcs.set_start(bci_stack->pop()); + } else { + if (target > bci) { // forward branch + if (target >= code_length) return false; + // Push the branch target onto the stack. + bci_stack->push(target); + // then, scan bytecodes starting with next. + bcs.set_start(bcs.next_bci()); + } else { // backward branch + // Push bytecode offset following backward branch onto the stack. + bci_stack->push(bcs.next_bci()); + // Check bytecodes starting with branch target. + bcs.set_start(target); + } + // Record target so we don't branch here again. + visited_branches->append(bci); + } + break; + + case Bytecodes::_goto: + case Bytecodes::_goto_w: + target = (opcode == Bytecodes::_goto ? bcs.dest() : bcs.dest_w()); + if (visited_branches->contains(bci)) { + if (bci_stack->is_empty()) return true; + // Been here before, pop new starting offset from stack. + bcs.set_start(bci_stack->pop()); + } else { + if (target >= code_length) return false; + // Continue scanning from the target onward. + bcs.set_start(target); + // Record target so we don't branch here again. + visited_branches->append(bci); + } + break; + + // Check that all switch alternatives end in 'athrow' bytecodes. Since it + // is difficult to determine where each switch alternative ends, parse + // each switch alternative until either hit a 'return', 'athrow', or reach + // the end of the method's bytecodes. This is gross but should be okay + // because: + // 1. tableswitch and lookupswitch byte codes in handlers for ctor explicit + // constructor invocations should be rare. + // 2. if each switch alternative ends in an athrow then the parsing should be + // short. If there is no athrow then it is bogus code, anyway. + case Bytecodes::_lookupswitch: + case Bytecodes::_tableswitch: + { + address aligned_bcp = (address) round_to((intptr_t)(bcs.bcp() + 1), jintSize); + u4 default_offset = Bytes::get_Java_u4(aligned_bcp) + bci; + int keys, delta; + if (opcode == Bytecodes::_tableswitch) { + jint low = (jint)Bytes::get_Java_u4(aligned_bcp + jintSize); + jint high = (jint)Bytes::get_Java_u4(aligned_bcp + 2*jintSize); + // This is invalid, but let the regular bytecode verifier + // report this because the user will get a better error message. + if (low > high) return true; + keys = high - low + 1; + delta = 1; + } else { + keys = (int)Bytes::get_Java_u4(aligned_bcp + jintSize); + delta = 2; + } + // Invalid, let the regular bytecode verifier deal with it. + if (keys < 0) return true; + + // Push the offset of the next bytecode onto the stack. + bci_stack->push(bcs.next_bci()); + + // Push the switch alternatives onto the stack. + for (int i = 0; i < keys; i++) { + u4 target = bci + (jint)Bytes::get_Java_u4(aligned_bcp+(3+i*delta)*jintSize); + if (target > code_length) return false; + bci_stack->push(target); + } + + // Start bytecode parsing for the switch at the default alternative. + if (default_offset > code_length) return false; + bcs.set_start(default_offset); + break; + } + + case Bytecodes::_return: + return false; + + case Bytecodes::_athrow: + { + if (bci_stack->is_empty()) { + if (handler_stack->is_empty()) { + return true; + } else { + // Parse the catch handlers for try blocks containing athrow. + bcs.set_start(handler_stack->pop()); + } + } else { + // Pop a bytecode offset and starting scanning from there. + bcs.set_start(bci_stack->pop()); + } + } + break; + + default: + ; + } // end switch + } // end while loop + + return false; +} + void ClassVerifier::verify_invoke_init( RawBytecodeStream* bcs, VerificationType ref_class_type, - StackMapFrame* current_frame, u4 code_length, bool *this_uninit, - constantPoolHandle cp, TRAPS) { + StackMapFrame* current_frame, u4 code_length, bool in_try_block, + bool *this_uninit, constantPoolHandle cp, StackMapTable* stackmap_table, + TRAPS) { u2 bci = bcs->bci(); VerificationType type = current_frame->pop_stack( VerificationType::reference_check(), CHECK_VERIFY(this)); @@ -1895,33 +2073,43 @@ return; } - // Make sure that this call is not jumped over. - if (bci < furthest_jump()) { - verify_error(bci, "Bad method call from inside of a branch"); - return; - } - - // Make sure that this call is not done from within a TRY block because - // that can result in returning an incomplete object. Simply checking - // (bci >= start_pc) also ensures that this call is not done after a TRY - // block. That is also illegal because this call must be the first Java - // statement in the constructor. - typeArrayHandle exhandlers (THREAD, _method->exception_table()); - for(int i = 0; i < exhandlers->length(); i += 4) { - /* - * Skip reading end_pc, handler_pc and catch_type_index. - * Looks like this if you need all of them: - * u2 start_pc = exhandlers->int_at(i++); - * u2 end_pc = exhandlers->int_at(i++); - * u2 handler_pc = exhandlers->int_at(i++); - * int catch_type_index = exhandlers->int_at(i++); - */ - u2 start_pc = exhandlers->int_at(i); - if (bci >= start_pc) { - verify_error(bci, "Bad method call from after the start of a try block"); - return; + // If this invokespecial call is done from inside of a TRY block then make + // sure that all catch clause paths end in a throw. Otherwise, this can + // result in returning an incomplete object. + if (in_try_block) { + typeArrayHandle exhandlers (THREAD, _method->exception_table()); + int exlength = exhandlers->length(); + for(int i = 0; i < exlength; i++) { + /* + * Skip reading catch_type_index. + * Looks like this if you need all of them: + * u2 start_pc = exhandlers->int_at(i++); + * u2 end_pc = exhandlers->int_at(i++); + * u2 handler_pc = exhandlers->int_at(i++); + * int catch_type_index = exhandlers->int_at(i++); + */ + // Reacquire the table in case a GC happened + typeArrayHandle exhandlers (THREAD, _method->exception_table()); + u2 start_pc = exhandlers->int_at(i++); + u2 end_pc = exhandlers->int_at(i++); + u2 handler_pc = exhandlers->int_at(i++); + + if (bci >= start_pc && bci < end_pc) { + bool athrow_check = ends_in_athrow(handler_pc, CHECK_VERIFY(this)); + if (!athrow_check) { + verify_error( + "Bad method call from after the start of a try block"); + return; + } + } } - } + + // Check the exception handler target stackmaps with the locals from the + // incoming stackmap (before initialize_object() changes them to outgoing + // state). + verify_exception_handler_targets(bci, true, current_frame, + stackmap_table, CHECK_VERIFY(this)); + } // in_try_block current_frame->initialize_object(type, current_type()); *this_uninit = true; @@ -1968,6 +2156,13 @@ } } } + // Check the exception handler target stackmaps with the locals from the + // incoming stackmap (before initialize_object() changes them to outgoing + // state). + if (in_try_block) { + verify_exception_handler_targets(bci, *this_uninit, current_frame, + stackmap_table, CHECK_VERIFY(this)); + } current_frame->initialize_object(type, new_class_type); } else { verify_error(bci, "Bad operand type when invoking "); @@ -1977,8 +2172,8 @@ void ClassVerifier::verify_invoke_instructions( RawBytecodeStream* bcs, u4 code_length, StackMapFrame* current_frame, - bool *this_uninit, VerificationType return_type, - constantPoolHandle cp, TRAPS) { + bool in_try_block, bool *this_uninit, VerificationType return_type, + constantPoolHandle cp, StackMapTable* stackmap_table, TRAPS) { // Make sure the constant pool item is the right type u2 index = bcs->get_index_u2(); Bytecodes::Code opcode = bcs->raw_code(); @@ -2109,7 +2304,8 @@ opcode != Bytecodes::_invokedynamic) { if (method_name == vmSymbols::object_initializer_name()) { // method verify_invoke_init(bcs, ref_class_type, current_frame, - code_length, this_uninit, cp, CHECK_VERIFY(this)); + code_length, in_try_block, this_uninit, cp, stackmap_table, + CHECK_VERIFY(this)); } else { // other methods // Ensures that target class is assignable to method class. if (opcode == Bytecodes::_invokespecial) { diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/classfile/verifier.hpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/classfile/verifier.hpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/classfile/verifier.hpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/classfile/verifier.hpp 2015-01-20 02:20:42.000000000 +0000 @@ -30,6 +30,7 @@ #include "oops/klass.hpp" #include "oops/methodOop.hpp" #include "runtime/handles.hpp" +#include "utilities/growableArray.hpp" #include "utilities/exceptions.hpp" // The verifier class @@ -97,9 +98,6 @@ size_t _message_buffer_len; GrowableArray* _symbols; // keep a list of symbols created - // Used to detect illegal jumps over calls to super() nd this() in ctors. - int32_t _furthest_jump; - void verify_method(methodHandle method, TRAPS); char* generate_code_data(methodHandle m, u4 code_length, TRAPS); void verify_exception_handler_table(u4 code_length, char* code_data, int& min, int& max, TRAPS); @@ -141,13 +139,24 @@ void verify_invoke_init( RawBytecodeStream* bcs, VerificationType ref_class_type, - StackMapFrame* current_frame, u4 code_length, bool* this_uninit, - constantPoolHandle cp, TRAPS); + StackMapFrame* current_frame, u4 code_length, bool in_try_block, + bool* this_uninit, constantPoolHandle cp, StackMapTable* stackmap_table, + TRAPS); + + // Used by ends_in_athrow() to push all handlers that contain bci onto + // the handler_stack, if the handler is not already on the stack. + void push_handlers(typeArrayHandle exhandlers, + GrowableArray* handler_stack, + u4 bci); + + // Returns true if all paths starting with start_bc_offset end in athrow + // bytecode or loop. + bool ends_in_athrow(u4 start_bc_offset, TRAPS); void verify_invoke_instructions( RawBytecodeStream* bcs, u4 code_length, StackMapFrame* current_frame, - bool* this_uninit, VerificationType return_type, - constantPoolHandle cp, TRAPS); + bool in_try_block, bool* this_uninit, VerificationType return_type, + constantPoolHandle cp, StackMapTable* stackmap_table, TRAPS); VerificationType get_newarray_type(u2 index, u2 bci, TRAPS); void verify_anewarray( @@ -236,18 +245,6 @@ static bool _verify_verbose; // for debugging - // Keep track of the furthest branch done in a method to make sure that - // there are no branches over calls to super() or this() from inside of - // a constructor. - int32_t furthest_jump() { return _furthest_jump; } - - void set_furthest_jump(int32_t target) { - _furthest_jump = target; - } - - void update_furthest_jump(int32_t target) { - if (target > _furthest_jump) _furthest_jump = target; - } }; inline int ClassVerifier::change_sig_to_verificationType( diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/classfile/vmSymbols.hpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/classfile/vmSymbols.hpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/classfile/vmSymbols.hpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/classfile/vmSymbols.hpp 2015-01-20 02:20:42.000000000 +0000 @@ -80,6 +80,7 @@ template(java_lang_ref_WeakReference, "java/lang/ref/WeakReference") \ template(java_lang_ref_FinalReference, "java/lang/ref/FinalReference") \ template(java_lang_ref_PhantomReference, "java/lang/ref/PhantomReference") \ + template(sun_misc_Cleaner, "sun/misc/Cleaner") \ template(java_lang_ref_Finalizer, "java/lang/ref/Finalizer") \ template(java_lang_reflect_AccessibleObject, "java/lang/reflect/AccessibleObject") \ template(java_lang_reflect_Method, "java/lang/reflect/Method") \ diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -748,7 +748,7 @@ // Support for parallelizing survivor space rescan if (CMSParallelRemarkEnabled && CMSParallelSurvivorRemarkEnabled) { const size_t max_plab_samples = - ((DefNewGeneration*)_young_gen)->max_survivor_size()/MinTLABSize; + ((DefNewGeneration*)_young_gen)->max_survivor_size() / plab_sample_minimum_size(); _survivor_plab_array = NEW_C_HEAP_ARRAY(ChunkArray, ParallelGCThreads); _survivor_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, 2*max_plab_samples); @@ -823,6 +823,12 @@ #endif } +size_t CMSCollector::plab_sample_minimum_size() { + // The default value of MinTLABSize is 2k, but there is + // no way to get the default value if the flag has been overridden. + return MAX2(ThreadLocalAllocBuffer::min_size() * HeapWordSize, 2 * K); +} + const char* ConcurrentMarkSweepGeneration::name() const { return "concurrent mark-sweep generation"; } diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp 2015-01-20 02:20:42.000000000 +0000 @@ -743,6 +743,10 @@ size_t* _cursor; ChunkArray* _survivor_plab_array; + // A bounded minimum size of PLABs, should not return too small values since + // this will affect the size of the data structures used for parallel young gen rescan + size_t plab_sample_minimum_size(); + // Support for marking stack overflow handling bool take_from_overflow_list(size_t num, CMSMarkStack* to_stack); bool par_take_from_overflow_list(size_t num, diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/gc_implementation/parNew/parGCAllocBuffer.hpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/gc_implementation/parNew/parGCAllocBuffer.hpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/gc_implementation/parNew/parGCAllocBuffer.hpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/gc_implementation/parNew/parGCAllocBuffer.hpp 2015-01-20 02:20:42.000000000 +0000 @@ -58,7 +58,8 @@ ParGCAllocBuffer(size_t word_sz); static const size_t min_size() { - return ThreadLocalAllocBuffer::min_size(); + // Make sure that we return something that is larger than AlignmentReserve + return align_object_size(MAX2(MinTLABSize / HeapWordSize, (uintx)oopDesc::header_size())) + AlignmentReserve; } static const size_t max_size() { diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/memory/referenceProcessor.cpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/memory/referenceProcessor.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/memory/referenceProcessor.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/memory/referenceProcessor.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -116,6 +116,7 @@ _discoveredWeakRefs = &_discoveredSoftRefs[_max_num_q]; _discoveredFinalRefs = &_discoveredWeakRefs[_max_num_q]; _discoveredPhantomRefs = &_discoveredFinalRefs[_max_num_q]; + _discoveredCleanerRefs = &_discoveredPhantomRefs[_max_num_q]; // Initialize all entries to NULL for (uint i = 0; i < _max_num_q * number_of_subclasses_of_ref(); i++) { @@ -229,6 +230,11 @@ TraceTime tt("PhantomReference", trace_time, false, gclog_or_tty); process_discovered_reflist(_discoveredPhantomRefs, NULL, false, is_alive, keep_alive, complete_gc, task_executor); + // Process cleaners, but include them in phantom statistics. We expect + // Cleaner references to be temporary, and don't want to deal with + // possible incompatibilities arising from making it more visible. + process_discovered_reflist(_discoveredCleanerRefs, NULL, false, + is_alive, keep_alive, complete_gc, task_executor); } // Weak global JNI references. It would make more sense (semantically) to @@ -876,6 +882,7 @@ balance_queues(_discoveredWeakRefs); balance_queues(_discoveredFinalRefs); balance_queues(_discoveredPhantomRefs); + balance_queues(_discoveredCleanerRefs); } void @@ -1034,6 +1041,9 @@ case REF_PHANTOM: list = &_discoveredPhantomRefs[id]; break; + case REF_CLEANER: + list = &_discoveredCleanerRefs[id]; + break; case REF_NONE: // we should not reach here if we are an instanceRefKlass default: @@ -1328,6 +1338,17 @@ preclean_discovered_reflist(_discoveredPhantomRefs[i], is_alive, keep_alive, complete_gc, yield); } + + // Cleaner references. Included in timing for phantom references. We + // expect Cleaner references to be temporary, and don't want to deal with + // possible incompatibilities arising from making it more visible. + for (uint i = 0; i < _max_num_q; i++) { + if (yield->should_return()) { + return; + } + preclean_discovered_reflist(_discoveredCleanerRefs[i], is_alive, + keep_alive, complete_gc, yield); + } } } @@ -1396,6 +1417,7 @@ case 1: return "WeakRef"; case 2: return "FinalRef"; case 3: return "PhantomRef"; + case 4: return "CleanerRef"; } ShouldNotReachHere(); return NULL; diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/memory/referenceProcessor.hpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/memory/referenceProcessor.hpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/memory/referenceProcessor.hpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/memory/referenceProcessor.hpp 2015-01-20 02:20:42.000000000 +0000 @@ -264,9 +264,10 @@ DiscoveredList* _discoveredWeakRefs; DiscoveredList* _discoveredFinalRefs; DiscoveredList* _discoveredPhantomRefs; + DiscoveredList* _discoveredCleanerRefs; public: - static int number_of_subclasses_of_ref() { return (REF_PHANTOM - REF_OTHER); } + static int number_of_subclasses_of_ref() { return (REF_CLEANER - REF_OTHER); } uint num_q() { return _num_q; } uint max_num_q() { return _max_num_q; } diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -240,22 +240,19 @@ } size_t ThreadLocalAllocBuffer::initial_desired_size() { - size_t init_sz; + size_t init_sz = 0; if (TLABSize > 0) { - init_sz = MIN2(TLABSize / HeapWordSize, max_size()); - } else if (global_stats() == NULL) { - // Startup issue - main thread initialized before heap initialized. - init_sz = min_size(); - } else { + init_sz = TLABSize / HeapWordSize; + } else if (global_stats() != NULL) { // Initial size is a function of the average number of allocating threads. unsigned nof_threads = global_stats()->allocating_threads_avg(); init_sz = (Universe::heap()->tlab_capacity(myThread()) / HeapWordSize) / (nof_threads * target_refills()); init_sz = align_object_size(init_sz); - init_sz = MIN2(MAX2(init_sz, min_size()), max_size()); } + init_sz = MIN2(MAX2(init_sz, min_size()), max_size()); return init_sz; } diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp 2015-01-20 02:20:42.000000000 +0000 @@ -103,7 +103,7 @@ // do nothing. tlabs must be inited by initialize() calls } - static const size_t min_size() { return align_object_size(MinTLABSize / HeapWordSize); } + static const size_t min_size() { return align_object_size(MinTLABSize / HeapWordSize) + alignment_reserve(); } static const size_t max_size(); HeapWord* start() const { return _start; } diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/opto/graphKit.cpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/opto/graphKit.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/opto/graphKit.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/opto/graphKit.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -1108,6 +1108,17 @@ } return _gvn.transform( new (C, 2) ConvI2LNode(offset)); } + +Node* GraphKit::ConvI2UL(Node* offset) { + juint offset_con = (juint) find_int_con(offset, Type::OffsetBot); + if (offset_con != (juint) Type::OffsetBot) { + return longcon((julong) offset_con); + } + Node* conv = _gvn.transform( new (C) ConvI2LNode(offset)); + Node* mask = _gvn.transform( ConLNode::make(C, (julong) max_juint) ); + return _gvn.transform( new (C) AndLNode(conv, mask) ); +} + Node* GraphKit::ConvL2I(Node* offset) { // short-circuit a common case jlong offset_con = find_long_con(offset, (jlong)Type::OffsetBot); diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/opto/graphKit.hpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/opto/graphKit.hpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/opto/graphKit.hpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/opto/graphKit.hpp 2015-01-20 02:20:42.000000000 +0000 @@ -331,6 +331,7 @@ // Convert between int and long, and size_t. // (See macros ConvI2X, etc., in type.hpp for ConvI2X, etc.) Node* ConvI2L(Node* offset); + Node* ConvI2UL(Node* offset); Node* ConvL2I(Node* offset); // Find out the klass of an object. Node* load_object_klass(Node* object); diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/opto/library_call.cpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/opto/library_call.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/opto/library_call.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/opto/library_call.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -2447,7 +2447,7 @@ case T_ADDRESS: // Cast to an int type. p = _gvn.transform( new (C, 2) CastP2XNode(NULL,p) ); - p = ConvX2L(p); + p = ConvX2UL(p); push_pair(p); break; case T_DOUBLE: diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/opto/stringopts.cpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/opto/stringopts.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/opto/stringopts.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/opto/stringopts.cpp 2015-01-20 02:18:15.000000000 +0000 @@ -929,8 +929,8 @@ } Node* PhaseStringOpts::fetch_static_field(GraphKit& kit, ciField* field) { - const TypeKlassPtr* klass_type = TypeKlassPtr::make(field->holder()); - Node* klass_node = __ makecon(klass_type); + const TypeInstPtr* mirror_type = TypeInstPtr::make(field->holder()->java_mirror()); + Node* klass_node = __ makecon(mirror_type); BasicType bt = field->layout_type(); ciType* field_klass = field->type(); @@ -945,6 +945,7 @@ // and may yield a vacuous result if the field is of interface type. type = TypeOopPtr::make_from_constant(con, true)->isa_oopptr(); assert(type != NULL, "field singleton type must be consistent"); + return __ makecon(type); } else { type = TypeOopPtr::make_from_klass(field_klass->as_klass()); } @@ -954,7 +955,7 @@ return kit.make_load(NULL, kit.basic_plus_adr(klass_node, field->offset_in_bytes()), type, T_OBJECT, - C->get_alias_index(klass_type->add_offset(field->offset_in_bytes()))); + C->get_alias_index(mirror_type->add_offset(field->offset_in_bytes()))); } Node* PhaseStringOpts::int_stringSize(GraphKit& kit, Node* arg) { diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/opto/type.hpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/opto/type.hpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/opto/type.hpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/opto/type.hpp 2015-01-20 02:20:42.000000000 +0000 @@ -1251,6 +1251,7 @@ #define ConvL2X(x) (x) #define ConvX2I(x) ConvL2I(x) #define ConvX2L(x) (x) +#define ConvX2UL(x) (x) #else @@ -1295,6 +1296,7 @@ #define ConvL2X(x) ConvL2I(x) #define ConvX2I(x) (x) #define ConvX2L(x) ConvI2L(x) +#define ConvX2UL(x) ConvI2UL(x) #endif diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/prims/jni.cpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/prims/jni.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/prims/jni.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/prims/jni.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -5043,6 +5043,7 @@ #include "gc_interface/collectedHeap.hpp" #include "utilities/quickSort.hpp" +#include "utilities/ostream.hpp" #define run_unit_test(unit_test_function_call) \ tty->print_cr("Running test: " #unit_test_function_call); \ @@ -5055,6 +5056,7 @@ run_unit_test(CollectedHeap::test_is_in()); run_unit_test(QuickSort::test_quick_sort()); run_unit_test(AltHashing::test_alt_hash()); + run_unit_test(test_loggc_filename()); tty->print_cr("All internal VM tests passed"); } } diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/runtime/vmStructs.cpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/runtime/vmStructs.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/runtime/vmStructs.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/runtime/vmStructs.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -695,6 +695,7 @@ static_field(SystemDictionary, WK_KLASS(WeakReference_klass), klassOop) \ static_field(SystemDictionary, WK_KLASS(FinalReference_klass), klassOop) \ static_field(SystemDictionary, WK_KLASS(PhantomReference_klass), klassOop) \ + static_field(SystemDictionary, WK_KLASS(Cleaner_klass), klassOop) \ static_field(SystemDictionary, WK_KLASS(Finalizer_klass), klassOop) \ static_field(SystemDictionary, WK_KLASS(Thread_klass), klassOop) \ static_field(SystemDictionary, WK_KLASS(ThreadGroup_klass), klassOop) \ diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/utilities/defaultStream.hpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/utilities/defaultStream.hpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/utilities/defaultStream.hpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/utilities/defaultStream.hpp 2015-01-20 02:20:42.000000000 +0000 @@ -41,6 +41,8 @@ void init(); void init_log(); + fileStream* open_file(const char* log_name); + void start_log(); void finish_log(); void finish_log_on_error(char *buf, int buflen); public: diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/utilities/globalDefinitions.hpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/utilities/globalDefinitions.hpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/utilities/globalDefinitions.hpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/utilities/globalDefinitions.hpp 2015-01-20 02:20:42.000000000 +0000 @@ -709,7 +709,8 @@ REF_SOFT, // Subclass of java/lang/ref/SoftReference REF_WEAK, // Subclass of java/lang/ref/WeakReference REF_FINAL, // Subclass of java/lang/ref/FinalReference - REF_PHANTOM // Subclass of java/lang/ref/PhantomReference + REF_PHANTOM, // Subclass of java/lang/ref/PhantomReference + REF_CLEANER // Subclass of sun/misc/Cleaner }; diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/utilities/ostream.cpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/utilities/ostream.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/utilities/ostream.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/utilities/ostream.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -523,6 +523,11 @@ buffer_length += strlen(pid); } + // File name is too long. + if (buffer_length > JVM_MAXPATHLEN) { + return NULL; + } + // Create big enough buffer. char *buf = NEW_C_HEAP_ARRAY(char, buffer_length); @@ -545,87 +550,54 @@ return buf; } -void defaultStream::init_log() { - // %%% Need a MutexLocker? - const char* log_name = LogFile != NULL ? LogFile : "hotspot.log"; +fileStream* defaultStream::open_file(const char* log_name){ const char* try_name = make_log_name(log_name, NULL); + if (try_name == NULL) { + warning("Cannot open file %s: file name is too long.\n", log_name); + return NULL; + } + fileStream* file = new(ResourceObj::C_HEAP) fileStream(try_name); - if (!file->is_open()) { - // Try again to open the file. - char warnbuf[O_BUFLEN*2]; - jio_snprintf(warnbuf, sizeof(warnbuf), - "Warning: Cannot open log file: %s\n", try_name); - // Note: This feature is for maintainer use only. No need for L10N. - jio_print(warnbuf); - FREE_C_HEAP_ARRAY(char, try_name); - try_name = make_log_name("hs_pid%p.log", os::get_temp_directory()); - jio_snprintf(warnbuf, sizeof(warnbuf), - "Warning: Forcing option -XX:LogFile=%s\n", try_name); - jio_print(warnbuf); - delete file; - file = new(ResourceObj::C_HEAP) fileStream(try_name); - FREE_C_HEAP_ARRAY(char, try_name); + FREE_C_HEAP_ARRAY(char, try_name); + if (file->is_open()) { + return file; + } + + // Try again to open the file. + delete file; + char warnbuf[O_BUFLEN*2]; + jio_snprintf(warnbuf, sizeof(warnbuf), "Warning: Cannot open log file: %s\n", try_name); + // Note: This feature is for maintainer use only. No need for L10N. + jio_print(warnbuf); + try_name = make_log_name("hs_pid%p.log", os::get_temp_directory()); + if (try_name == NULL) { + warning("Cannot open file %s: file name is too long for directory %s.\n", "hs_pid", os::get_temp_directory()); + return NULL; } + + jio_snprintf(warnbuf, sizeof(warnbuf), "Warning: Forcing option -XX:LogFile=%s\n", try_name); + jio_print(warnbuf); + + file = new(ResourceObj::C_HEAP) fileStream(try_name); + FREE_C_HEAP_ARRAY(char, try_name); if (file->is_open()) { + return file; + } + + delete file; + return NULL; +} + +void defaultStream::init_log() { + // %%% Need a MutexLocker? + const char* log_name = LogFile != NULL ? LogFile : "hotspot.log"; + fileStream* file = open_file(log_name); + + if (file != NULL) { _log_file = file; - xmlStream* xs = new(ResourceObj::C_HEAP) xmlStream(file); - _outer_xmlStream = xs; - if (this == tty) xtty = xs; - // Write XML header. - xs->print_cr(""); - // (For now, don't bother to issue a DTD for this private format.) - jlong time_ms = os::javaTimeMillis() - tty->time_stamp().milliseconds(); - // %%% Should be: jlong time_ms = os::start_time_milliseconds(), if - // we ever get round to introduce that method on the os class - xs->head("hotspot_log version='%d %d'" - " process='%d' time_ms='"INT64_FORMAT"'", - LOG_MAJOR_VERSION, LOG_MINOR_VERSION, - os::current_process_id(), time_ms); - // Write VM version header immediately. - xs->head("vm_version"); - xs->head("name"); xs->text("%s", VM_Version::vm_name()); xs->cr(); - xs->tail("name"); - xs->head("release"); xs->text("%s", VM_Version::vm_release()); xs->cr(); - xs->tail("release"); - xs->head("info"); xs->text("%s", VM_Version::internal_vm_info_string()); xs->cr(); - xs->tail("info"); - xs->tail("vm_version"); - // Record information about the command-line invocation. - xs->head("vm_arguments"); // Cf. Arguments::print_on() - if (Arguments::num_jvm_flags() > 0) { - xs->head("flags"); - Arguments::print_jvm_flags_on(xs->text()); - xs->tail("flags"); - } - if (Arguments::num_jvm_args() > 0) { - xs->head("args"); - Arguments::print_jvm_args_on(xs->text()); - xs->tail("args"); - } - if (Arguments::java_command() != NULL) { - xs->head("command"); xs->text()->print_cr("%s", Arguments::java_command()); - xs->tail("command"); - } - if (Arguments::sun_java_launcher() != NULL) { - xs->head("launcher"); xs->text()->print_cr("%s", Arguments::sun_java_launcher()); - xs->tail("launcher"); - } - if (Arguments::system_properties() != NULL) { - xs->head("properties"); - // Print it as a java-style property list. - // System properties don't generally contain newlines, so don't bother with unparsing. - for (SystemProperty* p = Arguments::system_properties(); p != NULL; p = p->next()) { - xs->text()->print_cr("%s=%s", p->key(), p->value()); - } - xs->tail("properties"); - } - xs->tail("vm_arguments"); - // tty output per se is grouped under the ... element. - xs->head("tty"); - // All further non-markup text gets copied to the tty: - xs->_text = this; // requires friend declaration! + _outer_xmlStream = new(ResourceObj::C_HEAP) xmlStream(file); + start_log(); } else { - delete(file); // and leave xtty as NULL LogVMOutput = false; DisplayVMOutput = true; @@ -633,6 +605,64 @@ } } +void defaultStream::start_log() { + xmlStream* xs = _outer_xmlStream; + if (this == tty) xtty = xs; + // Write XML header. + xs->print_cr(""); + // (For now, don't bother to issue a DTD for this private format.) + jlong time_ms = os::javaTimeMillis() - tty->time_stamp().milliseconds(); + // %%% Should be: jlong time_ms = os::start_time_milliseconds(), if + // we ever get round to introduce that method on the os class + xs->head("hotspot_log version='%d %d'" + " process='%d' time_ms='"INT64_FORMAT"'", + LOG_MAJOR_VERSION, LOG_MINOR_VERSION, + os::current_process_id(), time_ms); + // Write VM version header immediately. + xs->head("vm_version"); + xs->head("name"); xs->text("%s", VM_Version::vm_name()); xs->cr(); + xs->tail("name"); + xs->head("release"); xs->text("%s", VM_Version::vm_release()); xs->cr(); + xs->tail("release"); + xs->head("info"); xs->text("%s", VM_Version::internal_vm_info_string()); xs->cr(); + xs->tail("info"); + xs->tail("vm_version"); + // Record information about the command-line invocation. + xs->head("vm_arguments"); // Cf. Arguments::print_on() + if (Arguments::num_jvm_flags() > 0) { + xs->head("flags"); + Arguments::print_jvm_flags_on(xs->text()); + xs->tail("flags"); + } + if (Arguments::num_jvm_args() > 0) { + xs->head("args"); + Arguments::print_jvm_args_on(xs->text()); + xs->tail("args"); + } + if (Arguments::java_command() != NULL) { + xs->head("command"); xs->text()->print_cr("%s", Arguments::java_command()); + xs->tail("command"); + } + if (Arguments::sun_java_launcher() != NULL) { + xs->head("launcher"); xs->text()->print_cr("%s", Arguments::sun_java_launcher()); + xs->tail("launcher"); + } + if (Arguments::system_properties() != NULL) { + xs->head("properties"); + // Print it as a java-style property list. + // System properties don't generally contain newlines, so don't bother with unparsing. + for (SystemProperty* p = Arguments::system_properties(); p != NULL; p = p->next()) { + xs->text()->print_cr("%s=%s", p->key(), p->value()); + } + xs->tail("properties"); + } + xs->tail("vm_arguments"); + // tty output per se is grouped under the ... element. + xs->head("tty"); + // All further non-markup text gets copied to the tty: + xs->_text = this; // requires friend declaration! +} + // finish_log() is called during normal VM shutdown. finish_log_on_error() is // called by ostream_abort() after a fatal error. // @@ -994,6 +1024,50 @@ } #ifndef PRODUCT +void test_loggc_filename() { + const char* o_result; + + { + // longest filename + char longest_name[JVM_MAXPATHLEN]; + memset(longest_name, 'a', sizeof(longest_name)); + longest_name[JVM_MAXPATHLEN - 1] = '\0'; + o_result = make_log_name((const char*)&longest_name, NULL); + assert(strcmp(longest_name, o_result) == 0, err_msg("longest name does not match. expected '%s' but got '%s'", longest_name, o_result)); + FREE_C_HEAP_ARRAY(char, o_result); + } + + { + // too long file name + char too_long_name[JVM_MAXPATHLEN + 100]; + int too_long_length = sizeof(too_long_name); + memset(too_long_name, 'a', too_long_length); + too_long_name[too_long_length - 1] = '\0'; + o_result = make_log_name((const char*)&too_long_name, NULL); + assert(o_result == NULL, err_msg("Too long file name should return NULL, but got '%s'", o_result)); + } + + { + // too long with pid + char longest_name[JVM_MAXPATHLEN]; + memset(longest_name, 'a', JVM_MAXPATHLEN); + longest_name[JVM_MAXPATHLEN - 3] = '%'; + longest_name[JVM_MAXPATHLEN - 2] = 'p'; + longest_name[JVM_MAXPATHLEN - 1] = '\0'; + o_result = make_log_name((const char*)&longest_name, NULL); + assert(o_result == NULL, err_msg("Too long file name after %%p pid expansion should return NULL, but got '%s'", o_result)); + } + + { + // too long with pid (star) + char longest_name[JVM_MAXPATHLEN]; + memset(longest_name, 'a', JVM_MAXPATHLEN); + longest_name[JVM_MAXPATHLEN - 2] = '*'; + longest_name[JVM_MAXPATHLEN - 1] = '\0'; + o_result = make_log_name((const char*)&longest_name, NULL); + assert(o_result == NULL, err_msg("Too long file name after star (pid) expansion should return NULL, but got '%s'", o_result)); + } +} #if defined(SOLARIS) || defined(LINUX) || defined(_ALLBSD_SOURCE) #include diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/utilities/ostream.hpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/utilities/ostream.hpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/utilities/ostream.hpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/utilities/ostream.hpp 2015-01-20 02:20:42.000000000 +0000 @@ -226,6 +226,10 @@ virtual void rotate_log(); }; +#ifndef PRODUCT +void test_loggc_filename(); +#endif + void ostream_init(); void ostream_init_log(); void ostream_exit(); diff -Nru openjdk-6-6b33-1.13.5/hotspot/src/share/vm/utilities/vmError.cpp openjdk-6-6b34-1.13.6/hotspot/src/share/vm/utilities/vmError.cpp --- openjdk-6-6b33-1.13.5/hotspot/src/share/vm/utilities/vmError.cpp 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/src/share/vm/utilities/vmError.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -22,6 +22,7 @@ * */ +#include #include "precompiled.hpp" #include "compiler/compileBroker.hpp" #include "gc_interface/collectedHeap.hpp" @@ -901,7 +902,7 @@ bool copy_ok = Arguments::copy_expand_pid(ErrorFile, strlen(ErrorFile), buffer, sizeof(buffer)); if (copy_ok) { - fd = open(buffer, O_RDWR | O_CREAT | O_TRUNC, 0666); + fd = open(buffer, O_RDWR | O_CREAT | O_EXCL, 0666); } } @@ -912,7 +913,7 @@ // so use the default name in the current directory jio_snprintf(&buffer[len], sizeof(buffer)-len, "%shs_err_pid%u.log", os::file_separator(), os::current_process_id()); - fd = open(buffer, O_RDWR | O_CREAT | O_TRUNC, 0666); + fd = open(buffer, O_RDWR | O_CREAT | O_EXCL, 0666); } if (fd == -1) { @@ -921,7 +922,7 @@ if (tmpdir != NULL && tmpdir[0] != '\0') { jio_snprintf(buffer, sizeof(buffer), "%s%shs_err_pid%u.log", tmpdir, os::file_separator(), os::current_process_id()); - fd = open(buffer, O_RDWR | O_CREAT | O_TRUNC, 0666); + fd = open(buffer, O_RDWR | O_CREAT | O_EXCL, 0666); } } diff -Nru openjdk-6-6b33-1.13.5/hotspot/test/compiler/6653795/UnsafeGetAddressTest.java openjdk-6-6b34-1.13.6/hotspot/test/compiler/6653795/UnsafeGetAddressTest.java --- openjdk-6-6b33-1.13.5/hotspot/test/compiler/6653795/UnsafeGetAddressTest.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/test/compiler/6653795/UnsafeGetAddressTest.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6653795 + * @summary C2 intrinsic for Unsafe.getAddress performs pointer sign extension on 32-bit systems + * @run main UnsafeGetAddressTest + * + */ + +import sun.misc.Unsafe; +import java.lang.reflect.*; + +public class UnsafeGetAddressTest { + private static Unsafe unsafe; + + public static void main(String[] args) throws Exception { + Class c = UnsafeGetAddressTest.class.getClassLoader().loadClass("sun.misc.Unsafe"); + Field f = c.getDeclaredField("theUnsafe"); + f.setAccessible(true); + unsafe = (Unsafe)f.get(c); + + long address = unsafe.allocateMemory(unsafe.addressSize()); + unsafe.putAddress(address, 0x0000000080000000L); + // from sun.misc.Unsafe.getAddress' documentation: + // "If the native pointer is less than 64 bits wide, it is + // extended as an unsigned number to a Java long." + result = unsafe.getAddress(address); + System.out.printf("1: was 0x%x, expected 0x%x\n", result, + 0x0000000080000000L); + for (int i = 0; i < 1000000; i++) { + result = unsafe.getAddress(address); + } + + // The code has got compiled, check the result now + System.out.printf("2: was 0x%x, expected 0x%x\n", result, + 0x0000000080000000L); + if (result != 0x0000000080000000L) { + System.out.println("Test Failed"); + System.exit(97); + } else { + System.out.println("Test Passed"); + } + } + static volatile long result; +} + diff -Nru openjdk-6-6b33-1.13.5/hotspot/test/compiler/7141637/SpreadNullArg.java openjdk-6-6b34-1.13.6/hotspot/test/compiler/7141637/SpreadNullArg.java --- openjdk-6-6b33-1.13.5/hotspot/test/compiler/7141637/SpreadNullArg.java 2014-10-08 15:34:19.000000000 +0000 +++ openjdk-6-6b34-1.13.6/hotspot/test/compiler/7141637/SpreadNullArg.java 2015-01-20 02:20:42.000000000 +0000 @@ -46,13 +46,17 @@ mh_spread_target = MethodHandles.lookup().findStatic(SpreadNullArg.class, "target_spread_arg", mt_ref_arg); result = (int) mh_spreadInvoker.invokeExact(mh_spread_target, (Object[]) null); - } catch(NullPointerException e) { - // Expected exception - do nothing! - } catch(Throwable e) { + throw new Error("Expected IllegalArgumentException was not thrown"); + } catch (IllegalArgumentException e) { + System.out.println("Expected exception : " + e); + } catch (Throwable e) { throw new Error(e); } - if (result != 42) throw new Error("Expected NullPointerException was not thrown"); + if (result != 42) { + throw new Error("result [" + result + + "] != 42 : Expected IllegalArgumentException was not thrown?"); + } } public static int target_spread_arg(Integer i1) { diff -Nru openjdk-6-6b33-1.13.5/INSTALL openjdk-6-6b34-1.13.6/INSTALL --- openjdk-6-6b33-1.13.5/INSTALL 2014-10-08 18:39:25.000000000 +0000 +++ openjdk-6-6b34-1.13.6/INSTALL 2015-01-20 09:12:42.000000000 +0000 @@ -36,6 +36,7 @@ pulseaudio-libs-devel >= 0.9.11 (for --enable-pulse-java) LLVM 2.5 or later (for --enable-shark) systemtap-sdl-devel >= 0.9.5 (for --enable-systemtap, Java method tracing requires systemtap >= 0.9.9) +lcms2-devel (for --enable-lcms2 and --enable-system-lcms) See ./configure --help if you need to override the defaults. diff -Nru openjdk-6-6b33-1.13.5/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/StringLengthCall.java openjdk-6-6b34-1.13.6/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/StringLengthCall.java --- openjdk-6-6b33-1.13.5/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/StringLengthCall.java 2014-10-08 15:33:52.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/StringLengthCall.java 2015-01-20 06:17:47.000000000 +0000 @@ -26,7 +26,7 @@ import java.util.Vector; import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen; -import com.sun.org.apache.bcel.internal.generic.INVOKEVIRTUAL; +import com.sun.org.apache.bcel.internal.generic.INVOKESTATIC; import com.sun.org.apache.bcel.internal.generic.InstructionList; import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator; import com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator; @@ -51,7 +51,8 @@ il.append(methodGen.loadContextNode()); Type.Node.translateTo(classGen, methodGen, Type.String); } - il.append(new INVOKEVIRTUAL(cpg.addMethodref(STRING_CLASS, - "length", "()I"))); + il.append(new INVOKESTATIC(cpg.addMethodref(BASIS_LIBRARY_CLASS, + "getStringLength", + "(Ljava/lang/String;)I"))); } } diff -Nru openjdk-6-6b33-1.13.5/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java openjdk-6-6b34-1.13.6/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java --- openjdk-6-6b33-1.13.5/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java 2014-10-08 15:33:51.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java 2015-01-20 06:17:47.000000000 +0000 @@ -1595,5 +1595,14 @@ } + /** + * Utility method to calculate string-length as a number of code points, + * to avoid possible errors with string that contains + * complementary characters + */ + public static int getStringLength(String str) { + return str.codePointCount(0,str.length()); + } + //-- End utility functions } diff -Nru openjdk-6-6b33-1.13.5/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java openjdk-6-6b34-1.13.6/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java --- openjdk-6-6b33-1.13.5/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java 2014-10-08 15:33:52.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java 2015-01-20 06:17:47.000000000 +0000 @@ -61,14 +61,13 @@ package com.sun.org.apache.xerces.internal.impl; -import java.io.IOException; - import com.sun.org.apache.xerces.internal.impl.msg.XMLMessageFormatter; -import com.sun.org.apache.xerces.internal.util.XMLChar; import com.sun.org.apache.xerces.internal.util.XML11Char; +import com.sun.org.apache.xerces.internal.util.XMLChar; import com.sun.org.apache.xerces.internal.util.XMLStringBuffer; import com.sun.org.apache.xerces.internal.xni.QName; import com.sun.org.apache.xerces.internal.xni.XMLString; +import java.io.IOException; /** * Implements the entity scanner methods in @@ -78,6 +77,7 @@ * * @author Michael Glavassevich, IBM * @author Neil Graham, IBM + * @version $Id: XML11EntityScanner.java,v 1.5 2010-11-01 04:39:40 joehw Exp $ */ public class XML11EntityScanner @@ -108,7 +108,7 @@ // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - load(0, true); + load(0, true, true); } // peek at character @@ -136,7 +136,7 @@ // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - load(0, true); + load(0, true, true); } // scan character @@ -148,7 +148,7 @@ fCurrentEntity.columnNumber = 1; if (fCurrentEntity.position == fCurrentEntity.count) { fCurrentEntity.ch[0] = (char)c; - load(1, false); + load(1, false, true); } if (c == '\r' && external) { int cc = fCurrentEntity.ch[fCurrentEntity.position++]; @@ -183,7 +183,7 @@ public String scanNmtoken() throws IOException { // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - load(0, true); + load(0, true, true); } // scan nmtoken @@ -194,6 +194,7 @@ if (XML11Char.isXML11Name(ch)) { if (++fCurrentEntity.position == fCurrentEntity.count) { int length = fCurrentEntity.position - offset; + invokeListeners(length); if (length == fCurrentEntity.ch.length) { // bad luck we have to resize our buffer char[] tmp = new char[fCurrentEntity.ch.length << 1]; @@ -206,7 +207,7 @@ fCurrentEntity.ch, 0, length); } offset = 0; - if (load(length, false)) { + if (load(length, false, false)) { break; } } @@ -214,6 +215,7 @@ else if (XML11Char.isXML11NameHighSurrogate(ch)) { if (++fCurrentEntity.position == fCurrentEntity.count) { int length = fCurrentEntity.position - offset; + invokeListeners(length); if (length == fCurrentEntity.ch.length) { // bad luck we have to resize our buffer char[] tmp = new char[fCurrentEntity.ch.length << 1]; @@ -226,7 +228,7 @@ fCurrentEntity.ch, 0, length); } offset = 0; - if (load(length, false)) { + if (load(length, false, false)) { --fCurrentEntity.startPosition; --fCurrentEntity.position; break; @@ -240,6 +242,7 @@ } if (++fCurrentEntity.position == fCurrentEntity.count) { int length = fCurrentEntity.position - offset; + invokeListeners(length); if (length == fCurrentEntity.ch.length) { // bad luck we have to resize our buffer char[] tmp = new char[fCurrentEntity.ch.length << 1]; @@ -252,7 +255,7 @@ fCurrentEntity.ch, 0, length); } offset = 0; - if (load(length, false)) { + if (load(length, false, false)) { break; } } @@ -294,7 +297,7 @@ public String scanName() throws IOException { // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - load(0, true); + load(0, true, true); } // scan name @@ -305,7 +308,7 @@ if (++fCurrentEntity.position == fCurrentEntity.count) { fCurrentEntity.ch[0] = ch; offset = 0; - if (load(1, false)) { + if (load(1, false, true)) { fCurrentEntity.columnNumber++; String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1); return symbol; @@ -316,7 +319,7 @@ if (++fCurrentEntity.position == fCurrentEntity.count) { fCurrentEntity.ch[0] = ch; offset = 0; - if (load(1, false)) { + if (load(1, false, true)) { --fCurrentEntity.position; --fCurrentEntity.startPosition; return null; @@ -332,7 +335,7 @@ fCurrentEntity.ch[0] = ch; fCurrentEntity.ch[1] = ch2; offset = 0; - if (load(2, false)) { + if (load(2, false, true)) { fCurrentEntity.columnNumber += 2; String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 2); return symbol; @@ -348,6 +351,7 @@ if (XML11Char.isXML11Name(ch)) { if (++fCurrentEntity.position == fCurrentEntity.count) { int length = fCurrentEntity.position - offset; + invokeListeners(length); if (length == fCurrentEntity.ch.length) { // bad luck we have to resize our buffer char[] tmp = new char[fCurrentEntity.ch.length << 1]; @@ -360,7 +364,7 @@ fCurrentEntity.ch, 0, length); } offset = 0; - if (load(length, false)) { + if (load(length, false, false)) { break; } } @@ -368,6 +372,7 @@ else if (XML11Char.isXML11NameHighSurrogate(ch)) { if (++fCurrentEntity.position == fCurrentEntity.count) { int length = fCurrentEntity.position - offset; + invokeListeners(length); if (length == fCurrentEntity.ch.length) { // bad luck we have to resize our buffer char[] tmp = new char[fCurrentEntity.ch.length << 1]; @@ -380,7 +385,7 @@ fCurrentEntity.ch, 0, length); } offset = 0; - if (load(length, false)) { + if (load(length, false, false)) { --fCurrentEntity.position; --fCurrentEntity.startPosition; break; @@ -394,6 +399,7 @@ } if (++fCurrentEntity.position == fCurrentEntity.count) { int length = fCurrentEntity.position - offset; + invokeListeners(length); if (length == fCurrentEntity.ch.length) { // bad luck we have to resize our buffer char[] tmp = new char[fCurrentEntity.ch.length << 1]; @@ -406,7 +412,7 @@ fCurrentEntity.ch, 0, length); } offset = 0; - if (load(length, false)) { + if (load(length, false, false)) { break; } } @@ -449,7 +455,7 @@ // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - load(0, true); + load(0, true, true); } // scan name @@ -460,7 +466,7 @@ if (++fCurrentEntity.position == fCurrentEntity.count) { fCurrentEntity.ch[0] = ch; offset = 0; - if (load(1, false)) { + if (load(1, false, true)) { fCurrentEntity.columnNumber++; String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1); return symbol; @@ -471,7 +477,7 @@ if (++fCurrentEntity.position == fCurrentEntity.count) { fCurrentEntity.ch[0] = ch; offset = 0; - if (load(1, false)) { + if (load(1, false, true)) { --fCurrentEntity.position; --fCurrentEntity.startPosition; return null; @@ -487,7 +493,7 @@ fCurrentEntity.ch[0] = ch; fCurrentEntity.ch[1] = ch2; offset = 0; - if (load(2, false)) { + if (load(2, false, true)) { fCurrentEntity.columnNumber += 2; String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 2); return symbol; @@ -503,6 +509,7 @@ if (XML11Char.isXML11NCName(ch)) { if (++fCurrentEntity.position == fCurrentEntity.count) { int length = fCurrentEntity.position - offset; + invokeListeners(length); if (length == fCurrentEntity.ch.length) { // bad luck we have to resize our buffer char[] tmp = new char[fCurrentEntity.ch.length << 1]; @@ -515,7 +522,7 @@ fCurrentEntity.ch, 0, length); } offset = 0; - if (load(length, false)) { + if (load(length, false, false)) { break; } } @@ -523,6 +530,7 @@ else if (XML11Char.isXML11NameHighSurrogate(ch)) { if (++fCurrentEntity.position == fCurrentEntity.count) { int length = fCurrentEntity.position - offset; + invokeListeners(length); if (length == fCurrentEntity.ch.length) { // bad luck we have to resize our buffer char[] tmp = new char[fCurrentEntity.ch.length << 1]; @@ -535,7 +543,7 @@ fCurrentEntity.ch, 0, length); } offset = 0; - if (load(length, false)) { + if (load(length, false, false)) { --fCurrentEntity.startPosition; --fCurrentEntity.position; break; @@ -549,6 +557,7 @@ } if (++fCurrentEntity.position == fCurrentEntity.count) { int length = fCurrentEntity.position - offset; + invokeListeners(length); if (length == fCurrentEntity.ch.length) { // bad luck we have to resize our buffer char[] tmp = new char[fCurrentEntity.ch.length << 1]; @@ -561,7 +570,7 @@ fCurrentEntity.ch, 0, length); } offset = 0; - if (load(length, false)) { + if (load(length, false, false)) { break; } } @@ -610,7 +619,7 @@ // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - load(0, true); + load(0, true, true); } // scan qualified name @@ -621,7 +630,7 @@ if (++fCurrentEntity.position == fCurrentEntity.count) { fCurrentEntity.ch[0] = ch; offset = 0; - if (load(1, false)) { + if (load(1, false, true)) { fCurrentEntity.columnNumber++; String name = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1); qname.setValues(null, name, name, null); @@ -633,7 +642,7 @@ if (++fCurrentEntity.position == fCurrentEntity.count) { fCurrentEntity.ch[0] = ch; offset = 0; - if (load(1, false)) { + if (load(1, false, true)) { --fCurrentEntity.startPosition; --fCurrentEntity.position; return false; @@ -649,7 +658,7 @@ fCurrentEntity.ch[0] = ch; fCurrentEntity.ch[1] = ch2; offset = 0; - if (load(2, false)) { + if (load(2, false, true)) { fCurrentEntity.columnNumber += 2; String name = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 2); qname.setValues(null, name, name, null); @@ -674,6 +683,7 @@ } if (++fCurrentEntity.position == fCurrentEntity.count) { int length = fCurrentEntity.position - offset; + invokeListeners(length); if (length == fCurrentEntity.ch.length) { // bad luck we have to resize our buffer char[] tmp = new char[fCurrentEntity.ch.length << 1]; @@ -689,7 +699,7 @@ index = index - offset; } offset = 0; - if (load(length, false)) { + if (load(length, false, false)) { break; } } @@ -697,6 +707,7 @@ else if (XML11Char.isXML11NameHighSurrogate(ch)) { if (++fCurrentEntity.position == fCurrentEntity.count) { int length = fCurrentEntity.position - offset; + invokeListeners(length); if (length == fCurrentEntity.ch.length) { // bad luck we have to resize our buffer char[] tmp = new char[fCurrentEntity.ch.length << 1]; @@ -712,7 +723,7 @@ index = index - offset; } offset = 0; - if (load(length, false)) { + if (load(length, false, false)) { sawIncompleteSurrogatePair = true; --fCurrentEntity.startPosition; --fCurrentEntity.position; @@ -728,6 +739,7 @@ } if (++fCurrentEntity.position == fCurrentEntity.count) { int length = fCurrentEntity.position - offset; + invokeListeners(length); if (length == fCurrentEntity.ch.length) { // bad luck we have to resize our buffer char[] tmp = new char[fCurrentEntity.ch.length << 1]; @@ -743,7 +755,7 @@ index = index - offset; } offset = 0; - if (load(length, false)) { + if (load(length, false, false)) { break; } } @@ -820,11 +832,11 @@ // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - load(0, true); + load(0, true, true); } else if (fCurrentEntity.position == fCurrentEntity.count - 1) { fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1]; - load(1, false); + load(1, false, true); fCurrentEntity.position = 0; fCurrentEntity.startPosition = 0; } @@ -846,7 +858,7 @@ fCurrentEntity.baseCharOffset += (fCurrentEntity.position - fCurrentEntity.startPosition); fCurrentEntity.position = newlines; fCurrentEntity.startPosition = newlines; - if (load(newlines, false)) { + if (load(newlines, false, true)) { break; } } @@ -869,7 +881,7 @@ fCurrentEntity.baseCharOffset += (fCurrentEntity.position - fCurrentEntity.startPosition); fCurrentEntity.position = newlines; fCurrentEntity.startPosition = newlines; - if (load(newlines, false)) { + if (load(newlines, false, true)) { break; } } @@ -961,11 +973,11 @@ throws IOException { // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - load(0, true); + load(0, true, true); } else if (fCurrentEntity.position == fCurrentEntity.count - 1) { fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1]; - load(1, false); + load(1, false, true); fCurrentEntity.startPosition = 0; fCurrentEntity.position = 0; } @@ -987,7 +999,7 @@ fCurrentEntity.baseCharOffset += (fCurrentEntity.position - fCurrentEntity.startPosition); fCurrentEntity.position = newlines; fCurrentEntity.startPosition = newlines; - if (load(newlines, false)) { + if (load(newlines, false, true)) { break; } } @@ -1010,7 +1022,7 @@ fCurrentEntity.baseCharOffset += (fCurrentEntity.position - fCurrentEntity.startPosition); fCurrentEntity.position = newlines; fCurrentEntity.startPosition = newlines; - if (load(newlines, false)) { + if (load(newlines, false, true)) { break; } } @@ -1113,7 +1125,7 @@ do { // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - load(0, true); + load(0, true, false); } boolean bNextEntity = false; @@ -1127,7 +1139,7 @@ 0, fCurrentEntity.count - fCurrentEntity.position); - bNextEntity = load(fCurrentEntity.count - fCurrentEntity.position, false); + bNextEntity = load(fCurrentEntity.count - fCurrentEntity.position, false, false); fCurrentEntity.position = 0; fCurrentEntity.startPosition = 0; } @@ -1140,7 +1152,7 @@ fCurrentEntity.baseCharOffset += (fCurrentEntity.position - fCurrentEntity.startPosition); fCurrentEntity.position = fCurrentEntity.count; fCurrentEntity.startPosition = fCurrentEntity.count; - load(0,true); + load(0,true, false); return false; } @@ -1160,7 +1172,7 @@ fCurrentEntity.baseCharOffset += (fCurrentEntity.position - fCurrentEntity.startPosition); fCurrentEntity.position = newlines; fCurrentEntity.startPosition = newlines; - if (load(newlines, false)) { + if (load(newlines, false, true)) { break; } } @@ -1184,7 +1196,7 @@ fCurrentEntity.position = newlines; fCurrentEntity.startPosition = newlines; fCurrentEntity.count = newlines; - if (load(newlines, false)) { + if (load(newlines, false, true)) { break; } } @@ -1309,7 +1321,7 @@ // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - load(0, true); + load(0, true, true); } // skip character @@ -1335,7 +1347,7 @@ // handle newlines if (fCurrentEntity.position == fCurrentEntity.count) { fCurrentEntity.ch[0] = (char)cc; - load(1, false); + load(1, false, true); } int ccc = fCurrentEntity.ch[++fCurrentEntity.position]; if (ccc == '\n' || ccc == 0x85) { @@ -1369,7 +1381,7 @@ // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - load(0, true); + load(0, true, true); } @@ -1397,7 +1409,7 @@ fCurrentEntity.columnNumber = 1; if (fCurrentEntity.position == fCurrentEntity.count - 1) { fCurrentEntity.ch[0] = (char)c; - entityChanged = load(1, true); + entityChanged = load(1, true, true); if (!entityChanged) { // the load change the position to be 1, // need to restore it when entity not changed @@ -1424,7 +1436,7 @@ if (!entityChanged) fCurrentEntity.position++; if (fCurrentEntity.position == fCurrentEntity.count) { - load(0, true); + load(0, true, true); if(fCurrentEntity == null){ return true ; @@ -1445,7 +1457,7 @@ fCurrentEntity.columnNumber = 1; if (fCurrentEntity.position == fCurrentEntity.count - 1) { fCurrentEntity.ch[0] = (char)c; - entityChanged = load(1, true); + entityChanged = load(1, true, true); if (!entityChanged) { // the load change the position to be 1, // need to restore it when entity not changed @@ -1463,7 +1475,7 @@ if (!entityChanged) fCurrentEntity.position++; if (fCurrentEntity.position == fCurrentEntity.count) { - load(0, true); + load(0, true, true); if(fCurrentEntity == null){ return true ; @@ -1496,7 +1508,7 @@ // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - load(0, true); + load(0, true, true); } // skip string @@ -1508,10 +1520,11 @@ return false; } if (i < length - 1 && fCurrentEntity.position == fCurrentEntity.count) { + invokeListeners(0); System.arraycopy(fCurrentEntity.ch, fCurrentEntity.count - i - 1, fCurrentEntity.ch, 0, i + 1); // REVISIT: Can a string to be skipped cross an // entity boundary? -Ac - if (load(i + 1, false)) { + if (load(i + 1, false, false)) { fCurrentEntity.startPosition -= i + 1; fCurrentEntity.position -= i + 1; return false; diff -Nru openjdk-6-6b33-1.13.5/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java openjdk-6-6b34-1.13.6/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java --- openjdk-6-6b33-1.13.5/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java 2014-10-08 15:33:52.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java 2015-01-20 06:17:47.000000000 +0000 @@ -20,31 +20,25 @@ package com.sun.org.apache.xerces.internal.impl; -import com.sun.xml.internal.stream.Entity; -import com.sun.xml.internal.stream.XMLBufferListener; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; - -import java.util.Locale; -import java.util.Vector; import com.sun.org.apache.xerces.internal.impl.io.ASCIIReader; import com.sun.org.apache.xerces.internal.impl.io.UCSReader; import com.sun.org.apache.xerces.internal.impl.io.UTF8Reader; - - import com.sun.org.apache.xerces.internal.impl.msg.XMLMessageFormatter; import com.sun.org.apache.xerces.internal.util.EncodingMap; - import com.sun.org.apache.xerces.internal.util.SymbolTable; import com.sun.org.apache.xerces.internal.util.XMLChar; import com.sun.org.apache.xerces.internal.util.XMLStringBuffer; -import com.sun.org.apache.xerces.internal.xni.QName; -import com.sun.org.apache.xerces.internal.xni.XMLString; +import com.sun.org.apache.xerces.internal.xni.*; import com.sun.org.apache.xerces.internal.xni.parser.XMLComponentManager; import com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException; -import com.sun.org.apache.xerces.internal.xni.*; +import com.sun.xml.internal.stream.Entity; +import com.sun.xml.internal.stream.XMLBufferListener; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.Locale; +import java.util.Vector; /** * Implements the entity scanner methods. @@ -460,8 +454,7 @@ // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - invokeListeners(0); - load(0, true); + load(0, true, true); } // peek at character @@ -502,8 +495,7 @@ // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - invokeListeners(0); - load(0, true); + load(0, true, true); } // scan character @@ -513,9 +505,8 @@ fCurrentEntity.lineNumber++; fCurrentEntity.columnNumber = 1; if (fCurrentEntity.position == fCurrentEntity.count) { - invokeListeners(1); fCurrentEntity.ch[0] = (char)c; - load(1, false); + load(1, false, true); } if (c == '\r' && isExternal) { if (fCurrentEntity.ch[fCurrentEntity.position++] != '\n') { @@ -560,8 +551,7 @@ // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - invokeListeners(0); - load(0, true); + load(0, true, true); } // scan nmtoken @@ -593,7 +583,7 @@ fCurrentEntity.ch, 0, length); } offset = 0; - if (load(length, false)) { + if (load(length, false, false)) { break; } } @@ -640,18 +630,16 @@ // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - invokeListeners(0); - load(0, true); + load(0, true, true); } // scan name int offset = fCurrentEntity.position; if (XMLChar.isNameStart(fCurrentEntity.ch[offset])) { if (++fCurrentEntity.position == fCurrentEntity.count) { - invokeListeners(1); fCurrentEntity.ch[0] = fCurrentEntity.ch[offset]; offset = 0; - if (load(1, false)) { + if (load(1, false, true)) { fCurrentEntity.columnNumber++; String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1); @@ -688,7 +676,7 @@ fCurrentEntity.ch, 0, length); } offset = 0; - if (load(length, false)) { + if (load(length, false, false)) { break; } } @@ -743,8 +731,7 @@ // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - invokeListeners(0); - load(0, true); + load(0, true, true); } // scan qualified name @@ -756,11 +743,10 @@ if (XMLChar.isNameStart(fCurrentEntity.ch[offset])) { if (++fCurrentEntity.position == fCurrentEntity.count) { - invokeListeners(1); fCurrentEntity.ch[0] = fCurrentEntity.ch[offset]; offset = 0; - if (load(1, false)) { + if (load(1, false, true)) { fCurrentEntity.columnNumber++; //adding into symbol table. //XXX We are trying to add single character in SymbolTable?????? @@ -810,7 +796,7 @@ index = index - offset; } offset = 0; - if (load(length, false)) { + if (load(length, false, false)) { break; } } @@ -885,12 +871,10 @@ // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - invokeListeners(0); - load(0, true); + load(0, true, true); } else if (fCurrentEntity.position == fCurrentEntity.count - 1) { - invokeListeners(0); fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1]; - load(1, false); + load(1, false, true); fCurrentEntity.position = 0; } @@ -912,9 +896,8 @@ fCurrentEntity.columnNumber = 1; if (fCurrentEntity.position == fCurrentEntity.count) { offset = 0; - invokeListeners(newlines); fCurrentEntity.position = newlines; - if (load(newlines, false)) { + if (load(newlines, false, true)) { break; } } @@ -932,9 +915,8 @@ fCurrentEntity.columnNumber = 1; if (fCurrentEntity.position == fCurrentEntity.count) { offset = 0; - invokeListeners(newlines); fCurrentEntity.position = newlines; - if (load(newlines, false)) { + if (load(newlines, false, true)) { break; } } @@ -1037,13 +1019,10 @@ } // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - invokeListeners(0); - load(0, true); + load(0, true, true); } else if (fCurrentEntity.position == fCurrentEntity.count - 1) { - invokeListeners(0); fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1]; - - load(1, false); + load(1, false, true); fCurrentEntity.position = 0; } @@ -1066,10 +1045,9 @@ fCurrentEntity.lineNumber++; fCurrentEntity.columnNumber = 1; if (fCurrentEntity.position == fCurrentEntity.count) { - invokeListeners(newlines); offset = 0; fCurrentEntity.position = newlines; - if (load(newlines, false)) { + if (load(newlines, false, true)) { break; } } @@ -1088,9 +1066,8 @@ fCurrentEntity.columnNumber = 1; if (fCurrentEntity.position == fCurrentEntity.count) { offset = 0; - invokeListeners(newlines); fCurrentEntity.position = newlines; - if (load(newlines, false)) { + if (load(newlines, false, true)) { break; } } @@ -1216,7 +1193,7 @@ // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - load(0, true); + load(0, true, false); } boolean bNextEntity = false; @@ -1230,7 +1207,7 @@ 0, fCurrentEntity.count - fCurrentEntity.position); - bNextEntity = load(fCurrentEntity.count - fCurrentEntity.position, false); + bNextEntity = load(fCurrentEntity.count - fCurrentEntity.position, false, false); fCurrentEntity.position = 0; fCurrentEntity.startPosition = 0; } @@ -1243,7 +1220,7 @@ fCurrentEntity.baseCharOffset += (fCurrentEntity.position - fCurrentEntity.startPosition); fCurrentEntity.position = fCurrentEntity.count; fCurrentEntity.startPosition = fCurrentEntity.count; - load(0, true); + load(0, true, false); return false; } @@ -1265,9 +1242,8 @@ fCurrentEntity.columnNumber = 1; if (fCurrentEntity.position == fCurrentEntity.count) { offset = 0; - invokeListeners(newlines); fCurrentEntity.position = newlines; - if (load(newlines, false)) { + if (load(newlines, false, true)) { break; } } @@ -1285,10 +1261,9 @@ fCurrentEntity.columnNumber = 1; if (fCurrentEntity.position == fCurrentEntity.count) { offset = 0; - invokeListeners(newlines); fCurrentEntity.position = newlines; fCurrentEntity.count = newlines; - if (load(newlines, false)) { + if (load(newlines, false, true)) { break; } } @@ -1389,8 +1364,7 @@ // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - invokeListeners(0); - load(0, true); + load(0, true, true); } // skip character @@ -1412,9 +1386,8 @@ } else if (c == '\n' && cc == '\r' && isExternal) { // handle newlines if (fCurrentEntity.position == fCurrentEntity.count) { - invokeListeners(1); fCurrentEntity.ch[0] = (char)cc; - load(1, false); + load(1, false, true); } fCurrentEntity.position++; if (fCurrentEntity.ch[fCurrentEntity.position] == '\n') { @@ -1465,8 +1438,7 @@ //boolean entityChanged = false; // load more characters, if needed if (fCurrentEntity.position == fCurrentEntity.count) { - invokeListeners(0); - load(0, true); + load(0, true, true); } //we are doing this check only in skipSpace() because it is called by @@ -1489,9 +1461,8 @@ fCurrentEntity.lineNumber++; fCurrentEntity.columnNumber = 1; if (fCurrentEntity.position == fCurrentEntity.count - 1) { - invokeListeners(0); fCurrentEntity.ch[0] = (char)c; - entityChanged = load(1, true); + entityChanged = load(1, true, true); if (!entityChanged){ // the load change the position to be 1, // need to restore it when entity not changed @@ -1516,8 +1487,7 @@ } if (fCurrentEntity.position == fCurrentEntity.count) { - invokeListeners(0); - load(0, true); + load(0, true, true); //we are doing this check only in skipSpace() because it is called by //fMiscDispatcher and we want the parser to exit gracefully when document @@ -1593,7 +1563,7 @@ if((fCurrentEntity.count - fCurrentEntity.position) < length){ int pos = fCurrentEntity.position; invokeListeners(pos); - entityChanged = load(fCurrentEntity.count, changeEntity); + entityChanged = load(fCurrentEntity.count, changeEntity, false); fCurrentEntity.position = pos; if(entityChanged)break; } @@ -1698,17 +1668,22 @@ * the current entity in place and the entity * boundary will be signaled by the return * value. + * @param notify Determine whether to notify listeners of + * the event * * @returns Returns true if the entity changed as a result of this * load operation. */ - final boolean load(int offset, boolean changeEntity) + final boolean load(int offset, boolean changeEntity, boolean notify) throws IOException { if (DEBUG_BUFFER) { System.out.print("(load, "+offset+": "); print(); System.out.println(); } + if (notify) { + invokeListeners(offset); + } //maintaing the count till last load fCurrentEntity.fTotalCountTillLastLoad = fCurrentEntity.fTotalCountTillLastLoad + fCurrentEntity.fLastCount ; // read characters @@ -1744,7 +1719,7 @@ } // handle the trailing edges if (fCurrentEntity.position == fCurrentEntity.count) { - load(0, true); + load(0, true, false); } } @@ -2041,7 +2016,7 @@ * * @param loadPos Starting position from which new data is being loaded into scanner buffer. */ - private void invokeListeners(int loadPos){ + public void invokeListeners(int loadPos){ for(int i=0;i REFLECTION_NAVIGATOR; + static final Navigator REFLECTION_NAVIGATOR; static { // we statically initializing REFLECTION_NAVIGATOR property - Class refNav = null; try { - refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator"); - //noinspection unchecked - Method getInstance = refNav.getDeclaredMethod("getInstance"); - getInstance.setAccessible(true); + final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator"); + + // requires accessClassInPackage privilege + final Method getInstance = AccessController.doPrivileged( + new PrivilegedAction() { + + public Method run() { + try { + Method getInstance = refNav.getDeclaredMethod("getInstance"); + getInstance.setAccessible(true); + return getInstance; + } catch (NoSuchMethodException e) { + throw new IllegalStateException("ReflectionNavigator.getInstance can't be found"); + } + } + } + ); + //noinspection unchecked REFLECTION_NAVIGATOR = (Navigator) getInstance.invoke(null); } catch (ClassNotFoundException e) { - e.printStackTrace(); throw new IllegalStateException("Can't find ReflectionNavigator class"); } catch (InvocationTargetException e) { - e.printStackTrace(); throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception"); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - throw new IllegalStateException("ReflectionNavigator.getInstance can't be found"); } catch (IllegalAccessException e) { - e.printStackTrace(); throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible"); } catch (SecurityException e) { LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e); diff -Nru openjdk-6-6b33-1.13.5/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/api/Utils.java openjdk-6-6b34-1.13.6/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/api/Utils.java --- openjdk-6-6b33-1.13.5/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/api/Utils.java 2014-10-08 15:34:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/api/Utils.java 2015-01-20 03:07:59.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,6 +31,8 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Type; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.logging.Level; import java.util.logging.Logger; @@ -41,35 +43,41 @@ * * Has *package private* access to avoid inappropriate usage. */ -/* package */ final class Utils { +final class Utils { private static final Logger LOGGER = Logger.getLogger(Utils.class.getName()); /** * static ReflectionNavigator field to avoid usage of reflection every time we use it. */ - /* package */ static final Navigator REFLECTION_NAVIGATOR; + static final Navigator REFLECTION_NAVIGATOR; static { // we statically initializing REFLECTION_NAVIGATOR property - Class refNav = null; try { - refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator"); - //noinspection unchecked - Method getInstance = refNav.getDeclaredMethod("getInstance"); - getInstance.setAccessible(true); + final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator"); + + // requires accessClassInPackage privilege + final Method getInstance = AccessController.doPrivileged( + new PrivilegedAction() { + public Method run() { + try { + Method getInstance = refNav.getDeclaredMethod("getInstance"); + getInstance.setAccessible(true); + return getInstance; + } catch (NoSuchMethodException e) { + throw new IllegalStateException("ReflectionNavigator.getInstance can't be found"); + } + } + } + ); + //noinspection unchecked REFLECTION_NAVIGATOR = (Navigator) getInstance.invoke(null); } catch (ClassNotFoundException e) { - e.printStackTrace(); throw new IllegalStateException("Can't find ReflectionNavigator class"); } catch (InvocationTargetException e) { - e.printStackTrace(); throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception"); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - throw new IllegalStateException("ReflectionNavigator.getInstance can't be found"); } catch (IllegalAccessException e) { - e.printStackTrace(); throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible"); } catch (SecurityException e) { LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e); diff -Nru openjdk-6-6b33-1.13.5/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/v2/model/impl/Utils.java openjdk-6-6b34-1.13.6/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/v2/model/impl/Utils.java --- openjdk-6-6b33-1.13.5/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/v2/model/impl/Utils.java 2014-10-08 15:34:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/v2/model/impl/Utils.java 2015-01-20 03:07:59.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,6 +31,8 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Type; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.logging.Level; import java.util.logging.Logger; @@ -41,35 +43,41 @@ * * Has *package private* access to avoid inappropriate usage. */ -/* package */ final class Utils { +final class Utils { private static final Logger LOGGER = Logger.getLogger(Utils.class.getName()); /** * static ReflectionNavigator field to avoid usage of reflection every time we use it. */ - /* package */ static final Navigator REFLECTION_NAVIGATOR; + static final Navigator REFLECTION_NAVIGATOR; static { // we statically initializing REFLECTION_NAVIGATOR property - Class refNav = null; try { - refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator"); - //noinspection unchecked - Method getInstance = refNav.getDeclaredMethod("getInstance"); - getInstance.setAccessible(true); + final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator"); + + // requires accessClassInPackage privilege + final Method getInstance = AccessController.doPrivileged( + new PrivilegedAction() { + public Method run() { + try { + Method getInstance = refNav.getDeclaredMethod("getInstance"); + getInstance.setAccessible(true); + return getInstance; + } catch (NoSuchMethodException e) { + throw new IllegalStateException("ReflectionNavigator.getInstance can't be found"); + } + } + } + ); + //noinspection unchecked REFLECTION_NAVIGATOR = (Navigator) getInstance.invoke(null); } catch (ClassNotFoundException e) { - e.printStackTrace(); throw new IllegalStateException("Can't find ReflectionNavigator class"); } catch (InvocationTargetException e) { - e.printStackTrace(); throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception"); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - throw new IllegalStateException("ReflectionNavigator.getInstance can't be found"); } catch (IllegalAccessException e) { - e.printStackTrace(); throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible"); } catch (SecurityException e) { LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e); diff -Nru openjdk-6-6b33-1.13.5/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/v2/runtime/property/Utils.java openjdk-6-6b34-1.13.6/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/v2/runtime/property/Utils.java --- openjdk-6-6b33-1.13.5/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/v2/runtime/property/Utils.java 2014-10-08 15:34:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/v2/runtime/property/Utils.java 2015-01-20 03:07:59.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,6 +31,8 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Type; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.logging.Level; import java.util.logging.Logger; @@ -41,35 +43,41 @@ * * Has *package private* access to avoid inappropriate usage. */ -/* package */ final class Utils { +final class Utils { private static final Logger LOGGER = Logger.getLogger(Utils.class.getName()); /** * static ReflectionNavigator field to avoid usage of reflection every time we use it. */ - /* package */ static final Navigator REFLECTION_NAVIGATOR; + static final Navigator REFLECTION_NAVIGATOR; static { // we statically initializing REFLECTION_NAVIGATOR property - Class refNav = null; try { - refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator"); - //noinspection unchecked - Method getInstance = refNav.getDeclaredMethod("getInstance"); - getInstance.setAccessible(true); + final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator"); + + // requires accessClassInPackage privilege + final Method getInstance = AccessController.doPrivileged( + new PrivilegedAction() { + public Method run() { + try { + Method getInstance = refNav.getDeclaredMethod("getInstance"); + getInstance.setAccessible(true); + return getInstance; + } catch (NoSuchMethodException e) { + throw new IllegalStateException("ReflectionNavigator.getInstance can't be found"); + } + } + } + ); + //noinspection unchecked REFLECTION_NAVIGATOR = (Navigator) getInstance.invoke(null); } catch (ClassNotFoundException e) { - e.printStackTrace(); throw new IllegalStateException("Can't find ReflectionNavigator class"); } catch (InvocationTargetException e) { - e.printStackTrace(); throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception"); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - throw new IllegalStateException("ReflectionNavigator.getInstance can't be found"); } catch (IllegalAccessException e) { - e.printStackTrace(); throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible"); } catch (SecurityException e) { LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e); diff -Nru openjdk-6-6b33-1.13.5/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/v2/runtime/reflect/Utils.java openjdk-6-6b34-1.13.6/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/v2/runtime/reflect/Utils.java --- openjdk-6-6b33-1.13.5/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/v2/runtime/reflect/Utils.java 2014-10-08 15:34:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/v2/runtime/reflect/Utils.java 2015-01-20 03:07:59.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,6 +31,8 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Type; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.logging.Level; import java.util.logging.Logger; @@ -41,35 +43,41 @@ * * Has *package private* access to avoid inappropriate usage. */ -/* package */ final class Utils { +final class Utils { private static final Logger LOGGER = Logger.getLogger(Utils.class.getName()); /** * static ReflectionNavigator field to avoid usage of reflection every time we use it. */ - /* package */ static final Navigator REFLECTION_NAVIGATOR; + static final Navigator REFLECTION_NAVIGATOR; static { // we statically initializing REFLECTION_NAVIGATOR property - Class refNav = null; try { - refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator"); - //noinspection unchecked - Method getInstance = refNav.getDeclaredMethod("getInstance"); - getInstance.setAccessible(true); + final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator"); + + // requires accessClassInPackage privilege + final Method getInstance = AccessController.doPrivileged( + new PrivilegedAction() { + public Method run() { + try { + Method getInstance = refNav.getDeclaredMethod("getInstance"); + getInstance.setAccessible(true); + return getInstance; + } catch (NoSuchMethodException e) { + throw new IllegalStateException("ReflectionNavigator.getInstance can't be found"); + } + } + } + ); + //noinspection unchecked REFLECTION_NAVIGATOR = (Navigator) getInstance.invoke(null); } catch (ClassNotFoundException e) { - e.printStackTrace(); throw new IllegalStateException("Can't find ReflectionNavigator class"); } catch (InvocationTargetException e) { - e.printStackTrace(); throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception"); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - throw new IllegalStateException("ReflectionNavigator.getInstance can't be found"); } catch (IllegalAccessException e) { - e.printStackTrace(); throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible"); } catch (SecurityException e) { LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e); diff -Nru openjdk-6-6b33-1.13.5/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/v2/runtime/Utils.java openjdk-6-6b34-1.13.6/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/v2/runtime/Utils.java --- openjdk-6-6b33-1.13.5/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/v2/runtime/Utils.java 2014-10-08 15:34:01.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/bind/v2/runtime/Utils.java 2015-01-20 03:07:59.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,6 +31,8 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Type; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.logging.Level; import java.util.logging.Logger; @@ -41,35 +43,41 @@ * * Has *package private* access to avoid inappropriate usage. */ -/* package */ final class Utils { +final class Utils { private static final Logger LOGGER = Logger.getLogger(Utils.class.getName()); /** * static ReflectionNavigator field to avoid usage of reflection every time we use it. */ - /* package */ static final Navigator REFLECTION_NAVIGATOR; + static final Navigator REFLECTION_NAVIGATOR; static { // we statically initializing REFLECTION_NAVIGATOR property - Class refNav = null; try { - refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator"); - //noinspection unchecked - Method getInstance = refNav.getDeclaredMethod("getInstance"); - getInstance.setAccessible(true); + final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator"); + + // requires accessClassInPackage privilege + final Method getInstance = AccessController.doPrivileged( + new PrivilegedAction() { + public Method run() { + try { + Method getInstance = refNav.getDeclaredMethod("getInstance"); + getInstance.setAccessible(true); + return getInstance; + } catch (NoSuchMethodException e) { + throw new IllegalStateException("ReflectionNavigator.getInstance can't be found"); + } + } + } + ); + //noinspection unchecked REFLECTION_NAVIGATOR = (Navigator) getInstance.invoke(null); } catch (ClassNotFoundException e) { - e.printStackTrace(); throw new IllegalStateException("Can't find ReflectionNavigator class"); } catch (InvocationTargetException e) { - e.printStackTrace(); throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception"); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - throw new IllegalStateException("ReflectionNavigator.getInstance can't be found"); } catch (IllegalAccessException e) { - e.printStackTrace(); throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible"); } catch (SecurityException e) { LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e); diff -Nru openjdk-6-6b33-1.13.5/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/ws/model/Utils.java openjdk-6-6b34-1.13.6/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/ws/model/Utils.java --- openjdk-6-6b33-1.13.5/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/ws/model/Utils.java 2014-10-08 15:34:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/ws/model/Utils.java 2015-01-20 03:07:59.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,6 +31,8 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Type; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.logging.Level; import java.util.logging.Logger; @@ -41,35 +43,41 @@ * * Has *package private* access to avoid inappropriate usage. */ -/* package */ final class Utils { +final class Utils { private static final Logger LOGGER = Logger.getLogger(Utils.class.getName()); /** * static ReflectionNavigator field to avoid usage of reflection every time we use it. */ - /* package */ static final Navigator REFLECTION_NAVIGATOR; + static final Navigator REFLECTION_NAVIGATOR; static { // we statically initializing REFLECTION_NAVIGATOR property - Class refNav = null; try { - refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator"); - //noinspection unchecked - Method getInstance = refNav.getDeclaredMethod("getInstance"); - getInstance.setAccessible(true); + final Class refNav = Class.forName("com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator"); + + // requires accessClassInPackage privilege + final Method getInstance = AccessController.doPrivileged( + new PrivilegedAction() { + public Method run() { + try { + Method getInstance = refNav.getDeclaredMethod("getInstance"); + getInstance.setAccessible(true); + return getInstance; + } catch (NoSuchMethodException e) { + throw new IllegalStateException("ReflectionNavigator.getInstance can't be found"); + } + } + } + ); + //noinspection unchecked REFLECTION_NAVIGATOR = (Navigator) getInstance.invoke(null); } catch (ClassNotFoundException e) { - e.printStackTrace(); throw new IllegalStateException("Can't find ReflectionNavigator class"); } catch (InvocationTargetException e) { - e.printStackTrace(); throw new IllegalStateException("ReflectionNavigator.getInstance throws the exception"); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - throw new IllegalStateException("ReflectionNavigator.getInstance can't be found"); } catch (IllegalAccessException e) { - e.printStackTrace(); throw new IllegalStateException("ReflectionNavigator.getInstance method is inaccessible"); } catch (SecurityException e) { LOGGER.log(Level.FINE, "Unable to access ReflectionNavigator.getInstance", e); diff -Nru openjdk-6-6b33-1.13.5/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/ws/spi/ProviderImpl.java openjdk-6-6b34-1.13.6/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/ws/spi/ProviderImpl.java --- openjdk-6-6b33-1.13.5/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/ws/spi/ProviderImpl.java 2014-10-08 15:34:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/ws/spi/ProviderImpl.java 2015-01-20 02:20:41.000000000 +0000 @@ -109,19 +109,12 @@ } public EndpointReference readEndpointReference(final Source eprInfoset) { - // EPR constructors are private, so we need privilege escalation. - // this unmarshalling can only access instances of a fixed, known set of classes, - // so doing that shouldn't introduce security vulnerability. - return AccessController.doPrivileged(new PrivilegedAction() { - public EndpointReference run() { - try { - Unmarshaller unmarshaller = eprjc.get().createUnmarshaller(); - return (EndpointReference) unmarshaller.unmarshal(eprInfoset); - } catch (JAXBException e) { - throw new WebServiceException("Error creating Marshaller or marshalling.", e); - } - } - }); + try { + Unmarshaller unmarshaller = eprjc.get().createUnmarshaller(); + return (EndpointReference) unmarshaller.unmarshal(eprInfoset); + } catch (JAXBException e) { + throw new WebServiceException("Error creating Marshaller or marshalling.", e); + } } public T getPort(EndpointReference endpointReference, Class clazz, WebServiceFeature... webServiceFeatures) { diff -Nru openjdk-6-6b33-1.13.5/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java openjdk-6-6b34-1.13.6/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java --- openjdk-6-6b33-1.13.5/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java 2014-10-08 15:34:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java 2015-01-20 02:18:27.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,6 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ + package com.sun.xml.internal.ws.transport.http.server; import com.sun.net.httpserver.HttpContext; @@ -79,7 +80,8 @@ state = servers.get(inetAddress); if (state == null) { logger.fine("Creating new HTTP Server at "+inetAddress); - server = HttpServer.create(inetAddress, 5); + // Creates server with default socket backlog + server = HttpServer.create(inetAddress, 0); server.setExecutor(Executors.newCachedThreadPool()); String path = url.toURI().getPath(); logger.fine("Creating HTTP Context at = "+path); diff -Nru openjdk-6-6b33-1.13.5/jdk/make/com/sun/crypto/provider/Makefile openjdk-6-6b34-1.13.6/jdk/make/com/sun/crypto/provider/Makefile --- openjdk-6-6b33-1.13.5/jdk/make/com/sun/crypto/provider/Makefile 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/make/com/sun/crypto/provider/Makefile 2015-01-20 02:17:12.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 2009, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -45,54 +45,49 @@ # For OpenJDK, the jar files built here are installed directly into the # OpenJDK. # -# For JDK, the binaries use pre-built/pre-signed/pre-obfuscated binary -# files stored in the closed workspace that are not shipped in the -# OpenJDK workspaces. We still build the JDK files here to verify the -# files compile, and in preparation for possible signing and -# obfuscation. Developers working on JCE in JDK must sign the JCE files -# before testing: obfuscation is optional during development. The JCE -# signing key is kept separate from the JDK workspace to prevent its -# disclosure. The obfuscation tool has not been licensed for general -# usage. -# +# For JDK, the binaries use pre-built/pre-signed binary files stored in +# the closed workspace that are not shipped in the OpenJDK workspaces. +# We still build the JDK files here to verify the files compile, and in +# preparation for possible signing. Developers working on JCE in JDK +# must sign the JCE files before testing. The JCE signing key is kept +# separate from the JDK workspace to prevent its disclosure. +# # SPECIAL NOTE TO JCE/JDK developers: The source files must eventually -# be built, obfuscated, signed, and then the resulting jar files MUST BE -# CHECKED INTO THE CLOSED PART OF THE WORKSPACE*. This separate step -# *MUST NOT BE FORGOTTEN*, otherwise a bug fixed in the source code will -# not be reflected in the shipped binaries. The "release" target should be +# be built and signed, and the resulting jar files MUST BE CHECKED INTO +# THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT BE +# FORGOTTEN*, otherwise a bug fixed in the source code will not be +# reflected in the shipped binaries. The "release" target should be # used to generate the required files. # # There are a number of targets to help both JDK/OpenJDK developers. # # Main Targets (JDK/OPENJDK): # -# all/clobber/clean The usual. -# If OpenJDK, installs sunjce_provider.jar. -# If JDK, installs prebuilt -# sunjce_provider.jar. -# -# jar Builds/installs sunjce_provider.jar -# If OpenJDK, does not sign. -# If JDK, tries to sign. +# all/clobber/clean The usual. +# If OpenJDK, installs sunjce_provider.jar. +# If JDK, installs prebuilt +# sunjce_provider.jar. +# +# jar Builds/installs sunjce_provider.jar +# If OpenJDK, does not sign. +# If JDK, tries to sign. # # Other lesser-used Targets (JDK/OPENJDK): # -# build-jar Builds sunjce_provider.jar -# (does not sign/install) +# build-jar Builds sunjce_provider.jar +# (does not sign/install) # -# install-jar Alias for "jar" above. +# install-jar Alias for "jar" above. # # Other targets (JDK only): # -# sign Alias for sign-jar -# sign-jar Builds/signs sunjce_provider.jar (no install) -# -# obfus Builds/obfuscates/signs sunjce_provider.jar +# sign Alias for sign-jar +# sign-jar Builds/signs sunjce_provider.jar (no install) # -# release Builds all targets in preparation -# for workspace integration. +# release Builds all targets in preparation +# for workspace integration. # -# install-prebuilt Installs the pre-built jar files +# install-prebuilt Installs the pre-built jar files # # This makefile was written to support parallel target execution. # @@ -103,7 +98,7 @@ # # The following is for when we need to do postprocessing -# (signing/obfuscation) against a read-only build. If the OUTPUTDIR +# (signing) against a read-only build. If the OUTPUTDIR # isn't writable, the build currently crashes out. # ifndef OPENJDK @@ -158,8 +153,8 @@ # # We use a variety of subdirectories in the $(TEMPDIR) depending on what # part of the build we're doing. Both OPENJDK/JDK builds are initially -# done in the unsigned area. When files are signed or obfuscated in JDK, -# they will be placed in the appropriate areas. +# done in the unsigned area. When files are signed in JDK, they will be +# placed in the appropriate areas. # UNSIGNED_DIR = $(TEMPDIR)/unsigned @@ -223,61 +218,15 @@ endif $(call sign-file, $(UNSIGNED_DIR)/sunjce_provider.jar) -# ===================================================== -# Obfuscate/sign/install the JDK build. Not needed for OpenJDK. -# - -OBFUS_DIR = $(JCE_BUILD_DIR)/obfus/sunjce - -CLOSED_DIR = $(BUILDDIR)/closed/com/sun/crypto/provider - -obfus: $(OBFUS_DIR)/sunjce_provider.jar - $(release-warning) - -ifndef ALT_JCE_BUILD_DIR -$(OBFUS_DIR)/sunjce_provider.jar: build-jar $(JCE_MANIFEST_FILE) \ - $(OBFUS_DIR)/sunjce.dox -else -$(OBFUS_DIR)/sunjce_provider.jar: $(JCE_MANIFEST_FILE) $(OBFUS_DIR)/sunjce.dox - @if [ ! -d $(CLASSDESTDIR) ] ; then \ - $(ECHO) "Couldn't find $(CLASSDESTDIR)"; \ - exit 1; \ - fi -endif - @$(ECHO) ">>>Obfuscating SunJCE Provider..." - $(presign) - $(preobfus) - $(prep-target) - $(CD) $(OBFUS_DIR); \ - $(OBFUSCATOR) -fv sunjce.dox - @$(CD) $(OBFUS_DIR); $(java-vm-cleanup) - $(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ \ - -C $(OBFUS_DIR)/build com \ - $(JAR_JFLAGS) - $(sign-target) - @$(java-vm-cleanup) - -$(OBFUS_DIR)/sunjce.dox: $(CLOSED_DIR)/obfus/sunjce.dox - @$(ECHO) ">>>Creating sunjce.dox" - $(prep-target) - $(SED) "s:@@TEMPDIR@@:$(ABS_TEMPDIR):" $< > $@ - -# -# The current obfuscator has a limitation in that it currently only -# supports up to v49 class file format. Force v49 classfiles in our -# builds for now. -# -TARGET_CLASS_VERSION = 5 - # ===================================================== -# Create the Release Engineering files. Obfuscated builds, etc. +# Create the Release Engineering files. Signed builds, etc. # -release: $(OBFUS_DIR)/sunjce_provider.jar +release: $(SIGNED_DIR)/sunjce_provider.jar $(RM) $(JCE_BUILD_DIR)/release/sunjce_provider.jar $(MKDIR) -p $(JCE_BUILD_DIR)/release - $(CP) $(OBFUS_DIR)/sunjce_provider.jar $(JCE_BUILD_DIR)/release + $(CP) $(SIGNED_DIR)/sunjce_provider.jar $(JCE_BUILD_DIR)/release $(release-warning) endif # OPENJDK @@ -319,5 +268,5 @@ .PHONY: build-jar jar install-jar ifndef OPENJDK -.PHONY: sign sign-jar obfus release install-prebuilt +.PHONY: sign sign-jar release install-prebuilt endif diff -Nru openjdk-6-6b33-1.13.5/jdk/make/common/Defs.gmk openjdk-6-6b34-1.13.6/jdk/make/common/Defs.gmk --- openjdk-6-6b33-1.13.5/jdk/make/common/Defs.gmk 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/make/common/Defs.gmk 2015-01-20 02:20:42.000000000 +0000 @@ -182,8 +182,8 @@ # Localizations for the different parts of the product beyond English # -JRE_LOCALES = de es fr it ja ko sv zh_CN zh_TW zh_HK -PLUGIN_LOCALES = de es fr it ja ko sv zh_CN zh_TW zh_HK +JRE_LOCALES = de es fr it ja ko pt_BR sv zh_CN zh_TW zh_HK +PLUGIN_LOCALES = de es fr it ja ko pt_BR sv zh_CN zh_TW zh_HK JDK_LOCALES = ja zh_CN # diff -Nru openjdk-6-6b33-1.13.5/jdk/make/java/util/FILES_java.gmk openjdk-6-6b34-1.13.6/jdk/make/java/util/FILES_java.gmk --- openjdk-6-6b33-1.13.5/jdk/make/java/util/FILES_java.gmk 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/make/java/util/FILES_java.gmk 2015-01-20 02:20:42.000000000 +0000 @@ -37,4 +37,5 @@ sun/util/resources/TimeZoneNames_es.java \ sun/util/resources/TimeZoneNames_fr.java \ sun/util/resources/TimeZoneNames_it.java \ + sun/util/resources/TimeZoneNames_pt_BR.java \ sun/util/resources/TimeZoneNames_sv.java diff -Nru openjdk-6-6b33-1.13.5/jdk/make/java/util/FILES_properties.gmk openjdk-6-6b34-1.13.6/jdk/make/java/util/FILES_properties.gmk --- openjdk-6-6b33-1.13.5/jdk/make/java/util/FILES_properties.gmk 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/make/java/util/FILES_properties.gmk 2015-01-20 02:17:15.000000000 +0000 @@ -147,6 +147,7 @@ sun/util/resources/CurrencyNames_es_CL.properties \ sun/util/resources/CurrencyNames_es_CO.properties \ sun/util/resources/CurrencyNames_es_CR.properties \ + sun/util/resources/CurrencyNames_es_CU.properties \ sun/util/resources/CurrencyNames_es_DO.properties \ sun/util/resources/CurrencyNames_es_EC.properties \ sun/util/resources/CurrencyNames_es_ES.properties \ @@ -187,6 +188,7 @@ sun/util/resources/CurrencyNames_nl_NL.properties \ sun/util/resources/CurrencyNames_no_NO.properties \ sun/util/resources/CurrencyNames_pl_PL.properties \ + sun/util/resources/CurrencyNames_pt.properties \ sun/util/resources/CurrencyNames_pt_BR.properties \ sun/util/resources/CurrencyNames_pt_PT.properties \ sun/util/resources/CurrencyNames_ro_RO.properties \ @@ -197,6 +199,7 @@ sun/util/resources/CurrencyNames_sr_BA.properties \ sun/util/resources/CurrencyNames_sr_CS.properties \ sun/util/resources/CurrencyNames_sr_ME.properties \ + sun/util/resources/CurrencyNames_sr_RS.properties \ sun/util/resources/CurrencyNames_sv.properties \ sun/util/resources/CurrencyNames_sv_SE.properties \ sun/util/resources/CurrencyNames_tr_TR.properties \ diff -Nru openjdk-6-6b33-1.13.5/jdk/make/javax/crypto/Defs-jce.gmk openjdk-6-6b34-1.13.6/jdk/make/javax/crypto/Defs-jce.gmk --- openjdk-6-6b33-1.13.5/jdk/make/javax/crypto/Defs-jce.gmk 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/make/javax/crypto/Defs-jce.gmk 2015-01-20 02:17:15.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 2009, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -61,7 +61,7 @@ SIGNING_ALIAS = jce_rsa # -# Defines for signing/obfuscating the various jar files. +# Defines for signing the various jar files. # define presign @@ -100,19 +100,4 @@ $(sign-target) endef -# -# Location for the Obfuscation product. JDK currently has -# the requirement that we obfuscate our JCE jars. -# -OBFUSCATOR = /security/tools/bin/obfus -OBFUS_DIR = $(TEMPDIR)/obfus - -define preobfus - @if [ ! -f $(OBFUSCATOR) ]; then \ - $(ECHO) "\n$(OBFUSCATOR): Obfuscator *NOT* available..." \ - $(README-MAKEFILE_WARNING); \ - exit 2; \ - fi -endef - endif # !OPENJDK diff -Nru openjdk-6-6b33-1.13.5/jdk/make/javax/crypto/Makefile openjdk-6-6b34-1.13.6/jdk/make/javax/crypto/Makefile --- openjdk-6-6b33-1.13.5/jdk/make/javax/crypto/Makefile 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/make/javax/crypto/Makefile 2015-01-20 02:17:15.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 2009, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -44,64 +44,65 @@ # For OpenJDK, the jar files built here are installed directly into the # OpenJDK. # -# For JDK, the binaries use pre-built/pre-signed/pre-obfuscated binary -# files stored in the closed workspace that are not shipped in the -# OpenJDK workspaces. We still build the JDK files here to verify the -# files compile, and in preparation for possible signing and -# obfuscation. Developers working on JCE in JDK must sign the JCE files -# before testing: obfuscation is optional during development. The JCE -# signing key is kept separate from the JDK workspace to prevent its -# disclosure. The obfuscation tool has not been licensed for general -# usage. +# For JDK, the binaries use pre-built/pre-signed binary files stored in +# the closed workspace that are not shipped in the OpenJDK workspaces. +# We still build the JDK files here to verify the files compile, and in +# preparation for possible signing. Developers working on JCE in JDK +# must sign the JCE files before testing. The JCE signing key is kept +# separate from the JDK workspace to prevent its disclosure. # # SPECIAL NOTE TO JCE/JDK developers: The source files must eventually -# be built, obfuscated, signed, and the resulting jar files *MUST BE -# CHECKED INTO THE CLOSED PART OF THE WORKSPACE*. This separate step -# *MUST NOT BE FORGOTTEN*, otherwise a bug fixed in the source code will -# not be reflected in the shipped binaries. The "release" target should -# be used to generate the required files. +# be built and signed, and the resulting jar files *MUST BE CHECKED INTO +# THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT BE +# FORGOTTEN*, otherwise a bug fixed in the source code will not be +# reflected in the shipped binaries. The "release" target should be +# used to generate the required files. # # There are a number of targets to help both JDK/OpenJDK developers. # # Main Targets (JDK/OPENJDK): # -# all/clobber/clean The usual. -# If OpenJDK, installs -# jce.jar/limited policy files. -# If JDK, installs prebuilt -# jce.jar/limited policy files. -# -# jar Builds/installs jce.jar -# If OpenJDK, does not sign -# If JDK, tries to sign +# all/clobber/clean The usual. +# If OpenJDK: builds/installs the +# jce.jar/limited policy files. +# If JDK: builds but does not install. +# During full tops-down builds, +# prebuilt/presigned jce.jar & +# limited policy files are copied +# in by make/java/redist/Makefile. +# If you are working in this directory +# and want to install the prebuilts, +# use the "install-prebuilt" target. +# +# jar Builds/installs jce.jar +# If OpenJDK, does not sign +# If JDK, tries to sign # # Other lesser-used Targets (JDK/OPENJDK): # -# build-jar Builds jce.jar (does not sign/install) +# build-jar Builds jce.jar (does not sign/install) # -# build-policy Builds policy files (does not sign/install) +# build-policy Builds policy files (does not sign/install) # -# install-jar Alias for "jar" above +# install-jar Alias for "jar" above # -# install-limited Builds/installs limited policy files -# If OpenJDK, does not sign -# If JDK, tries to sign -# install-unlimited Builds/nstalls unlimited policy files -# If OpenJDK, does not sign -# If JDK, tries to sign +# install-limited Builds/installs limited policy files +# If OpenJDK, does not sign +# If JDK, tries to sign +# install-unlimited Builds/nstalls unlimited policy files +# If OpenJDK, does not sign +# If JDK, tries to sign # # Other targets (JDK only): # -# sign Alias for sign-jar and sign-policy -# sign-jar Builds/signs jce.jar file (no install) -# sign-policy Builds/signs policy files (no install) +# sign Alias for sign-jar and sign-policy +# sign-jar Builds/signs jce.jar file (no install) +# sign-policy Builds/signs policy files (no install) # -# obfus Builds/obfuscates/signs jce.jar +# release Builds all targets in preparation +# for workspace integration. # -# release Builds all targets in preparation -# for workspace integration. -# -# install-prebuilt Installs the pre-built jar files +# install-prebuilt Installs the pre-built jar files # # This makefile was written to support parallel target execution. # @@ -112,7 +113,7 @@ # # The following is for when we need to do postprocessing -# (signing/obfuscation) against a read-only build. If the OUTPUTDIR +# (signing) against a read-only build. If the OUTPUTDIR # isn't writable, the build currently crashes out. # ifndef OPENJDK @@ -155,7 +156,12 @@ # ifdef OPENJDK -all: build-jar install-jar build-policy install-limited +ifdef UNLIMITED_CRYPTO +POLICY = install-unlimited +else +POLICY = install-limited +endif +all: build-jar install-jar build-policy $(POLICY) else # OPENJDK ifeq ($(strip $(FILES_java)),) all: @@ -169,8 +175,8 @@ # # We use a variety of subdirectories in the $(TEMPDIR) depending on what # part of the build we're doing. Both OPENJDK/JDK builds are initially -# done in the unsigned area. When files are signed or obfuscated in JDK, -# they will be placed in the appropriate areas. +# done in the unsigned area. When files are signed in JDK, they will be +# placed in the appropriate areas. # UNSIGNED_DIR = $(TEMPDIR)/unsigned @@ -178,7 +184,7 @@ # ===================================================== -# Build the unsigned jce.jar file. Signing/obfuscation comes later. +# Build the unsigned jce.jar file. Signing comes later. # JAR_DESTFILE = $(LIBDIR)/jce.jar @@ -363,68 +369,13 @@ # ===================================================== -# Obfuscate/sign/install the JDK build. Not needed for OpenJDK. +# Create the Release Engineering files. Signed builds, +# unlimited policy file distribution, etc. # -OBFUS_DIR = $(JCE_BUILD_DIR)/obfus/jce - CLOSED_DIR = $(BUILDDIR)/closed/javax/crypto -obfus: $(OBFUS_DIR)/jce.jar - $(release-warning) - -ifndef ALT_JCE_BUILD_DIR -$(OBFUS_DIR)/jce.jar: build-jar $(JCE_MANIFEST_FILE) $(OBFUS_DIR)/framework.dox -else -# -# We have to remove the build dependency, otherwise, we'll try to rebuild it -# which we can't do on a read-only filesystem. -# -$(OBFUS_DIR)/jce.jar: $(JCE_MANIFEST_FILE) $(OBFUS_DIR)/framework.dox - @if [ ! -d $(CLASSDESTDIR) ] ; then \ - $(ECHO) "Couldn't find $(CLASSDESTDIR)"; \ - exit 1; \ - fi -endif - @$(ECHO) ">>>Obfuscating JCE framework..." - $(presign) - $(preobfus) - $(prep-target) - $(CD) $(OBFUS_DIR); \ - $(OBFUSCATOR) -fv framework.dox - @$(CD) $(OBFUS_DIR); $(java-vm-cleanup) - @# - @# The sun.security.internal classes are currently not obfuscated - @# due to an obfus problem. Manually copy them to the build directory - @# so that they are included in the jce.jar file. - @# - $(CP) -r $(CLASSDESTDIR)/sun $(OBFUS_DIR)/build - $(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ \ - -C $(OBFUS_DIR)/build javax \ - -C $(OBFUS_DIR)/build sun \ - $(JAR_JFLAGS) - $(sign-target) - @$(java-vm-cleanup) - -$(OBFUS_DIR)/framework.dox: $(CLOSED_DIR)/obfus/framework.dox - @$(ECHO) ">>>Creating framework.dox" - $(prep-target) - $(SED) "s:@@TEMPDIR@@:$(ABS_TEMPDIR):" $< > $@ - -# -# The current obfuscator has a limitation in that it currently only -# supports up to v49 class file format. Force v49 classfiles in our -# builds for now. -# -TARGET_CLASS_VERSION = 5 - - -# ===================================================== -# Create the Release Engineering files. Obfuscated builds, -# unlimited policy file distribution, etc. -# - -release: $(OBFUS_DIR)/jce.jar sign-policy $(CLOSED_DIR)/doc/COPYRIGHT.html \ +release: $(SIGNED_DIR)/jce.jar sign-policy $(CLOSED_DIR)/doc/COPYRIGHT.html \ $(CLOSED_DIR)/doc/README.txt $(RM) -r \ $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy \ @@ -433,7 +384,7 @@ $(JCE_BUILD_DIR)/release/local_policy.jar \ $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy.zip $(MKDIR) -p $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy - $(CP) $(OBFUS_DIR)/jce.jar $(JCE_BUILD_DIR)/release + $(CP) $(SIGNED_DIR)/jce.jar $(JCE_BUILD_DIR)/release $(CP) \ $(SIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar \ $(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar \ @@ -529,5 +480,5 @@ .PHONY: build-jar jar build-policy unlimited limited install-jar \ install-limited install-unlimited ifndef OPENJDK -.PHONY: sign sign-jar sign-policy obfus release install-prebuilt +.PHONY: sign sign-jar sign-policy release install-prebuilt endif diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/africa openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/africa --- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/africa 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/africa 2015-01-20 02:20:42.000000000 +0000 @@ -1,66 +1,69 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. -# +# # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). -# +# # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# +# # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # -#
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
-# tz@elsie.nci.nih.gov for general use in the future).
+# tz@iana.org for general use in the future).  For more, please see
+# the file CONTRIBUTING in the tz distribution.
 
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (2014-10-31):
 #
-# A good source for time zone historical data outside the U.S. is
+# Unless otherwise specified, the source for data through 1990 is:
 # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
 # San Diego: ACS Publications, Inc. (2003).
+# Unfortunately this book contains many errors and cites no sources.
 #
 # Gwillim Law writes that a good source
 # for recent time zone data is the International Air Transport
 # Association's Standard Schedules Information Manual (IATA SSIM),
 # published semiannually.  Law sent in several helpful summaries
-# of the IATA's data after 1990.
-#
-# Except where otherwise noted, Shanks & Pottenger is the source for
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
+# of the IATA's data after 1990.  Except where otherwise noted,
+# IATA SSIM is the source for entries after 1990.
 #
 # Another source occasionally used is Edward W. Whitman, World Time Differences,
 # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
 # I found in the UCLA library.
 #
+# For data circa 1899, a common source is:
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
+# http://www.jstor.org/stable/1774359
+#
 # A reliable and entertaining source about time zones is
 # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
 #
 # Previous editions of this database used WAT, CAT, SAT, and EAT
 # for +0:00 through +3:00, respectively,
 # but Mark R V Murray reports that
-# `SAST' is the official abbreviation for +2:00 in the country of South Africa,
-# `CAT' is commonly used for +2:00 in countries north of South Africa, and
-# `WAT' is probably the best name for +1:00, as the common phrase for
-# the area that includes Nigeria is ``West Africa''.
-# He has heard of ``Western Sahara Time'' for +0:00 but can find no reference.
+# 'SAST' is the official abbreviation for +2:00 in the country of South Africa,
+# 'CAT' is commonly used for +2:00 in countries north of South Africa, and
+# 'WAT' is probably the best name for +1:00, as the common phrase for
+# the area that includes Nigeria is "West Africa".
+# He has heard of "Western Sahara Time" for +0:00 but can find no reference.
 #
-# To make things confusing, `WAT' seems to have been used for -1:00 long ago;
+# To make things confusing, 'WAT' seems to have been used for -1:00 long ago;
 # I'd guess that this was because people needed _some_ name for -1:00,
 # and at the time, far west Africa was the only major land area in -1:00.
 # This usage is now obsolete, as the last use of -1:00 on the African
@@ -73,18 +76,17 @@
 #	 2:00	SAST	South Africa Standard Time
 # and Murray suggests the following abbreviation:
 #	 1:00	WAT	West Africa Time
-# I realize that this leads to `WAT' being used for both -1:00 and 1:00
+# I realize that this leads to 'WAT' being used for both -1:00 and 1:00
 # for times before 1976, but this is the best I can think of
 # until we get more information.
 #
 # I invented the following abbreviations; corrections are welcome!
 #	 2:00	WAST	West Africa Summer Time
 #	 2:30	BEAT	British East Africa Time (no longer used)
-#	 2:44:45 BEAUT	British East Africa Unified Time (no longer used)
+#	 2:45	BEAUT	British East Africa Unified Time (no longer used)
 #	 3:00	CAST	Central Africa Summer Time (no longer used)
 #	 3:00	SAST	South Africa Summer Time (no longer used)
 #	 3:00	EAT	East Africa Time
-#	 4:00	EAST	East Africa Summer Time (no longer used)
 
 # Algeria
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -113,9 +115,9 @@
 # Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
 # more precise 0:09:21.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Algiers	0:12:12 -	LMT	1891 Mar 15 0:01
-			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
-			0:00	Algeria	WE%sT	1940 Feb 25 2:00
+Zone	Africa/Algiers	0:12:12 -	LMT	1891 Mar 15  0:01
+			0:09:21	-	PMT	1911 Mar 11 # Paris Mean Time
+			0:00	Algeria	WE%sT	1940 Feb 25  2:00
 			1:00	Algeria	CE%sT	1946 Oct  7
 			0:00	-	WET	1956 Jan 29
 			1:00	-	CET	1963 Apr 14
@@ -125,93 +127,81 @@
 			1:00	-	CET
 
 # Angola
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Luanda	0:52:56	-	LMT	1892
-			0:52:04	-	AOT	1911 May 26 # Angola Time
-			1:00	-	WAT
-
 # Benin
-# Whitman says they switched to 1:00 in 1946, not 1934;
-# go with Shanks & Pottenger.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Porto-Novo	0:10:28	-	LMT	1912
-			0:00	-	GMT	1934 Feb 26
-			1:00	-	WAT
+# See Africa/Lagos.
 
 # Botswana
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Gaborone	1:43:40 -	LMT	1885
-			2:00	-	CAT	1943 Sep 19 2:00
-			2:00	1:00	CAST	1944 Mar 19 2:00
-			2:00	-	CAT
+# See Africa/Maputo.
 
 # Burkina Faso
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Ouagadougou	-0:06:04 -	LMT	1912
-			 0:00	-	GMT
+# See Africa/Abidjan.
 
 # Burundi
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Bujumbura	1:57:28	-	LMT	1890
-			2:00	-	CAT
+# See Africa/Maputo.
 
 # Cameroon
-# Whitman says they switched to 1:00 in 1920; go with Shanks & Pottenger.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Douala	0:38:48	-	LMT	1912
-			1:00	-	WAT
+# See Africa/Lagos.
 
 # Cape Verde
+#
+# Shanks gives 1907 for the transition to CVT.
+# Perhaps the 1911-05-26 Portuguese decree
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# merely made it official?
+#
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Atlantic/Cape_Verde -1:34:04 -	LMT	1907			# Praia
+Zone Atlantic/Cape_Verde -1:34:04 -	LMT	1907        # Praia
 			-2:00	-	CVT	1942 Sep
 			-2:00	1:00	CVST	1945 Oct 15
-			-2:00	-	CVT	1975 Nov 25 2:00
+			-2:00	-	CVT	1975 Nov 25  2:00
 			-1:00	-	CVT
 
 # Central African Republic
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Bangui	1:14:20	-	LMT	1912
-			1:00	-	WAT
+# See Africa/Lagos.
 
 # Chad
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Ndjamena	1:00:12 -	LMT	1912
+Zone	Africa/Ndjamena	1:00:12 -	LMT	1912        # N'Djamena
 			1:00	-	WAT	1979 Oct 14
 			1:00	1:00	WAST	1980 Mar  8
 			1:00	-	WAT
 
 # Comoros
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Comoro	2:53:04 -	LMT	1911 Jul   # Moroni, Gran Comoro
-			3:00	-	EAT
+# See Africa/Nairobi.
 
-# Democratic Republic of Congo
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Kinshasa	1:01:12 -	LMT	1897 Nov 9
-			1:00	-	WAT
-Zone Africa/Lubumbashi	1:49:52 -	LMT	1897 Nov 9
-			2:00	-	CAT
+# Democratic Republic of the Congo
+# See Africa/Lagos for the western part and Africa/Maputo for the eastern.
 
 # Republic of the Congo
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Brazzaville	1:01:08 -	LMT	1912
-			1:00	-	WAT
+# See Africa/Lagos.
 
-# Cote D'Ivoire
+# Côte d'Ivoire / Ivory Coast
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Abidjan	-0:16:08 -	LMT	1912
 			 0:00	-	GMT
+Link Africa/Abidjan Africa/Bamako	# Mali
+Link Africa/Abidjan Africa/Banjul	# Gambia
+Link Africa/Abidjan Africa/Conakry	# Guinea
+Link Africa/Abidjan Africa/Dakar	# Senegal
+Link Africa/Abidjan Africa/Freetown	# Sierra Leone
+Link Africa/Abidjan Africa/Lome		# Togo
+Link Africa/Abidjan Africa/Nouakchott	# Mauritania
+Link Africa/Abidjan Africa/Ouagadougou	# Burkina Faso
+Link Africa/Abidjan Africa/Sao_Tome	# São Tomé and Príncipe
+Link Africa/Abidjan Atlantic/St_Helena	# St Helena
 
 # Djibouti
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Djibouti	2:52:36 -	LMT	1911 Jul
-			3:00	-	EAT
+# See Africa/Nairobi.
 
 ###############################################################################
 
 # Egypt
 
+# Milne says Cairo used 2:05:08.9, the local mean time of the Abbasizeh
+# observatory; round to nearest.  Milne also says that the official time for
+# Egypt was mean noon at the Great Pyramid, 2:04:30.5, but apparently this
+# did not apply to Cairo, Alexandria, or Port Said.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Egypt	1940	only	-	Jul	15	0:00	1:00	S
 Rule	Egypt	1940	only	-	Oct	 1	0:00	0	-
@@ -234,23 +224,33 @@
 Rule	Egypt	1990	1994	-	May	 1	1:00	1:00	S
 # IATA (after 1990) says transitions are at 0:00.
 # Go with IATA starting in 1995, except correct 1995 entry from 09-30 to 09-29.
-Rule	Egypt	1995	max	-	Apr	lastFri	 0:00s	1:00	S
-Rule	Egypt	1995	2005	-	Sep	lastThu	23:00s	0	-
+
+# From Alexander Krivenyshev (2011-04-20):
+# "...Egypt's interim cabinet decided on Wednesday to cancel daylight
+# saving time after a poll posted on its website showed the majority of
+# Egyptians would approve the cancellation."
+#
+# Egypt to cancel daylight saving time
+# http://www.almasryalyoum.com/en/node/407168
+# or
+# http://www.worldtimezone.com/dst_news/dst_news_egypt04.html
+Rule	Egypt	1995	2010	-	Apr	lastFri	 0:00s	1:00	S
+Rule	Egypt	1995	2005	-	Sep	lastThu	24:00	0	-
 # From Steffen Thorsen (2006-09-19):
 # The Egyptian Gazette, issue 41,090 (2006-09-18), page 1, reports:
 # Egypt will turn back clocks by one hour at the midnight of Thursday
 # after observing the daylight saving time since May.
 # http://news.gom.com.eg/gazette/pdf/2006/09/18/01.pdf
-Rule	Egypt	2006	only	-	Sep	21	23:00s	0	-
+Rule	Egypt	2006	only	-	Sep	21	24:00	0	-
 # From Dirk Losch (2007-08-14):
 # I received a mail from an airline which says that the daylight
 # saving time in Egypt will end in the night of 2007-09-06 to 2007-09-07.
-# From Jesper Norgaard Welen (2007-08-15): [The following agree:]
-# http://www.nentjes.info/Bill/bill5.htm 
+# From Jesper Nørgaard Welen (2007-08-15): [The following agree:]
+# http://www.nentjes.info/Bill/bill5.htm
 # http://www.timeanddate.com/worldclock/city.html?n=53
 # From Steffen Thorsen (2007-09-04): The official information...:
 # http://www.sis.gov.eg/En/EgyptOnline/Miscellaneous/000002/0207000000000000001580.htm
-Rule	Egypt	2007	only	-	Sep	Thu>=1	23:00s	0	-
+Rule	Egypt	2007	only	-	Sep	Thu>=1	24:00	0	-
 # From Abdelrahman Hassan (2007-09-06):
 # Due to the Hijri (lunar Islamic calendar) year being 11 days shorter
 # than the year of the Gregorian calendar, Ramadan shifts earlier each
@@ -284,15 +284,9 @@
 #
 # timeanddate[2] and another site I've found[3] also support that.
 #
-# [1] 
-# https://bugzilla.redhat.com/show_bug.cgi?id=492263
-# 
-# [2] 
-# http://www.timeanddate.com/worldclock/clockchange.html?n=53
-# 
-# [3] 
-# http://wwp.greenwichmeantime.com/time-zone/africa/egypt/
-# 
+# [1] https://bugzilla.redhat.com/show_bug.cgi?id=492263
+# [2] http://www.timeanddate.com/worldclock/clockchange.html?n=53
+# [3] http://wwp.greenwichmeantime.com/time-zone/africa/egypt/
 
 # From Arthur David Olson (2009-04-20):
 # In 2009 (and for the next several years), Ramadan ends before the fourth
@@ -300,85 +294,151 @@
 # in September.
 
 # From Steffen Thorsen (2009-08-11):
-# We have been able to confirm the August change with the Egyptian Cabinet 
+# We have been able to confirm the August change with the Egyptian Cabinet
 # Information and Decision Support Center:
-# 
 # http://www.timeanddate.com/news/time/egypt-dst-ends-2009.html
-# 
-# 
+#
 # The Middle East News Agency
-# 
 # http://www.mena.org.eg/index.aspx
-# 
 # also reports "Egypt starts winter time on August 21"
-# today in article numbered "71, 11/08/2009 12:25 GMT." 
+# today in article numbered "71, 11/08/2009 12:25 GMT."
 # Only the title above is available without a subscription to their service,
 # and can be found by searching for "winter" in their search engine
 # (at least today).
 
-Rule	Egypt	2008	only	-	Aug	lastThu	23:00s	0	-
-Rule	Egypt	2009	only	-	Aug	20	23:00s	0	-
-Rule	Egypt	2010	max	-	Sep	lastThu	23:00s	0	-
+# From Alexander Krivenyshev (2010-07-20):
+# According to News from Egypt - Al-Masry Al-Youm Egypt's cabinet has
+# decided that Daylight Saving Time will not be used in Egypt during
+# Ramadan.
+#
+# Arabic translation:
+# "Clocks to go back during Ramadan - and then forward again"
+# http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again
+# http://www.worldtimezone.com/dst_news/dst_news_egypt02.html
+
+# From Ahmad El-Dardiry (2014-05-07):
+# Egypt is to change back to Daylight system on May 15
+# http://english.ahram.org.eg/NewsContent/1/64/100735/Egypt/Politics-/Egypts-government-to-reapply-daylight-saving-time-.aspx
+
+# From Gunther Vermier (2014-05-13):
+# our Egypt office confirms that the change will be at 15 May "midnight" (24:00)
+
+# From Imed Chihi (2014-06-04):
+# We have finally "located" a precise official reference about the DST changes
+# in Egypt.  The Ministers Cabinet decision is explained at
+# http://www.cabinet.gov.eg/Media/CabinetMeetingsDetails.aspx?id=347 ...
+# [T]his (Arabic) site is not accessible outside Egypt, but the page ...
+# translates into: "With regard to daylight saving time, it is scheduled to
+# take effect at exactly twelve o'clock this evening, Thursday, 15 MAY 2014,
+# to be suspended by twelve o'clock on the evening of Thursday, 26 JUN 2014,
+# and re-established again at the end of the month of Ramadan, at twelve
+# o'clock on the evening of Thursday, 31 JUL 2014."  This statement has been
+# reproduced by other (more accessible) sites[, e.g.,]...
+# http://elgornal.net/news/news.aspx?id=4699258
+
+# From Paul Eggert (2014-06-04):
+# Sarah El Deeb and Lee Keath of AP report that the Egyptian government says
+# the change is because of blackouts in Cairo, even though Ahram Online (cited
+# above) says DST had no affect on electricity consumption.  There is
+# no information about when DST will end this fall.  See:
+# http://abcnews.go.com/International/wireStory/el-sissi-pushes-egyptians-line-23614833
+#
+# For now, guess that later spring and fall transitions will use
+# 2010's rules, and guess that Egypt will switch to standard time at
+# 24:00 the last Thursday before Ramadan, and back to DST at 00:00 the
+# first Friday after Ramadan.  To implement this,
+# transition dates for 2015 through 2037 were determined by running
+# the following program under GNU Emacs 24.3, with the results integrated
+# by hand into the table below.  Ramadan again intrudes on the guessed
+# DST starting in 2038, but that's beyond our somewhat-arbitrary cutoff.
+# (let ((islamic-year 1436))
+#   (while (< islamic-year 1460)
+#     (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
+#           (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
+#           (friday 5))
+#       (while (/= friday (mod a 7))
+#         (setq a (1- a)))
+#       (while (/= friday (mod b 7))
+#         (setq b (1+ b)))
+#       (setq a (1- a))
+#       (setq b (1- b))
+#       (setq a (calendar-gregorian-from-absolute a))
+#       (setq b (calendar-gregorian-from-absolute b))
+#       (insert
+#        (format
+#         (concat "Rule\tEgypt\t%d\tonly\t-\t%s\t%2d\t24:00\t0\t-\n"
+#                 "Rule\tEgypt\t%d\tonly\t-\t%s\t%2d\t24:00\t1:00\tS\n")
+#         (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
+#         (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
+#     (setq islamic-year (+ 1 islamic-year))))
+Rule	Egypt	2008	only	-	Aug	lastThu	24:00	0	-
+Rule	Egypt	2009	only	-	Aug	20	24:00	0	-
+Rule	Egypt	2010	only	-	Aug	10	24:00	0	-
+Rule	Egypt	2010	only	-	Sep	 9	24:00	1:00	S
+Rule	Egypt	2010	only	-	Sep	lastThu	24:00	0	-
+Rule	Egypt	2014	only	-	May	15	24:00	1:00	S
+Rule	Egypt	2014	only	-	Jun	26	24:00	0	-
+Rule	Egypt	2014	only	-	Jul	31	24:00	1:00	S
+Rule	Egypt	2014	max	-	Sep	lastThu	24:00	0	-
+Rule	Egypt	2015	2019	-	Apr	lastFri	 0:00s	1:00	S
+Rule	Egypt	2015	only	-	Jun	11	24:00	0	-
+Rule	Egypt	2015	only	-	Jul	23	24:00	1:00	S
+Rule	Egypt	2016	only	-	Jun	 2	24:00	0	-
+Rule	Egypt	2016	only	-	Jul	 7	24:00	1:00	S
+Rule	Egypt	2017	only	-	May	25	24:00	0	-
+Rule	Egypt	2017	only	-	Jun	29	24:00	1:00	S
+Rule	Egypt	2018	only	-	May	10	24:00	0	-
+Rule	Egypt	2018	only	-	Jun	14	24:00	1:00	S
+Rule	Egypt	2019	only	-	May	 2	24:00	0	-
+Rule	Egypt	2019	only	-	Jun	 6	24:00	1:00	S
+Rule	Egypt	2020	only	-	May	28	24:00	1:00	S
+Rule	Egypt	2021	only	-	May	13	24:00	1:00	S
+Rule	Egypt	2022	only	-	May	 5	24:00	1:00	S
+Rule	Egypt	2023	max	-	Apr	lastFri	 0:00s	1:00	S
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Cairo	2:05:00 -	LMT	1900 Oct
+Zone	Africa/Cairo	2:05:09 -	LMT	1900 Oct
 			2:00	Egypt	EE%sT
 
 # Equatorial Guinea
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Malabo	0:35:08 -	LMT	1912
-			0:00	-	GMT	1963 Dec 15
-			1:00	-	WAT
+# See Africa/Lagos.
 
 # Eritrea
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Asmara	2:35:32 -	LMT	1870
-			2:35:32	-	AMT	1890	      # Asmara Mean Time
-			2:35:20	-	ADMT	1936 May 5    # Adis Dera MT
-			3:00	-	EAT
-
 # Ethiopia
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time zones
-# between 1870 and 1890, and that they merged to 38E50 (2:35:20) in 1890.
-# We'll guess that 38E50 is for Adis Dera.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Addis_Ababa	2:34:48 -	LMT	1870
-			2:35:20	-	ADMT	1936 May 5    # Adis Dera MT
-			3:00	-	EAT
+# See Africa/Nairobi.
 
 # Gabon
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Libreville	0:37:48 -	LMT	1912
-			1:00	-	WAT
+# See Africa/Lagos.
 
 # Gambia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Banjul	-1:06:36 -	LMT	1912
-			-1:06:36 -	BMT	1935	# Banjul Mean Time
-			-1:00	-	WAT	1964
-			 0:00	-	GMT
+# See Africa/Abidjan.
 
 # Ghana
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-# Whitman says DST was observed from 1931 to ``the present'';
-# go with Shanks & Pottenger.
-Rule	Ghana	1936	1942	-	Sep	 1	0:00	0:20	GHST
-Rule	Ghana	1936	1942	-	Dec	31	0:00	0	GMT
+# Whitman says DST was observed from 1931 to "the present";
+# Shanks & Pottenger say 1936 to 1942;
+# and September 1 to January 1 is given by:
+# Scott Keltie J, Epstein M (eds), The Statesman's Year-Book,
+# 57th ed. Macmillan, London (1920), OCLC 609408015, pp xxviii.
+# For lack of better info, assume DST was observed from 1920 to 1942.
+Rule	Ghana	1920	1942	-	Sep	 1	0:00	0:20	GHST
+Rule	Ghana	1920	1942	-	Dec	31	0:00	0	GMT
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Accra	-0:00:52 -	LMT	1918
 			 0:00	Ghana	%s
 
 # Guinea
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Conakry	-0:54:52 -	LMT	1912
-			 0:00	-	GMT	1934 Feb 26
-			-1:00	-	WAT	1960
-			 0:00	-	GMT
+# See Africa/Abidjan.
 
 # Guinea-Bissau
+#
+# Shanks gives 1911-05-26 for the transition to WAT,
+# evidently confusing the date of the Portuguese decree
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# with the date that it took effect, namely 1912-01-01.
+#
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Bissau	-1:02:20 -	LMT	1911 May 26
+Zone	Africa/Bissau	-1:02:20 -	LMT	1912 Jan  1
 			-1:00	-	WAT	1975
 			 0:00	-	GMT
 
@@ -387,15 +447,20 @@
 Zone	Africa/Nairobi	2:27:16	-	LMT	1928 Jul
 			3:00	-	EAT	1930
 			2:30	-	BEAT	1940
-			2:44:45	-	BEAUT	1960
+			2:45	-	BEAUT	1960
 			3:00	-	EAT
+Link Africa/Nairobi Africa/Addis_Ababa	 # Ethiopia
+Link Africa/Nairobi Africa/Asmara	 # Eritrea
+Link Africa/Nairobi Africa/Dar_es_Salaam # Tanzania
+Link Africa/Nairobi Africa/Djibouti
+Link Africa/Nairobi Africa/Kampala	 # Uganda
+Link Africa/Nairobi Africa/Mogadishu	 # Somalia
+Link Africa/Nairobi Indian/Antananarivo	 # Madagascar
+Link Africa/Nairobi Indian/Comoro
+Link Africa/Nairobi Indian/Mayotte
 
 # Lesotho
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Maseru	1:50:00 -	LMT	1903 Mar
-			2:00	-	SAST	1943 Sep 19 2:00
-			2:00	1:00	SAST	1944 Mar 19 2:00
-			2:00	-	SAST
+# See Africa/Johannesburg.
 
 # Liberia
 # From Paul Eggert (2006-03-22):
@@ -416,6 +481,28 @@
 
 # Libya
 
+# From Even Scharning (2012-11-10):
+# Libya set their time one hour back at 02:00 on Saturday November 10.
+# http://www.libyaherald.com/2012/11/04/clocks-to-go-back-an-hour-on-saturday/
+# Here is an official source [in Arabic]: http://ls.ly/fb6Yc
+#
+# Steffen Thorsen forwarded a translation (2012-11-10) in
+# http://mm.icann.org/pipermail/tz/2012-November/018451.html
+#
+# From Tim Parenti (2012-11-11):
+# Treat the 2012-11-10 change as a zone change from UTC+2 to UTC+1.
+# The DST rules planned for 2013 and onward roughly mirror those of Europe
+# (either two days before them or five days after them, so as to fall on
+# lastFri instead of lastSun).
+
+# From Even Scharning (2013-10-25):
+# The scheduled end of DST in Libya on Friday, October 25, 2013 was
+# cancelled yesterday....
+# http://www.libyaherald.com/2013/10/24/correction-no-time-change-tomorrow/
+#
+# From Paul Eggert (2013-10-25):
+# For now, assume they're reverting to the pre-2012 rules of permanent UTC+2.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Libya	1951	only	-	Oct	14	2:00	1:00	S
 Rule	Libya	1952	only	-	Jan	 1	0:00	0	-
@@ -430,50 +517,39 @@
 Rule	Libya	1986	only	-	Oct	 3	0:00	0	-
 Rule	Libya	1987	1989	-	Apr	 1	0:00	1:00	S
 Rule	Libya	1987	1989	-	Oct	 1	0:00	0	-
+Rule	Libya	1997	only	-	Apr	 4	0:00	1:00	S
+Rule	Libya	1997	only	-	Oct	 4	0:00	0	-
+Rule	Libya	2013	only	-	Mar	lastFri	1:00	1:00	S
+Rule	Libya	2013	only	-	Oct	lastFri	2:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Tripoli	0:52:44 -	LMT	1920
 			1:00	Libya	CE%sT	1959
 			2:00	-	EET	1982
 			1:00	Libya	CE%sT	1990 May  4
-# The following entries are from Shanks & Pottenger;
-# the IATA SSIM data contain some obvious errors.
+# The 1996 and 1997 entries are from Shanks & Pottenger;
+# the IATA SSIM data entries contain some obvious errors.
 			2:00	-	EET	1996 Sep 30
-			1:00	-	CET	1997 Apr  4
-			1:00	1:00	CEST	1997 Oct  4
+			1:00	Libya	CE%sT	1997 Oct  4
+			2:00	-	EET	2012 Nov 10  2:00
+			1:00	Libya	CE%sT	2013 Oct 25  2:00
 			2:00	-	EET
 
 # Madagascar
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Indian/Antananarivo 3:10:04 -	LMT	1911 Jul
-			3:00	-	EAT	1954 Feb 27 23:00s
-			3:00	1:00	EAST	1954 May 29 23:00s
-			3:00	-	EAT
+# See Africa/Nairobi.
 
 # Malawi
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Blantyre	2:20:00 -	LMT	1903 Mar
-			2:00	-	CAT
+# See Africa/Maputo.
 
 # Mali
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Bamako	-0:32:00 -	LMT	1912
-			 0:00	-	GMT	1934 Feb 26
-			-1:00	-	WAT	1960 Jun 20
-			 0:00	-	GMT
-
 # Mauritania
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Nouakchott	-1:03:48 -	LMT	1912
-			 0:00	-	GMT	1934 Feb 26
-			-1:00	-	WAT	1960 Nov 28
-			 0:00	-	GMT
+# See Africa/Abidjan.
 
 # Mauritius
 
 # From Steffen Thorsen (2008-06-25):
 # Mauritius plans to observe DST from 2008-11-01 to 2009-03-31 on a trial
 # basis....
-# It seems that Mauritius observed daylight saving time from 1982-10-10 to 
+# It seems that Mauritius observed daylight saving time from 1982-10-10 to
 # 1983-03-20 as well, but that was not successful....
 # http://www.timeanddate.com/news/time/mauritius-daylight-saving-time.html
 
@@ -490,39 +566,32 @@
 
 # From Steffen Thorsen (2008-07-10):
 # According to
-# 
 # http://www.lexpress.mu/display_article.php?news_id=111216
-# 
 # (in French), Mauritius will start and end their DST a few days earlier
 # than previously announced (2008-11-01 to 2009-03-31).  The new start
 # date is 2008-10-26 at 02:00 and the new end date is 2009-03-27 (no time
 # given, but it is probably at either 2 or 3 wall clock time).
-# 
-# A little strange though, since the article says that they moved the date 
-# to align itself with Europe and USA which also change time on that date, 
-# but that means they have not paid attention to what happened in 
-# USA/Canada last year (DST ends first Sunday in November). I also wonder 
-# why that they end on a Friday, instead of aligning with Europe which 
+#
+# A little strange though, since the article says that they moved the date
+# to align itself with Europe and USA which also change time on that date,
+# but that means they have not paid attention to what happened in
+# USA/Canada last year (DST ends first Sunday in November). I also wonder
+# why that they end on a Friday, instead of aligning with Europe which
 # changes two days later.
 
 # From Alex Krivenyshev (2008-07-11):
 # Seems that English language article "The revival of daylight saving
-# time:  Energy conservation?"-# No. 16578 (07/11/2008) was originally
+# time: Energy conservation?"-# No. 16578 (07/11/2008) was originally
 # published on Monday, June 30, 2008...
 #
 # I guess that article in French "Le gouvernement avance l'introduction
-# de l'heure d'ete" stating that DST in Mauritius starting on October 26
-# and ending on March 27, 2009 is the most recent one.
-# ...
-# 
+# de l'heure d'été" stating that DST in Mauritius starting on October 26
+# and ending on March 27, 2009 is the most recent one....
 # http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html
-# 
 
 # From Riad M. Hossen Ally (2008-08-03):
 # The Government of Mauritius weblink
-# 
 # http://www.gov.mu/portal/site/pmosite/menuitem.4ca0efdee47462e7440a600248a521ca/?content_id=4728ca68b2a5b110VgnVCM1000000a04a8c0RCRD
-# 
 # Cabinet Decision of July 18th, 2008 states as follows:
 #
 # 4. ...Cabinet has agreed to the introduction into the National Assembly
@@ -532,36 +601,28 @@
 # States of America. It will start at two o'clock in the morning on the
 # last Sunday of October and will end at two o'clock in the morning on
 # the last Sunday of March the following year. The summer time for the
-# year 2008 - 2009 will, therefore, be effective as from 26 October 2008
+# year 2008-2009 will, therefore, be effective as from 26 October 2008
 # and end on 29 March 2009.
 
 # From Ed Maste (2008-10-07):
 # THE TIME BILL (No. XXVII of 2008) Explanatory Memorandum states the
 # beginning / ending of summer time is 2 o'clock standard time in the
 # morning of the last Sunday of October / last Sunday of March.
-# 
 # http://www.gov.mu/portal/goc/assemblysite/file/bill2708.pdf
-# 
 
 # From Steffen Thorsen (2009-06-05):
 # According to several sources, Mauritius will not continue to observe
 # DST the coming summer...
 #
 # Some sources, in French:
-# 
 # http://www.defimedia.info/news/946/Rashid-Beebeejaun-:-%C2%AB-L%E2%80%99heure-d%E2%80%99%C3%A9t%C3%A9-ne-sera-pas-appliqu%C3%A9e-cette-ann%C3%A9e-%C2%BB
-# 
-# 
 # http://lexpress.mu/Story/3398~Beebeejaun---Les-objectifs-d-%C3%A9conomie-d-%C3%A9nergie-de-l-heure-d-%C3%A9t%C3%A9-ont-%C3%A9t%C3%A9-atteints-
-# 
 #
 # Our wrap-up:
-# 
 # http://www.timeanddate.com/news/time/mauritius-dst-will-not-repeat.html
-# 
 
 # From Arthur David Olson (2009-07-11):
-# The "mauritius-dst-will-not-repeat" wrapup includes this: 
+# The "mauritius-dst-will-not-repeat" wrapup includes this:
 # "The trial ended on March 29, 2009, when the clocks moved back by one hour
 # at 2am (or 02:00) local time..."
 
@@ -571,18 +632,16 @@
 Rule Mauritius	2008	only	-	Oct	lastSun	2:00	1:00	S
 Rule Mauritius	2009	only	-	Mar	lastSun	2:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Indian/Mauritius	3:50:00 -	LMT	1907		# Port Louis
+Zone Indian/Mauritius	3:50:00 -	LMT	1907 # Port Louis
 			4:00 Mauritius	MU%sT	# Mauritius Time
 # Agalega Is, Rodriguez
 # no information; probably like Indian/Mauritius
 
 # Mayotte
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
-			3:00	-	EAT
+# See Africa/Nairobi.
 
 # Morocco
-# See the `europe' file for Spanish Morocco (Africa/Ceuta).
+# See the 'europe' file for Spanish Morocco (Africa/Ceuta).
 
 # From Alex Krivenyshev (2008-05-09):
 # Here is an article that Morocco plan to introduce Daylight Saving Time between
@@ -590,117 +649,77 @@
 #
 # "... Morocco is to save energy by adjusting its clock during summer so it will
 # be one hour ahead of GMT between 1 June and 27 September, according to
-# Communication Minister and Gov ernment Spokesman, Khalid Naciri...."
+# Communication Minister and Government Spokesman, Khalid Naciri...."
 #
-# 
 # http://www.worldtimezone.net/dst_news/dst_news_morocco01.html
-# 
-# OR
-# 
 # http://en.afrik.com/news11892.html
-# 
 
 # From Alex Krivenyshev (2008-05-09):
-# The Morocco time change can be confirmed on Morocco web site Maghreb Arabe Presse:
-# 
+# The Morocco time change can be confirmed on Morocco web site Maghreb Arabe
+# Presse:
 # http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view
-# 
 #
 # Morocco shifts to daylight time on June 1st through September 27, Govt.
 # spokesman.
 
 # From Patrice Scattolin (2008-05-09):
 # According to this article:
-# 
 # http://www.avmaroc.com/actualite/heure-dete-comment-a127896.html
-# 
-# (and republished here:
-# 
-# http://www.actu.ma/heure-dete-comment_i127896_0.html
-# 
-# )
-# the changes occurs at midnight:
-#
-# saturday night may 31st at midnight (which in french is to be
-# intrepreted as the night between saturday and sunday)
-# sunday night the 28th  at midnight
-#
-# Seeing that the 28th is monday, I am guessing that she intends to say
-# the midnight of the 28th which is the midnight between sunday and
-# monday, which jives with other sources that say that it's inclusive
-# june1st to sept 27th.
+# (and republished here: )
+# the changes occur at midnight:
+#
+# Saturday night May 31st at midnight (which in French is to be
+# interpreted as the night between Saturday and Sunday)
+# Sunday night the 28th at midnight
+#
+# Seeing that the 28th is Monday, I am guessing that she intends to say
+# the midnight of the 28th which is the midnight between Sunday and
+# Monday, which jives with other sources that say that it's inclusive
+# June 1st to Sept 27th.
 #
 # The decision was taken by decree *2-08-224 *but I can't find the decree
 # published on the web.
 #
 # It's also confirmed here:
-# 
 # http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm
-# 
-# on a government portal as being  between june 1st and sept 27th (not yet
-# posted in english).
+# on a government portal as being between June 1st and Sept 27th (not yet
+# posted in English).
 #
-# The following google query will generate many relevant hits:
-# 
+# The following Google query will generate many relevant hits:
 # http://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search
-# 
-
-# From Alex Krivenyshev (2008-05-09):
-# Is Western Sahara (part which administrated by Morocco) going to follow
-# Morocco DST changes?  Any information?  What about other part of
-# Western Sahara - under administration of POLISARIO Front (also named
-# SADR Saharawi Arab Democratic Republic)?
-
-# From Arthur David Olson (2008-05-09):
-# XXX--guess that it is only Morocco for now; guess only 2008 for now.
 
 # From Steffen Thorsen (2008-08-27):
-# Morocco will change the clocks back on the midnight between August 31 
-# and September 1. They originally planned to observe DST to near the end 
+# Morocco will change the clocks back on the midnight between August 31
+# and September 1. They originally planned to observe DST to near the end
 # of September:
 #
 # One article about it (in French):
-# 
 # http://www.menara.ma/fr/Actualites/Maroc/Societe/ci.retour_a_l_heure_gmt_a_partir_du_dimanche_31_aout_a_minuit_officiel_.default
-# 
 #
 # We have some further details posted here:
-# 
 # http://www.timeanddate.com/news/time/morocco-ends-dst-early-2008.html
-# 
 
 # From Steffen Thorsen (2009-03-17):
 # Morocco will observe DST from 2009-06-01 00:00 to 2009-08-21 00:00 according
 # to many sources, such as
-# 
 # http://news.marweb.com/morocco/entertainment/morocco-daylight-saving.html
-# 
-# 
 # http://www.medi1sat.ma/fr/depeche.aspx?idp=2312
-# 
 # (French)
 #
 # Our summary:
-# 
 # http://www.timeanddate.com/news/time/morocco-starts-dst-2009.html
-# 
 
 # From Alexander Krivenyshev (2009-03-17):
 # Here is a link to official document from Royaume du Maroc Premier Ministre,
-# Ministere de la Modernisation des Secteurs Publics
+# Ministère de la Modernisation des Secteurs Publics
 #
 # Under Article 1 of Royal Decree No. 455-67 of Act 23 safar 1387 (2 june 1967)
 # concerning the amendment of the legal time, the Ministry of Modernization of
 # Public Sectors announced that the official time in the Kingdom will be
 # advanced 60 minutes from Sunday 31 May 2009 at midnight.
 #
-# 
 # http://www.mmsp.gov.ma/francais/Actualites_fr/PDF_Actualites_Fr/HeureEte_FR.pdf
-# 
-#
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_morocco03.html
-# 
 
 # From Steffen Thorsen (2010-04-13):
 # Several news media in Morocco report that the Ministry of Modernization
@@ -708,14 +727,134 @@
 # 2010-05-02 to 2010-08-08.
 #
 # Example:
-# 
 # http://www.lavieeco.com/actualites/4099-le-maroc-passera-a-l-heure-d-ete-gmt1-le-2-mai.html
-# 
 # (French)
 # Our page:
-# 
 # http://www.timeanddate.com/news/time/morocco-starts-dst-2010.html
-# 
+
+# From Dan Abitol (2011-03-30):
+# ...Rules for Africa/Casablanca are the following (24h format)
+# The 3rd April 2011 at 00:00:00, [it] will be 3rd April 01:00:00
+# The 31st July 2011 at 00:59:59, [it] will be 31st July 00:00:00
+# ...Official links of change in morocco
+# The change was broadcast on the FM Radio
+# I ve called ANRT (telecom regulations in Morocco) at
+# +212.537.71.84.00
+# http://www.anrt.net.ma/fr/
+# They said that
+# http://www.map.ma/fr/sections/accueil/l_heure_legale_au_ma/view
+# is the official publication to look at.
+# They said that the decision was already taken.
+#
+# More articles in the press
+# http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-leve.html
+# http://www.lematin.ma/Actualite/Express/Article.asp?id=148923
+# http://www.lavieeco.com/actualite/Le-Maroc-passe-sur-GMT%2B1-a-partir-de-dim
+
+# From Petr Machata (2011-03-30):
+# They have it written in English here:
+# http://www.map.ma/eng/sections/home/morocco_to_spring_fo/view
+#
+# It says there that "Morocco will resume its standard time on July 31,
+# 2011 at midnight." Now they don't say whether they mean midnight of
+# wall clock time (i.e. 11pm UTC), but that's what I would assume. It has
+# also been like that in the past.
+
+# From Alexander Krivenyshev (2012-03-09):
+# According to Infomédiaire web site from Morocco (infomediaire.ma),
+# on March 9, 2012, (in French) Heure légale:
+# Le Maroc adopte officiellement l'heure d'été
+# http://www.infomediaire.ma/news/maroc/heure-l%C3%A9gale-le-maroc-adopte-officiellement-lheure-d%C3%A9t%C3%A9
+# Governing Council adopted draft decree, that Morocco DST starts on
+# the last Sunday of March (March 25, 2012) and ends on
+# last Sunday of September (September 30, 2012)
+# except the month of Ramadan.
+# or (brief)
+# http://www.worldtimezone.com/dst_news/dst_news_morocco06.html
+
+# From Arthur David Olson (2012-03-10):
+# The infomediaire.ma source indicates that the system is to be in
+# effect every year. It gives 03H00 as the "fall back" time of day;
+# it lacks a "spring forward" time of day; assume 2:00 XXX.
+# Wait on specifying the Ramadan exception for details about
+# start date, start time of day, end date, and end time of day XXX.
+
+# From Christophe Tropamer (2012-03-16):
+# Seen Morocco change again:
+# http://www.le2uminutes.com/actualite.php
+# "...à partir du dernier dimanche d'avril et non fins mars,
+# comme annoncé précédemment."
+
+# From Milamber Space Network (2012-07-17):
+# The official return to GMT is announced by the Moroccan government:
+# http://www.mmsp.gov.ma/fr/actualites.aspx?id=288 [in French]
+#
+# Google translation, lightly edited:
+# Back to the standard time of the Kingdom (GMT)
+# Pursuant to Decree No. 2-12-126 issued on 26 Jumada (I) 1433 (April 18,
+# 2012) and in accordance with the order of Mr. President of the
+# Government No. 3-47-12 issued on 24 Sha'ban (11 July 2012), the Ministry
+# of Public Service and Administration Modernization announces the return
+# of the legal time of the Kingdom (GMT) from Friday, July 20, 2012 until
+# Monday, August 20, 2012.  So the time will be delayed by 60 minutes from
+# 3:00 am Friday, July 20, 2012 and will again be advanced by 60 minutes
+# August 20, 2012 from 2:00 am.
+
+# From Paul Eggert (2013-03-06):
+# Morocco's daylight-saving transitions due to Ramadan seem to be
+# announced a bit in advance.  On 2012-07-11 the Moroccan government
+# announced that year's Ramadan daylight-saving transitions would be
+# 2012-07-20 and 2012-08-20; see
+# http://www.mmsp.gov.ma/fr/actualites.aspx?id=288
+
+# From Andrew Paprocki (2013-07-02):
+# Morocco announced that the year's Ramadan daylight-savings
+# transitions would be 2013-07-07 and 2013-08-10; see:
+# http://www.maroc.ma/en/news/morocco-suspends-daylight-saving-time-july-7-aug10
+
+# From Steffen Thorsen (2013-09-28):
+# Morocco extends DST by one month, on very short notice, just 1 day
+# before it was going to end.  There is a new decree (2.13.781) for
+# this, where DST from now on goes from last Sunday of March at 02:00
+# to last Sunday of October at 03:00, similar to EU rules.  Official
+# source (French):
+# http://www.maroc.gov.ma/fr/actualites/lhoraire-dete-gmt1-maintenu-jusquau-27-octobre-2013
+# Another source (specifying the time for start and end in the decree):
+# http://www.lemag.ma/Heure-d-ete-au-Maroc-jusqu-au-27-octobre_a75620.html
+
+# From Sebastien Willemijns (2014-03-18):
+# http://www.afriquinfos.com/articles/2014/3/18/maroc-heure-dete-avancez-tous-horloges-247891.asp
+
+# From Milamber Space Network (2014-06-05):
+# The Moroccan government has recently announced that the country will return
+# to standard time at 03:00 on Saturday, June 28, 2014 local time....  DST
+# will resume again at 02:00 on Saturday, August 2, 2014....
+# http://www.mmsp.gov.ma/fr/actualites.aspx?id=586
+
+# From Paul Eggert (2014-06-05):
+# For now, guess that later spring and fall transitions will use 2014's rules,
+# and guess that Morocco will switch to standard time at 03:00 the last
+# Saturday before Ramadan, and back to DST at 02:00 the first Saturday after
+# Ramadan.  To implement this, transition dates for 2015 through 2037 were
+# determined by running the following program under GNU Emacs 24.3, with the
+# results integrated by hand into the table below.
+# (let ((islamic-year 1436))
+#   (while (< islamic-year 1460)
+#     (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
+#           (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
+#           (saturday 6))
+#       (while (/= saturday (mod (setq a (1- a)) 7)))
+#       (while (/= saturday (mod b 7))
+#         (setq b (1+ b)))
+#       (setq a (calendar-gregorian-from-absolute a))
+#       (setq b (calendar-gregorian-from-absolute b))
+#       (insert
+#        (format
+#         (concat "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 3:00\t0\t-\n"
+#                 "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 2:00\t1:00\tS\n")
+#         (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
+#         (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
+#     (setq islamic-year (+ 1 islamic-year))))
 
 # RULE	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 
@@ -737,37 +876,97 @@
 Rule	Morocco	2008	only	-	Jun	 1	 0:00	1:00	S
 Rule	Morocco	2008	only	-	Sep	 1	 0:00	0	-
 Rule	Morocco	2009	only	-	Jun	 1	 0:00	1:00	S
-Rule	Morocco	2009	only	-	Aug	 21	 0:00	0	-
+Rule	Morocco	2009	only	-	Aug	21	 0:00	0	-
 Rule	Morocco	2010	only	-	May	 2	 0:00	1:00	S
 Rule	Morocco	2010	only	-	Aug	 8	 0:00	0	-
+Rule	Morocco	2011	only	-	Apr	 3	 0:00	1:00	S
+Rule	Morocco	2011	only	-	Jul	31	 0	0	-
+Rule	Morocco	2012	2013	-	Apr	lastSun	 2:00	1:00	S
+Rule	Morocco	2012	only	-	Sep	30	 3:00	0	-
+Rule	Morocco	2012	only	-	Jul	20	 3:00	0	-
+Rule	Morocco	2012	only	-	Aug	20	 2:00	1:00	S
+Rule	Morocco	2013	only	-	Jul	 7	 3:00	0	-
+Rule	Morocco	2013	only	-	Aug	10	 2:00	1:00	S
+Rule	Morocco	2013	max	-	Oct	lastSun	 3:00	0	-
+Rule	Morocco	2014	2022	-	Mar	lastSun	 2:00	1:00	S
+Rule	Morocco	2014	only	-	Jun	28	 3:00	0	-
+Rule	Morocco	2014	only	-	Aug	 2	 2:00	1:00	S
+Rule	Morocco	2015	only	-	Jun	13	 3:00	0	-
+Rule	Morocco	2015	only	-	Jul	18	 2:00	1:00	S
+Rule	Morocco	2016	only	-	Jun	 4	 3:00	0	-
+Rule	Morocco	2016	only	-	Jul	 9	 2:00	1:00	S
+Rule	Morocco	2017	only	-	May	20	 3:00	0	-
+Rule	Morocco	2017	only	-	Jul	 1	 2:00	1:00	S
+Rule	Morocco	2018	only	-	May	12	 3:00	0	-
+Rule	Morocco	2018	only	-	Jun	16	 2:00	1:00	S
+Rule	Morocco	2019	only	-	May	 4	 3:00	0	-
+Rule	Morocco	2019	only	-	Jun	 8	 2:00	1:00	S
+Rule	Morocco	2020	only	-	Apr	18	 3:00	0	-
+Rule	Morocco	2020	only	-	May	30	 2:00	1:00	S
+Rule	Morocco	2021	only	-	Apr	10	 3:00	0	-
+Rule	Morocco	2021	only	-	May	15	 2:00	1:00	S
+Rule	Morocco	2022	only	-	Apr	 2	 3:00	0	-
+Rule	Morocco	2022	only	-	May	 7	 2:00	1:00	S
+Rule	Morocco	2023	only	-	Apr	22	 2:00	1:00	S
+Rule	Morocco	2024	only	-	Apr	13	 2:00	1:00	S
+Rule	Morocco	2025	only	-	Apr	 5	 2:00	1:00	S
+Rule	Morocco	2026	max	-	Mar	lastSun	 2:00	1:00	S
+Rule	Morocco	2035	only	-	Oct	27	 3:00	0	-
+Rule	Morocco	2036	only	-	Oct	18	 3:00	0	-
+Rule	Morocco	2037	only	-	Oct	10	 3:00	0	-
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
 			 0:00	Morocco	WE%sT	1984 Mar 16
 			 1:00	-	CET	1986
 			 0:00	Morocco	WE%sT
+
 # Western Sahara
-Zone Africa/El_Aaiun	-0:52:48 -	LMT	1934 Jan
+#
+# From Gwillim Law (2013-10-22):
+# A correspondent who is usually well informed about time zone matters
+# ... says that Western Sahara observes daylight saving time, just as
+# Morocco does.
+#
+# From Paul Eggert (2013-10-23):
+# Assume that this has been true since Western Sahara switched to GMT,
+# since most of it was then controlled by Morocco.
+
+Zone Africa/El_Aaiun	-0:52:48 -	LMT	1934 Jan # El Aaiún
 			-1:00	-	WAT	1976 Apr 14
-			 0:00	-	WET
+			 0:00	Morocco	WE%sT
 
 # Mozambique
+#
+# Shanks gives 1903-03-01 for the transition to CAT.
+# Perhaps the 1911-05-26 Portuguese decree
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# merely made it official?
+#
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Maputo	2:10:20 -	LMT	1903 Mar
 			2:00	-	CAT
+Link Africa/Maputo Africa/Blantyre	# Malawi
+Link Africa/Maputo Africa/Bujumbura	# Burundi
+Link Africa/Maputo Africa/Gaborone	# Botswana
+Link Africa/Maputo Africa/Harare	# Zimbabwe
+Link Africa/Maputo Africa/Kigali	# Rwanda
+Link Africa/Maputo Africa/Lubumbashi	# E Dem. Rep. of Congo
+Link Africa/Maputo Africa/Lusaka	# Zambia
 
 # Namibia
 # The 1994-04-03 transition is from Shanks & Pottenger.
 # Shanks & Pottenger report no DST after 1998-04; go with IATA.
 
-# From Petronella Sibeene (2007-03-30) in
-# :
+# From Petronella Sibeene (2007-03-30):
+# http://allafrica.com/stories/200703300178.html
 # While the entire country changes its time, Katima Mulilo and other
 # settlements in Caprivi unofficially will not because the sun there
 # rises and sets earlier compared to other regions.  Chief of
 # Forecasting Riaan van Zyl explained that the far eastern parts of
 # the country are close to 40 minutes earlier in sunrise than the rest
 # of the country.
-# 
+#
 # From Paul Eggert (2007-03-31):
 # Apparently the Caprivi Strip informally observes Botswana time, but
 # we have no details.  In the meantime people there can use Africa/Gaborone.
@@ -777,34 +976,41 @@
 Rule	Namibia	1995	max	-	Apr	Sun>=1	2:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Windhoek	1:08:24 -	LMT	1892 Feb 8
-			1:30	-	SWAT	1903 Mar	# SW Africa Time
-			2:00	-	SAST	1942 Sep 20 2:00
-			2:00	1:00	SAST	1943 Mar 21 2:00
+			1:30	-	SWAT	1903 Mar    # SW Africa Time
+			2:00	-	SAST	1942 Sep 20  2:00
+			2:00	1:00	SAST	1943 Mar 21  2:00
 			2:00	-	SAST	1990 Mar 21 # independence
 			2:00	-	CAT	1994 Apr  3
 			1:00	Namibia	WA%sT
 
 # Niger
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Niamey	 0:08:28 -	LMT	1912
-			-1:00	-	WAT	1934 Feb 26
-			 0:00	-	GMT	1960
-			 1:00	-	WAT
+# See Africa/Lagos.
 
 # Nigeria
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Lagos	0:13:36 -	LMT	1919 Sep
 			1:00	-	WAT
+Link Africa/Lagos Africa/Bangui	     # Central African Republic
+Link Africa/Lagos Africa/Brazzaville # Rep. of the Congo
+Link Africa/Lagos Africa/Douala	     # Cameroon
+Link Africa/Lagos Africa/Kinshasa    # Dem. Rep. of the Congo (west)
+Link Africa/Lagos Africa/Libreville  # Gabon
+Link Africa/Lagos Africa/Luanda	     # Angola
+Link Africa/Lagos Africa/Malabo	     # Equatorial Guinea
+Link Africa/Lagos Africa/Niamey	     # Niger
+Link Africa/Lagos Africa/Porto-Novo  # Benin
 
-# Reunion
+# Réunion
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Reunion	3:41:52 -	LMT	1911 Jun	# Saint-Denis
-			4:00	-	RET	# Reunion Time
+Zone	Indian/Reunion	3:41:52 -	LMT	1911 Jun # Saint-Denis
+			4:00	-	RET	# Réunion Time
+#
+# Crozet Islands also observes Réunion time; see the 'antarctica' file.
 #
-# Scattered Islands (Iles Eparses) administered from Reunion are as follows.
+# Scattered Islands (Îles Éparses) administered from Réunion are as follows.
 # The following information about them is taken from
-# Iles Eparses (www.outre-mer.gouv.fr/domtom/ile.htm, 1997-07-22, in French;
-# no longer available as of 1999-08-17).
+# Îles Éparses (, 1997-07-22,
+# in French; no longer available as of 1999-08-17).
 # We have no info about their time zone histories.
 #
 # Bassas da India - uninhabited
@@ -814,37 +1020,24 @@
 # Tromelin - inhabited until at least 1958
 
 # Rwanda
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Kigali	2:00:16 -	LMT	1935 Jun
-			2:00	-	CAT
+# See Africa/Maputo.
 
 # St Helena
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Atlantic/St_Helena	-0:22:48 -	LMT	1890		# Jamestown
-			-0:22:48 -	JMT	1951	# Jamestown Mean Time
-			 0:00	-	GMT
+# See Africa/Abidjan.
 # The other parts of the St Helena territory are similar:
 #	Tristan da Cunha: on GMT, say Whitman and the CIA
-#	Ascension: on GMT, says usno1995 and the CIA
+#	Ascension: on GMT, say the USNO (1995-12-21) and the CIA
 #	Gough (scientific station since 1955; sealers wintered previously):
 #		on GMT, says the CIA
-#	Inaccessible, Nightingale: no information, but probably GMT
-
-# Sao Tome and Principe
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Sao_Tome	 0:26:56 -	LMT	1884
-			-0:36:32 -	LMT	1912	# Lisbon Mean Time
-			 0:00	-	GMT
+#	Inaccessible, Nightingale: uninhabited
 
+# São Tomé and Príncipe
 # Senegal
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Dakar	-1:09:44 -	LMT	1912
-			-1:00	-	WAT	1941 Jun
-			 0:00	-	GMT
+# See Africa/Abidjan.
 
 # Seychelles
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Mahe	3:41:48 -	LMT	1906 Jun	# Victoria
+Zone	Indian/Mahe	3:41:48 -	LMT	1906 Jun # Victoria
 			4:00	-	SCT	# Seychelles Time
 # From Paul Eggert (2001-05-30):
 # Aldabra, Farquhar, and Desroches, originally dependencies of the
@@ -854,24 +1047,10 @@
 # Possibly the islands were uninhabited.
 
 # Sierra Leone
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-# Whitman gives Mar 31 - Aug 31 for 1931 on; go with Shanks & Pottenger.
-Rule	SL	1935	1942	-	Jun	 1	0:00	0:40	SLST
-Rule	SL	1935	1942	-	Oct	 1	0:00	0	WAT
-Rule	SL	1957	1962	-	Jun	 1	0:00	1:00	SLST
-Rule	SL	1957	1962	-	Sep	 1	0:00	0	GMT
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Freetown	-0:53:00 -	LMT	1882
-			-0:53:00 -	FMT	1913 Jun # Freetown Mean Time
-			-1:00	SL	%s	1957
-			 0:00	SL	%s
+# See Africa/Abidjan.
 
 # Somalia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Mogadishu	3:01:28 -	LMT	1893 Nov
-			3:00	-	EAT	1931
-			2:30	-	BEAT	1957
-			3:00	-	EAT
+# See Africa/Nairobi.
 
 # South Africa
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -881,15 +1060,18 @@
 Zone Africa/Johannesburg 1:52:00 -	LMT	1892 Feb 8
 			1:30	-	SAST	1903 Mar
 			2:00	SA	SAST
+Link Africa/Johannesburg Africa/Maseru	   # Lesotho
+Link Africa/Johannesburg Africa/Mbabane    # Swaziland
+#
 # Marion and Prince Edward Is
 # scientific station since 1947
 # no information
 
 # Sudan
 #
-# From 
-# Sudan News Agency (2000-01-13)
-# , also reported by Michael De Beukelaer-Dossche via Steffen Thorsen:
+# From 
+# Sudan News Agency (2000-01-13),
+# also reported by Michaël De Beukelaer-Dossche via Steffen Thorsen:
 # Clocks will be moved ahead for 60 minutes all over the Sudan as of noon
 # Saturday....  This was announced Thursday by Caretaker State Minister for
 # Manpower Abdul-Rahman Nur-Eddin.
@@ -904,27 +1086,22 @@
 			2:00	Sudan	CA%sT	2000 Jan 15 12:00
 			3:00	-	EAT
 
+# South Sudan
+Link Africa/Khartoum Africa/Juba
+
 # Swaziland
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Mbabane	2:04:24 -	LMT	1903 Mar
-			2:00	-	SAST
+# See Africa/Johannesburg.
 
 # Tanzania
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Dar_es_Salaam 2:37:08 -	LMT	1931
-			3:00	-	EAT	1948
-			2:44:45	-	BEAUT	1961
-			3:00	-	EAT
+# See Africa/Nairobi.
 
 # Togo
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Lome	0:04:52 -	LMT	1893
-			0:00	-	GMT
+# See Africa/Abidjan.
 
 # Tunisia
 
 # From Gwillim Law (2005-04-30):
-# My correspondent, Risto Nykanen, has alerted me to another adoption of DST,
+# My correspondent, Risto Nykänen, has alerted me to another adoption of DST,
 # this time in Tunisia.  According to Yahoo France News
 # , in a story attributed to AP
 # and dated 2005-04-26, "Tunisia has decided to advance its official time by
@@ -933,8 +1110,8 @@
 # Saturday."  (My translation)
 #
 # From Oscar van Vlijmen (2005-05-02):
-# LaPresse, the first national daily newspaper ...
-# 
+# La Presse, the first national daily newspaper ...
+# http://www.lapresse.tn/archives/archives280405/actualites/lheure.html
 # ... DST for 2005: on: Sun May 1 0h standard time, off: Fri Sept. 30,
 # 1h standard time.
 #
@@ -947,18 +1124,12 @@
 # From Steffen Thorsen (2009-03-16):
 # According to several news sources, Tunisia will not observe DST this year.
 # (Arabic)
-# 
 # http://www.elbashayer.com/?page=viewn&nid=42546
-# 
-# 
 # http://www.babnet.net/kiwidetail-15295.asp
-# 
 #
 # We have also confirmed this with the US embassy in Tunisia.
 # We have a wrap-up about this on the following page:
-# 
 # http://www.timeanddate.com/news/time/tunisia-cancels-dst-2009.html
-# 
 
 # From Alexander Krivenyshev (2009-03-17):
 # Here is a link to Tunis Afrique Presse News Agency
@@ -966,20 +1137,17 @@
 # Standard time to be kept the whole year long (tap.info.tn):
 #
 # (in English)
-# 
 # http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=26813&Itemid=157
-# 
 #
 # (in Arabic)
-# 
 # http://www.tap.info.tn/ar/index.php?option=com_content&task=view&id=61240&Itemid=1
-# 
 
-# From Arthur David Olson (2009--3-18):
-# The Tunis Afrique Presse News Agency notice contains this: "This measure is due to the fact
-# that the fasting month of ramadan coincides with the period concerned by summer time.
-# Therefore, the standard time will be kept unchanged the whole year long."
-# So foregoing DST seems to be an exception (albeit one that may be repeated in the  future).
+# From Arthur David Olson (2009-03-18):
+# The Tunis Afrique Presse News Agency notice contains this: "This measure is
+# due to the fact that the fasting month of Ramadan coincides with the period
+# concerned by summer time.  Therefore, the standard time will be kept
+# unchanged the whole year long."  So foregoing DST seems to be an exception
+# (albeit one that may be repeated in the future).
 
 # From Alexander Krivenyshev (2010-03-27):
 # According to some news reports Tunis confirmed not to use DST in 2010
@@ -991,12 +1159,8 @@
 # coincided with the month of Ramadan..."
 #
 # (in Arabic)
-# 
 # http://www.moheet.com/show_news.aspx?nid=358861&pg=1
-# 
 # http://www.almadenahnews.com/newss/news.php?c=118&id=38036
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_tunis02.html
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -1031,23 +1195,12 @@
 # Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Tunis	0:40:44 -	LMT	1881 May 12
-			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
+			0:09:21	-	PMT	1911 Mar 11 # Paris Mean Time
 			1:00	Tunisia	CE%sT
 
 # Uganda
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Kampala	2:09:40 -	LMT	1928 Jul
-			3:00	-	EAT	1930
-			2:30	-	BEAT	1948
-			2:44:45	-	BEAUT	1957
-			3:00	-	EAT
+# See Africa/Nairobi.
 
 # Zambia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Lusaka	1:53:08 -	LMT	1903 Mar
-			2:00	-	CAT
-
 # Zimbabwe
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Harare	2:04:12 -	LMT	1903 Mar
-			2:00	-	CAT
+# See Africa/Maputo.
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/antarctica openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/antarctica
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/antarctica	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/antarctica	2015-01-20 02:20:42.000000000 +0000
@@ -1,59 +1,44 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
 # From Paul Eggert (1999-11-15):
 # To keep things manageable, we list only locations occupied year-round; see
-# 
 # COMNAP - Stations and Bases
-# 
+# http://www.comnap.aq/comnap/comnap.nsf/P/Stations/
 # and
-# 
 # Summary of the Peri-Antarctic Islands (1998-07-23)
-# 
+# http://www.spri.cam.ac.uk/bob/periant.htm
 # for information.
 # Unless otherwise specified, we have no time zone information.
 #
 # Except for the French entries,
 # I made up all time zone abbreviations mentioned here; corrections welcome!
-# FORMAT is `zzz' and GMTOFF is 0 for locations while uninhabited.
+# FORMAT is 'zzz' and GMTOFF is 0 for locations while uninhabited.
 
-# These rules are stolen from the `europe' file.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	RussAQ	1981	1984	-	Apr	 1	 0:00	1:00	S
-Rule	RussAQ	1981	1983	-	Oct	 1	 0:00	0	-
-Rule	RussAQ	1984	1991	-	Sep	lastSun	 2:00s	0	-
-Rule	RussAQ	1985	1991	-	Mar	lastSun	 2:00s	1:00	S
-Rule	RussAQ	1992	only	-	Mar	lastSat	 23:00	1:00	S
-Rule	RussAQ	1992	only	-	Sep	lastSat	 23:00	0	-
-Rule	RussAQ	1993	max	-	Mar	lastSun	 2:00s	1:00	S
-Rule	RussAQ	1993	1995	-	Sep	lastSun	 2:00s	0	-
-Rule	RussAQ	1996	max	-	Oct	lastSun	 2:00s	0	-
-
-# These rules are stolen from the `southamerica' file.
+# These rules are stolen from the 'southamerica' file.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	ArgAQ	1964	1966	-	Mar	 1	0:00	0	-
 Rule	ArgAQ	1964	1966	-	Oct	15	0:00	1:00	S
@@ -76,52 +61,33 @@
 Rule	ChileAQ	1998	only	-	Mar	Sun>=9	3:00u	0	-
 Rule	ChileAQ	1998	only	-	Sep	27	4:00u	1:00	S
 Rule	ChileAQ	1999	only	-	Apr	 4	3:00u	0	-
-Rule	ChileAQ	1999	max	-	Oct	Sun>=9	4:00u	1:00	S
-Rule	ChileAQ	2000	max	-	Mar	Sun>=9	3:00u	0	-
-
-# These rules are stolen from the `australasia' file.
-Rule	AusAQ	1917	only	-	Jan	 1	0:01	1:00	-
-Rule	AusAQ	1917	only	-	Mar	25	2:00	0	-
-Rule	AusAQ	1942	only	-	Jan	 1	2:00	1:00	-
-Rule	AusAQ	1942	only	-	Mar	29	2:00	0	-
-Rule	AusAQ	1942	only	-	Sep	27	2:00	1:00	-
-Rule	AusAQ	1943	1944	-	Mar	lastSun	2:00	0	-
-Rule	AusAQ	1943	only	-	Oct	 3	2:00	1:00	-
-Rule	ATAQ	1967	only	-	Oct	Sun>=1	2:00s	1:00	-
-Rule	ATAQ	1968	only	-	Mar	lastSun	2:00s	0	-
-Rule	ATAQ	1968	1985	-	Oct	lastSun	2:00s	1:00	-
-Rule	ATAQ	1969	1971	-	Mar	Sun>=8	2:00s	0	-
-Rule	ATAQ	1972	only	-	Feb	lastSun	2:00s	0	-
-Rule	ATAQ	1973	1981	-	Mar	Sun>=1	2:00s	0	-
-Rule	ATAQ	1982	1983	-	Mar	lastSun	2:00s	0	-
-Rule	ATAQ	1984	1986	-	Mar	Sun>=1	2:00s	0	-
-Rule	ATAQ	1986	only	-	Oct	Sun>=15	2:00s	1:00	-
-Rule	ATAQ	1987	1990	-	Mar	Sun>=15	2:00s	0	-
-Rule	ATAQ	1987	only	-	Oct	Sun>=22	2:00s	1:00	-
-Rule	ATAQ	1988	1990	-	Oct	lastSun	2:00s	1:00	-
-Rule	ATAQ	1991	1999	-	Oct	Sun>=1	2:00s	1:00	-
-Rule	ATAQ	1991	2005	-	Mar	lastSun	2:00s	0	-
-Rule	ATAQ	2000	only	-	Aug	lastSun	2:00s	1:00	-
-Rule	ATAQ	2001	max	-	Oct	Sun>=1	2:00s	1:00	-
-Rule	ATAQ	2006	only	-	Apr	Sun>=1	2:00s	0	-
-Rule	ATAQ	2007	only	-	Mar	lastSun	2:00s	0	-
-Rule	ATAQ	2008	max	-	Apr	Sun>=1	2:00s	0	-
+Rule	ChileAQ	1999	2010	-	Oct	Sun>=9	4:00u	1:00	S
+Rule	ChileAQ	2000	2007	-	Mar	Sun>=9	3:00u	0	-
+# N.B.: the end of March 29 in Chile is March 30 in Universal time,
+# which is used below in specifying the transition.
+Rule	ChileAQ	2008	only	-	Mar	30	3:00u	0	-
+Rule	ChileAQ	2009	only	-	Mar	Sun>=9	3:00u	0	-
+Rule	ChileAQ	2010	only	-	Apr	Sun>=1	3:00u	0	-
+Rule	ChileAQ	2011	only	-	May	Sun>=2	3:00u	0	-
+Rule	ChileAQ	2011	only	-	Aug	Sun>=16	4:00u	1:00	S
+Rule	ChileAQ	2012	max	-	Apr	Sun>=23	3:00u	0	-
+Rule	ChileAQ	2012	max	-	Sep	Sun>=2	4:00u	1:00	S
 
 # Argentina - year-round bases
 # Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
-# Esperanza, San Martin Land, -6323-05659, since 1952-12-17
-# Jubany, Potter Peninsula, King George Island, -6414-0602320, since 1982-01
-# Marambio, Seymour I, -6414-05637, since 1969-10-29
+# Carlini, Potter Cove, King George Island, -6414-0602320, since 1982-01
+# Esperanza, Hope Bay, -6323-05659, since 1952-12-17
+# Marambio, -6414-05637, since 1969-10-29
 # Orcadas, Laurie I, -6016-04444, since 1904-02-22
-# San Martin, Debenham I, -6807-06708, since 1951-03-21
+# San Martín, Barry I, -6808-06706, since 1951-03-21
 #	(except 1960-03 / 1976-03-21)
 
 # Australia - territories
 # Heard Island, McDonald Islands (uninhabited)
 #	previously sealers and scientific personnel wintered
-#	
 #	Margaret Turner reports
-#	 (1999-09-30) that they're UTC+5, with no DST;
+#	http://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html
+#	(1999-09-30) that they're UTC+5, with no DST;
 #	presumably this is when they have visitors.
 #
 # year-round bases
@@ -138,20 +104,13 @@
 # The changes occurred on 2009-10-18 at 02:00 (local times).
 #
 # Government source: (Australian Antarctic Division)
-# 
 # http://www.aad.gov.au/default.asp?casid=37079
-# 
 #
 # We have more background information here:
-# 
 # http://www.timeanddate.com/news/time/antarctica-new-times.html
-# 
 
 # From Steffen Thorsen (2010-03-10):
-# We got these changes from the Australian Antarctic Division:
-# - Macquarie Island will stay on UTC+11 for winter and therefore not
-# switch back from daylight savings time when other parts of Australia do
-# on 4 April.
+# We got these changes from the Australian Antarctic Division: ...
 #
 # - Casey station reverted to its normal time of UTC+8 on 5 March 2010.
 # The change to UTC+11 is being considered as a regular summer thing but
@@ -162,56 +121,50 @@
 #
 # - Mawson station stays on UTC+5.
 #
-# In addition to the Rule changes for Casey/Davis, it means that Macquarie
-# will no longer be like Hobart and will have to have its own Zone created.
-#
 # Background:
-# 
 # http://www.timeanddate.com/news/time/antartica-time-changes-2010.html
-# 
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Antarctica/Casey	0	-	zzz	1969
-			8:00	-	WST	2009 Oct 18 2:00
-						# Western (Aus) Standard Time
-			11:00	-	CAST	2010 Mar 5 2:00
-						# Casey Time
-			8:00	-	WST
+			8:00	-	AWST	2009 Oct 18  2:00
+						# Australian Western Std Time
+			11:00	-	CAST	2010 Mar  5  2:00  # Casey Time
+			8:00	-	AWST	2011 Oct 28  2:00
+			11:00	-	CAST	2012 Feb 21 17:00u
+			8:00	-	AWST
 Zone Antarctica/Davis	0	-	zzz	1957 Jan 13
-			7:00	-	DAVT	1964 Nov # Davis Time
+			7:00	-	DAVT	1964 Nov    # Davis Time
 			0	-	zzz	1969 Feb
-			7:00	-	DAVT	2009 Oct 18 2:00
+			7:00	-	DAVT	2009 Oct 18  2:00
 			5:00	-	DAVT	2010 Mar 10 20:00u
+			7:00	-	DAVT	2011 Oct 28  2:00
+			5:00	-	DAVT	2012 Feb 21 20:00u
 			7:00	-	DAVT
 Zone Antarctica/Mawson	0	-	zzz	1954 Feb 13
-			6:00	-	MAWT	2009 Oct 18 2:00
-						# Mawson Time
+			6:00	-	MAWT	2009 Oct 18  2:00 # Mawson Time
 			5:00	-	MAWT
-Zone Antarctica/Macquarie 0	-	zzz	1911
-			10:00	-	EST	1916 Oct 1 2:00
-			10:00	1:00	EST	1917 Feb
-			10:00	AusAQ	EST	1967
-			10:00	ATAQ	EST	2010 Apr 4 3:00
-			11:00	-	MIST	# Macquarie Island Time
 # References:
-# 
 # Casey Weather (1998-02-26)
-# 
-# 
+# http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html
 # Davis Station, Antarctica (1998-02-26)
-# 
-# 
+# http://www.antdiv.gov.au/aad/exop/sfo/davis/video.html
 # Mawson Station, Antarctica (1998-02-25)
-# 
+# http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html
+
+# Belgium - year-round base
+# Princess Elisabeth, Queen Maud Land, -713412+0231200, since 2007
 
 # Brazil - year-round base
-# Comandante Ferraz, King George Island, -6205+05824, since 1983/4
+# Ferraz, King George Island, -6205+05824, since 1983/4
+
+# Bulgaria - year-round base
+# St. Kliment Ohridski, Livingston Island, -623829-0602153, since 1988
 
 # Chile - year-round bases and towns
 # Escudero, South Shetland Is, -621157-0585735, since 1994
-# Presidente Eduadro Frei, King George Island, -6214-05848, since 1969-03-07
-# General Bernardo O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
-# Capitan Arturo Prat, -6230-05941
+# Frei Montalva, King George Island, -6214-05848, since 1969-03-07
+# O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
+# Prat, -6230-05941
 # Villa Las Estrellas (a town), around the Frei base, since 1984-04-09
 # These locations have always used Santiago time; use TZ='America/Santiago'.
 
@@ -219,31 +172,35 @@
 # Great Wall, King George Island, -6213-05858, since 1985-02-20
 # Zhongshan, Larsemann Hills, Prydz Bay, -6922+07623, since 1989-02-26
 
-# France - year-round bases
+# France - year-round bases (also see "France & Italy")
 #
 # From Antoine Leca (1997-01-20):
-# Time data are from Nicole Pailleau at the IFRTP
+# Time data entries are from Nicole Pailleau at the IFRTP
 # (French Institute for Polar Research and Technology).
-# She confirms that French Southern Territories and Terre Adelie bases
-# don't observe daylight saving time, even if Terre Adelie supplies came
+# She confirms that French Southern Territories and Terre Adélie bases
+# don't observe daylight saving time, even if Terre Adélie supplies came
 # from Tasmania.
 #
 # French Southern Territories with year-round inhabitants
 #
-# Martin-de-Vivies Base, Amsterdam Island, -374105+0773155, since 1950
-# Alfred-Faure Base, Crozet Islands, -462551+0515152, since 1964
-# Port-aux-Francais, Kerguelen Islands, -492110+0701303, since 1951;
+# Alfred Faure, Possession Island, Crozet Islands, -462551+0515152, since 1964;
+#	sealing & whaling stations operated variously 1802/1911+;
+#	see Indian/Reunion.
+#
+# Martin-de-Viviès, Amsterdam Island, -374105+0773155, since 1950
+# Port-aux-Français, Kerguelen Islands, -492110+0701303, since 1951;
 #	whaling & sealing station operated 1908/1914, 1920/1929, and 1951/1956
 #
 # St Paul Island - near Amsterdam, uninhabited
 #	fishing stations operated variously 1819/1931
 #
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Indian/Kerguelen	0	-	zzz	1950	# Port-aux-Francais
+Zone Indian/Kerguelen	0	-	zzz	1950 # Port-aux-Français
 			5:00	-	TFT	# ISO code TF Time
 #
 # year-round base in the main continent
-# Dumont-d'Urville, Ile des Petrels, -6640+14001, since 1956-11
+# Dumont d'Urville, Île des Pétrels, -6640+14001, since 1956-11
+#  (2005-12-05)
 #
 # Another base at Port-Martin, 50km east, began operation in 1947.
 # It was destroyed by fire on 1952-01-14.
@@ -253,20 +210,22 @@
 			10:00	-	PMT	1952 Jan 14 # Port-Martin Time
 			0	-	zzz	1956 Nov
 			10:00	-	DDUT	# Dumont-d'Urville Time
-# Reference:
-# 
-# Dumont d'Urville Station (2005-12-05)
-# 
+
+# France & Italy - year-round base
+# Concordia, -750600+1232000, since 2005
 
 # Germany - year-round base
-# Georg von Neumayer, -7039-00815
+# Neumayer III, -704080-0081602, since 2009
+
+# India - year-round bases
+# Bharati, -692428+0761114, since 2012
+# Maitri, -704558+0114356, since 1989
 
-# India - year-round base
-# Dakshin Gangotri, -7005+01200
+# Italy - year-round base (also see "France & Italy")
+# Zuchelli, Terra Nova Bay, -744140+1640647, since 1986
 
 # Japan - year-round bases
-# Dome Fuji, -7719+03942
-# Syowa, -690022+0393524
+# Syowa (also known as Showa), -690022+0393524, since 1957
 #
 # From Hideyuki Suzuki (1999-02-06):
 # In all Japanese stations, +0300 is used as the standard time.
@@ -278,11 +237,11 @@
 Zone Antarctica/Syowa	0	-	zzz	1957 Jan 29
 			3:00	-	SYOT	# Syowa Time
 # See:
-# 
 # NIPR Antarctic Research Activities (1999-08-17)
-# 
+# http://www.nipr.ac.jp/english/ara01.html
 
 # S Korea - year-round base
+# Jang Bogo, Terra Nova Bay, -743700+1641205 since 2014
 # King Sejong, King George Island, -6213-05847, since 1988
 
 # New Zealand - claims
@@ -290,29 +249,50 @@
 # Scott Island (never inhabited)
 #
 # year-round base
-# Scott, Ross Island, since 1957-01, is like Antarctica/McMurdo.
-#
-# These rules for New Zealand are stolen from the `australasia' file.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	NZAQ	1974	only	-	Nov	 3	2:00s	1:00	D
-Rule	NZAQ	1975	1988	-	Oct	lastSun	2:00s	1:00	D
-Rule	NZAQ	1989	only	-	Oct	 8	2:00s	1:00	D
-Rule	NZAQ	1990	2006	-	Oct	Sun>=1	2:00s	1:00	D
-Rule	NZAQ	1975	only	-	Feb	23	2:00s	0	S
-Rule	NZAQ	1976	1989	-	Mar	Sun>=1	2:00s	0	S
-Rule	NZAQ	1990	2007	-	Mar	Sun>=15	2:00s	0	S
-Rule	NZAQ	2007	max	-	Sep	lastSun	2:00s	1:00	D
-Rule	NZAQ	2008	max	-	Apr	Sun>=1	2:00s	0	S
+# Scott Base, Ross Island, since 1957-01.
+# See Pacific/Auckland.
 
 # Norway - territories
 # Bouvet (never inhabited)
 #
 # claims
 # Peter I Island (never inhabited)
+#
+# year-round base
+# Troll, Queen Maud Land, -720041+0023206, since 2005-02-12
+#
+# From Paul-Inge Flakstad (2014-03-10):
+# I recently had a long dialog about this with the developer of timegenie.com.
+# In the absence of specific dates, he decided to choose some likely ones:
+#   GMT +1 - From March 1 to the last Sunday in March
+#   GMT +2 - From the last Sunday in March until the last Sunday in October
+#   GMT +1 - From the last Sunday in October until November 7
+#   GMT +0 - From November 7 until March 1
+# The dates for switching to and from UTC+0 will probably not be absolutely
+# correct, but they should be quite close to the actual dates.
+#
+# From Paul Eggert (2014-03-21):
+# The CET-switching Troll rules require zic from tzcode 2014b or later, so as
+# suggested by Bengt-Inge Larsson comment them out for now, and approximate
+# with only UTC and CEST.  Uncomment them when 2014b is more prevalent.
+#
+# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+#Rule	Troll	2005	max	-	Mar	 1	1:00u	1:00	CET
+Rule	Troll	2005	max	-	Mar	lastSun	1:00u	2:00	CEST
+#Rule	Troll	2005	max	-	Oct	lastSun	1:00u	1:00	CET
+#Rule	Troll	2004	max	-	Nov	 7	1:00u	0:00	UTC
+# Remove the following line when uncommenting the above '#Rule' lines.
+Rule	Troll	2004	max	-	Oct	lastSun	1:00u	0:00	UTC
+# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+Zone Antarctica/Troll	0	-	zzz	2005 Feb 12
+			0:00	Troll	%s
 
 # Poland - year-round base
 # Arctowski, King George Island, -620945-0582745, since 1977
 
+# Romania - year-bound base
+# Law-Racoviță, Larsemann Hills, -692319+0762251, since 1986
+
 # Russia - year-round bases
 # Bellingshausen, King George Island, -621159-0585337, since 1968-02-22
 # Mirny, Davis coast, -6633+09301, since 1956-02
@@ -322,23 +302,23 @@
 #	year-round from 1960/61 to 1992
 
 # Vostok, since 1957-12-16, temporarily closed 1994-02/1994-11
-# 
-# From Craig Mundell (1994-12-15):
+# From Craig Mundell (1994-12-15):
+# http://quest.arc.nasa.gov/antarctica/QA/computers/Directions,Time,ZIP
 # Vostok, which is one of the Russian stations, is set on the same
 # time as Moscow, Russia.
 #
 # From Lee Hotz (2001-03-08):
 # I queried the folks at Columbia who spent the summer at Vostok and this is
 # what they had to say about time there:
-# ``in the US Camp (East Camp) we have been on New Zealand (McMurdo)
+# "in the US Camp (East Camp) we have been on New Zealand (McMurdo)
 # time, which is 12 hours ahead of GMT. The Russian Station Vostok was
 # 6 hours behind that (although only 2 miles away, i.e. 6 hours ahead
 # of GMT). This is a time zone I think two hours east of Moscow. The
-# natural time zone is in between the two: 8 hours ahead of GMT.''
+# natural time zone is in between the two: 8 hours ahead of GMT."
 #
 # From Paul Eggert (2001-05-04):
 # This seems to be hopelessly confusing, so I asked Lee Hotz about it
-# in person.  He said that some Antartic locations set their local
+# in person.  He said that some Antarctic locations set their local
 # time so that noon is the warmest part of the day, and that this
 # changes during the year and does not necessarily correspond to mean
 # solar noon.  So the Vostok time might have been whatever the clocks
@@ -350,9 +330,12 @@
 
 # S Africa - year-round bases
 # Marion Island, -4653+03752
-# Sanae, -7141-00250
+# SANAE IV, Vesleskarvet, Queen Maud Land, -714022-0025026, since 1997
+
+# Ukraine - year-round base
+# Vernadsky (formerly Faraday), Galindez Island, -651445-0641526, since 1954
 
-# UK
+# United Kingdom
 #
 # British Antarctic Territories (BAT) claims
 # South Orkney Islands
@@ -399,16 +382,8 @@
 			-4:00	ChileAQ	CL%sT
 #
 #
-# McMurdo, Ross Island, since 1955-12
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Antarctica/McMurdo	0	-	zzz	1956
-			12:00	NZAQ	NZ%sT
-#
-# Amundsen-Scott, South Pole, continuously occupied since 1956-11-20
-#
-# From Paul Eggert (1996-09-03):
-# Normally it wouldn't have a separate entry, since it's like the
-# larger Antarctica/McMurdo since 1970, but it's too famous to omit.
+# McMurdo Station, Ross Island, since 1955-12
+# Amundsen-Scott South Pole Station, continuously occupied since 1956-11-20
 #
 # From Chris Carrier (1996-06-27):
 # Siple, the first commander of the South Pole station,
@@ -416,7 +391,7 @@
 # but that he found it more convenient to keep GMT+12
 # as supplies for the station were coming from McMurdo Sound,
 # which was on GMT+12 because New Zealand was on GMT+12 all year
-# at that time (1957).  (Source: Siple's book 90 degrees SOUTH.)
+# at that time (1957).  (Source: Siple's book 90 Degrees South.)
 #
 # From Susan Smith
 # http://www.cybertours.com/whs/pole10.html
@@ -430,4 +405,4 @@
 # we have to go around and set them back 5 minutes or so.
 # Maybe if we let them run fast all of the time, we'd get to leave here sooner!!
 #
-Link	Antarctica/McMurdo	Antarctica/South_Pole
+# See 'australasia' for Antarctica/McMurdo.
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/asia openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/asia
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/asia	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/asia	2015-01-20 02:20:42.000000000 +0000
@@ -1,22 +1,22 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
@@ -24,33 +24,41 @@
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
-# tz@elsie.nci.nih.gov for general use in the future).
+# tz@iana.org for general use in the future).  For more, please see
+# the file CONTRIBUTING in the tz distribution.
 
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (2014-10-31):
 #
-# A good source for time zone historical data outside the U.S. is
+# Unless otherwise specified, the source for data through 1990 is:
 # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
 # San Diego: ACS Publications, Inc. (2003).
+# Unfortunately this book contains many errors and cites no sources.
 #
 # Gwillim Law writes that a good source
 # for recent time zone data is the International Air Transport
 # Association's Standard Schedules Information Manual (IATA SSIM),
 # published semiannually.  Law sent in several helpful summaries
-# of the IATA's data after 1990.
-#
-# Except where otherwise noted, Shanks & Pottenger is the source for
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
+# of the IATA's data after 1990.  Except where otherwise noted,
+# IATA SSIM is the source for entries after 1990.
 #
 # Another source occasionally used is Edward W. Whitman, World Time Differences,
 # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
 # I found in the UCLA library.
 #
+# For data circa 1899, a common source is:
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
+# http://www.jstor.org/stable/1774359
+#
+# For Russian data circa 1919, a source is:
+# Byalokoz EL. New Counting of Time in Russia since July 1, 1919.
+# (See the 'europe' file for a fuller citation.)
+#
 # A reliable and entertaining source about time zones is
 # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
 #
-# I invented the abbreviations marked `*' in the following table;
+# I invented the abbreviations marked '*' in the following table;
 # the rest are from earlier versions of this file, or from other sources.
 # Corrections are welcome!
 #	     std  dst
@@ -61,17 +69,19 @@
 #	3:30 IRST IRDT	Iran
 #	4:00 GST	Gulf*
 #	5:30 IST	India
-#	7:00 ICT	Indochina*
-#	7:00 WIT	west Indonesia
-#	8:00 CIT	central Indonesia
+#	7:00 ICT	Indochina, most times and locations*
+#	7:00 WIB	west Indonesia (Waktu Indonesia Barat)
+#	8:00 WITA	central Indonesia (Waktu Indonesia Tengah)
 #	8:00 CST	China
-#	9:00 CJT	Central Japanese Time (1896/1937)*
-#	9:00 EIT	east Indonesia
+#	8:00 IDT	Indochina, 1943-45, 1947-55, 1960-75 (some locations)*
+#	8:00 JWST	Western Standard Time (Japan, 1896/1937)*
+#	9:00 JCST	Central Standard Time (Japan, 1896/1937)
+#	9:00 WIT	east Indonesia (Waktu Indonesia Timur)
 #	9:00 JST  JDT	Japan
 #	9:00 KST  KDT	Korea
-#	9:30 CST	(Australian) Central Standard Time
+#	9:30 ACST	Australian Central Standard Time
 #
-# See the `europe' file for Russia and Turkey in Asia.
+# See the 'europe' file for Russia and Turkey in Asia.
 
 # From Guy Harris:
 # Incorporates data for Singapore from Robert Elz' asia 1.1, as well as
@@ -81,7 +91,7 @@
 
 ###############################################################################
 
-# These rules are stolen from the `europe' file.
+# These rules are stolen from the 'europe' file.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	EUAsia	1981	max	-	Mar	lastSun	 1:00u	1:00	S
 Rule	EUAsia	1979	1995	-	Sep	lastSun	 1:00u	0	-
@@ -115,14 +125,30 @@
 # in 1996, though it did use DST in 1995.  IATA SSIM (1991/1998) reports that
 # Armenia switched from 3:00 to 4:00 in 1998 and observed DST after 1991,
 # but started switching at 3:00s in 1998.
+
+# From Arthur David Olson (2011-06-15):
+# While Russia abandoned DST in 2011, Armenia may choose to
+# follow Russia's "old" rules.
+
+# From Alexander Krivenyshev (2012-02-10):
+# According to News Armenia, on Feb 9, 2012,
+# http://newsarmenia.ru/society/20120209/42609695.html
+#
+# The Armenia National Assembly adopted final reading of Amendments to the
+# Law "On procedure of calculation time on the territory of the Republic of
+# Armenia" according to which Armenia [is] abolishing Daylight Saving Time.
+# or
+# (brief)
+# http://www.worldtimezone.com/dst_news/dst_news_armenia03.html
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Yerevan	2:58:00 -	LMT	1924 May  2
 			3:00	-	YERT	1957 Mar    # Yerevan Time
-			4:00 RussiaAsia YER%sT	1991 Mar 31 2:00s
+			4:00 RussiaAsia YER%sT	1991 Mar 31  2:00s
 			3:00	1:00	YERST	1991 Sep 23 # independence
-			3:00 RussiaAsia	AM%sT	1995 Sep 24 2:00s
+			3:00 RussiaAsia	AM%sT	1995 Sep 24  2:00s
 			4:00	-	AMT	1997
-			4:00 RussiaAsia	AM%sT
+			4:00 RussiaAsia	AM%sT	2012 Mar 25  2:00s
+			4:00	-	AMT
 
 # Azerbaijan
 # From Rustam Aliyev of the Azerbaijan Internet Forum (2005-10-23):
@@ -134,16 +160,16 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Baku	3:19:24 -	LMT	1924 May  2
 			3:00	-	BAKT	1957 Mar    # Baku Time
-			4:00 RussiaAsia BAK%sT	1991 Mar 31 2:00s
+			4:00 RussiaAsia BAK%sT	1991 Mar 31  2:00s
 			3:00	1:00	BAKST	1991 Aug 30 # independence
 			3:00 RussiaAsia	AZ%sT	1992 Sep lastSat 23:00
-			4:00	-	AZT	1996 # Azerbaijan time
+			4:00	-	AZT	1996     # Azerbaijan Time
 			4:00	EUAsia	AZ%sT	1997
 			4:00	Azer	AZ%sT
 
 # Bahrain
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Bahrain	3:22:20 -	LMT	1920		# Al Manamah
+Zone	Asia/Bahrain	3:22:20 -	LMT	1920     # Manamah
 			4:00	-	GST	1972 Jun
 			3:00	-	AST
 
@@ -153,13 +179,8 @@
 # Daylight Saving Time from June 16 to Sept 30
 #
 # Bangladesh to introduce daylight saving time likely from June 16
-# 
 # http://www.asiantribune.com/?q=node/17288
-# 
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_bangladesh02.html
-# 
 #
 # "... Bangladesh government has decided to switch daylight saving time from
 # June
@@ -174,62 +195,44 @@
 # the 19th and 20th, and they have not set the end date yet.
 #
 # Some sources:
-# 
 # http://in.reuters.com/article/southAsiaNews/idINIndia-40017620090601
-# 
-# 
 # http://bdnews24.com/details.php?id=85889&cid=2
-# 
 #
 # Our wrap-up:
-# 
 # http://www.timeanddate.com/news/time/bangladesh-daylight-saving-2009.html
-# 
 
 # From A. N. M. Kamrus Saadat (2009-06-15):
-# Finally we've got the official mail regarding DST start time where DST start 
-# time is mentioned as Jun 19 2009, 23:00 from BTRC (Bangladesh 
-# Telecommunication Regulatory Commission). 
+# Finally we've got the official mail regarding DST start time where DST start
+# time is mentioned as Jun 19 2009, 23:00 from BTRC (Bangladesh
+# Telecommunication Regulatory Commission).
 #
 # No DST end date has been announced yet.
 
 # From Alexander Krivenyshev (2009-09-25):
-# Bangladesh won't go back to Standard Time from October 1, 2009, 
-# instead it will continue DST measure till the cabinet makes a fresh decision. 
+# Bangladesh won't go back to Standard Time from October 1, 2009,
+# instead it will continue DST measure till the cabinet makes a fresh decision.
 #
 # Following report by same newspaper-"The Daily Star Friday":
 # "DST change awaits cabinet decision-Clock won't go back by 1-hr from Oct 1"
-# 
 # http://www.thedailystar.net/newDesign/news-details.php?nid=107021
-# 
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_bangladesh04.html
-# 
 
 # From Steffen Thorsen (2009-10-13):
 # IANS (Indo-Asian News Service) now reports:
-# Bangladesh has decided that the clock advanced by an hour to make 
-# maximum use of daylight hours as an energy saving measure would 
+# Bangladesh has decided that the clock advanced by an hour to make
+# maximum use of daylight hours as an energy saving measure would
 # "continue for an indefinite period."
 #
 # One of many places where it is published:
-# 
 # http://www.thaindian.com/newsportal/business/bangladesh-to-continue-indefinitely-with-advanced-time_100259987.html
-# 
 
 # From Alexander Krivenyshev (2009-12-24):
 # According to Bangladesh newspaper "The Daily Star,"
 # Bangladesh will change its clock back to Standard Time on Dec 31, 2009.
 #
 # Clock goes back 1-hr on Dec 31 night.
-# 
 # http://www.thedailystar.net/newDesign/news-details.php?nid=119228
-# 
-# and
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_bangladesh05.html
-# 
 #
 # "...The government yesterday decided to put the clock back by one hour
 # on December 31 midnight and the new time will continue until March 31,
@@ -238,18 +241,13 @@
 
 # From Alexander Krivenyshev (2010-03-22):
 # According to Bangladesh newspaper "The Daily Star,"
-# Cabinet cancels Daylight Saving Time 
-# 
+# Cabinet cancels Daylight Saving Time
 # http://www.thedailystar.net/newDesign/latest_news.php?nid=22817
-# 
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html
-# 
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Dhaka	2009	only	-	Jun	19	23:00	1:00	S
-Rule	Dhaka	2009	only	-	Dec	31	23:59	0	-
+Rule	Dhaka	2009	only	-	Dec	31	24:00	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Dhaka	6:01:40 -	LMT	1890
@@ -280,25 +278,24 @@
 
 # Brunei
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Brunei	7:39:40 -	LMT	1926 Mar   # Bandar Seri Begawan
+Zone	Asia/Brunei	7:39:40 -	LMT	1926 Mar # Bandar Seri Begawan
 			7:30	-	BNT	1933
 			8:00	-	BNT
 
 # Burma / Myanmar
+
+# Milne says 6:24:40 was the meridian of the time ball observatory at Rangoon.
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Rangoon	6:24:40 -	LMT	1880		# or Yangon
-			6:24:36	-	RMT	1920	   # Rangoon Mean Time?
-			6:30	-	BURT	1942 May   # Burma Time
-			9:00	-	JST	1945 May 3
-			6:30	-	MMT		   # Myanmar Time
+Zone	Asia/Rangoon	6:24:40 -	LMT	1880        # or Yangon
+			6:24:40	-	RMT	1920        # Rangoon Mean Time?
+			6:30	-	BURT	1942 May    # Burma Time
+			9:00	-	JST	1945 May  3
+			6:30	-	MMT	# Myanmar Time
 
 # Cambodia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Phnom_Penh	6:59:40 -	LMT	1906 Jun  9
-			7:06:20	-	SMT	1911 Mar 11 0:01 # Saigon MT?
-			7:00	-	ICT	1912 May
-			8:00	-	ICT	1931 May
-			7:00	-	ICT
+# See Asia/Bangkok.
+
 
 # China
 
@@ -308,12 +305,12 @@
 # From Bob Devine (1988-01-28):
 # No they don't.  See TIME mag, 1986-02-17 p.52.  Even though
 # China is across 4 physical time zones, before Feb 1, 1986 only the
-# Peking (Bejing) time zone was recognized.  Since that date, China
-# has two of 'em -- Peking's and Urumqi (named after the capital of
+# Peking (Beijing) time zone was recognized.  Since that date, China
+# has two of 'em - Peking's and Ürümqi (named after the capital of
 # the Xinjiang Uyghur Autonomous Region).  I don't know about DST for it.
 #
 # . . .I just deleted the DST table and this editor makes it too
-# painful to suck in another copy..  So, here is what I have for
+# painful to suck in another copy.  So, here is what I have for
 # DST start/end dates for Peking's time zone (info from AP):
 #
 #     1986 May 4 - Sept 14
@@ -323,15 +320,16 @@
 # CHINA               8 H  AHEAD OF UTC  ALL OF CHINA, INCL TAIWAN
 # CHINA               9 H  AHEAD OF UTC  APR 17 - SEP 10
 
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that China (except for Hong Kong and Macau)
-# has had a single time zone since 1980 May 1, observing summer DST
-# from 1986 through 1991; this contradicts Devine's
-# note about Time magazine, though apparently _something_ happened in 1986.
-# Go with Shanks & Pottenger for now.  I made up names for the other
-# pre-1980 time zones.
+# From Paul Eggert (2008-02-11):
+# Jim Mann, "A clumsy embrace for another western custom: China on daylight
+# time - sort of", Los Angeles Times, 1986-05-05 ... [says] that China began
+# observing daylight saving time in 1986.
 
-# From Shanks & Pottenger:
+# From Paul Eggert (2014-06-30):
+# Shanks & Pottenger have China switching to a single time zone in 1980, but
+# this doesn't seem to be correct.  They also write that China observed summer
+# DST from 1986 through 1991, which seems to match the above commentary, so
+# go with them for DST rules as follows:
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Shang	1940	only	-	Jun	 3	0:00	1:00	D
 Rule	Shang	1940	1941	-	Oct	 1	0:00	0	S
@@ -345,7 +343,7 @@
 # historic timezones from some Taiwan websites.  And yes, there are official
 # Chinese names for these locales (before 1949).
 #
-# From Jesper Norgaard Welen (2006-07-14):
+# From Jesper Nørgaard Welen (2006-07-14):
 # I have investigated the timezones around 1970 on the
 # http://www.astro.com/atlas site [with provinces and county
 # boundaries summarized below]....  A few other exceptions were two
@@ -356,64 +354,97 @@
 # (could be true), for the moment I am assuming that those two
 # counties are mistakes in the astro.com data.
 
-# From Paul Eggert (2008-02-11):
-# I just now checked Google News for western news sources that talk
-# about China's single time zone, and couldn't find anything before 1986
-# talking about China being in one time zone.  (That article was: Jim
-# Mann, "A clumsy embrace for another western custom: China on daylight
-# time--sort of", Los Angeles Times, 1986-05-05.  By the way, this
-# article confirms the tz database's data claiming that China began
-# observing daylight saving time in 1986.
+# From Paul Eggert (2014-06-30):
+# Alois Treindl kindly sent me translations of the following two sources:
 #
-# From Thomas S. Mullaney (2008-02-11):
-# I think you're combining two subjects that need to treated 
-# separately: daylight savings (which, you're correct, wasn't 
-# implemented until the 1980s) and the unified time zone centered near 
-# Beijing (which was implemented in 1949). Briefly, there was also a 
-# "Lhasa Time" in Tibet and "Urumqi Time" in Xinjiang. The first was 
-# ceased, and the second eventually recognized (again, in the 1980s).
-#
-# From Paul Eggert (2008-06-30):
-# There seems to be a good chance China switched to a single time zone in 1949
-# rather than in 1980 as Shanks & Pottenger have it, but we don't have a
-# reliable documentary source saying so yet, so for now we still go with
-# Shanks & Pottenger.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-# Changbai Time ("Long-white Time", Long-white = Heilongjiang area)
+# (1)
+# Guo Qingsheng (National Time-Service Center, CAS, Xi'an 710600, China)
+# Beijing Time at the Beginning of the PRC
+# China Historical Materials of Science and Technology
+# (Zhongguo ke ji shi liao, 中国科技史料), Vol. 24, No. 1 (2003)
+# It gives evidence that at the beginning of the PRC, Beijing time was
+# officially apparent solar time!  However, Guo also says that the
+# evidence is dubious, as the relevant institute of astronomy had not
+# been taken over by the PRC yet.  It's plausible that apparent solar
+# time was announced but never implemented, and that people continued
+# to use UT+8.  As the Shanghai radio station (and I presume the
+# observatory) was still under control of French missionaries, it
+# could well have ignored any such mandate.
+#
+# (2)
+# Guo Qing-sheng (Shaanxi Astronomical Observatory, CAS, Xi'an 710600, China)
+# A Study on the Standard Time Changes for the Past 100 Years in China
+# [undated and unknown publication location]
+# It says several things:
+#   * The Qing dynasty used local apparent solar time throughout China.
+#   * The Republic of China instituted Beijing mean solar time effective
+#     the official calendar book of 1914.
+#   * The French Concession in Shanghai set up signal stations in
+#     French docks in the 1890s, controlled by Xujiahui (Zikawei)
+#     Observatory and set to local mean time.
+#   * "From the end of the 19th century" it changed to UT+8.
+#   * Chinese Customs (by then reduced to a tool of foreign powers)
+#     eventually standardized on this time for all ports, and it
+#     became used by railways as well.
+#   * In 1918 the Central Observatory proposed dividing China into
+#     five time zones (see below for details).  This caught on
+#     at first only in coastal areas observing UT+8.
+#   * During WWII all of China was in theory was at UT+7.  In practice
+#     this was ignored in the west, and I presume was ignored in
+#     Japanese-occupied territory.
+#   * Japanese-occupied Manchuria was at UT+9, i.e., Japan time.
+#   * The five-zone plan was resurrected after WWII and officially put into
+#     place (with some modifications) in March 1948.  It's not clear
+#     how well it was observed in areas under Nationalist control.
+#   * The People's Liberation Army used UT+8 during the civil war.
+#
+# An AP article "Shanghai Internat'l Area Little Changed" in the
+# Lewiston (ME) Daily Sun (1939-05-29), p 17, said "Even the time is
+# different - the occupied districts going by Tokyo time, an hour
+# ahead of that prevailing in the rest of Shanghai."  Guess that the
+# Xujiahui Observatory was under French control and stuck with UT+8.
+#
+# In earlier versions of this file, China had many separate Zone entries, but
+# this was based on what were apparently incorrect data in Shanks & Pottenger.
+# This has now been simplified to the two entries Asia/Shanghai and
+# Asia/Urumqi, with the others being links for backward compatibility.
+# Proposed in 1918 and theoretically in effect until 1949 (although in practice
+# mainly observed in coastal areas), the five zones were:
+#
+# Changbai Time ("Long-white Time", Long-white = Heilongjiang area) UT+8.5
+# Asia/Harbin (currently a link to Asia/Shanghai)
 # Heilongjiang (except Mohe county), Jilin
-Zone	Asia/Harbin	8:26:44	-	LMT	1928 # or Haerbin
-			8:30	-	CHAT	1932 Mar # Changbai Time
-			8:00	-	CST	1940
-			9:00	-	CHAT	1966 May
-			8:30	-	CHAT	1980 May
-			8:00	PRC	C%sT
-# Zhongyuan Time ("Central plain Time")
+#
+# Zhongyuan Time ("Central plain Time") UT+8
+# Asia/Shanghai
 # most of China
-Zone	Asia/Shanghai	8:05:52	-	LMT	1928
-			8:00	Shang	C%sT	1949
-			8:00	PRC	C%sT
-# Long-shu Time (probably due to Long and Shu being two names of that area)
+# This currently represents most other zones as well,
+# as apparently these regions have been the same since 1970.
+# Milne gives 8:05:43.2 for Xujiahui Observatory time; round to nearest.
+# Guo says Shanghai switched to UT+8 "from the end of the 19th century".
+#
+# Long-shu Time (probably due to Long and Shu being two names of that area) UT+7
+# Asia/Chongqing (currently a link to Asia/Shanghai)
 # Guangxi, Guizhou, Hainan, Ningxia, Sichuan, Shaanxi, and Yunnan;
 # most of Gansu; west Inner Mongolia; west Qinghai; and the Guangdong
 # counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing,
 # Yangchun, Yangjiang, Yu'nan, and Yunfu.
-Zone	Asia/Chongqing	7:06:20	-	LMT	1928 # or Chungking
-			7:00	-	LONT	1980 May # Long-shu Time
-			8:00	PRC	C%sT
-# Xin-zang Time ("Xinjiang-Tibet Time")
+#
+# Xin-zang Time ("Xinjiang-Tibet Time") UT+6
+# Asia/Urumqi
+# This currently represents Kunlun Time as well,
+# as apparently the two regions have been the same since 1970.
 # The Gansu counties Aksay, Anxi, Dunhuang, Subei; west Qinghai;
 # the Guangdong counties  Xuwen, Haikang, Suixi, Lianjiang,
 # Zhanjiang, Wuchuan, Huazhou, Gaozhou, Maoming, Dianbai, and Xinyi;
 # east Tibet, including Lhasa, Chamdo, Shigaise, Jimsar, Shawan and Hutubi;
-# east Xinjiang, including Urumqi, Turpan, Karamay, Korla, Minfeng, Jinghe,
+# east Xinjiang, including Ürümqi, Turpan, Karamay, Korla, Minfeng, Jinghe,
 # Wusu, Qiemo, Xinyan, Wulanwusu, Jinghe, Yumin, Tacheng, Tuoli, Emin,
 # Shihezi, Changji, Yanqi, Heshuo, Tuokexun, Tulufan, Shanshan, Hami,
 # Fukang, Kuitun, Kumukuli, Miquan, Qitai, and Turfan.
-Zone	Asia/Urumqi	5:50:20	-	LMT	1928 # or Urumchi
-			6:00	-	URUT	1980 May # Urumqi Time
-			8:00	PRC	C%sT
-# Kunlun Time
+#
+# Kunlun Time UT+5.5
+# Asia/Kashgar (currently a link to Asia/Urumqi)
 # West Tibet, including Pulan, Aheqi, Shufu, Shule;
 # West Xinjiang, including Aksu, Atushi, Yining, Hetian, Cele, Luopu, Nileke,
 # Zhaosu, Tekesi, Gongliu, Chabuchaer, Huocheng, Bole, Pishan, Suiding,
@@ -430,9 +461,9 @@
 # population of Xinjiang, typically use "Xinjiang time" which is two
 # hours behind Beijing time, or UTC +0600. The government of the Xinjiang
 # Uyghur Autonomous Region, (XAUR, or just Xinjiang for short) as well as
-# local governments such as the Urumqi city government use both times in
+# local governments such as the Ürümqi city government use both times in
 # publications, referring to what is popularly called Xinjiang time as
-# "Urumqi time." When Uyghurs make an appointment in the Uyghur language
+# "Ürümqi time." When Uyghurs make an appointment in the Uyghur language
 # they almost invariably use Xinjiang time.
 #
 # (Their ethnic Han compatriots would typically have no clue of its
@@ -444,21 +475,6 @@
 # the province not having dual times but four times in use at the same
 # time. Some areas remained on standard Xinjiang time or Beijing time and
 # others moving their clocks ahead.)
-#
-# ...an example of an official website using of Urumqi time.
-#
-# The first few lines of the Google translation of
-# 
-# http://www.fjysgl.gov.cn/show.aspx?id=2379&cid=39
-# 
-# (retrieved 2009-10-13)
-# > Urumqi fire seven people are missing the alleged losses of at least
-# > 500 million yuan
-# >
-# > (Reporter Dong Liu) the day before 20:20 or so (Urumqi Time 18:20),
-# > Urumqi City Department of International Plaza Luther Qiantang River
-# > burst fire. As of yesterday, 18:30, Urumqi City Fire officers and men
-# > have worked continuously for 22 hours...
 
 # From Luther Ma (2009-11-19):
 # With the risk of being redundant to previous answers these are the most common
@@ -469,7 +485,7 @@
 # 3. Urumqi...
 # 4. Kashgar...
 # ...
-# 5. It seems that Uyghurs in Urumqi has been using Xinjiang since at least the
+# 5. It seems that Uyghurs in Ürümqi has been using Xinjiang since at least the
 # 1960's. I know of one Han, now over 50, who grew up in the surrounding
 # countryside and used Xinjiang time as a child.
 #
@@ -481,11 +497,60 @@
 # Autonomous Region under the PRC. (Before that Uyghurs, of course, would also
 # not be using Beijing time, but some local time.)
 
-Zone	Asia/Kashgar	5:03:56	-	LMT	1928 # or Kashi or Kaxgar
-			5:30	-	KAST	1940	 # Kashgar Time
-			5:00	-	KAST	1980 May
+# From David Cochrane (2014-03-26):
+# Just a confirmation that Ürümqi time was implemented in Ürümqi on 1 Feb 1986:
+# http://content.time.com/time/magazine/article/0,9171,960684,00.html
+
+# From Luther Ma (2014-04-22):
+# I have interviewed numerous people of various nationalities and from
+# different localities in Xinjiang and can confirm the information in Guo's
+# report regarding Xinjiang, as well as the Time article reference by David
+# Cochrane.  Whether officially recognized or not (and both are officially
+# recognized), two separate times have been in use in Xinjiang since at least
+# the Cultural Revolution: Xinjiang Time (XJT), aka Ürümqi Time or local time;
+# and Beijing Time.  There is no confusion in Xinjiang as to which name refers
+# to which time. Both are widely used in the province, although in some
+# population groups might be use one to the exclusion of the other.  The only
+# problem is that computers and smart phones list Ürümqi (or Kashgar) as
+# having the same time as Beijing.
+
+# From Paul Eggert (2014-06-30):
+# In the early days of the PRC, Tibet was given its own time zone (UT+6) but
+# this was withdrawn in 1959 and never reinstated; see Tubten Khétsun,
+# Memories of life in Lhasa under Chinese Rule, Columbia U Press, ISBN
+# 978-0231142861 (2008), translator's introduction by Matthew Akester, p x.
+# As this is before our 1970 cutoff, Tibet doesn't need a separate zone.
+#
+# Xinjiang Time is well-documented as being officially recognized.  E.g., see
+# "The Working-Calendar for The Xinjiang Uygur Autonomous Region Government"
+#  (2014-04-22).
+# Unfortunately, we have no good records of time in Xinjiang before 1986.
+# During the 20th century parts of Xinjiang were ruled by the Qing dynasty,
+# the Republic of China, various warlords, the First and Second East Turkestan
+# Republics, the Soviet Union, the Kuomintang, and the People's Republic of
+# China, and tracking down all these organizations' timekeeping rules would be
+# quite a trick.  Approximate this lost history by a transition from LMT to
+# XJT at the start of 1928, the year of accession of the warlord Jin Shuren,
+# which happens to be the date given by Shanks & Pottenger (no doubt as a
+# guess) as the transition from LMT.  Ignore the usage of UT+8 before
+# 1986-02-01 under the theory that the transition date to UT+8 is unknown and
+# that the sort of users who prefer Asia/Urumqi now typically ignored the
+# UT+8 mandate back then.
+
+# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Beijing time, used throughout China; represented by Shanghai.
+Zone	Asia/Shanghai	8:05:43	-	LMT	1901
+			8:00	Shang	C%sT	1949
 			8:00	PRC	C%sT
+# Xinjiang time, used by many in western China; represented by Ürümqi / Ürümchi
+# / Wulumuqi.  (Please use Asia/Shanghai if you prefer Beijing time.)
+Zone	Asia/Urumqi	5:50:20	-	LMT	1928
+			6:00	-	XJT
+
+
+# Hong Kong (Xianggang)
 
+# Milne gives 7:36:41.7; round this.
 
 # From Lee Yiu Chung (2009-10-24):
 # I found there are some mistakes for the...DST rule for Hong
@@ -495,19 +560,15 @@
 # and incorrect rules. Although the exact switch over time is missing, I
 # think 3:30 is correct. The official DST record for Hong Kong can be
 # obtained from
-# 
 # http://www.hko.gov.hk/gts/time/Summertime.htm
-# .
 
 # From Arthur David Olson (2009-10-28):
 # Here are the dates given at
-# 
 # http://www.hko.gov.hk/gts/time/Summertime.htm
-# 
 # as of 2009-10-28:
 # Year        Period
 # 1941        1 Apr to 30 Sep
-# 1942        Whole year 
+# 1942        Whole year
 # 1943        Whole year
 # 1944        Whole year
 # 1945        Whole year
@@ -553,7 +614,6 @@
 # The Japanese surrender of Hong Kong was signed 1945-09-15.
 # For lack of anything better, use start of those days as the transition times.
 
-# Hong Kong (Xianggang)
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	HK	1941	only	-	Apr	1	3:30	1:00	S
 Rule	HK	1941	only	-	Sep	30	3:30	0	-
@@ -569,13 +629,13 @@
 Rule	HK	1954	1964	-	Mar	Sun>=18	3:30	1:00	S
 Rule	HK	1954	only	-	Oct	31	3:30	0	-
 Rule	HK	1955	1964	-	Nov	Sun>=1	3:30	0	-
-Rule	HK	1965	1977	-	Apr	Sun>=16	3:30	1:00	S
-Rule	HK	1965	1977	-	Oct	Sun>=16	3:30	0	-
+Rule	HK	1965	1976	-	Apr	Sun>=16	3:30	1:00	S
+Rule	HK	1965	1976	-	Oct	Sun>=16	3:30	0	-
 Rule	HK	1973	only	-	Dec	30	3:30	1:00	S
 Rule	HK	1979	only	-	May	Sun>=8	3:30	1:00	S
 Rule	HK	1979	only	-	Oct	Sun>=16	3:30	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Hong_Kong	7:36:36 -	LMT	1904 Oct 30
+Zone	Asia/Hong_Kong	7:36:42 -	LMT	1904 Oct 30
 			8:00	HK	HK%sT	1941 Dec 25
 			9:00	-	JST	1945 Sep 15
 			8:00	HK	HK%sT
@@ -584,35 +644,113 @@
 
 # Taiwan
 
-# Shanks & Pottenger write that Taiwan observed DST during 1945, when it
-# was still controlled by Japan.  This is hard to believe, but we don't
-# have any other information.
-
 # From smallufo (2010-04-03):
-# According to Taiwan's CWB,
-# 
+# According to Taiwan's CWB [Central Weather Bureau],
 # http://www.cwb.gov.tw/V6/astronomy/cdata/summert.htm
-# 
 # Taipei has DST in 1979 between July 1st and Sep 30.
 
-# From Arthur David Olson (2010-04-07):
-# Here's Google's translation of the table at the bottom of the "summert.htm" page:
-# Decade 	                                                    Name                      Start and end date
-# Republic of China 34 years to 40 years (AD 1945-1951 years) Summer Time               May 1 to September 30 
-# 41 years of the Republic of China (AD 1952)                 Daylight Saving Time      March 1 to October 31 
-# Republic of China 42 years to 43 years (AD 1953-1954 years) Daylight Saving Time      April 1 to October 31 
-# In the 44 years to 45 years (AD 1955-1956 years)            Daylight Saving Time      April 1 to September 30 
-# Republic of China 46 years to 48 years (AD 1957-1959)       Summer Time               April 1 to September 30 
-# Republic of China 49 years to 50 years (AD 1960-1961)       Summer Time               June 1 to September 30 
-# Republic of China 51 years to 62 years (AD 1962-1973 years) Stop Summer Time 
-# Republic of China 63 years to 64 years (1974-1975 AD)       Daylight Saving Time      April 1 to September 30 
-# Republic of China 65 years to 67 years (1976-1978 AD)       Stop Daylight Saving Time 
-# Republic of China 68 years (AD 1979)                        Daylight Saving Time      July 1 to September 30 
-# Republic of China since 69 years (AD 1980)                  Stop Daylight Saving Time
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Taiwan	1945	1951	-	May	1	0:00	1:00	D
-Rule	Taiwan	1945	1951	-	Oct	1	0:00	0	S
+# From Yu-Cheng Chuang (2013-07-12):
+# On Dec 28, 1895, the Meiji Emperor announced Ordinance No. 167 of
+# Meiji Year 28 "The clause about standard time", mentioned that
+# Taiwan and Penghu Islands, as well as Yaeyama and Miyako Islands
+# (both in Okinawa) adopt the Western Standard Time which is based on
+# 120E. The adoption began from Jan 1, 1896. The original text can be
+# found on Wikisource:
+# http://ja.wikisource.org/wiki/標準時ニ關スル件_(公布時)
+# ... This could be the first adoption of time zone in Taiwan, because
+# during the Qing Dynasty, it seems that there was no time zone
+# declared officially.
+#
+# Later, in the beginning of World War II, on Sep 25, 1937, the Showa
+# Emperor announced Ordinance No. 529 of Showa Year 12 "The clause of
+# revision in the ordinance No. 167 of Meiji year 28 about standard
+# time", in which abolished the adoption of Western Standard Time in
+# western islands (listed above), which means the whole Japan
+# territory, including later occupations, adopt Japan Central Time
+# (UTC+9). The adoption began on Oct 1, 1937. The original text can
+# be found on Wikisource:
+# http://ja.wikisource.org/wiki/明治二十八年勅令第百六十七號標準時ニ關スル件中改正ノ件
+#
+# That is, the time zone of Taipei switched to UTC+9 on Oct 1, 1937.
+
+# From Yu-Cheng Chuang (2014-07-02):
+# I've found more evidence about when the time zone was switched from UTC+9
+# back to UTC+8 after WW2.  I believe it was on Sep 21, 1945.  In a document
+# during Japanese era [1] in which the officer told the staff to change time
+# zone back to Western Standard Time (UTC+8) on Sep 21.  And in another
+# history page of National Cheng Kung University [2], on Sep 21 there is a
+# note "from today, switch back to Western Standard Time".  From these two
+# materials, I believe that the time zone change happened on Sep 21.  And
+# today I have found another monthly journal called "The Astronomical Herald"
+# from The Astronomical Society of Japan [3] in which it mentioned the fact
+# that:
+#
+# 1. Standard Time of the Country (Japan) was adopted on Jan 1, 1888, using
+# the time at 135E (GMT+9)
+#
+# 2. Standard Time of the Country was renamed to Central Standard Time, on Jan
+# 1, 1898, and on the same day, the new territories Taiwan and Penghu islands,
+# as well as Yaeyama and Miyako islands, adopted a new time zone called
+# Western Standard Time, which is in GMT+8.
+#
+# 3. Western Standard Time was deprecated on Sep 30, 1937. From then all the
+# territories of Japan adopted the same time zone, which is Central Standard
+# Time.
+#
+# [1] Academica Historica, Taiwan:
+# http://163.29.208.22:8080/govsaleShowImage/connect_img.php?s=00101738900090036&e=00101738900090037
+# [2] Nat'l Cheng Kung University 70th Anniversary Special Site:
+# http://www.ncku.edu.tw/~ncku70/menu/001/01_01.htm
+# [3] Yukio Niimi, The Standard Time in Japan (1997), p.475:
+# http://www.asj.or.jp/geppou/archive_open/1997/pdf/19971001c.pdf
+
+# Yu-Cheng Chuang (2014-07-03):
+# I finally have found the real official gazette about changing back to
+# Western Standard Time on Sep 21 in Taiwan.  It's Taiwan Governor-General
+# Bulletin No. 386 in Showa 20 years (1945), published on Sep 19, 1945. [1] ...
+# [It] abolishes Bulletin No. 207 in Showa 12 years (1937), which is a local
+# bulletin in Taiwan for that Ordinance No. 529. It also mentioned that 1am on
+# Sep 21, 1945 will be 12am on Sep 21.  I think this bulletin is much more
+# official than the one I mentioned in my first mail, because it's from the
+# top-level government in Taiwan. If you're going to quote any resource, this
+# would be a good one.
+# [1] Taiwan Governor-General Gazette, No. 1018, Sep 19, 1945:
+# http://db2.th.gov.tw/db2/view/viewImg.php?imgcode=0072031018a&num=19&bgn=019&end=019&otherImg=&type=gener
+
+# From Yu-Cheng Chuang (2014-07-02):
+# In 1946, DST in Taiwan was from May 15 and ended on Sep 30. The info from
+# Central Weather Bureau website was not correct.
+#
+# Original Bulletin:
+# http://subtpg.tpg.gov.tw/og/image2.asp?f=03502F0AKM1AF
+# http://subtpg.tpg.gov.tw/og/image2.asp?f=0350300AKM1B0 (cont.)
+#
+# In 1947, DST in Taiwan was expanded to Oct 31. There is a backup of that
+# telegram announcement from Taiwan Province Government:
+#
+# http://subtpg.tpg.gov.tw/og/image2.asp?f=0360310AKZ431
+#
+# Here is a brief translation:
+#
+#   The Summer Time this year is adopted from midnight Apr 15 until Sep 20
+#   midnight. To save (energy?) consumption, we're expanding Summer Time
+#   adoption till Oct 31 midnight.
+#
+# The Central Weather Bureau website didn't mention that, however it can
+# be found from historical government announcement database.
+
+# From Paul Eggert (2014-07-03):
+# As per Yu-Cheng Chuang, say that Taiwan was at UT+9 from 1937-10-01
+# until 1945-09-21 at 01:00, overriding Shanks & Pottenger.
+# Likewise, use Yu-Cheng Chuang's data for DST in Taiwan.
+
+# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+Rule	Taiwan	1946	only	-	May	15	0:00	1:00	D
+Rule	Taiwan	1946	only	-	Oct	1	0:00	0	S
+Rule	Taiwan	1947	only	-	Apr	15	0:00	1:00	D
+Rule	Taiwan	1947	only	-	Nov	1	0:00	0	S
+Rule	Taiwan	1948	1951	-	May	1	0:00	1:00	D
+Rule	Taiwan	1948	1951	-	Oct	1	0:00	0	S
 Rule	Taiwan	1952	only	-	Mar	1	0:00	1:00	D
 Rule	Taiwan	1952	1954	-	Nov	1	0:00	0	S
 Rule	Taiwan	1953	1959	-	Apr	1	0:00	1:00	D
@@ -620,11 +758,14 @@
 Rule	Taiwan	1960	1961	-	Jun	1	0:00	1:00	D
 Rule	Taiwan	1974	1975	-	Apr	1	0:00	1:00	D
 Rule	Taiwan	1974	1975	-	Oct	1	0:00	0	S
-Rule	Taiwan	1979	only	-	Jun	30	0:00	1:00	D
-Rule	Taiwan	1979	only	-	Sep	30	0:00	0	S
+Rule	Taiwan	1979	only	-	Jul	1	0:00	1:00	D
+Rule	Taiwan	1979	only	-	Oct	1	0:00	0	S
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Taipei	8:06:00 -	LMT	1896 # or Taibei or T'ai-pei
+# Taipei or Taibei or T'ai-pei
+Zone	Asia/Taipei	8:06:00 -	LMT	1896 Jan  1
+			8:00	-	JWST	1937 Oct  1
+			9:00	-	JST	1945 Sep 21  1:00
 			8:00	Taiwan	C%sT
 
 # Macau (Macao, Aomen)
@@ -644,7 +785,7 @@
 Rule	Macau	1978	1980	-	Apr	Sun>=15	0:00	1:00	S
 Rule	Macau	1978	1980	-	Oct	Sun>=15	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Macau	7:34:20 -	LMT	1912
+Zone	Asia/Macau	7:34:20 -	LMT	1912 Jan  1
 			8:00	Macau	MO%sT	1999 Dec 20 # return to China
 			8:00	PRC	C%sT
 
@@ -652,6 +793,9 @@
 ###############################################################################
 
 # Cyprus
+#
+# Milne says the Eastern Telegraph Company used 2:14:00.  Stick with LMT.
+#
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Cyprus	1975	only	-	Apr	13	0:00	1:00	S
 Rule	Cyprus	1975	only	-	Oct	12	0:00	0	-
@@ -690,7 +834,7 @@
 # republic has changed its time zone back to that of Moscow.  As a result it
 # is now just four hours ahead of Greenwich Mean Time, rather than five hours
 # ahead.  The switch was decreed by the pro-Western president of Georgia,
-# Mikhail Saakashvili, who said the change was partly prompted by the process
+# Mikheil Saakashvili, who said the change was partly prompted by the process
 # of integration into Europe.
 
 # From Teimuraz Abashidze (2005-11-07):
@@ -703,29 +847,31 @@
 # I don't know what can be done, especially knowing that some years ago our
 # DST rules where changed THREE TIMES during one month.
 
+# Milne 1899 says Tbilisi (Tiflis) time was 2:59:05.7.
+# Byalokoz 1919 says Georgia was 2:59:11.
+# Go with Byalokoz.
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Tbilisi	2:59:16 -	LMT	1880
-			2:59:16	-	TBMT	1924 May  2 # Tbilisi Mean Time
+Zone	Asia/Tbilisi	2:59:11 -	LMT	1880
+			2:59:11	-	TBMT	1924 May  2 # Tbilisi Mean Time
 			3:00	-	TBIT	1957 Mar    # Tbilisi Time
-			4:00 RussiaAsia TBI%sT	1991 Mar 31 2:00s
+			4:00 RussiaAsia TBI%sT	1991 Mar 31  2:00s
 			3:00	1:00	TBIST	1991 Apr  9 # independence
-			3:00 RussiaAsia GE%sT	1992 # Georgia Time
+			3:00 RussiaAsia GE%sT	1992        # Georgia Time
 			3:00 E-EurAsia	GE%sT	1994 Sep lastSun
 			4:00 E-EurAsia	GE%sT	1996 Oct lastSun
 			4:00	1:00	GEST	1997 Mar lastSun
 			4:00 E-EurAsia	GE%sT	2004 Jun 27
-			3:00 RussiaAsia	GE%sT	2005 Mar lastSun 2:00
+			3:00 RussiaAsia	GE%sT	2005 Mar lastSun  2:00
 			4:00	-	GET
 
 # East Timor
 
 # See Indonesia for the 1945 transition.
 
-# From Joao Carrascalao, brother of the former governor of East Timor, in
-# 
+# From João Carrascalão, brother of the former governor of East Timor, in
 # East Timor may be late for its millennium
-#  (1999-12-26/31):
+#  (1999-12-26/31):
 # Portugal tried to change the time forward in 1974 because the sun
 # rises too early but the suggestion raised a lot of problems with the
 # Timorese and I still don't think it would work today because it
@@ -735,25 +881,25 @@
 # We don't have any record of the above attempt.
 # Most likely our records are incomplete, but we have no better data.
 
-# 
 # From Manoel de Almeida e Silva, Deputy Spokesman for the UN Secretary-General
-# (2000-08-16):
+# http://www.hri.org/news/world/undh/2000/00-08-16.undh.html
+# (2000-08-16):
 # The Cabinet of the East Timor Transition Administration decided
 # today to advance East Timor's time by one hour.  The time change,
 # which will be permanent, with no seasonal adjustment, will happen at
 # midnight on Saturday, September 16.
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Dili	8:22:20 -	LMT	1912
+Zone	Asia/Dili	8:22:20 -	LMT	1912 Jan  1
 			8:00	-	TLT	1942 Feb 21 23:00 # E Timor Time
 			9:00	-	JST	1945 Sep 23
 			9:00	-	TLT	1976 May  3
-			8:00	-	CIT	2000 Sep 17 00:00
+			8:00	-	WITA	2000 Sep 17  0:00
 			9:00	-	TLT
 
 # India
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Kolkata	5:53:28 -	LMT	1880	# Kolkata
+Zone	Asia/Kolkata	5:53:28 -	LMT	1880        # Kolkata
 			5:53:20	-	HMT	1941 Oct    # Howrah Mean Time?
 			6:30	-	BURT	1942 May 15 # Burma Time
 			5:30	-	IST	1942 Sep
@@ -766,8 +912,12 @@
 
 # Indonesia
 #
+# From Paul Eggert (2014-09-06):
+# The 1876 Report of the Secretary of the [US] Navy, p 306 says that Batavia
+# civil time was 7:07:12.5; round to even for Jakarta.
+#
 # From Gwillim Law (2001-05-28), overriding Shanks & Pottenger:
-# 
+# http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime
 # says that Indonesia's time zones changed on 1988-01-01.  Looking at some
 # time zone maps, I think that must refer to Western Borneo (Kalimantan Barat
 # and Kalimantan Tengah) switching from UTC+8 to UTC+7.
@@ -779,42 +929,59 @@
 # other formal surrender ceremonies were September 9, 11, and 13, plus
 # September 12 for the regional surrender to Mountbatten in Singapore.
 # These would be the earliest possible times for a change.
-# Regimes horaires pour le monde entier, by Henri Le Corre, (Editions
+# Régimes horaires pour le monde entier, by Henri Le Corre, (Éditions
 # Traditionnelles, 1987, Paris) says that Java and Madura switched
 # from JST to UTC+07:30 on 1945-09-23, and gives 1944-09-01 for Jayapura
 # (Hollandia).  For now, assume all Indonesian locations other than Jayapura
 # switched on 1945-09-23.
 #
+# From Paul Eggert (2013-08-11):
+# Normally the tz database uses English-language abbreviations, but in
+# Indonesia it's typical to use Indonesian-language abbreviations even
+# when writing in English.  For example, see the English-language
+# summary published by the Time and Frequency Laboratory of the
+# Research Center for Calibration, Instrumentation and Metrology,
+# Indonesia,  (2006-09-29).
+# The abbreviations are:
+#
+# WIB  - UTC+7 - Waktu Indonesia Barat (Indonesia western time)
+# WITA - UTC+8 - Waktu Indonesia Tengah (Indonesia central time)
+# WIT  - UTC+9 - Waktu Indonesia Timur (Indonesia eastern time)
+#
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Java, Sumatra
 Zone Asia/Jakarta	7:07:12 -	LMT	1867 Aug 10
 # Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
 # but this must be a typo.
-			7:07:12	-	JMT	1923 Dec 31 23:47:12 # Jakarta
-			7:20	-	JAVT	1932 Nov	 # Java Time
-			7:30	-	WIT	1942 Mar 23
+			7:07:12	-	BMT	1923 Dec 31 23:47:12 # Batavia
+			7:20	-	JAVT	1932 Nov    # Java Time
+			7:30	-	WIB	1942 Mar 23
 			9:00	-	JST	1945 Sep 23
-			7:30	-	WIT	1948 May
-			8:00	-	WIT	1950 May
-			7:30	-	WIT	1964
-			7:00	-	WIT
+			7:30	-	WIB	1948 May
+			8:00	-	WIB	1950 May
+			7:30	-	WIB	1964
+			7:00	-	WIB
+# west and central Borneo
 Zone Asia/Pontianak	7:17:20	-	LMT	1908 May
 			7:17:20	-	PMT	1932 Nov    # Pontianak MT
-			7:30	-	WIT	1942 Jan 29
+			7:30	-	WIB	1942 Jan 29
 			9:00	-	JST	1945 Sep 23
-			7:30	-	WIT	1948 May
-			8:00	-	WIT	1950 May
-			7:30	-	WIT	1964
-			8:00	-	CIT	1988 Jan  1
-			7:00	-	WIT
+			7:30	-	WIB	1948 May
+			8:00	-	WIB	1950 May
+			7:30	-	WIB	1964
+			8:00	-	WITA	1988 Jan  1
+			7:00	-	WIB
+# Sulawesi, Lesser Sundas, east and south Borneo
 Zone Asia/Makassar	7:57:36 -	LMT	1920
 			7:57:36	-	MMT	1932 Nov    # Macassar MT
-			8:00	-	CIT	1942 Feb  9
+			8:00	-	WITA	1942 Feb  9
 			9:00	-	JST	1945 Sep 23
-			8:00	-	CIT
+			8:00	-	WITA
+# Maluku Islands, West Papua, Papua
 Zone Asia/Jayapura	9:22:48 -	LMT	1932 Nov
-			9:00	-	EIT	1944 Sep  1
-			9:30	-	CST	1964
-			9:00	-	EIT
+			9:00	-	WIT	1944 Sep  1
+			9:30	-	ACST	1964
+			9:00	-	WIT
 
 # Iran
 
@@ -879,7 +1046,7 @@
 # Several of my users have reported that Iran will not observe DST anymore:
 # http://www.irna.ir/en/news/view/line-17/0603193812164948.htm
 #
-# From Reuters (2007-09-16), with a heads-up from Jesper Norgaard Welen:
+# From Reuters (2007-09-16), with a heads-up from Jesper Nørgaard Welen:
 # ... the Guardian Council ... approved a law on Sunday to re-introduce
 # daylight saving time ...
 # http://uk.reuters.com/article/oilRpt/idUKBLA65048420070916
@@ -945,7 +1112,7 @@
 Rule	Iran	2036	2037	-	Sep	21	0:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Tehran	3:25:44	-	LMT	1916
-			3:25:44	-	TMT	1946	# Tehran Mean Time
+			3:25:44	-	TMT	1946     # Tehran Mean Time
 			3:30	-	IRST	1977 Nov
 			4:00	Iran	IR%sT	1979
 			3:30	Iran	IR%sT
@@ -970,17 +1137,11 @@
 # From Steffen Thorsen (2008-03-10):
 # The cabinet in Iraq abolished DST last week, according to the following
 # news sources (in Arabic):
-# 
 # http://www.aljeeran.net/wesima_articles/news-20080305-98602.html
-# 
-# 
 # http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10
-# 
 #
 # We have published a short article in English about the change:
-# 
 # http://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html
-# 
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Iraq	1982	only	-	May	1	0:00	1:00	D
@@ -989,14 +1150,14 @@
 Rule	Iraq	1984	1985	-	Apr	1	0:00	1:00	D
 Rule	Iraq	1985	1990	-	Sep	lastSun	1:00s	0	S
 Rule	Iraq	1986	1990	-	Mar	lastSun	1:00s	1:00	D
-# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the `:01' is a typo.
+# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the ':01' is a typo.
 # Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this.
 #
 Rule	Iraq	1991	2007	-	Apr	 1	3:00s	1:00	D
 Rule	Iraq	1991	2007	-	Oct	 1	3:00s	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Baghdad	2:57:40	-	LMT	1890
-			2:57:36	-	BMT	1918	    # Baghdad Mean Time?
+			2:57:36	-	BMT	1918     # Baghdad Mean Time?
 			3:00	-	AST	1982 May
 			3:00	Iraq	A%sT
 
@@ -1065,8 +1226,13 @@
 Rule	Zion	1986	only	-	Sep	 7	0:00	0	S
 Rule	Zion	1987	only	-	Apr	15	0:00	1:00	D
 Rule	Zion	1987	only	-	Sep	13	0:00	0	S
-Rule	Zion	1988	only	-	Apr	 9	0:00	1:00	D
-Rule	Zion	1988	only	-	Sep	 3	0:00	0	S
+
+# From Avigdor Finkelstein (2014-03-05):
+# I check the Parliament (Knesset) records and there it's stated that the
+# [1988] transition should take place on Saturday night, when the Sabbath
+# ends and changes to Sunday.
+Rule	Zion	1988	only	-	Apr	10	0:00	1:00	D
+Rule	Zion	1988	only	-	Sep	 4	0:00	0	S
 
 # From Ephraim Silverberg
 # (1997-03-04, 1998-03-16, 1998-12-28, 2000-01-17, 2000-07-25, 2004-12-22,
@@ -1176,15 +1342,15 @@
 #
 #	ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2005+beyond.ps
 
-# From Paul Eggert (2005-02-22):
+# From Paul Eggert (2012-10-26):
 # I used Ephraim Silverberg's dst-israel.el program
 #  (2005-02-20)
 # along with Ed Reingold's cal-hebrew in GNU Emacs 21.4,
-# to generate the transitions in this list.
+# to generate the transitions from 2005 through 2012.
 # (I replaced "lastFri" with "Fri>=26" by hand.)
-# The spring transitions below all correspond to the following Rule:
+# The spring transitions all correspond to the following Rule:
 #
-# Rule	Zion	2005	max	-	Mar	Fri>=26	2:00	1:00	D
+# Rule	Zion	2005	2012	-	Mar	Fri>=26	2:00	1:00	D
 #
 # but older zic implementations (e.g., Solaris 8) do not support
 # "Fri>=26" to mean April 1 in years like 2005, so for now we list the
@@ -1201,43 +1367,25 @@
 Rule	Zion	2010	only	-	Sep	12	2:00	0	S
 Rule	Zion	2011	only	-	Apr	 1	2:00	1:00	D
 Rule	Zion	2011	only	-	Oct	 2	2:00	0	S
-Rule	Zion	2012	2015	-	Mar	Fri>=26	2:00	1:00	D
+Rule	Zion	2012	only	-	Mar	Fri>=26	2:00	1:00	D
 Rule	Zion	2012	only	-	Sep	23	2:00	0	S
-Rule	Zion	2013	only	-	Sep	 8	2:00	0	S
-Rule	Zion	2014	only	-	Sep	28	2:00	0	S
-Rule	Zion	2015	only	-	Sep	20	2:00	0	S
-Rule	Zion	2016	only	-	Apr	 1	2:00	1:00	D
-Rule	Zion	2016	only	-	Oct	 9	2:00	0	S
-Rule	Zion	2017	2021	-	Mar	Fri>=26	2:00	1:00	D
-Rule	Zion	2017	only	-	Sep	24	2:00	0	S
-Rule	Zion	2018	only	-	Sep	16	2:00	0	S
-Rule	Zion	2019	only	-	Oct	 6	2:00	0	S
-Rule	Zion	2020	only	-	Sep	27	2:00	0	S
-Rule	Zion	2021	only	-	Sep	12	2:00	0	S
-Rule	Zion	2022	only	-	Apr	 1	2:00	1:00	D
-Rule	Zion	2022	only	-	Oct	 2	2:00	0	S
-Rule	Zion	2023	2032	-	Mar	Fri>=26	2:00	1:00	D
-Rule	Zion	2023	only	-	Sep	24	2:00	0	S
-Rule	Zion	2024	only	-	Oct	 6	2:00	0	S
-Rule	Zion	2025	only	-	Sep	28	2:00	0	S
-Rule	Zion	2026	only	-	Sep	20	2:00	0	S
-Rule	Zion	2027	only	-	Oct	10	2:00	0	S
-Rule	Zion	2028	only	-	Sep	24	2:00	0	S
-Rule	Zion	2029	only	-	Sep	16	2:00	0	S
-Rule	Zion	2030	only	-	Oct	 6	2:00	0	S
-Rule	Zion	2031	only	-	Sep	21	2:00	0	S
-Rule	Zion	2032	only	-	Sep	12	2:00	0	S
-Rule	Zion	2033	only	-	Apr	 1	2:00	1:00	D
-Rule	Zion	2033	only	-	Oct	 2	2:00	0	S
-Rule	Zion	2034	2037	-	Mar	Fri>=26	2:00	1:00	D
-Rule	Zion	2034	only	-	Sep	17	2:00	0	S
-Rule	Zion	2035	only	-	Oct	 7	2:00	0	S
-Rule	Zion	2036	only	-	Sep	28	2:00	0	S
-Rule	Zion	2037	only	-	Sep	13	2:00	0	S
+
+# From Ephraim Silverberg (2013-06-27):
+# On June 23, 2013, the Israeli government approved changes to the
+# Time Decree Law.  The next day, the changes passed the First Reading
+# in the Knesset.  The law is expected to pass the Second and Third
+# (final) Readings by the beginning of September 2013.
+#
+# As of 2013, DST starts at 02:00 on the Friday before the last Sunday
+# in March.  DST ends at 02:00 on the last Sunday of October.
+
+# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+Rule	Zion	2013	max	-	Mar	Fri>=23	2:00	1:00	D
+Rule	Zion	2013	max	-	Oct	lastSun	2:00	0	S
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Jerusalem	2:20:56 -	LMT	1880
-			2:20:40	-	JMT	1918	# Jerusalem Mean Time?
+Zone	Asia/Jerusalem	2:20:54 -	LMT	1880
+			2:20:40	-	JMT	1918 # Jerusalem Mean Time?
 			2:00	Zion	I%sT
 
 
@@ -1246,15 +1394,15 @@
 
 # Japan
 
-# `9:00' and `JST' is from Guy Harris.
+# '9:00' and 'JST' is from Guy Harris.
 
 # From Paul Eggert (1995-03-06):
 # Today's _Asahi Evening News_ (page 4) reports that Japan had
-# daylight saving between 1948 and 1951, but ``the system was discontinued
-# because the public believed it would lead to longer working hours.''
+# daylight saving between 1948 and 1951, but "the system was discontinued
+# because the public believed it would lead to longer working hours."
 
-# From Mayumi Negishi in the 2005-08-10 Japan Times
-# :
+# From Mayumi Negishi in the 2005-08-10 Japan Times:
+# http://www.japantimes.co.jp/cgi-bin/getarticle.pl5?nn20050810f2.htm
 # Occupation authorities imposed daylight-saving time on Japan on
 # [1948-05-01]....  But lack of prior debate and the execution of
 # daylight-saving time just three days after the bill was passed generated
@@ -1278,7 +1426,8 @@
 
 # From Hideyuki Suzuki (1998-11-09):
 # 'Tokyo' usually stands for the former location of Tokyo Astronomical
-# Observatory: E 139 44' 40".90 (9h 18m 58s.727), N 35 39' 16".0.
+# Observatory: 139 degrees 44' 40.90" E (9h 18m 58.727s),
+# 35 degrees 39' 16.0" N.
 # This data is from 'Rika Nenpyou (Chronological Scientific Tables) 1996'
 # edited by National Astronomical Observatory of Japan....
 # JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST).
@@ -1286,10 +1435,10 @@
 
 # From Hideyuki Suzuki (1998-11-16):
 # The ordinance No. 51 (1886) established "standard time" in Japan,
-# which stands for the time on E 135 degree.
+# which stands for the time on 135 degrees E.
 # In the ordinance No. 167 (1895), "standard time" was renamed to "central
 # standard time".  And the same ordinance also established "western standard
-# time", which stands for the time on E 120 degree....  But "western standard
+# time", which stands for the time on 120 degrees E....  But "western standard
 # time" was abolished in the ordinance No. 529 (1937).  In the ordinance No.
 # 167, there is no mention regarding for what place western standard time is
 # standard....
@@ -1297,27 +1446,33 @@
 # I wrote "ordinance" above, but I don't know how to translate.
 # In Japanese it's "chokurei", which means ordinance from emperor.
 
-# Shanks & Pottenger claim JST in use since 1896, and that a few
-# places (e.g. Ishigaki) use +0800; go with Suzuki.  Guess that all
-# ordinances took effect on Jan 1.
+# From Yu-Cheng Chuang (2013-07-12):
+# ...the Meiji Emperor announced Ordinance No. 167 of Meiji Year 28 "The clause
+# about standard time" ... The adoption began from Jan 1, 1896.
+# http://ja.wikisource.org/wiki/標準時ニ關スル件_(公布時)
+#
+# ...the Showa Emperor announced Ordinance No. 529 of Showa Year 12 ... which
+# means the whole Japan territory, including later occupations, adopt Japan
+# Central Time (UTC+9). The adoption began on Oct 1, 1937.
+# http://ja.wikisource.org/wiki/明治二十八年勅令第百六十七號標準時ニ關スル件中改正ノ件
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Tokyo	9:18:59	-	LMT	1887 Dec 31 15:00u
-			9:00	-	JST	1896
-			9:00	-	CJT	1938
+			9:00	-	JST	1896 Jan  1
+			9:00	-	JCST	1937 Oct  1
 			9:00	Japan	J%sT
 # Since 1938, all Japanese possessions have been like Asia/Tokyo.
 
 # Jordan
 #
-# From 
-# Jordan Week (1999-07-01)  via Steffen Thorsen (1999-09-09):
+# From 
+# Jordan Week (1999-07-01) via Steffen Thorsen (1999-09-09):
 # Clocks in Jordan were forwarded one hour on Wednesday at midnight,
 # in accordance with the government's decision to implement summer time
 # all year round.
 #
-# From 
-# Jordan Week (1999-09-30)  via Steffen Thorsen (1999-11-09):
+# From 
+# Jordan Week (1999-09-30) via Steffen Thorsen (1999-11-09):
 # Winter time starts today Thursday, 30 September. Clocks will be turned back
 # by one hour.  This is the latest government decision and it's final!
 # The decision was taken because of the increase in working hours in
@@ -1335,27 +1490,9 @@
 # "Jordan will switch to winter time on Friday, October 27".
 #
 
-# From Phil Pizzey (2009-04-02):
-# ...I think I may have spotted an error in the timezone data for
-# Jordan.
-# The current (2009d) asia file shows Jordan going to daylight
-# saving
-# time on the last Thursday in March.
-#
-# Rule  Jordan      2000  max	-  Mar   lastThu     0:00s 1:00  S
-#
-# However timeanddate.com, which I usually find reliable, shows Jordan
-# going to daylight saving time on the last Friday in March since 2002.
-# Please see
-# 
-# http://www.timeanddate.com/worldclock/timezone.html?n=11
-# 
-
 # From Steffen Thorsen (2009-04-02):
 # This single one might be good enough, (2009-03-24, Arabic):
-# 
 # http://petra.gov.jo/Artical.aspx?Lng=2&Section=8&Artical=95279
-# 
 #
 # Google's translation:
 #
@@ -1368,6 +1505,28 @@
 # From Arthur David Olson (2009-04-06):
 # We still have Jordan switching to DST on Thursdays in 2000 and 2001.
 
+# From Steffen Thorsen (2012-10-25):
+# Yesterday the government in Jordan announced that they will not
+# switch back to standard time this winter, so the will stay on DST
+# until about the same time next year (at least).
+# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?NewsID=88950
+
+# From Steffen Thorsen (2013-12-11):
+# Jordan Times and other sources say that Jordan is going back to
+# UTC+2 on 2013-12-19 at midnight:
+# http://jordantimes.com/govt-decides-to-switch-back-to-wintertime
+# Official, in Arabic:
+# http://www.petra.gov.jo/public_news/Nws_NewsDetails.aspx?Menu_ID=&Site_Id=2&lang=1&NewsID=133230&CatID=14
+# ... Our background/permalink about it
+# http://www.timeanddate.com/news/time/jordan-reverses-dst-decision.html
+# ...
+# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?lang=2&site_id=1&NewsID=133313&Type=P
+# ... says midnight for the coming one and 1:00 for the ones in the future
+# (and they will use DST again next year, using the normal schedule).
+
+# From Paul Eggert (2013-12-11):
+# As Steffen suggested, consider the past 21-month experiment to be DST.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Jordan	1973	only	-	Jun	6	0:00	1:00	S
 Rule	Jordan	1973	1975	-	Oct	1	0:00	0	-
@@ -1392,11 +1551,14 @@
 Rule	Jordan	1999	only	-	Jul	 1	0:00s	1:00	S
 Rule	Jordan	1999	2002	-	Sep	lastFri	0:00s	0	-
 Rule	Jordan	2000	2001	-	Mar	lastThu	0:00s	1:00	S
-Rule	Jordan	2002	max	-	Mar	lastThu	24:00	1:00	S
+Rule	Jordan	2002	2012	-	Mar	lastThu	24:00	1:00	S
 Rule	Jordan	2003	only	-	Oct	24	0:00s	0	-
 Rule	Jordan	2004	only	-	Oct	15	0:00s	0	-
 Rule	Jordan	2005	only	-	Sep	lastFri	0:00s	0	-
-Rule	Jordan	2006	max	-	Oct	lastFri	0:00s	0	-
+Rule	Jordan	2006	2011	-	Oct	lastFri	0:00s	0	-
+Rule	Jordan	2013	only	-	Dec	20	0:00	0	-
+Rule	Jordan	2014	max	-	Mar	lastThu	24:00	1:00	S
+Rule	Jordan	2014	max	-	Oct	lastFri	0:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Amman	2:23:44 -	LMT	1931
 			2:00	Jordan	EE%sT
@@ -1421,9 +1583,8 @@
 # - Qyzylorda switched from +5:00 to +6:00 on 1992-01-19 02:00.
 # - Oral switched from +5:00 to +4:00 in spring 1989.
 
-# 
-# From Kazakhstan Embassy's News Bulletin #11 (2005-03-21):
-# 
+# From Kazakhstan Embassy's News Bulletin #11
+#  (2005-03-21):
 # The Government of Kazakhstan passed a resolution March 15 abolishing
 # daylight saving time citing lack of economic benefits and health
 # complications coupled with a decrease in productivity.
@@ -1456,10 +1617,10 @@
 			6:00	-	KIZT	1982 Apr  1
 			5:00 RussiaAsia	KIZ%sT	1991
 			5:00	-	KIZT	1991 Dec 16 # independence
-			5:00	-	QYZT	1992 Jan 19 2:00
+			5:00	-	QYZT	1992 Jan 19  2:00
 			6:00 RussiaAsia	QYZ%sT	2005 Mar 15
 			6:00	-	QYZT
-# Aqtobe (aka Aktobe, formerly Akt'ubinsk)
+# Aqtobe (aka Aktobe, formerly Aktyubinsk)
 Zone	Asia/Aqtobe	3:48:40	-	LMT	1924 May  2
 			4:00	-	AKTT	1930 Jun 21 # Aktyubinsk Time
 			5:00	-	AKTT	1981 Apr  1
@@ -1479,7 +1640,7 @@
 			6:00	-	SHET	1982 Apr  1
 			5:00 RussiaAsia	SHE%sT	1991
 			5:00	-	SHET	1991 Dec 16 # independence
-			5:00 RussiaAsia	AQT%sT	1995 Mar lastSun 2:00 # Aqtau Time
+			5:00 RussiaAsia	AQT%sT	1995 Mar lastSun  2:00 # Aqtau Time
 			4:00 RussiaAsia	AQT%sT	2005 Mar 15
 			5:00	-	AQTT
 # West Kazakhstan
@@ -1488,7 +1649,7 @@
 			5:00	-	URAT	1981 Apr  1
 			5:00	1:00	URAST	1981 Oct  1
 			6:00	-	URAT	1982 Apr  1
-			5:00 RussiaAsia	URA%sT	1989 Mar 26 2:00
+			5:00 RussiaAsia	URA%sT	1989 Mar 26  2:00
 			4:00 RussiaAsia	URA%sT	1991
 			4:00	-	URAT	1991 Dec 16 # independence
 			4:00 RussiaAsia	ORA%sT	2005 Mar 15 # Oral Time
@@ -1499,7 +1660,7 @@
 
 # From Paul Eggert (2005-08-15):
 # According to an article dated today in the Kyrgyzstan Development Gateway
-# 
+# http://eng.gateway.kg/cgi-bin/page.pl?id=1&story_name=doc9979.shtml
 # Kyrgyzstan is canceling the daylight saving time system.  I take the article
 # to mean that they will leave their clocks at 6 hours ahead of UTC.
 # From Malik Abdugaliev (2005-09-21):
@@ -1514,68 +1675,92 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Bishkek	4:58:24 -	LMT	1924 May  2
 			5:00	-	FRUT	1930 Jun 21 # Frunze Time
-			6:00 RussiaAsia FRU%sT	1991 Mar 31 2:00s
-			5:00	1:00	FRUST	1991 Aug 31 2:00 # independence
-			5:00	Kyrgyz	KG%sT	2005 Aug 12    # Kyrgyzstan Time
+			6:00 RussiaAsia FRU%sT	1991 Mar 31  2:00s
+			5:00	1:00	FRUST	1991 Aug 31  2:00 # independence
+			5:00	Kyrgyz	KG%sT	2005 Aug 12 # Kyrgyzstan Time
 			6:00	-	KGT
 
 ###############################################################################
 
 # Korea (North and South)
 
-# From Annie I. Bang (2006-07-10) in
-# :
-# The Ministry of Commerce, Industry and Energy has already
-# commissioned a research project [to reintroduce DST] and has said
-# the system may begin as early as 2008....  Korea ran a daylight
-# saving program from 1949-61 but stopped it during the 1950-53 Korean War.
-
-# From Shanks & Pottenger:
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	ROK	1960	only	-	May	15	0:00	1:00	D
-Rule	ROK	1960	only	-	Sep	13	0:00	0	S
-Rule	ROK	1987	1988	-	May	Sun>=8	0:00	1:00	D
-Rule	ROK	1987	1988	-	Oct	Sun>=8	0:00	0	S
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Seoul	8:27:52	-	LMT	1890
-			8:30	-	KST	1904 Dec
-			9:00	-	KST	1928
-			8:30	-	KST	1932
+# From Annie I. Bang (2006-07-10):
+# http://www.koreaherald.com/view.php?ud=200607100012
+# Korea ran a daylight saving program from 1949-61 but stopped it
+# during the 1950-53 Korean War.  The system was temporarily enforced
+# between 1987 and 1988 ...
+
+# From Sanghyuk Jung (2014-10-29):
+# http://mm.icann.org/pipermail/tz/2014-October/021830.html
+# According to the Korean Wikipedia
+# http://ko.wikipedia.org/wiki/한국_표준시
+# [oldid=12896437 2014-09-04 08:03 UTC]
+# DST in Republic of Korea was as follows....  And I checked old
+# newspapers in Korean, all articles correspond with data in Wikipedia.
+# For example, the article in 1948 (Korean Language) proved that DST
+# started at June 1 in that year.  For another example, the article in
+# 1988 said that DST started at 2:00 AM in that year.
+
+# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+Rule	ROK	1948	only	-	Jun	 1	0:00	1:00	D
+Rule	ROK	1948	only	-	Sep	13	0:00	0	S
+Rule	ROK	1949	only	-	Apr	 3	0:00	1:00	D
+Rule	ROK	1949	1951	-	Sep	Sun>=8	0:00	0	S
+Rule	ROK	1950	only	-	Apr	 1	0:00	1:00	D
+Rule	ROK	1951	only	-	May	 6	0:00	1:00	D
+Rule	ROK	1955	only	-	May	 5	0:00	1:00	D
+Rule	ROK	1955	only	-	Sep	 9	0:00	0	S
+Rule	ROK	1956	only	-	May	20	0:00	1:00	D
+Rule	ROK	1956	only	-	Sep	30	0:00	0	S
+Rule	ROK	1957	1960	-	May	Sun>=1	0:00	1:00	D
+Rule	ROK	1957	1960	-	Sep	Sun>=18	0:00	0	S
+Rule	ROK	1987	1988	-	May	Sun>=8	2:00	1:00	D
+Rule	ROK	1987	1988	-	Oct	Sun>=8	3:00	0	S
+
+# From Paul Eggert (2014-10-30):
+# The Korean Wikipedia entry gives the following sources for UT offsets:
+#
+# 1908: Official Journal Article No. 3994 (Edict No. 5)
+# 1912: Governor-General of Korea Official Gazette Issue No. 367
+#       (Announcement No. 338)
+# 1954: Presidential Decree No. 876 (1954-03-17)
+# 1961: Law No. 676 (1961-08-07)
+# 1987: Law No. 3919 (1986-12-31)
+#
+# The Wikipedia entry also has confusing information about a change
+# to UT+9 in April 1910, but then what would be the point of the later change
+# to UT+9 on 1912-01-01?  Omit the 1910 change for now.
+#
+# I guessed that time zone abbreviations through 1945 followed the same
+# rules as discussed under Taiwan, with nominal switches from JST to KST
+# when the respective cities were taken over by the Allies after WWII.
+#
+# For Pyongyang we have no information; guess no changes since World War II.
+
+# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+Zone	Asia/Seoul	8:27:52	-	LMT	1908 Apr  1
+			8:30	-	KST	1912 Jan  1
+			9:00	-	JCST	1937 Oct  1
+			9:00	-	JST	1945 Sep  8
 			9:00	-	KST	1954 Mar 21
-			8:00	ROK	K%sT	1961 Aug 10
-			8:30	-	KST	1968 Oct
+			8:30	ROK	K%sT	1961 Aug 10
 			9:00	ROK	K%sT
-Zone	Asia/Pyongyang	8:23:00 -	LMT	1890
-			8:30	-	KST	1904 Dec
-			9:00	-	KST	1928
-			8:30	-	KST	1932
-			9:00	-	KST	1954 Mar 21
-			8:00	-	KST	1961 Aug 10
+Zone	Asia/Pyongyang	8:23:00 -	LMT	1908 Apr  1
+			8:30	-	KST	1912 Jan  1
+			9:00	-	JCST	1937 Oct  1
+			9:00	-	JST	1945 Aug 24
 			9:00	-	KST
 
 ###############################################################################
 
 # Kuwait
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-# From the Arab Times (2007-03-14):
-# The Civil Service Commission (CSC) has approved a proposal forwarded
-# by MP Ahmad Baqer on implementing the daylight saving time (DST) in
-# Kuwait starting from April until the end of Sept this year, reports Al-Anba.
-# .
-# From Paul Eggert (2007-03-29):
-# We don't know the details, or whether the approval means it'll happen,
-# so for now we assume no DST.
 Zone	Asia/Kuwait	3:11:56 -	LMT	1950
 			3:00	-	AST
 
 # Laos
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Vientiane	6:50:24 -	LMT	1906 Jun  9 # or Viangchan
-			7:06:20	-	SMT	1911 Mar 11 0:01 # Saigon MT?
-			7:00	-	ICT	1912 May
-			8:00	-	ICT	1931 May
-			7:00	-	ICT
+# See Asia/Bangkok.
+
 
 # Lebanon
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -1613,8 +1798,8 @@
 Rule	NBorneo	1935	1941	-	Dec	14	0:00	0	-
 #
 # peninsular Malaysia
-# The data here are taken from Mok Ly Yng (2003-10-30)
-# .
+# taken from Mok Ly Yng (2003-10-30)
+# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Asia/Kuala_Lumpur	6:46:46 -	LMT	1901 Jan  1
 			6:55:25	-	SMT	1905 Jun  1 # Singapore M.T.
@@ -1626,12 +1811,12 @@
 			7:30	-	MALT	1982 Jan  1
 			8:00	-	MYT	# Malaysia Time
 # Sabah & Sarawak
-# From Paul Eggert (2006-03-22):
-# The data here are mostly from Shanks & Pottenger, but the 1942, 1945 and 1982
-# transition dates are from Mok Ly Yng.
+# From Paul Eggert (2014-08-12):
+# The data entries here are mostly from Shanks & Pottenger, but the 1942, 1945
+# and 1982 transition dates are from Mok Ly Yng.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Asia/Kuching	7:21:20	-	LMT	1926 Mar
-			7:30	-	BORT	1933	# Borneo Time
+			7:30	-	BORT	1933        # Borneo Time
 			8:00	NBorneo	BOR%sT	1942 Feb 16
 			9:00	-	JST	1945 Sep 12
 			8:00	-	BORT	1982 Jan  1
@@ -1639,22 +1824,21 @@
 
 # Maldives
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Maldives	4:54:00 -	LMT	1880	# Male
-			4:54:00	-	MMT	1960	# Male Mean Time
-			5:00	-	MVT		# Maldives Time
+Zone	Indian/Maldives	4:54:00 -	LMT	1880 # Male
+			4:54:00	-	MMT	1960 # Male Mean Time
+			5:00	-	MVT	# Maldives Time
 
 # Mongolia
 
 # Shanks & Pottenger say that Mongolia has three time zones, but
-# usno1995 and the CIA map Standard Time Zones of the World (2005-03)
-# both say that it has just one.
+# The USNO (1995-12-21) and the CIA map Standard Time Zones of the World
+# (2005-03) both say that it has just one.
 
 # From Oscar van Vlijmen (1999-12-11):
-# 
 # General Information Mongolia
-#  (1999-09)
+#  (1999-09)
 # "Time: Mongolia has two time zones. Three westernmost provinces of
-# Bayan-Ulgii, Uvs, and Hovd are one hour earlier than the capital city, and
+# Bayan-Ölgii, Uvs, and Hovd are one hour earlier than the capital city, and
 # the rest of the country follows the Ulaanbaatar time, which is UTC/GMT plus
 # eight hours."
 
@@ -1665,7 +1849,7 @@
 # of implementation may have been different....
 # Some maps in the past have indicated that there was an additional time
 # zone in the eastern part of Mongolia, including the provinces of Dornod,
-# Suhbaatar, and possibly Khentij.
+# Sükhbaatar, and possibly Khentii.
 
 # From Paul Eggert (1999-12-15):
 # Naming and spelling is tricky in Mongolia.
@@ -1679,10 +1863,10 @@
 # (adopted DST on 2001-04-27 02:00 local time, ending 2001-09-28),
 # there are three time zones.
 #
-# Provinces [at 7:00]: Bayan-ulgii, Uvs, Khovd, Zavkhan, Govi-Altai
-# Provinces [at 8:00]: Khovsgol, Bulgan, Arkhangai, Khentii, Tov,
-#	Bayankhongor, Ovorkhangai, Dundgovi, Dornogovi, Omnogovi
-# Provinces [at 9:00]: Dornod, Sukhbaatar
+# Provinces [at 7:00]: Bayan-Ölgii, Uvs, Khovd, Zavkhan, Govi-Altai
+# Provinces [at 8:00]: Khövsgöl, Bulgan, Arkhangai, Khentii, Töv,
+#	Bayankhongor, Övörkhangai, Dundgovi, Dornogovi, Ömnögovi
+# Provinces [at 9:00]: Dornod, Sükhbaatar
 #
 # [The province of Selenge is omitted from the above lists.]
 
@@ -1699,16 +1883,16 @@
 # We have wildly conflicting information about Mongolia's time zones.
 # Bill Bonnet (2005-05-19) reports that the US Embassy in Ulaanbaatar says
 # there is only one time zone and that DST is observed, citing Microsoft
-# Windows XP as the source.  Risto Nykanen (2005-05-16) reports that
+# Windows XP as the source.  Risto Nykänen (2005-05-16) reports that
 # travelmongolia.org says there are two time zones (UTC+7, UTC+8) with no DST.
 # Oscar van Vlijmen (2005-05-20) reports that the Mongolian Embassy in
 # Washington, DC says there are two time zones, with DST observed.
 # He also found
-# 
+# http://ubpost.mongolnews.mn/index.php?subaction=showcomments&id=1111634894&archive=&start_from=&ucat=1&
 # which also says that there is DST, and which has a comment by "Toddius"
 # (2005-03-31 06:05 +0700) saying "Mongolia actually has 3.5 time zones.
 # The West (OLGII) is +7 GMT, most of the country is ULAT is +8 GMT
-# and some Eastern provinces are +9 GMT but Sukhbaatar Aimag is SUHK +8.5 GMT.
+# and some Eastern provinces are +9 GMT but Sükhbaatar Aimag is SUHK +8.5 GMT.
 # The SUKH timezone is new this year, it is one of the few things the
 # parliament passed during the tumultuous winter session."
 # For now, let's ignore this information, until we have more confirmation.
@@ -1724,29 +1908,23 @@
 # +08:00 instead. Different sources appear to disagree with the tz
 # database on this, e.g.:
 #
-# 
 # http://www.timeanddate.com/worldclock/city.html?n=1026
-# 
-# 
 # http://www.worldtimeserver.com/current_time_in_MN.aspx
-# 
 #
 # both say GMT+08:00.
 
 # From Steffen Thorsen (2008-03-31):
 # eznis airways, which operates several domestic flights, has a flight
 # schedule here:
-# 
 # http://www.eznis.com/Container.jsp?id=112
-# 
 # (click the English flag for English)
 #
-# There it appears that flights between Choibalsan and Ulaanbatar arrive
+# There it appears that flights between Choibalsan and Ulaanbaatar arrive
 # about 1:35 - 1:50 hours later in local clock time, no matter the
-# direction, while Ulaanbaatar-Khvod takes 2 hours in the Eastern
-# direction and 3:35 back, which indicates that Ulaanbatar and Khvod are
+# direction, while Ulaanbaatar-Khovd takes 2 hours in the Eastern
+# direction and 3:35 back, which indicates that Ulaanbaatar and Khovd are
 # in different time zones (like we know about), while Choibalsan and
-# Ulaanbatar are in the same time zone (correction needed).
+# Ulaanbaatar are in the same time zone (correction needed).
 
 # From Arthur David Olson (2008-05-19):
 # Assume that Choibalsan is indeed offset by 8:00.
@@ -1762,7 +1940,7 @@
 # (1996-09) says 1996-10-25.  Go with Shanks & Pottenger through 1998.
 #
 # Shanks & Pottenger say that the Sept. 1984 through Sept. 1990 switches
-# in Choibalsan (more precisely, in Dornod and Sukhbaatar) took place
+# in Choibalsan (more precisely, in Dornod and Sükhbaatar) took place
 # at 02:00 standard time, not at 00:00 local time as in the rest of
 # the country.  That would be odd, and possibly is a result of their
 # correction of 02:00 (in the previous edition) not being done correctly
@@ -1778,13 +1956,13 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 # Hovd, a.k.a. Chovd, Dund-Us, Dzhargalant, Khovd, Jirgalanta
 Zone	Asia/Hovd	6:06:36 -	LMT	1905 Aug
-			6:00	-	HOVT	1978	# Hovd Time
+			6:00	-	HOVT	1978     # Hovd Time
 			7:00	Mongol	HOV%sT
 # Ulaanbaatar, a.k.a. Ulan Bataar, Ulan Bator, Urga
 Zone	Asia/Ulaanbaatar 7:07:32 -	LMT	1905 Aug
-			7:00	-	ULAT	1978	# Ulaanbaatar Time
+			7:00	-	ULAT	1978     # Ulaanbaatar Time
 			8:00	Mongol	ULA%sT
-# Choibalsan, a.k.a. Bajan Tuemen, Bajan Tumen, Chojbalsan,
+# Choibalsan, a.k.a. Bajan Tümen, Bajan Tumen, Chojbalsan,
 # Choybalsan, Sanbejse, Tchoibalsan
 Zone	Asia/Choibalsan	7:38:00 -	LMT	1905 Aug
 			7:00	-	ULAT	1978
@@ -1799,8 +1977,11 @@
 			5:45	-	NPT	# Nepal Time
 
 # Oman
+
+# Milne says 3:54:24 was the meridian of the Muscat Tidal Observatory.
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Muscat	3:54:20 -	LMT	1920
+Zone	Asia/Muscat	3:54:24 -	LMT	1920
 			4:00	-	GST
 
 # Pakistan
@@ -1813,7 +1994,7 @@
 # 00:01 was to make it clear which day it was on.
 
 # From Paul Eggert (2002-03-15):
-# Jesper Norgaard found this URL:
+# Jesper Nørgaard found this URL:
 # http://www.pak.gov.pk/public/news/app/app06_dec.htm
 # (dated 2001-12-06) which says that the Cabinet adopted a scheme "to
 # advance the clocks by one hour on the night between the first
@@ -1841,47 +2022,34 @@
 # shown 8 per cent higher consumption of electricity.
 
 # From Alex Krivenyshev (2008-05-15):
-# 
-# Here is an article that Pakistan plan to introduce Daylight Saving Time 
+#
+# Here is an article that Pakistan plan to introduce Daylight Saving Time
 # on June 1, 2008 for 3 months.
-# 
-# "... The federal cabinet on Wednesday announced a new conservation plan to help 
-# reduce load shedding by approving the closure of commercial centres at 9pm and 
-# moving clocks forward by one hour for the next three months. 
-# ...."
-# 
-# 
+#
+# "... The federal cabinet on Wednesday announced a new conservation plan to
+# help reduce load shedding by approving the closure of commercial centres at
+# 9pm and moving clocks forward by one hour for the next three months. ...."
+#
 # http://www.worldtimezone.net/dst_news/dst_news_pakistan01.html
-# 
-# OR
-# 
 # http://www.dailytimes.com.pk/default.asp?page=2008%5C05%5C15%5Cstory_15-5-2008_pg1_4
-# 
 
 # From Arthur David Olson (2008-05-19):
 # XXX--midnight transitions is a guess; 2008 only is a guess.
 
 # From Alexander Krivenyshev (2008-08-28):
 # Pakistan government has decided to keep the watches one-hour advanced
-# for another 2 months--plan to return to Standard Time on October 31
+# for another 2 months - plan to return to Standard Time on October 31
 # instead of August 31.
 #
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_pakistan02.html
-# 
-# OR
-# 
 # http://dailymailnews.com/200808/28/news/dmbrn03.html
-# 
 
 # From Alexander Krivenyshev (2009-04-08):
 # Based on previous media reports that "... proposed plan to
 # advance clocks by one hour from May 1 will cause disturbance
 # to the working schedules rather than bringing discipline in
 # official working."
-# 
 # http://www.thenews.com.pk/daily_detail.asp?id=171280
-# 
 #
 # recent news that instead of May 2009 - Pakistan plan to
 # introduce DST from April 15, 2009
@@ -1889,15 +2057,8 @@
 # FYI: Associated Press Of Pakistan
 # April 08, 2009
 # Cabinet okays proposal to advance clocks by one hour from April 15
-# 
 # http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=73043&Itemid=1
-# 
-#
-# or
-#
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_pakistan05.html
-# 
 #
 # ....
 # The Federal Cabinet on Wednesday approved the proposal to
@@ -1909,35 +2070,21 @@
 # Government has decided to restore the previous time by moving the
 # clocks backward by one hour from October 1. A formal announcement to
 # this effect will be made after the Prime Minister grants approval in
-# this regard." 
-# 
+# this regard."
 # http://www.thenews.com.pk/updates.asp?id=87168
-# 
 
 # From Alexander Krivenyshev (2009-09-28):
 # According to Associated Press Of Pakistan, it is confirmed that
-# Pakistan clocks across the country would be turned back by an hour from October
-# 1, 2009.
+# Pakistan clocks across the country would be turned back by an hour from
+# October 1, 2009.
 #
 # "Clocks to go back one hour from 1 Oct"
-# 
 # http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=86715&Itemid=2
-# 
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_pakistan07.htm
-# 
-
-# From Steffen Thorsen (2009-09-29):
-# Alexander Krivenyshev wrote:
-# > According to Associated Press Of Pakistan, it is confirmed that
-# > Pakistan clocks across the country would be turned back by an hour from October
-# > 1, 2009.
 #
+# From Steffen Thorsen (2009-09-29):
 # Now they seem to have changed their mind, November 1 is the new date:
-# 
 # http://www.thenews.com.pk/top_story_detail.asp?Id=24742
-# 
 # "The country's clocks will be reversed by one hour on November 1.
 # Officials of Federal Ministry for Interior told this to Geo News on
 # Monday."
@@ -1949,11 +2096,9 @@
 #
 # We have confirmed this year's end date with both with the Ministry of
 # Water and Power and the Pakistan Electric Power Company:
-# 
 # http://www.timeanddate.com/news/time/pakistan-ends-dst09.html
-# 
 
-# From Christoph Goehre (2009-10-01):
+# From Christoph Göhre (2009-10-01):
 # [T]he German Consulate General in Karachi reported me today that Pakistan
 # will go back to standard time on 1st of November.
 
@@ -1969,22 +2114,17 @@
 # Now, it seems that the decision to not observe DST in final:
 #
 # "Govt Withdraws Plan To Advance Clocks"
-# 
 # http://www.apakistannews.com/govt-withdraws-plan-to-advance-clocks-172041
-# 
 #
 # "People laud PM's announcement to end DST"
-# 
 # http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2
-# 
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule Pakistan	2002	only	-	Apr	Sun>=2	0:01	1:00	S
 Rule Pakistan	2002	only	-	Oct	Sun>=2	0:01	0	-
 Rule Pakistan	2008	only	-	Jun	1	0:00	1:00	S
-Rule Pakistan	2008	only	-	Nov	1	0:00	0	-
+Rule Pakistan	2008	2009	-	Nov	1	0:00	0	-
 Rule Pakistan	2009	only	-	Apr	15	0:00	1:00	S
-Rule Pakistan	2009	only	-	Nov	1	0:00	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Karachi	4:28:12 -	LMT	1907
@@ -2047,8 +2187,7 @@
 # occurred before our cutoff date of 1970.
 # However, as we get more information, we may need to add entries
 # for parts of the West Bank as they transitioned from Israel's rules
-# to Palestine's rules.  If you have more info about this, please
-# send it to tz@elsie.nci.nih.gov for incorporation into future editions.
+# to Palestine's rules.
 
 # From IINS News Service - Israel - 1998-03-23 10:38:07 Israel time,
 # forwarded by Ephraim Silverberg:
@@ -2059,10 +2198,9 @@
 # the PA has decided to implement DST in April.
 
 # From Paul Eggert (1999-09-20):
-# Daoud Kuttab writes in
-# 
-# Holiday havoc
-#  (Jerusalem Post, 1999-04-22) that
+# Daoud Kuttab writes in Holiday havoc
+# http://www.jpost.com/com/Archive/22.Apr.1999/Opinion/Article-2.html
+# (Jerusalem Post, 1999-04-22) that
 # the Palestinian National Authority changed to DST on 1999-04-15.
 # I vaguely recall that they switch back in October (sorry, forgot the source).
 # For now, let's assume that the spring switch was at 24:00,
@@ -2075,7 +2213,7 @@
 # A user from Gaza reported that Gaza made the change early because of
 # the Ramadan.  Next year Ramadan will be even earlier, so I think
 # there is a good chance next year's end date will be around two weeks
-# earlier--the same goes for Jordan.
+# earlier - the same goes for Jordan.
 
 # From Steffen Thorsen (2006-08-17):
 # I was informed by a user in Bethlehem that in Bethlehem it started the
@@ -2094,7 +2232,7 @@
 # I guess it is likely that next year's date will be moved as well,
 # because of the Ramadan.
 
-# From Jesper Norgaard Welen (2007-09-18):
+# From Jesper Nørgaard Welen (2007-09-18):
 # According to Steffen Thorsen's web site the Gaza Strip and the rest of the
 # Palestinian territories left DST early on 13.th. of September at 2:00.
 
@@ -2111,16 +2249,9 @@
 # Gaza Strip (as Egypt) ended DST at midnight Thursday (Aug 28, 2008), while
 # the West Bank will end Daylight Saving Time at midnight Sunday (Aug 31, 2008).
 #
-# 
 # http://www.guardian.co.uk/world/feedarticle/7759001
-# 
-# 
 # http://www.abcnews.go.com/International/wireStory?id=5676087
-# 
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_gazastrip01.html
-# 
 
 # From Alexander Krivenyshev (2009-03-26):
 # According to the Palestine News Network (arabic.pnn.ps), Palestinian
@@ -2128,24 +2259,17 @@
 # 26 and continue until the night of 27 September 2009.
 #
 # (in Arabic)
-# 
 # http://arabic.pnn.ps/index.php?option=com_content&task=view&id=50850
-# 
 #
-# or
 # (English translation)
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_westbank01.html
-# 
 
 # From Steffen Thorsen (2009-08-31):
 # Palestine's Council of Ministers announced that they will revert back to
 # winter time on Friday, 2009-09-04.
 #
 # One news source:
-# 
 # http://www.safa.ps/ara/?action=showdetail&seid=4158
-# 
 # (Palestinian press agency, Arabic),
 # Google translate: "Decided that the Palestinian government in Ramallah
 # headed by Salam Fayyad, the start of work in time for the winter of
@@ -2154,9 +2278,7 @@
 #
 # We are not sure if Gaza will do the same, last year they had a different
 # end date, we will keep this page updated:
-# 
 # http://www.timeanddate.com/news/time/westbank-gaza-dst-2009.html
-# 
 
 # From Alexander Krivenyshev (2009-09-02):
 # Seems that Gaza Strip will go back to Winter Time same date as West Bank.
@@ -2166,41 +2288,101 @@
 #
 # "Winter time unite the West Bank and Gaza"
 # (from Palestinian National Authority):
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_gazastrip02.html
-# 
 
 # From Alexander Krivenyshev (2010-03-19):
 # According to Voice of Palestine DST will last for 191 days, from March
 # 26, 2010 till "the last Sunday before the tenth day of Tishri
 # (October), each year" (October 03, 2010?)
 #
-# 
 # http://palvoice.org/forums/showthread.php?t=245697
-# 
 # (in Arabic)
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_westbank03.html
-# 
 
 # From Steffen Thorsen (2010-03-24):
 # ...Ma'an News Agency reports that Hamas cabinet has decided it will
 # start one day later, at 12:01am. Not sure if they really mean 12:01am or
 # noon though:
 #
-# 
 # http://www.maannews.net/eng/ViewDetails.aspx?ID=271178
-# 
 # (Ma'an News Agency)
 # "At 12:01am Friday, clocks in Israel and the West Bank will change to
 # 1:01am, while Gaza clocks will change at 12:01am Saturday morning."
 
-# The rules for Egypt are stolen from the `africa' file.
+# From Steffen Thorsen (2010-08-11):
+# According to several sources, including
+# http://www.maannews.net/eng/ViewDetails.aspx?ID=306795
+# the clocks were set back one hour at 2010-08-11 00:00:00 local time in
+# Gaza and the West Bank.
+# Some more background info:
+# http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html
+
+# From Steffen Thorsen (2011-08-26):
+# Gaza and the West Bank did go back to standard time in the beginning of
+# August, and will now enter daylight saving time again on 2011-08-30
+# 00:00 (so two periods of DST in 2011). The pause was because of
+# Ramadan.
+#
+# http://www.maannews.net/eng/ViewDetails.aspx?ID=416217
+# Additional info:
+# http://www.timeanddate.com/news/time/palestine-dst-2011.html
+
+# From Alexander Krivenyshev (2011-08-27):
+# According to the article in The Jerusalem Post:
+# "...Earlier this month, the Palestinian government in the West Bank decided to
+# move to standard time for 30 days, during Ramadan. The Palestinians in the
+# Gaza Strip accepted the change and also moved their clocks one hour back.
+# The Hamas government said on Saturday that it won't observe summertime after
+# the Muslim feast of Id al-Fitr, which begins on Tuesday..."
+# ...
+# http://www.jpost.com/MiddleEast/Article.aspx?id=235650
+# http://www.worldtimezone.com/dst_news/dst_news_gazastrip05.html
+# The rules for Egypt are stolen from the 'africa' file.
+
+# From Steffen Thorsen (2011-09-30):
+# West Bank did end Daylight Saving Time this morning/midnight (2011-09-30
+# 00:00).
+# So West Bank and Gaza now have the same time again.
+#
+# Many sources, including:
+# http://www.maannews.net/eng/ViewDetails.aspx?ID=424808
+
+# From Steffen Thorsen (2012-03-26):
+# Palestinian news sources tell that both Gaza and West Bank will start DST
+# on Friday (Thursday midnight, 2012-03-29 24:00).
+# Some of many sources in Arabic:
+# http://www.samanews.com/index.php?act=Show&id=122638
+#
+# http://safa.ps/details/news/74352/%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-%D8%A8%D8%A7%D9%84%D8%B6%D9%81%D8%A9-%D9%88%D8%BA%D8%B2%D8%A9-%D9%84%D9%8A%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D8%B9%D8%A9.html
+#
+# Our brief summary:
+# http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html
+
+# From Steffen Thorsen (2013-03-26):
+# The following news sources tells that Palestine will "start daylight saving
+# time from midnight on Friday, March 29, 2013" (translated).
+# [These are in Arabic and are for Gaza and for Ramallah, respectively.]
+# http://www.samanews.com/index.php?act=Show&id=154120
+# http://safa.ps/details/news/99844/%D8%B1%D8%A7%D9%85-%D8%A7%D9%84%D9%84%D9%87-%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-29-%D8%A7%D9%84%D8%AC%D8%A7%D8%B1%D9%8A.html
+
+# From Steffen Thorsen (2013-09-24):
+# The Gaza and West Bank are ending DST Thursday at midnight
+# (2013-09-27 00:00:00) (one hour earlier than last year...).
+# This source in English, says "that winter time will go into effect
+# at midnight on Thursday in the West Bank and Gaza Strip":
+# http://english.wafa.ps/index.php?action=detail&id=23246
+# official source...:
+# http://www.palestinecabinet.gov.ps/ar/Views/ViewDetails.aspx?pid=1252
+
+# From Paul Eggert (2013-09-24):
+# For future dates, guess the last Thursday in March at 24:00 through
+# the first Friday on or after September 21 at 00:00.  This is consistent with
+# the predictions in today's editions of the following URLs,
+# which are for Gaza and Hebron respectively:
+# http://www.timeanddate.com/worldclock/timezone.html?n=702
+# http://www.timeanddate.com/worldclock/timezone.html?n=2364
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule EgyptAsia	1957	only	-	May	10	0:00	1:00	S
 Rule EgyptAsia	1957	1958	-	Oct	 1	0:00	0	-
@@ -2213,13 +2395,21 @@
 Rule Palestine	1999	2003	-	Oct	Fri>=15	0:00	0	-
 Rule Palestine	2004	only	-	Oct	 1	1:00	0	-
 Rule Palestine	2005	only	-	Oct	 4	2:00	0	-
-Rule Palestine	2006	2008	-	Apr	 1	0:00	1:00	S
+Rule Palestine	2006	2007	-	Apr	 1	0:00	1:00	S
 Rule Palestine	2006	only	-	Sep	22	0:00	0	-
 Rule Palestine	2007	only	-	Sep	Thu>=8	2:00	0	-
-Rule Palestine	2008	only	-	Aug	lastFri	2:00	0	-
-Rule Palestine	2009	only	-	Mar	lastFri	0:00	1:00	S
-Rule Palestine	2010	max	-	Mar	lastSat	0:01	1:00	S
-Rule Palestine	2009	max	-	Sep	Fri>=1	2:00	0	-
+Rule Palestine	2008	2009	-	Mar	lastFri	0:00	1:00	S
+Rule Palestine	2008	only	-	Sep	 1	0:00	0	-
+Rule Palestine	2009	only	-	Sep	Fri>=1	1:00	0	-
+Rule Palestine	2010	only	-	Mar	26	0:00	1:00	S
+Rule Palestine	2010	only	-	Aug	11	0:00	0	-
+Rule Palestine	2011	only	-	Apr	 1	0:01	1:00	S
+Rule Palestine	2011	only	-	Aug	 1	0:00	0	-
+Rule Palestine	2011	only	-	Aug	30	0:00	1:00	S
+Rule Palestine	2011	only	-	Sep	30	0:00	0	-
+Rule Palestine	2012	max	-	Mar	lastThu	24:00	1:00	S
+Rule Palestine	2012	only	-	Sep	21	1:00	0	-
+Rule Palestine	2013	max	-	Sep	Fri>=21	0:00	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
@@ -2227,31 +2417,46 @@
 			2:00 EgyptAsia	EE%sT	1967 Jun  5
 			2:00	Zion	I%sT	1996
 			2:00	Jordan	EE%sT	1999
+			2:00 Palestine	EE%sT	2008 Aug 29  0:00
+			2:00	-	EET	2008 Sep
+			2:00 Palestine	EE%sT	2010
+			2:00	-	EET	2010 Mar 27  0:01
+			2:00 Palestine	EE%sT	2011 Aug  1
+			2:00	-	EET	2012
+			2:00 Palestine	EE%sT
+
+Zone	Asia/Hebron	2:20:23	-	LMT	1900 Oct
+			2:00	Zion	EET	1948 May 15
+			2:00 EgyptAsia	EE%sT	1967 Jun  5
+			2:00	Zion	I%sT	1996
+			2:00	Jordan	EE%sT	1999
 			2:00 Palestine	EE%sT
 
 # Paracel Is
 # no information
 
 # Philippines
-# On 1844-08-16, Narciso Claveria, governor-general of the
+# On 1844-08-16, Narciso Clavería, governor-general of the
 # Philippines, issued a proclamation announcing that 1844-12-30 was to
-# be immediately followed by 1845-01-01.  Robert H. van Gent has a
-# transcript of the decree in .
-# The rest of the data are from Shanks & Pottenger.
+# be immediately followed by 1845-01-01; see R.H. van Gent's
+# History of the International Date Line
+# http://www.staff.science.uu.nl/~gent0113/idl/idl_philippines.htm
+# The rest of the data entries are from Shanks & Pottenger.
 
-# From Paul Eggert (2006-04-25):
-# Tomorrow's Manila Standard reports that the Philippines Department of
-# Trade and Industry is considering adopting DST this June when the
-# rainy season begins.  See
-# .
-# For now, we'll ignore this, since it's not definite and we lack details.
-#
-# From Jesper Norgaard Welen (2006-04-26):
+# From Jesper Nørgaard Welen (2006-04-26):
 # ... claims that Philippines had DST last time in 1990:
 # http://story.philippinetimes.com/p.x/ct/9/id/145be20cc6b121c0/cid/3e5bbccc730d258c/
 # [a story dated 2006-04-25 by Cris Larano of Dow Jones Newswires,
 # but no details]
 
+# From Paul Eggert (2014-08-14):
+# The following source says DST may be instituted November-January and again
+# March-June, but this is not definite.  It also says DST was last proclaimed
+# during the Ramos administration (1992-1998); but again, no details.
+# Carcamo D. PNoy urged to declare use of daylight saving time.
+# Philippine Star 2014-08-05
+# http://www.philstar.com/headlines/2014/08/05/1354152/pnoy-urged-declare-use-daylight-saving-time
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Phil	1936	only	-	Nov	1	0:00	1:00	S
 Rule	Phil	1937	only	-	Feb	1	0:00	0	-
@@ -2268,18 +2473,39 @@
 
 # Qatar
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Qatar	3:26:08 -	LMT	1920	# Al Dawhah / Doha
+Zone	Asia/Qatar	3:26:08 -	LMT	1920     # Al Dawhah / Doha
 			4:00	-	GST	1972 Jun
 			3:00	-	AST
 
 # Saudi Arabia
+#
+# From Paul Eggert (2014-07-15):
+# Time in Saudi Arabia and other countries in the Arabian peninsula was not
+# standardized until relatively recently; we don't know when, and possibly it
+# has never been made official.  Richard P Hunt, in "Islam city yielding to
+# modern times", New York Times (1961-04-09), p 20, wrote that only airlines
+# observed standard time, and that people in Jeddah mostly observed quasi-solar
+# time, doing so by setting their watches at sunrise to 6 o'clock (or to 12
+# o'clock for "Arab" time).
+#
+# The TZ database cannot represent quasi-solar time; airline time is the best
+# we can do.  The 1946 foreign air news digest of the U.S. Civil Aeronautics
+# Board (OCLC 42299995) reported that the "... Arabian Government, inaugurated
+# a weekly Dhahran-Cairo service, via the Saudi Arabian cities of Riyadh and
+# Jidda, on March 14, 1947".  Shanks & Pottenger guessed 1950; go with the
+# earlier date.
+#
+# Shanks & Pottenger also state that until 1968-05-01 Saudi Arabia had two
+# time zones; the other zone, at UTC+4, was in the far eastern part of
+# the country.  Ignore this, as it's before our 1970 cutoff.
+#
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Riyadh	3:06:52 -	LMT	1950
+Zone	Asia/Riyadh	3:06:52 -	LMT	1947 Mar 14
 			3:00	-	AST
 
 # Singapore
-# The data here are taken from Mok Ly Yng (2003-10-30)
-# .
+# taken from Mok Ly Yng (2003-10-30)
+# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Singapore	6:55:25 -	LMT	1901 Jan  1
 			6:55:25	-	SMT	1905 Jun  1 # Singapore M.T.
@@ -2296,28 +2522,33 @@
 # no information
 
 # Sri Lanka
+
+# From Paul Eggert (2013-02-21):
+# Milne says "Madras mean time use from May 1, 1898.  Prior to this Colombo
+# mean time, 5h. 4m. 21.9s. F., was used."  But 5:04:21.9 differs considerably
+# from Colombo's meridian 5:19:24, so for now ignore Milne and stick with
+# Shanks and Pottenger.
+
 # From Paul Eggert (1996-09-03):
 # "Sri Lanka advances clock by an hour to avoid blackout"
-# (www.virtual-pc.com/lankaweb/news/items/240596-2.html, 1996-05-24,
+# (, 1996-05-24,
 # no longer available as of 1999-08-17)
-# reported ``the country's standard time will be put forward by one hour at
-# midnight Friday (1830 GMT) `in the light of the present power crisis'.''
+# reported "the country's standard time will be put forward by one hour at
+# midnight Friday (1830 GMT) 'in the light of the present power crisis'."
 #
 # From Dharmasiri Senanayake, Sri Lanka Media Minister (1996-10-24), as quoted
-# by Shamindra in
-# 
-# Daily News - Hot News Section (1996-10-26)
-# :
+# by Shamindra in Daily News - Hot News Section
+#  (1996-10-26):
 # With effect from 12.30 a.m. on 26th October 1996
 # Sri Lanka will be six (06) hours ahead of GMT.
 
-# From Jesper Norgaard Welen (2006-04-14), quoting Sri Lanka News Online
+# From Jesper Nørgaard Welen (2006-04-14), quoting Sri Lanka News Online
 #  (2006-04-13):
 # 0030 hrs on April 15, 2006 (midnight of April 14, 2006 +30 minutes)
 # at present, become 2400 hours of April 14, 2006 (midnight of April 14, 2006).
 
 # From Peter Apps and Ranga Sirila of Reuters (2006-04-12) in:
-# 
+# http://today.reuters.co.uk/news/newsArticle.aspx?type=scienceNews&storyID=2006-04-12T172228Z_01_COL295762_RTRIDST_0_SCIENCE-SRILANKA-TIME-DC.XML
 # [The Tamil Tigers] never accepted the original 1996 time change and simply
 # kept their clocks set five and a half hours ahead of Greenwich Mean
 # Time (GMT), in line with neighbor India.
@@ -2331,7 +2562,7 @@
 # twice in 1996 and probably SL Government or its standardization
 # agencies never declared an abbreviation as a national standard.
 #
-# I recollect before the recent change the government annoucemments
+# I recollect before the recent change the government announcements
 # mentioning it as simply changing Sri Lanka Standard Time or Sri Lanka
 # Time and no mention was made about the abbreviation.
 #
@@ -2341,7 +2572,7 @@
 # item....
 #
 # Within Sri Lanka I think LKT is well known among computer users and
-# adminsitrators.  In my opinion SLT may not be a good choice because the
+# administrators.  In my opinion SLT may not be a good choice because the
 # nation's largest telcom / internet operator Sri Lanka Telcom is well
 # known by that abbreviation - simply as SLT (there IP domains are
 # slt.lk and sltnet.lk).
@@ -2356,13 +2587,13 @@
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Colombo	5:19:24 -	LMT	1880
-			5:19:32	-	MMT	1906	# Moratuwa Mean Time
+			5:19:32	-	MMT	1906        # Moratuwa Mean Time
 			5:30	-	IST	1942 Jan  5
 			5:30	0:30	IHST	1942 Sep
-			5:30	1:00	IST	1945 Oct 16 2:00
-			5:30	-	IST	1996 May 25 0:00
-			6:30	-	LKT	1996 Oct 26 0:30
-			6:00	-	LKT	2006 Apr 15 0:30
+			5:30	1:00	IST	1945 Oct 16  2:00
+			5:30	-	IST	1996 May 25  0:00
+			6:30	-	LKT	1996 Oct 26  0:30
+			6:00	-	LKT	2006 Apr 15  0:30
 			5:30	-	IST
 
 # Syria
@@ -2413,33 +2644,32 @@
 # Today the AP reported "Syria will switch to summertime at midnight Thursday."
 # http://www.iht.com/articles/ap/2007/03/29/africa/ME-GEN-Syria-Time-Change.php
 Rule	Syria	2007	only	-	Mar	lastFri	0:00	1:00	S
-# From Jesper Norgard (2007-10-27):
+# From Jesper Nørgaard (2007-10-27):
 # The sister center ICARDA of my work CIMMYT is confirming that Syria DST will
-# not take place 1.st November at 0:00 o'clock but 1.st November at 24:00 or
-# rather Midnight between Thursday and Friday. This does make more sence than
+# not take place 1st November at 0:00 o'clock but 1st November at 24:00 or
+# rather Midnight between Thursday and Friday. This does make more sense than
 # having it between Wednesday and Thursday (two workdays in Syria) since the
 # weekend in Syria is not Saturday and Sunday, but Friday and Saturday. So now
 # it is implemented at midnight of the last workday before weekend...
-# 
+#
 # From Steffen Thorsen (2007-10-27):
-# Jesper Norgaard Welen wrote:
-# 
+# Jesper Nørgaard Welen wrote:
+#
 # > "Winter local time in Syria will be observed at midnight of Thursday 1
 # > November 2007, and the clock will be put back 1 hour."
-# 
+#
 # I found confirmation on this in this gov.sy-article (Arabic):
 # http://wehda.alwehda.gov.sy/_print_veiw.asp?FileName=12521710520070926111247
-# 
+#
 # which using Google's translate tools says:
-# Council of Ministers also approved the commencement of work on 
-# identifying the winter time as of Friday, 2/11/2007 where the 60th 
+# Council of Ministers also approved the commencement of work on
+# identifying the winter time as of Friday, 2/11/2007 where the 60th
 # minute delay at midnight Thursday 1/11/2007.
 Rule	Syria	2007	only	-	Nov	 Fri>=1	0:00	0	-
 
 # From Stephen Colebourne (2008-03-17):
 # For everyone's info, I saw an IATA time zone change for [Syria] for
-# this month (March 2008) in the last day or so...This is the data IATA
-# are now using:
+# this month (March 2008) in the last day or so....
 # Country     Time Standard   --- DST Start ---   --- DST End ---  DST
 # Name        Zone Variation   Time    Date        Time    Date
 # Variation
@@ -2451,16 +2681,15 @@
 # From Arthur David Olson (2008-03-17):
 # Here's a link to English-language coverage by the Syrian Arab News
 # Agency (SANA)...
-# 
 # http://www.sana.sy/eng/21/2008/03/11/165173.htm
-# ...which reads (in part) "The Cabinet approved the suggestion of the
+# ...which reads (in part) "The Cabinet approved the suggestion of the
 # Ministry of Electricity to begin daylight savings time on Friday April
 # 4th, advancing clocks one hour ahead on midnight of Thursday April 3rd."
 # Since Syria is two hours east of UTC, the 2200 and 2100 transition times
 # shown above match up with midnight in Syria.
 
 # From Arthur David Olson (2008-03-18):
-# My buest guess at a Syrian rule is "the Friday nearest April 1";
+# My best guess at a Syrian rule is "the Friday nearest April 1";
 # coding that involves either using a "Mar Fri>=29" construct that old time zone
 # compilers can't handle  or having multiple Rules (a la Israel).
 # For now, use "Apr Fri>=1", and go with IATA on a uniform Sep 30 end.
@@ -2473,37 +2702,27 @@
 # winter time on 2008-11-01 at 00:00 local daylight time (delaying/setting
 # clocks back 60 minutes).
 #
-# 
 # http://sana.sy/ara/2/2008/10/07/195459.htm
-# 
 
 # From Steffen Thorsen (2009-03-19):
 # Syria will start DST on 2009-03-27 00:00 this year according to many sources,
 # two examples:
 #
-# 
 # http://www.sana.sy/eng/21/2009/03/17/217563.htm
-# 
 # (English, Syrian Arab News # Agency)
-# 
 # http://thawra.alwehda.gov.sy/_View_news2.asp?FileName=94459258720090318012209
-# 
 # (Arabic, gov-site)
 #
 # We have not found any sources saying anything about when DST ends this year.
 #
 # Our summary
-# 
 # http://www.timeanddate.com/news/time/syria-dst-starts-march-27-2009.html
-# 
 
 # From Steffen Thorsen (2009-10-27):
-# The Syrian Arab News Network on 2009-09-29 reported that Syria will 
-# revert back to winter (standard) time on midnight between Thursday 
+# The Syrian Arab News Network on 2009-09-29 reported that Syria will
+# revert back to winter (standard) time on midnight between Thursday
 # 2009-10-29 and Friday 2009-10-30:
-# 
 # http://www.sana.sy/ara/2/2009/09/29/247012.htm (Arabic)
-# 
 
 # From Arthur David Olson (2009-10-28):
 # We'll see if future DST switching times turn out to be end of the last
@@ -2514,18 +2733,30 @@
 # The "Syrian News Station" reported on 2010-03-16 that the Council of
 # Ministers has decided that Syria will start DST on midnight Thursday
 # 2010-04-01: (midnight between Thursday and Friday):
-# 
 # http://sns.sy/sns/?path=news/read/11421 (Arabic)
-# 
+
+# From Steffen Thorsen (2012-03-26):
+# Today, Syria's government announced that they will start DST early on Friday
+# (00:00). This is a bit earlier than the past two years.
+#
+# From Syrian Arab News Agency, in Arabic:
+# http://www.sana.sy/ara/2/2012/03/26/408215.htm
+#
+# Our brief summary:
+# http://www.timeanddate.com/news/time/syria-dst-2012.html
+
+# From Arthur David Olson (2012-03-27):
+# Assume last Friday in March going forward XXX.
 
 Rule	Syria	2008	only	-	Apr	Fri>=1	0:00	1:00	S
 Rule	Syria	2008	only	-	Nov	1	0:00	0	-
 Rule	Syria	2009	only	-	Mar	lastFri	0:00	1:00	S
-Rule	Syria	2010	max	-	Apr	Fri>=1	0:00	1:00	S
+Rule	Syria	2010	2011	-	Apr	Fri>=1	0:00	1:00	S
+Rule	Syria	2012	max	-	Mar	lastFri	0:00	1:00	S
 Rule	Syria	2009	max	-	Oct	lastFri	0:00	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Damascus	2:25:12 -	LMT	1920	# Dimashq
+Zone	Asia/Damascus	2:25:12 -	LMT	1920 # Dimashq
 			2:00	Syria	EE%sT
 
 # Tajikistan
@@ -2533,24 +2764,26 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Dushanbe	4:35:12 -	LMT	1924 May  2
 			5:00	-	DUST	1930 Jun 21 # Dushanbe Time
-			6:00 RussiaAsia DUS%sT	1991 Mar 31 2:00s
-			5:00	1:00	DUSST	1991 Sep  9 2:00s
-			5:00	-	TJT		    # Tajikistan Time
+			6:00 RussiaAsia DUS%sT	1991 Mar 31  2:00s
+			5:00	1:00	DUSST	1991 Sep  9  2:00s
+			5:00	-	TJT	# Tajikistan Time
 
 # Thailand
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Bangkok	6:42:04	-	LMT	1880
 			6:42:04	-	BMT	1920 Apr # Bangkok Mean Time
 			7:00	-	ICT
+Link Asia/Bangkok Asia/Phnom_Penh	# Cambodia
+Link Asia/Bangkok Asia/Vientiane	# Laos
 
 # Turkmenistan
 # From Shanks & Pottenger.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Ashgabat	3:53:32 -	LMT	1924 May  2 # or Ashkhabad
 			4:00	-	ASHT	1930 Jun 21 # Ashkhabad Time
-			5:00 RussiaAsia	ASH%sT	1991 Mar 31 2:00
+			5:00 RussiaAsia	ASH%sT	1991 Mar 31  2:00
 			4:00 RussiaAsia	ASH%sT	1991 Oct 27 # independence
-			4:00 RussiaAsia	TM%sT	1992 Jan 19 2:00
+			4:00 RussiaAsia	TM%sT	1992 Jan 19  2:00
 			5:00	-	TMT
 
 # United Arab Emirates
@@ -2559,8 +2792,9 @@
 			4:00	-	GST
 
 # Uzbekistan
+# Byalokoz 1919 says Uzbekistan was 4:27:53.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Samarkand	4:27:12 -	LMT	1924 May  2
+Zone	Asia/Samarkand	4:27:53 -	LMT	1924 May  2
 			4:00	-	SAMT	1930 Jun 21 # Samarkand Time
 			5:00	-	SAMT	1981 Apr  1
 			5:00	1:00	SAMST	1981 Oct  1
@@ -2568,28 +2802,82 @@
 			5:00 RussiaAsia	SAM%sT	1991 Sep  1 # independence
 			5:00 RussiaAsia	UZ%sT	1992
 			5:00	-	UZT
-Zone	Asia/Tashkent	4:37:12 -	LMT	1924 May  2
+# Milne says Tashkent was 4:37:10.8; round to nearest.
+Zone	Asia/Tashkent	4:37:11 -	LMT	1924 May  2
 			5:00	-	TAST	1930 Jun 21 # Tashkent Time
-			6:00 RussiaAsia	TAS%sT	1991 Mar 31 2:00
+			6:00 RussiaAsia	TAS%sT	1991 Mar 31  2:00
 			5:00 RussiaAsia	TAS%sT	1991 Sep  1 # independence
 			5:00 RussiaAsia	UZ%sT	1992
 			5:00	-	UZT
 
 # Vietnam
 
+# From Paul Eggert (2014-10-04):
+# Milne gives 7:16:56 for the meridian of Saigon in 1899, as being
+# used in Lower Laos, Cambodia, and Annam.  But this is quite a ways
+# from Saigon's location.  For now, ignore this and stick with Shanks
+# and Pottenger for LMT before 1906.
+
 # From Arthur David Olson (2008-03-18):
-# The English-language name of Vietnam's most populous city is "Ho Chi Min City";
-# we use Ho_Chi_Minh below to avoid a name of more than 14 characters.
+# The English-language name of Vietnam's most populous city is "Ho Chi Minh
+# City"; use Ho_Chi_Minh below to avoid a name of more than 14 characters.
 
-# From Shanks & Pottenger:
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Ho_Chi_Minh	7:06:40 -	LMT	1906 Jun  9
-			7:06:20	-	SMT	1911 Mar 11 0:01 # Saigon MT?
-			7:00	-	ICT	1912 May
-			8:00	-	ICT	1931 May
+# From Paul Eggert (2014-10-21) after a heads-up from Trần Ngọc Quân:
+# Trần Tiến Bình's authoritative book "Lịch Việt Nam: thế kỷ XX-XXI (1901-2100)"
+# (Nhà xuất bản Văn Hoá - Thông Tin, Hanoi, 2005), pp 49-50,
+# is quoted verbatim in:
+# http://www.thoigian.com.vn/?mPage=P80D01
+# is translated by Brian Inglis in:
+# http://mm.icann.org/pipermail/tz/2014-October/021654.html
+# and is the basis for the information below.
+#
+# The 1906 transition was effective July 1 and standardized Indochina to
+# Phù Liễn Observatory, legally 104 deg. 17'17" east of Paris.
+# It's unclear whether this meant legal Paris Mean Time (00:09:21) or
+# the Paris Meridian (2 deg. 20'14.03" E); the former yields 07:06:30.1333...
+# and the latter 07:06:29.333... so either way it rounds to 07:06:30,
+# which is used below even though the modern-day Phù Liễn Observatory
+# is closer to 07:06:31.  Abbreviate Phù Liễn Mean Time as PLMT.
+#
+# The following transitions occurred in Indochina in general (before 1954)
+# and in South Vietnam in particular (after 1954):
+# To 07:00 on 1911-05-01.
+# To 08:00 on 1942-12-31 at 23:00.
+# To 09:00 in 1945-03-14 at 23:00.
+# To 07:00 on 1945-09-02 in Vietnam.
+# To 08:00 on 1947-04-01 in French-controlled Indochina.
+# To 07:00 on 1955-07-01 in South Vietnam.
+# To 08:00 on 1959-12-31 at 23:00 in South Vietnam.
+# To 07:00 on 1975-06-13 in South Vietnam.
+#
+# Trần cites the following sources; it's unclear which supplied the info above.
+#
+# Hoàng Xuân Hãn: "Lịch và lịch Việt Nam". Tập san Khoa học Xã hội,
+# No. 9, Paris, February 1982.
+#
+# Lê Thành Lân: "Lịch và niên biểu lịch sử hai mươi thế kỷ (0001-2010)",
+# NXB Thống kê, Hanoi, 2000.
+#
+# Lê Thành Lân: "Lịch hai thế kỷ (1802-2010) và các lịch vĩnh cửu",
+# NXB Thuận Hoá, Huế, 1995.
+
+# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+Zone Asia/Ho_Chi_Minh	7:06:40 -	LMT	1906 Jul  1
+			7:06:30	-	PLMT	1911 May  1
+			7:00	-	ICT	1942 Dec 31 23:00
+			8:00	-	IDT	1945 Mar 14 23:00
+			9:00	-	JST	1945 Sep  2
+			7:00	-	ICT	1947 Apr  1
+			8:00	-	IDT	1955 Jul  1
+			7:00	-	ICT	1959 Dec 31 23:00
+			8:00	-	IDT	1975 Jun 13
 			7:00	-	ICT
 
 # Yemen
+
+# Milne says 2:59:54 was the meridian of the saluting battery at Aden,
+# and that Yemen was at 1:55:56, the meridian of the Hagia Sophia.
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Aden	3:00:48	-	LMT	1950
+Zone	Asia/Aden	2:59:54	-	LMT	1950
 			3:00	-	AST
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/australasia openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/australasia
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/australasia	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/australasia	2015-01-20 02:20:42.000000000 +0000
@@ -1,27 +1,26 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
@@ -36,13 +35,13 @@
 # Please see the notes below for the controversy about "EST" versus "AEST" etc.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Aus	1917	only	-	Jan	 1	0:01	1:00	-
-Rule	Aus	1917	only	-	Mar	25	2:00	0	-
-Rule	Aus	1942	only	-	Jan	 1	2:00	1:00	-
-Rule	Aus	1942	only	-	Mar	29	2:00	0	-
-Rule	Aus	1942	only	-	Sep	27	2:00	1:00	-
-Rule	Aus	1943	1944	-	Mar	lastSun	2:00	0	-
-Rule	Aus	1943	only	-	Oct	 3	2:00	1:00	-
+Rule	Aus	1917	only	-	Jan	 1	0:01	1:00	D
+Rule	Aus	1917	only	-	Mar	25	2:00	0	S
+Rule	Aus	1942	only	-	Jan	 1	2:00	1:00	D
+Rule	Aus	1942	only	-	Mar	29	2:00	0	S
+Rule	Aus	1942	only	-	Sep	27	2:00	1:00	D
+Rule	Aus	1943	1944	-	Mar	lastSun	2:00	0	S
+Rule	Aus	1943	only	-	Oct	 3	2:00	1:00	D
 # Go with Whitman and the Australian National Standards Commission, which
 # says W Australia didn't use DST in 1943/1944.  Ignore Whitman's claim that
 # 1944/1945 was just like 1943/1944.
@@ -50,26 +49,26 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 # Northern Territory
 Zone Australia/Darwin	 8:43:20 -	LMT	1895 Feb
-			 9:00	-	CST	1899 May
-			 9:30	Aus	CST
+			 9:00	-	ACST	1899 May
+			 9:30	Aus	AC%sT
 # Western Australia
 #
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AW	1974	only	-	Oct	lastSun	2:00s	1:00	-
-Rule	AW	1975	only	-	Mar	Sun>=1	2:00s	0	-
-Rule	AW	1983	only	-	Oct	lastSun	2:00s	1:00	-
-Rule	AW	1984	only	-	Mar	Sun>=1	2:00s	0	-
-Rule	AW	1991	only	-	Nov	17	2:00s	1:00	-
-Rule	AW	1992	only	-	Mar	Sun>=1	2:00s	0	-
-Rule	AW	2006	only	-	Dec	 3	2:00s	1:00	-
-Rule	AW	2007	2009	-	Mar	lastSun	2:00s	0	-
-Rule	AW	2007	2008	-	Oct	lastSun	2:00s	1:00	-
+Rule	AW	1974	only	-	Oct	lastSun	2:00s	1:00	D
+Rule	AW	1975	only	-	Mar	Sun>=1	2:00s	0	S
+Rule	AW	1983	only	-	Oct	lastSun	2:00s	1:00	D
+Rule	AW	1984	only	-	Mar	Sun>=1	2:00s	0	S
+Rule	AW	1991	only	-	Nov	17	2:00s	1:00	D
+Rule	AW	1992	only	-	Mar	Sun>=1	2:00s	0	S
+Rule	AW	2006	only	-	Dec	 3	2:00s	1:00	D
+Rule	AW	2007	2009	-	Mar	lastSun	2:00s	0	S
+Rule	AW	2007	2008	-	Oct	lastSun	2:00s	1:00	D
 Zone Australia/Perth	 7:43:24 -	LMT	1895 Dec
-			 8:00	Aus	WST	1943 Jul
-			 8:00	AW	WST
+			 8:00	Aus	AW%sT	1943 Jul
+			 8:00	AW	AW%sT
 Zone Australia/Eucla	 8:35:28 -	LMT	1895 Dec
-			 8:45	Aus	CWST	1943 Jul
-			 8:45	AW	CWST
+			 8:45	Aus	ACW%sT	1943 Jul
+			 8:45	AW	ACW%sT
 
 # Queensland
 #
@@ -85,151 +84,150 @@
 # so use Lindeman.
 #
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AQ	1971	only	-	Oct	lastSun	2:00s	1:00	-
-Rule	AQ	1972	only	-	Feb	lastSun	2:00s	0	-
-Rule	AQ	1989	1991	-	Oct	lastSun	2:00s	1:00	-
-Rule	AQ	1990	1992	-	Mar	Sun>=1	2:00s	0	-
-Rule	Holiday	1992	1993	-	Oct	lastSun	2:00s	1:00	-
-Rule	Holiday	1993	1994	-	Mar	Sun>=1	2:00s	0	-
+Rule	AQ	1971	only	-	Oct	lastSun	2:00s	1:00	D
+Rule	AQ	1972	only	-	Feb	lastSun	2:00s	0	S
+Rule	AQ	1989	1991	-	Oct	lastSun	2:00s	1:00	D
+Rule	AQ	1990	1992	-	Mar	Sun>=1	2:00s	0	S
+Rule	Holiday	1992	1993	-	Oct	lastSun	2:00s	1:00	D
+Rule	Holiday	1993	1994	-	Mar	Sun>=1	2:00s	0	S
 Zone Australia/Brisbane	10:12:08 -	LMT	1895
-			10:00	Aus	EST	1971
-			10:00	AQ	EST
+			10:00	Aus	AE%sT	1971
+			10:00	AQ	AE%sT
 Zone Australia/Lindeman  9:55:56 -	LMT	1895
-			10:00	Aus	EST	1971
-			10:00	AQ	EST	1992 Jul
-			10:00	Holiday	EST
+			10:00	Aus	AE%sT	1971
+			10:00	AQ	AE%sT	1992 Jul
+			10:00	Holiday	AE%sT
 
 # South Australia
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AS	1971	1985	-	Oct	lastSun	2:00s	1:00	-
-Rule	AS	1986	only	-	Oct	19	2:00s	1:00	-
-Rule	AS	1987	2007	-	Oct	lastSun	2:00s	1:00	-
-Rule	AS	1972	only	-	Feb	27	2:00s	0	-
-Rule	AS	1973	1985	-	Mar	Sun>=1	2:00s	0	-
-Rule	AS	1986	1989	-	Mar	Sun>=15	2:00s	0	-
-Rule	AS	1990	only	-	Mar	Sun>=18	2:00s	0	-
-Rule	AS	1991	only	-	Mar	Sun>=1	2:00s	0	-
-Rule	AS	1992	only	-	Mar	Sun>=18	2:00s	0	-
-Rule	AS	1993	only	-	Mar	Sun>=1	2:00s	0	-
-Rule	AS	1994	only	-	Mar	Sun>=18	2:00s	0	-
-Rule	AS	1995	2005	-	Mar	lastSun	2:00s	0	-
-Rule	AS	2006	only	-	Apr	Sun>=1	2:00s	0	-
-Rule	AS	2007	only	-	Mar	lastSun	2:00s	0	-
-Rule	AS	2008	max	-	Apr	Sun>=1	2:00s	0	-
-Rule	AS	2008	max	-	Oct	Sun>=1	2:00s	1:00	-
+Rule	AS	1971	1985	-	Oct	lastSun	2:00s	1:00	D
+Rule	AS	1986	only	-	Oct	19	2:00s	1:00	D
+Rule	AS	1987	2007	-	Oct	lastSun	2:00s	1:00	D
+Rule	AS	1972	only	-	Feb	27	2:00s	0	S
+Rule	AS	1973	1985	-	Mar	Sun>=1	2:00s	0	S
+Rule	AS	1986	1990	-	Mar	Sun>=15	2:00s	0	S
+Rule	AS	1991	only	-	Mar	3	2:00s	0	S
+Rule	AS	1992	only	-	Mar	22	2:00s	0	S
+Rule	AS	1993	only	-	Mar	7	2:00s	0	S
+Rule	AS	1994	only	-	Mar	20	2:00s	0	S
+Rule	AS	1995	2005	-	Mar	lastSun	2:00s	0	S
+Rule	AS	2006	only	-	Apr	2	2:00s	0	S
+Rule	AS	2007	only	-	Mar	lastSun	2:00s	0	S
+Rule	AS	2008	max	-	Apr	Sun>=1	2:00s	0	S
+Rule	AS	2008	max	-	Oct	Sun>=1	2:00s	1:00	D
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Australia/Adelaide	9:14:20 -	LMT	1895 Feb
-			9:00	-	CST	1899 May
-			9:30	Aus	CST	1971
-			9:30	AS	CST
+			9:00	-	ACST	1899 May
+			9:30	Aus	AC%sT	1971
+			9:30	AS	AC%sT
 
 # Tasmania
 #
 # From Paul Eggert (2005-08-16):
-# 
+# http://www.bom.gov.au/climate/averages/tables/dst_times.shtml
 # says King Island didn't observe DST from WWII until late 1971.
 #
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AT	1967	only	-	Oct	Sun>=1	2:00s	1:00	-
-Rule	AT	1968	only	-	Mar	lastSun	2:00s	0	-
-Rule	AT	1968	1985	-	Oct	lastSun	2:00s	1:00	-
-Rule	AT	1969	1971	-	Mar	Sun>=8	2:00s	0	-
-Rule	AT	1972	only	-	Feb	lastSun	2:00s	0	-
-Rule	AT	1973	1981	-	Mar	Sun>=1	2:00s	0	-
-Rule	AT	1982	1983	-	Mar	lastSun	2:00s	0	-
-Rule	AT	1984	1986	-	Mar	Sun>=1	2:00s	0	-
-Rule	AT	1986	only	-	Oct	Sun>=15	2:00s	1:00	-
-Rule	AT	1987	1990	-	Mar	Sun>=15	2:00s	0	-
-Rule	AT	1987	only	-	Oct	Sun>=22	2:00s	1:00	-
-Rule	AT	1988	1990	-	Oct	lastSun	2:00s	1:00	-
-Rule	AT	1991	1999	-	Oct	Sun>=1	2:00s	1:00	-
-Rule	AT	1991	2005	-	Mar	lastSun	2:00s	0	-
-Rule	AT	2000	only	-	Aug	lastSun	2:00s	1:00	-
-Rule	AT	2001	max	-	Oct	Sun>=1	2:00s	1:00	-
-Rule	AT	2006	only	-	Apr	Sun>=1	2:00s	0	-
-Rule	AT	2007	only	-	Mar	lastSun	2:00s	0	-
-Rule	AT	2008	max	-	Apr	Sun>=1	2:00s	0	-
+Rule	AT	1967	only	-	Oct	Sun>=1	2:00s	1:00	D
+Rule	AT	1968	only	-	Mar	lastSun	2:00s	0	S
+Rule	AT	1968	1985	-	Oct	lastSun	2:00s	1:00	D
+Rule	AT	1969	1971	-	Mar	Sun>=8	2:00s	0	S
+Rule	AT	1972	only	-	Feb	lastSun	2:00s	0	S
+Rule	AT	1973	1981	-	Mar	Sun>=1	2:00s	0	S
+Rule	AT	1982	1983	-	Mar	lastSun	2:00s	0	S
+Rule	AT	1984	1986	-	Mar	Sun>=1	2:00s	0	S
+Rule	AT	1986	only	-	Oct	Sun>=15	2:00s	1:00	D
+Rule	AT	1987	1990	-	Mar	Sun>=15	2:00s	0	S
+Rule	AT	1987	only	-	Oct	Sun>=22	2:00s	1:00	D
+Rule	AT	1988	1990	-	Oct	lastSun	2:00s	1:00	D
+Rule	AT	1991	1999	-	Oct	Sun>=1	2:00s	1:00	D
+Rule	AT	1991	2005	-	Mar	lastSun	2:00s	0	S
+Rule	AT	2000	only	-	Aug	lastSun	2:00s	1:00	D
+Rule	AT	2001	max	-	Oct	Sun>=1	2:00s	1:00	D
+Rule	AT	2006	only	-	Apr	Sun>=1	2:00s	0	S
+Rule	AT	2007	only	-	Mar	lastSun	2:00s	0	S
+Rule	AT	2008	max	-	Apr	Sun>=1	2:00s	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Australia/Hobart	9:49:16	-	LMT	1895 Sep
-			10:00	-	EST	1916 Oct 1 2:00
-			10:00	1:00	EST	1917 Feb
-			10:00	Aus	EST	1967
-			10:00	AT	EST
+			10:00	-	AEST	1916 Oct  1  2:00
+			10:00	1:00	AEDT	1917 Feb
+			10:00	Aus	AE%sT	1967
+			10:00	AT	AE%sT
 Zone Australia/Currie	9:35:28	-	LMT	1895 Sep
-			10:00	-	EST	1916 Oct 1 2:00
-			10:00	1:00	EST	1917 Feb
-			10:00	Aus	EST	1971 Jul
-			10:00	AT	EST
+			10:00	-	AEST	1916 Oct  1  2:00
+			10:00	1:00	AEDT	1917 Feb
+			10:00	Aus	AE%sT	1971 Jul
+			10:00	AT	AE%sT
 
 # Victoria
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AV	1971	1985	-	Oct	lastSun	2:00s	1:00	-
-Rule	AV	1972	only	-	Feb	lastSun	2:00s	0	-
-Rule	AV	1973	1985	-	Mar	Sun>=1	2:00s	0	-
-Rule	AV	1986	1990	-	Mar	Sun>=15	2:00s	0	-
-Rule	AV	1986	1987	-	Oct	Sun>=15	2:00s	1:00	-
-Rule	AV	1988	1999	-	Oct	lastSun	2:00s	1:00	-
-Rule	AV	1991	1994	-	Mar	Sun>=1	2:00s	0	-
-Rule	AV	1995	2005	-	Mar	lastSun	2:00s	0	-
-Rule	AV	2000	only	-	Aug	lastSun	2:00s	1:00	-
-Rule	AV	2001	2007	-	Oct	lastSun	2:00s	1:00	-
-Rule	AV	2006	only	-	Apr	Sun>=1	2:00s	0	-
-Rule	AV	2007	only	-	Mar	lastSun	2:00s	0	-
-Rule	AV	2008	max	-	Apr	Sun>=1	2:00s	0	-
-Rule	AV	2008	max	-	Oct	Sun>=1	2:00s	1:00	-
+Rule	AV	1971	1985	-	Oct	lastSun	2:00s	1:00	D
+Rule	AV	1972	only	-	Feb	lastSun	2:00s	0	S
+Rule	AV	1973	1985	-	Mar	Sun>=1	2:00s	0	S
+Rule	AV	1986	1990	-	Mar	Sun>=15	2:00s	0	S
+Rule	AV	1986	1987	-	Oct	Sun>=15	2:00s	1:00	D
+Rule	AV	1988	1999	-	Oct	lastSun	2:00s	1:00	D
+Rule	AV	1991	1994	-	Mar	Sun>=1	2:00s	0	S
+Rule	AV	1995	2005	-	Mar	lastSun	2:00s	0	S
+Rule	AV	2000	only	-	Aug	lastSun	2:00s	1:00	D
+Rule	AV	2001	2007	-	Oct	lastSun	2:00s	1:00	D
+Rule	AV	2006	only	-	Apr	Sun>=1	2:00s	0	S
+Rule	AV	2007	only	-	Mar	lastSun	2:00s	0	S
+Rule	AV	2008	max	-	Apr	Sun>=1	2:00s	0	S
+Rule	AV	2008	max	-	Oct	Sun>=1	2:00s	1:00	D
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Australia/Melbourne 9:39:52 -	LMT	1895 Feb
-			10:00	Aus	EST	1971
-			10:00	AV	EST
+			10:00	Aus	AE%sT	1971
+			10:00	AV	AE%sT
 
 # New South Wales
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AN	1971	1985	-	Oct	lastSun	2:00s	1:00	-
-Rule	AN	1972	only	-	Feb	27	2:00s	0	-
-Rule	AN	1973	1981	-	Mar	Sun>=1	2:00s	0	-
-Rule	AN	1982	only	-	Apr	Sun>=1	2:00s	0	-
-Rule	AN	1983	1985	-	Mar	Sun>=1	2:00s	0	-
-Rule	AN	1986	1989	-	Mar	Sun>=15	2:00s	0	-
-Rule	AN	1986	only	-	Oct	19	2:00s	1:00	-
-Rule	AN	1987	1999	-	Oct	lastSun	2:00s	1:00	-
-Rule	AN	1990	1995	-	Mar	Sun>=1	2:00s	0	-
-Rule	AN	1996	2005	-	Mar	lastSun	2:00s	0	-
-Rule	AN	2000	only	-	Aug	lastSun	2:00s	1:00	-
-Rule	AN	2001	2007	-	Oct	lastSun	2:00s	1:00	-
-Rule	AN	2006	only	-	Apr	Sun>=1	2:00s	0	-
-Rule	AN	2007	only	-	Mar	lastSun	2:00s	0	-
-Rule	AN	2008	max	-	Apr	Sun>=1	2:00s	0	-
-Rule	AN	2008	max	-	Oct	Sun>=1	2:00s	1:00	-
+Rule	AN	1971	1985	-	Oct	lastSun	2:00s	1:00	D
+Rule	AN	1972	only	-	Feb	27	2:00s	0	S
+Rule	AN	1973	1981	-	Mar	Sun>=1	2:00s	0	S
+Rule	AN	1982	only	-	Apr	Sun>=1	2:00s	0	S
+Rule	AN	1983	1985	-	Mar	Sun>=1	2:00s	0	S
+Rule	AN	1986	1989	-	Mar	Sun>=15	2:00s	0	S
+Rule	AN	1986	only	-	Oct	19	2:00s	1:00	D
+Rule	AN	1987	1999	-	Oct	lastSun	2:00s	1:00	D
+Rule	AN	1990	1995	-	Mar	Sun>=1	2:00s	0	S
+Rule	AN	1996	2005	-	Mar	lastSun	2:00s	0	S
+Rule	AN	2000	only	-	Aug	lastSun	2:00s	1:00	D
+Rule	AN	2001	2007	-	Oct	lastSun	2:00s	1:00	D
+Rule	AN	2006	only	-	Apr	Sun>=1	2:00s	0	S
+Rule	AN	2007	only	-	Mar	lastSun	2:00s	0	S
+Rule	AN	2008	max	-	Apr	Sun>=1	2:00s	0	S
+Rule	AN	2008	max	-	Oct	Sun>=1	2:00s	1:00	D
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Australia/Sydney	10:04:52 -	LMT	1895 Feb
-			10:00	Aus	EST	1971
-			10:00	AN	EST
+			10:00	Aus	AE%sT	1971
+			10:00	AN	AE%sT
 Zone Australia/Broken_Hill 9:25:48 -	LMT	1895 Feb
-			10:00	-	EST	1896 Aug 23
-			9:00	-	CST	1899 May
-			9:30	Aus	CST	1971
-			9:30	AN	CST	2000
-			9:30	AS	CST
+			10:00	-	AEST	1896 Aug 23
+			9:00	-	ACST	1899 May
+			9:30	Aus	AC%sT	1971
+			9:30	AN	AC%sT	2000
+			9:30	AS	AC%sT
 
 # Lord Howe Island
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	LH	1981	1984	-	Oct	lastSun	2:00	1:00	-
-Rule	LH	1982	1985	-	Mar	Sun>=1	2:00	0	-
-Rule	LH	1985	only	-	Oct	lastSun	2:00	0:30	-
-Rule	LH	1986	1989	-	Mar	Sun>=15	2:00	0	-
-Rule	LH	1986	only	-	Oct	19	2:00	0:30	-
-Rule	LH	1987	1999	-	Oct	lastSun	2:00	0:30	-
-Rule	LH	1990	1995	-	Mar	Sun>=1	2:00	0	-
-Rule	LH	1996	2005	-	Mar	lastSun	2:00	0	-
-Rule	LH	2000	only	-	Aug	lastSun	2:00	0:30	-
-Rule	LH	2001	2007	-	Oct	lastSun	2:00	0:30	-
-Rule	LH	2006	only	-	Apr	Sun>=1	2:00	0	-
-Rule	LH	2007	only	-	Mar	lastSun	2:00	0	-
-Rule	LH	2008	max	-	Apr	Sun>=1	2:00	0	-
-Rule	LH	2008	max	-	Oct	Sun>=1	2:00	0:30	-
+Rule	LH	1981	1984	-	Oct	lastSun	2:00	1:00	D
+Rule	LH	1982	1985	-	Mar	Sun>=1	2:00	0	S
+Rule	LH	1985	only	-	Oct	lastSun	2:00	0:30	D
+Rule	LH	1986	1989	-	Mar	Sun>=15	2:00	0	S
+Rule	LH	1986	only	-	Oct	19	2:00	0:30	D
+Rule	LH	1987	1999	-	Oct	lastSun	2:00	0:30	D
+Rule	LH	1990	1995	-	Mar	Sun>=1	2:00	0	S
+Rule	LH	1996	2005	-	Mar	lastSun	2:00	0	S
+Rule	LH	2000	only	-	Aug	lastSun	2:00	0:30	D
+Rule	LH	2001	2007	-	Oct	lastSun	2:00	0:30	D
+Rule	LH	2006	only	-	Apr	Sun>=1	2:00	0	S
+Rule	LH	2007	only	-	Mar	lastSun	2:00	0	S
+Rule	LH	2008	max	-	Apr	Sun>=1	2:00	0	S
+Rule	LH	2008	max	-	Oct	Sun>=1	2:00	0:30	D
 Zone Australia/Lord_Howe 10:36:20 -	LMT	1895 Feb
-			10:00	-	EST	1981 Mar
-			10:30	LH	LHST
+			10:00	-	AEST	1981 Mar
+			10:30	LH	LH%sT
 
 # Australian miscellany
 #
@@ -242,53 +240,62 @@
 # no times are set
 #
 # Macquarie
-# permanent occupation (scientific station) since 1948;
-# sealing and penguin oil station operated 1888/1917
-# like Australia/Hobart
+# Permanent occupation (scientific station) 1911-1915 and since 25 March 1948;
+# sealing and penguin oil station operated Nov 1899 to Apr 1919.  See the
+# Tasmania Parks & Wildlife Service history of sealing at Macquarie Island
+# http://www.parks.tas.gov.au/index.aspx?base=1828
+# http://www.parks.tas.gov.au/index.aspx?base=1831
+# Guess that it was like Australia/Hobart while inhabited before 2010.
+#
+# From Steffen Thorsen (2010-03-10):
+# We got these changes from the Australian Antarctic Division:
+# - Macquarie Island will stay on UTC+11 for winter and therefore not
+# switch back from daylight savings time when other parts of Australia do
+# on 4 April.
+#
+# From Arthur David Olson (2013-05-23):
+# The 1919 transition is overspecified below so pre-2013 zics
+# will produce a binary file with an [A]EST-type as the first 32-bit type;
+# this is required for correct handling of times before 1916 by
+# pre-2013 versions of localtime.
+Zone Antarctica/Macquarie 0	-	zzz	1899 Nov
+			10:00	-	AEST	1916 Oct  1  2:00
+			10:00	1:00	AEDT	1917 Feb
+			10:00	Aus	AE%sT	1919 Apr  1  0:00s
+			0	-	zzz	1948 Mar 25
+			10:00	Aus	AE%sT	1967
+			10:00	AT	AE%sT	2010 Apr  4  3:00
+			11:00	-	MIST	# Macquarie I Standard Time
 
 # Christmas
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Indian/Christmas	7:02:52 -	LMT	1895 Feb
 			7:00	-	CXT	# Christmas Island Time
 
-# Cook Is
-# From Shanks & Pottenger:
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Cook	1978	only	-	Nov	12	0:00	0:30	HS
-Rule	Cook	1979	1991	-	Mar	Sun>=1	0:00	0	-
-Rule	Cook	1979	1990	-	Oct	lastSun	0:00	0:30	HS
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Rarotonga	-10:39:04 -	LMT	1901		# Avarua
-			-10:30	-	CKT	1978 Nov 12	# Cook Is Time
-			-10:00	Cook	CK%sT
-
-# Cocos
+# Cocos (Keeling) Is
 # These islands were ruled by the Ross family from about 1830 to 1978.
 # We don't know when standard time was introduced; for now, we guess 1900.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Indian/Cocos	6:27:40	-	LMT	1900
 			6:30	-	CCT	# Cocos Islands Time
 
+
 # Fiji
+
+# Milne gives 11:55:44 for Suva.
+
 # From Alexander Krivenyshev (2009-11-10):
 # According to Fiji Broadcasting Corporation,  Fiji plans to re-introduce DST
 # from November 29th 2009  to April 25th 2010.
 #
 # "Daylight savings to commence this month"
-# 
 # http://www.radiofiji.com.fj/fullstory.php?id=23719
-# 
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_fiji01.html
-# 
 
 # From Steffen Thorsen (2009-11-10):
 # The Fiji Government has posted some more details about the approved
 # amendments:
-# 
 # http://www.fiji.gov.fj/publish/page_16198.shtml
-# 
 
 # From Steffen Thorsen (2010-03-03):
 # The Cabinet in Fiji has decided to end DST about a month early, on
@@ -297,33 +304,88 @@
 # 2011 (last Sunday a good guess?).
 #
 # Official source:
-# 
 # http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=1096:3310-cabinet-approves-change-in-daylight-savings-dates&catid=49:cabinet-releases&Itemid=166
-# 
 #
 # A bit more background info here:
-# 
 # http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html
-# 
+
+# From Alexander Krivenyshev (2010-10-24):
+# According to Radio Fiji and Fiji Times online, Fiji will end DST 3
+# weeks earlier than expected - on March 6, 2011, not March 27, 2011...
+# Here is confirmation from Government of the Republic of the Fiji Islands,
+# Ministry of Information (fiji.gov.fj) web site:
+# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155
+# http://www.worldtimezone.com/dst_news/dst_news_fiji04.html
+
+# From Steffen Thorsen (2011-10-03):
+# Now the dates have been confirmed, and at least our start date
+# assumption was correct (end date was one week wrong).
+#
+# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155
+# which says
+# Members of the public are reminded to change their time to one hour in
+# advance at 2am to 3am on October 23, 2011 and one hour back at 3am to
+# 2am on February 26 next year.
+
+# From Ken Rylander (2011-10-24)
+# Another change to the Fiji DST end date. In the TZ database the end date for
+# Fiji DST 2012, is currently Feb 26. This has been changed to Jan 22.
+#
+# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=5017:amendments-to-daylight-savings&catid=71:press-releases&Itemid=155
+# states:
+#
+# The end of daylight saving scheduled initially for the 26th of February 2012
+# has been brought forward to the 22nd of January 2012.
+# The commencement of daylight saving will remain unchanged and start
+# on the  23rd of October, 2011.
+
+# From the Fiji Government Online Portal (2012-08-21) via Steffen Thorsen:
+# The Minister for Labour, Industrial Relations and Employment Mr Jone Usamate
+# today confirmed that Fiji will start daylight savings at 2 am on Sunday 21st
+# October 2012 and end at 3 am on Sunday 20th January 2013.
+# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=6702&catid=71&Itemid=155
+
+# From the Fijian Government Media Center (2013-08-30) via David Wheeler:
+# Fiji will start daylight savings on Sunday 27th October, 2013 ...
+# move clocks forward by one hour from 2am
+# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-SUNDAY,-27th-OCTOBER-201.aspx
+
+# From Steffen Thorsen (2013-01-10):
+# Fiji will end DST on 2014-01-19 02:00:
+# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVINGS-TO-END-THIS-MONTH-%281%29.aspx
+
+# From Ken Rylander (2014-10-20):
+# DST will start Nov. 2 this year.
+# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-SUNDAY,-NOVEMBER-2ND.aspx
+
+# From Paul Eggert (2014-10-20):
+# For now, guess DST from 02:00 the first Sunday in November to
+# 03:00 the first Sunday on or after January 18.  Although ad hoc, it
+# matches this year's plan and seems more likely to match future
+# practice than guessing no DST.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Fiji	1998	1999	-	Nov	Sun>=1	2:00	1:00	S
 Rule	Fiji	1999	2000	-	Feb	lastSun	3:00	0	-
 Rule	Fiji	2009	only	-	Nov	29	2:00	1:00	S
 Rule	Fiji	2010	only	-	Mar	lastSun	3:00	0	-
-Rule	Fiji	2010	only	-	Oct	24	2:00	1:00	S
-Rule	Fiji	2011	only	-	Mar	lastSun 3:00	0	-
+Rule	Fiji	2010	2013	-	Oct	Sun>=21	2:00	1:00	S
+Rule	Fiji	2011	only	-	Mar	Sun>=1	3:00	0	-
+Rule	Fiji	2012	2013	-	Jan	Sun>=18	3:00	0	-
+Rule	Fiji	2014	only	-	Jan	Sun>=18	2:00	0	-
+Rule	Fiji	2014	max	-	Nov	Sun>=1	2:00	1:00	S
+Rule	Fiji	2015	max	-	Jan	Sun>=18	3:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Fiji	11:53:40 -	LMT	1915 Oct 26	# Suva
+Zone	Pacific/Fiji	11:55:44 -	LMT	1915 Oct 26 # Suva
 			12:00	Fiji	FJ%sT	# Fiji Time
 
 # French Polynesia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Gambier	 -8:59:48 -	LMT	1912 Oct	# Rikitea
+Zone	Pacific/Gambier	 -8:59:48 -	LMT	1912 Oct # Rikitea
 			 -9:00	-	GAMT	# Gambier Time
 Zone	Pacific/Marquesas -9:18:00 -	LMT	1912 Oct
 			 -9:30	-	MART	# Marquesas Time
-Zone	Pacific/Tahiti	 -9:58:16 -	LMT	1912 Oct	# Papeete
+Zone	Pacific/Tahiti	 -9:58:16 -	LMT	1912 Oct # Papeete
 			-10:00	-	TAHT	# Tahiti Time
 # Clipperton (near North America) is administered from French Polynesia;
 # it is uninhabited.
@@ -331,14 +393,14 @@
 # Guam
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Guam	-14:21:00 -	LMT	1844 Dec 31
-			 9:39:00 -	LMT	1901		# Agana
-			10:00	-	GST	2000 Dec 23	# Guam
+			 9:39:00 -	LMT	1901        # Agana
+			10:00	-	GST	2000 Dec 23 # Guam
 			10:00	-	ChST	# Chamorro Standard Time
 
 # Kiribati
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Tarawa	 11:32:04 -	LMT	1901		# Bairiki
-			 12:00	-	GILT		 # Gilbert Is Time
+Zone Pacific/Tarawa	 11:32:04 -	LMT	1901 # Bairiki
+			 12:00	-	GILT	# Gilbert Is Time
 Zone Pacific/Enderbury	-11:24:20 -	LMT	1901
 			-12:00	-	PHOT	1979 Oct # Phoenix Is Time
 			-11:00	-	PHOT	1995
@@ -352,7 +414,7 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Saipan	-14:17:00 -	LMT	1844 Dec 31
 			 9:43:00 -	LMT	1901
-			 9:00	-	MPT	1969 Oct # N Mariana Is Time
+			 9:00	-	MPT	1969 Oct    # N Mariana Is Time
 			10:00	-	MPT	2000 Dec 23
 			10:00	-	ChST	# Chamorro Standard Time
 
@@ -363,24 +425,24 @@
 			12:00	-	MHT
 Zone Pacific/Kwajalein	11:09:20 -	LMT	1901
 			11:00	-	MHT	1969 Oct
-			-12:00	-	KWAT	1993 Aug 20	# Kwajalein Time
+			-12:00	-	KWAT	1993 Aug 20 # Kwajalein Time
 			12:00	-	MHT
 
 # Micronesia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Truk	10:07:08 -	LMT	1901
-			10:00	-	TRUT			# Truk Time
-Zone Pacific/Ponape	10:32:52 -	LMT	1901		# Kolonia
-			11:00	-	PONT			# Ponape Time
+Zone Pacific/Chuuk	10:07:08 -	LMT	1901
+			10:00	-	CHUT	# Chuuk Time
+Zone Pacific/Pohnpei	10:32:52 -	LMT	1901 # Kolonia
+			11:00	-	PONT	# Pohnpei Time
 Zone Pacific/Kosrae	10:51:56 -	LMT	1901
-			11:00	-	KOST	1969 Oct	# Kosrae Time
+			11:00	-	KOST	1969 Oct # Kosrae Time
 			12:00	-	KOST	1999
 			11:00	-	KOST
 
 # Nauru
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Nauru	11:07:40 -	LMT	1921 Jan 15	# Uaobe
-			11:30	-	NRT	1942 Mar 15	# Nauru Time
+Zone	Pacific/Nauru	11:07:40 -	LMT	1921 Jan 15 # Uaobe
+			11:30	-	NRT	1942 Mar 15 # Nauru Time
 			9:00	-	JST	1944 Aug 15
 			11:30	-	NRT	1979 May
 			12:00	-	NRT
@@ -393,7 +455,7 @@
 # Shanks & Pottenger say the following was at 2:00; go with IATA.
 Rule	NC	1997	only	-	Mar	 2	2:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Noumea	11:05:48 -	LMT	1912 Jan 13
+Zone	Pacific/Noumea	11:05:48 -	LMT	1912 Jan 13 # Nouméa
 			11:00	NC	NC%sT
 
 
@@ -410,7 +472,8 @@
 Rule	NZ	1934	1940	-	Sep	lastSun	2:00	0:30	S
 Rule	NZ	1946	only	-	Jan	 1	0:00	0	S
 # Since 1957 Chatham has been 45 minutes ahead of NZ, but there's no
-# convenient notation for this so we must duplicate the Rule lines.
+# convenient single notation for the date and time of this transition
+# so we must duplicate the Rule lines.
 Rule	NZ	1974	only	-	Nov	Sun>=1	2:00s	1:00	D
 Rule	Chatham	1974	only	-	Nov	Sun>=1	2:45s	1:00	D
 Rule	NZ	1975	only	-	Feb	lastSun	2:00s	0	S
@@ -433,12 +496,14 @@
 Zone Pacific/Auckland	11:39:04 -	LMT	1868 Nov  2
 			11:30	NZ	NZ%sT	1946 Jan  1
 			12:00	NZ	NZ%sT
-Zone Pacific/Chatham	12:13:48 -	LMT	1957 Jan  1
+Zone Pacific/Chatham	12:13:48 -	LMT	1868 Nov  2
+			12:15	-	CHAST	1946 Jan  1
 			12:45	Chatham	CHA%sT
 
+Link Pacific/Auckland Antarctica/McMurdo
 
 # Auckland Is
-# uninhabited; Maori and Moriori, colonial settlers, pastoralists, sealers,
+# uninhabited; Māori and Moriori, colonial settlers, pastoralists, sealers,
 # and scientific personnel have wintered
 
 # Campbell I
@@ -447,48 +512,82 @@
 # previously whalers, sealers, pastoralists, and scientific personnel wintered
 # was probably like Pacific/Auckland
 
+# Cook Is
+# From Shanks & Pottenger:
+# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+Rule	Cook	1978	only	-	Nov	12	0:00	0:30	HS
+Rule	Cook	1979	1991	-	Mar	Sun>=1	0:00	0	-
+Rule	Cook	1979	1990	-	Oct	lastSun	0:00	0:30	HS
+# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+Zone Pacific/Rarotonga	-10:39:04 -	LMT	1901        # Avarua
+			-10:30	-	CKT	1978 Nov 12 # Cook Is Time
+			-10:00	Cook	CK%sT
+
 ###############################################################################
 
 
 # Niue
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Niue	-11:19:40 -	LMT	1901		# Alofi
-			-11:20	-	NUT	1951	# Niue Time
-			-11:30	-	NUT	1978 Oct 1
+Zone	Pacific/Niue	-11:19:40 -	LMT	1901        # Alofi
+			-11:20	-	NUT	1951        # Niue Time
+			-11:30	-	NUT	1978 Oct  1
 			-11:00	-	NUT
 
 # Norfolk
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Norfolk	11:11:52 -	LMT	1901		# Kingston
-			11:12	-	NMT	1951	# Norfolk Mean Time
-			11:30	-	NFT		# Norfolk Time
+Zone	Pacific/Norfolk	11:11:52 -	LMT	1901 # Kingston
+			11:12	-	NMT	1951 # Norfolk Mean Time
+			11:30	-	NFT	# Norfolk Time
 
 # Palau (Belau)
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Palau	8:57:56 -	LMT	1901		# Koror
+Zone Pacific/Palau	8:57:56 -	LMT	1901 # Koror
 			9:00	-	PWT	# Palau Time
 
 # Papua New Guinea
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Port_Moresby 9:48:40 -	LMT	1880
-			9:48:32	-	PMMT	1895	# Port Moresby Mean Time
-			10:00	-	PGT		# Papua New Guinea Time
+			9:48:32	-	PMMT	1895 # Port Moresby Mean Time
+			10:00	-	PGT	# Papua New Guinea Time
+#
+# From Paul Eggert (2014-10-13):
+# Base the Bougainville entry on the Arawa-Kieta region, which appears to have
+# the most people even though it was devastated in the Bougainville Civil War.
+#
+# Although Shanks gives 1942-03-15 / 1943-11-01 for JST, these dates
+# are apparently rough guesswork from the starts of military campaigns.
+# The World War II entries below are instead based on Arawa-Kieta.
+# The Japanese occupied Kieta in July 1942,
+# according to the Pacific War Online Encyclopedia
+# http://pwencycl.kgbudge.com/B/o/Bougainville.htm
+# and seem to have controlled it until their 1945-08-21 surrender.
+#
+# The Autonomous Region of Bougainville plans to switch from UTC+10 to UTC+11
+# on 2014-12-28 at 02:00.  They call UTC+11 "Bougainville Standard Time";
+# abbreviate this as BST.  See:
+# http://www.bougainville24.com/bougainville-issues/bougainville-gets-own-timezone/
+#
+Zone Pacific/Bougainville 10:22:16 -	LMT	1880
+			 9:48:32 -	PMMT	1895
+			10:00	-	PGT	1942 Jul
+			 9:00	-	JST	1945 Aug 21
+			10:00	-	PGT	2014 Dec 28  2:00
+			11:00	-	BST
 
 # Pitcairn
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Pitcairn	-8:40:20 -	LMT	1901		# Adamstown
-			-8:30	-	PNT	1998 Apr 27 00:00
+Zone Pacific/Pitcairn	-8:40:20 -	LMT	1901        # Adamstown
+			-8:30	-	PNT	1998 Apr 27  0:00
 			-8:00	-	PST	# Pitcairn Standard Time
 
 # American Samoa
 Zone Pacific/Pago_Pago	 12:37:12 -	LMT	1879 Jul  5
 			-11:22:48 -	LMT	1911
-			-11:30	-	SAMT	1950		# Samoa Time
-			-11:00	-	NST	1967 Apr	# N=Nome
-			-11:00	-	BST	1983 Nov 30	# B=Bering
-			-11:00	-	SST			# S=Samoa
+			-11:00	-	NST	1967 Apr    # N=Nome
+			-11:00	-	BST	1983 Nov 30 # B=Bering
+			-11:00	-	SST	            # S=Samoa
 
-# Samoa
+# Samoa (formerly and also known as Western Samoa)
 
 # From Steffen Thorsen (2009-10-16):
 # We have been in contact with the government of Samoa again, and received
@@ -499,33 +598,105 @@
 # Sunday of April 2011."
 #
 # Background info:
-# 
 # http://www.timeanddate.com/news/time/samoa-dst-plan-2009.html
-# 
 #
 # Samoa's Daylight Saving Time Act 2009 is available here, but does not
 # contain any dates:
-# 
 # http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf
-# 
 
+# From Laupue Raymond Hughes (2010-10-07):
+# Please see
+# http://www.mcil.gov.ws
+# the Ministry of Commerce, Industry and Labour (sideframe) "Last Sunday
+# September 2010 (26/09/10) - adjust clocks forward from 12:00 midnight
+# to 01:00am and First Sunday April 2011 (03/04/11) - adjust clocks
+# backwards from 1:00am to 12:00am"
+
+# From Laupue Raymond Hughes (2011-03-07):
+# [http://www.mcil.gov.ws/ftcd/daylight_saving_2011.pdf]
+#
+# ... when the standard time strikes the hour of four o'clock (4.00am
+# or 0400 Hours) on the 2nd April 2011, then all instruments used to
+# measure standard time are to be adjusted/changed to three o'clock
+# (3:00am or 0300Hrs).
+
+# From David Zülke (2011-05-09):
+# Subject: Samoa to move timezone from east to west of international date line
+#
+# http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963
+
+# From Paul Eggert (2014-06-27):
+# The International Date Line Act 2011
+# http://www.parliament.gov.ws/images/ACTS/International_Date_Line_Act__2011_-_Eng.pdf
+# changed Samoa from UTC-11 to UTC+13, effective "12 o'clock midnight, on
+# Thursday 29th December 2011".  The International Date Line was adjusted
+# accordingly.
+
+# From Laupue Raymond Hughes (2011-09-02):
+# http://www.mcil.gov.ws/mcil_publications.html
+#
+# here is the official website publication for Samoa DST and dateline change
+#
+# DST
+# Year  End      Time              Start        Time
+# 2011  - - -    - - -             24 September 3:00am to 4:00am
+# 2012  01 April 4:00am to 3:00am  - - -        - - -
+#
+# Dateline Change skip Friday 30th Dec 2011
+# Thursday 29th December 2011	23:59:59 Hours
+# Saturday 31st December 2011	00:00:00 Hours
+#
+# From Nicholas Pereira (2012-09-10):
+# Daylight Saving Time commences on Sunday 30th September 2012 and
+# ends on Sunday 7th of April 2013....
+# http://www.mcil.gov.ws/mcil_publications.html
+#
+# From Paul Eggert (2014-07-08):
+# That web page currently lists transitions for 2012/3 and 2013/4.
+# Assume the pattern instituted in 2012 will continue indefinitely.
+
+# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+Rule	WS	2010	only	-	Sep	lastSun	0:00	1	D
+Rule	WS	2011	only	-	Apr	Sat>=1	4:00	0	S
+Rule	WS	2011	only	-	Sep	lastSat	3:00	1	D
+Rule	WS	2012	max	-	Apr	Sun>=1	4:00	0	S
+Rule	WS	2012	max	-	Sep	lastSun	3:00	1	D
+# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Apia	 12:33:04 -	LMT	1879 Jul  5
 			-11:26:56 -	LMT	1911
-			-11:30	-	SAMT	1950		# Samoa Time
-			-11:00	-	WST	2010 Sep 26
-			-11:00	1:00	WSDT	2011 Apr 3
-			-11:00	-	WST
+			-11:30	-	WSST	1950
+			-11:00	WS	S%sT	2011 Dec 29 24:00 # S=Samoa
+			 13:00	WS	WS%sT
 
 # Solomon Is
 # excludes Bougainville, for which see Papua New Guinea
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Guadalcanal 10:39:48 -	LMT	1912 Oct	# Honiara
+Zone Pacific/Guadalcanal 10:39:48 -	LMT	1912 Oct # Honiara
 			11:00	-	SBT	# Solomon Is Time
 
 # Tokelau Is
+#
+# From Gwillim Law (2011-12-29)
+# A correspondent informed me that Tokelau, like Samoa, will be skipping
+# December 31 this year ...
+#
+# From Steffen Thorsen (2012-07-25)
+# ... we double checked by calling hotels and offices based in Tokelau asking
+# about the time there, and they all told a time that agrees with UTC+13....
+# Shanks says UTC-10 from 1901 [but] ... there is a good chance the change
+# actually was to UTC-11 back then.
+#
+# From Paul Eggert (2012-07-25)
+# A Google Books snippet of Appendix to the Journals of the House of
+# Representatives of New Zealand, Session 1948,
+# , page 65, says Tokelau
+# was "11 hours slow on G.M.T."  Go with Thorsen and assume Shanks & Pottenger
+# are off by an hour starting in 1901.
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Fakaofo	-11:24:56 -	LMT	1901
-			-10:00	-	TKT	# Tokelau Time
+			-11:00	-	TKT	2011 Dec 30 # Tokelau Time
+			13:00	-	TKT
 
 # Tonga
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -552,7 +723,7 @@
 # 1886-1891; Baker was similar but exact dates are not known.
 # Inhabited by civilians 1935-1942; U.S. military bases 1943-1944;
 # uninhabited thereafter.
-# Howland observed Hawaii Standard Time (UTC-10:30) in 1937;
+# Howland observed Hawaii Standard Time (UT-10:30) in 1937;
 # see page 206 of Elgen M. Long and Marie K. Long,
 # Amelia Earhart: the Mystery Solved, Simon & Schuster (2000).
 # So most likely Howland and Baker observed Hawaii Time from 1935
@@ -565,8 +736,32 @@
 # no information; was probably like Pacific/Kiritimati
 
 # Johnston
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Johnston	-10:00	-	HST
+#
+# From Paul Eggert (2014-03-11):
+# Sometimes Johnston kept Hawaii time, and sometimes it was an hour behind.
+# Details are uncertain.  We have no data for Johnston after 1970, so
+# treat it like Hawaii for now.
+#
+# In his memoirs of June 6th to October 4, 1945
+#  (2005), Herbert C. Bach writes,
+# "We started our letdown to Kwajalein Atoll and landed there at 5:00 AM
+# Johnston time, 1:30 AM Kwajalein time."  This was in June 1945, and
+# confirms that Johnston kept the same time as Honolulu in summer 1945.
+#
+# From Lyle McElhaney (2014-03-11):
+# [W]hen JI was being used for that [atomic bomb] testing, the time being used
+# was not Hawaiian time but rather the same time being used on the ships,
+# which had a GMT offset of -11 hours.  This apparently applied to at least the
+# time from Operation Newsreel (Hardtack I/Teak shot, 1958-08-01) to the last
+# Operation Fishbowl shot (Tightrope, 1962-11-04).... [See] Herman Hoerlin,
+# "The United States High-Altitude Test Experience: A Review Emphasizing the
+# Impact on the Environment", Los Alamos LA-6405, Oct 1976.
+# http://www.fas.org/sgp/othergov/doe/lanl/docs1/00322994.pdf
+# See the table on page 4 where he lists GMT and local times for the tests; a
+# footnote for the JI tests reads that local time is "JI time = Hawaii Time
+# Minus One Hour".
+#
+# See 'northamerica' for Pacific/Johnston.
 
 # Kingman
 # uninhabited
@@ -576,7 +771,7 @@
 # From Mark Brader (2005-01-23):
 # [Fallacies and Fantasies of Air Transport History, by R.E.G. Davies,
 # published 1994 by Paladwr Press, McLean, VA, USA; ISBN 0-9626483-5-3]
-# reproduced a Pan American Airways timeables from 1936, for their weekly
+# reproduced a Pan American Airways timetable from 1936, for their weekly
 # "Orient Express" flights between San Francisco and Manila, and connecting
 # flights to Chicago and the US East Coast.  As it uses some time zone
 # designations that I've never seen before:....
@@ -586,9 +781,9 @@
 Zone Pacific/Midway	-11:49:28 -	LMT	1901
 			-11:00	-	NST	1956 Jun  3
 			-11:00	1:00	NDT	1956 Sep  2
-			-11:00	-	NST	1967 Apr	# N=Nome
-			-11:00	-	BST	1983 Nov 30	# B=Bering
-			-11:00	-	SST			# S=Samoa
+			-11:00	-	NST	1967 Apr    # N=Nome
+			-11:00	-	BST	1983 Nov 30 # B=Bering
+			-11:00	-	SST	            # S=Samoa
 
 # Palmyra
 # uninhabited since World War II; was probably like Pacific/Kiritimati
@@ -608,7 +803,7 @@
 Rule	Vanuatu	1992	1993	-	Jan	Sun>=23	0:00	0	-
 Rule	Vanuatu	1992	only	-	Oct	Sun>=23	0:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Efate	11:13:16 -	LMT	1912 Jan 13		# Vila
+Zone	Pacific/Efate	11:13:16 -	LMT	1912 Jan 13 # Vila
 			11:00	Vanuatu	VU%sT	# Vanuatu Time
 
 # Wallis and Futuna
@@ -620,184 +815,213 @@
 
 # NOTES
 
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
-# tz@elsie.nci.nih.gov for general use in the future).
+# tz@iana.org for general use in the future).  For more, please see
+# the file CONTRIBUTING in the tz distribution.
 
-# From Paul Eggert (2006-03-22):
-# A good source for time zone historical data outside the U.S. is
+# From Paul Eggert (2014-10-31):
+#
+# Unless otherwise specified, the source for data through 1990 is:
 # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
 # San Diego: ACS Publications, Inc. (2003).
+# Unfortunately this book contains many errors and cites no sources.
 #
 # Gwillim Law writes that a good source
 # for recent time zone data is the International Air Transport
 # Association's Standard Schedules Information Manual (IATA SSIM),
 # published semiannually.  Law sent in several helpful summaries
-# of the IATA's data after 1990.
-#
-# Except where otherwise noted, Shanks & Pottenger is the source for
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
+# of the IATA's data after 1990.  Except where otherwise noted,
+# IATA SSIM is the source for entries after 1990.
 #
 # Another source occasionally used is Edward W. Whitman, World Time Differences,
 # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
 # I found in the UCLA library.
 #
+# For data circa 1899, a common source is:
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
+# http://www.jstor.org/stable/1774359
+#
 # A reliable and entertaining source about time zones is
 # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
 #
-# I invented the abbreviations marked `*' in the following table;
+# I invented the abbreviations marked '*' in the following table;
 # the rest are from earlier versions of this file, or from other sources.
 # Corrections are welcome!
-#		std dst
-#		LMT	Local Mean Time
-#	  8:00	WST WST	Western Australia
-#	  8:45	CWST CWST Central Western Australia*
-#	  9:00	JST	Japan
-#	  9:30	CST CST	Central Australia
-#	 10:00	EST EST	Eastern Australia
-#	 10:00	ChST	Chamorro
-#	 10:30	LHST LHST Lord Howe*
-#	 11:30	NZMT NZST New Zealand through 1945
-#	 12:00	NZST NZDT New Zealand 1946-present
-#	 12:45	CHAST CHADT Chatham*
-#	-11:00	SST	Samoa
-#	-10:00	HST	Hawaii
-#	- 8:00	PST	Pitcairn*
+#		std	dst
+#		LMT		Local Mean Time
+#	  8:00	AWST	AWDT	Western Australia
+#	  8:45	ACWST	ACWDT	Central Western Australia*
+#	  9:00	JST		Japan
+#	  9:30	ACST	ACDT	Central Australia
+#	 10:00	AEST	AEDT	Eastern Australia
+#	 10:00	ChST		Chamorro
+#	 10:30	LHST	LHDT	Lord Howe*
+#	 11:00	BST		Bougainville*
+#	 11:30	NZMT	NZST	New Zealand through 1945
+#	 12:00	NZST	NZDT	New Zealand 1946-present
+#	 12:15	CHAST		Chatham through 1945*
+#	 12:45	CHAST	CHADT	Chatham 1946-present*
+#	 13:00	WSST	WSDT	(western) Samoa 2011-present*
+#	-11:30	WSST		Western Samoa through 1950*
+#	-11:00	SST		Samoa
+#	-10:00	HST		Hawaii
+#	- 8:00	PST		Pitcairn*
 #
-# See the `northamerica' file for Hawaii.
-# See the `southamerica' file for Easter I and the Galapagos Is.
+# See the 'northamerica' file for Hawaii.
+# See the 'southamerica' file for Easter I and the Galápagos Is.
 
 ###############################################################################
 
 # Australia
 
+# From Paul Eggert (2014-06-30):
+# Daylight saving time has long been controversial in Australia, pitting
+# region against region, rural against urban, and local against global.
+# For example, in her review of Graeme Davison's _The Unforgiving
+# Minute: how Australians learned to tell the time_ (1993), Perth native
+# Phillipa J Martyr wrote, "The section entitled 'Saving Daylight' was
+# very informative, but was (as can, sadly, only be expected from a
+# Melbourne-based study) replete with the usual chuckleheaded
+# Queenslanders and straw-chewing yokels from the West prattling fables
+# about fading curtains and crazed farm animals."
+# Electronic Journal of Australian and New Zealand History (1997-03-03)
+# http://www.jcu.edu.au/aff/history/reviews/davison.htm
+
 # From Paul Eggert (2005-12-08):
-# 
 # Implementation Dates of Daylight Saving Time within Australia
-#  summarizes daylight saving issues in Australia.
+# http://www.bom.gov.au/climate/averages/tables/dst_times.shtml
+# summarizes daylight saving issues in Australia.
 
 # From Arthur David Olson (2005-12-12):
-# 
 # Lawlink NSW:Daylight Saving in New South Wales
-#  covers New South Wales in particular.
+# http://www.lawlink.nsw.gov.au/lawlink/Corporate/ll_agdinfo.nsf/pages/community_relations_daylight_saving
+# covers New South Wales in particular.
 
 # From John Mackin (1991-03-06):
-# We in Australia have _never_ referred to DST as `daylight' time.
-# It is called `summer' time.  Now by a happy coincidence, `summer'
-# and `standard' happen to start with the same letter; hence, the
+# We in Australia have _never_ referred to DST as 'daylight' time.
+# It is called 'summer' time.  Now by a happy coincidence, 'summer'
+# and 'standard' happen to start with the same letter; hence, the
 # abbreviation does _not_ change...
 # The legislation does not actually define abbreviations, at least
 # in this State, but the abbreviation is just commonly taken to be the
 # initials of the phrase, and the legislation here uniformly uses
-# the phrase `summer time' and does not use the phrase `daylight
+# the phrase 'summer time' and does not use the phrase 'daylight
 # time'.
 # Announcers on the Commonwealth radio network, the ABC (for Australian
-# Broadcasting Commission), use the phrases `Eastern Standard Time'
-# or `Eastern Summer Time'.  (Note, though, that as I say in the
+# Broadcasting Commission), use the phrases 'Eastern Standard Time'
+# or 'Eastern Summer Time'.  (Note, though, that as I say in the
 # current australasia file, there is really no such thing.)  Announcers
 # on its overseas service, Radio Australia, use the same phrases
-# prefixed by the word `Australian' when referring to local times;
+# prefixed by the word 'Australian' when referring to local times;
 # time announcements on that service, naturally enough, are made in UTC.
 
-# From Arthur David Olson (1992-03-08):
-# Given the above, what's chosen for year-round use is:
-#	CST	for any place operating at a GMTOFF of 9:30
-#	WST	for any place operating at a GMTOFF of 8:00
-#	EST	for any place operating at a GMTOFF of 10:00
-
-# From Chuck Soper (2006-06-01):
-# I recently found this Australian government web page on time zones:
-# 
-# And this government web page lists time zone names and abbreviations:
-# 
-
-# From Paul Eggert (2001-04-05), summarizing a long discussion about "EST"
-# versus "AEST" etc.:
-#
-# I see the following points of dispute:
-#
-# * How important are unique time zone abbreviations?
-#
-#   Here I tend to agree with the point (most recently made by Chris
-#   Newman) that unique abbreviations should not be essential for proper
-#   operation of software.  We have other instances of ambiguity
-#   (e.g. "IST" denoting both "Israel Standard Time" and "Indian
-#   Standard Time"), and they are not likely to go away any time soon.
-#   In the old days, some software mistakenly relied on unique
-#   abbreviations, but this is becoming less true with time, and I don't
-#   think it's that important to cater to such software these days.
-#
-#   On the other hand, there is another motivation for unambiguous
-#   abbreviations: it cuts down on human confusion.  This is
-#   particularly true for Australia, where "EST" can mean one thing for
-#   time T and a different thing for time T plus 1 second.
-#
-# * Does the relevant legislation indicate which abbreviations should be used?
-#
-#   Here I tend to think that things are a mess, just as they are in
-#   many other countries.  We Americans are currently disagreeing about
-#   which abbreviation to use for the newly legislated Chamorro Standard
-#   Time, for example.
-#
-#   Personally, I would prefer to use common practice; I would like to
-#   refer to legislation only for examples of common practice, or as a
-#   tiebreaker.
-#
-# * Do Australians more often use "Eastern Daylight Time" or "Eastern
-#   Summer Time"?  Do they typically prefix the time zone names with
-#   the word "Australian"?
-#
-#   My own impression is that both "Daylight Time" and "Summer Time" are
-#   common and are widely understood, but that "Summer Time" is more
-#   popular; and that the leading "A" is also common but is omitted more
-#   often than not.  I just used AltaVista advanced search and got the
-#   following count of page hits:
-#
-#     1,103 "Eastern Summer Time" AND domain:au
-#       971 "Australian Eastern Summer Time" AND domain:au
-#       613 "Eastern Daylight Time" AND domain:au
-#       127 "Australian Eastern Daylight Time" AND domain:au
-#
-#   Here "Summer" seems quite a bit more popular than "Daylight",
-#   particularly when we know the time zone is Australian and not US,
-#   say.  The "Australian" prefix seems to be popular for Eastern Summer
-#   Time, but unpopular for Eastern Daylight Time.
-#
-#   For abbreviations, tools like AltaVista are less useful because of
-#   ambiguity.  Many hits are not really time zones, unfortunately, and
-#   many hits denote US time zones and not Australian ones.  But here
-#   are the hit counts anyway:
-#
-#     161,304 "EST" and domain:au
-#      25,156 "EDT" and domain:au
-#      18,263 "AEST" and domain:au
-#      10,416 "AEDT" and domain:au
-#
-#      14,538 "CST" and domain:au
-#       5,728 "CDT" and domain:au
-#         176 "ACST" and domain:au
-#          29 "ACDT" and domain:au
-#
-#       7,539 "WST" and domain:au
-#          68 "AWST" and domain:au
-#
-#   This data suggest that Australians tend to omit the "A" prefix in
-#   practice.  The situation for "ST" versus "DT" is less clear, given
-#   the ambiguities involved.
-#
-# * How do Australians feel about the abbreviations in the tz database?
-#
-#   If you just count Australians on this list, I count 2 in favor and 3
-#   against.  One of the "against" votes (David Keegel) counseled delay,
-#   saying that both AEST/AEDT and EST/EST are widely used and
-#   understood in Australia.
+# From Paul Eggert (2014-06-30):
+#
+# Inspired by Mackin's remarks quoted above, earlier versions of this
+# file used "EST" for both Eastern Standard Time and Eastern Summer
+# Time in Australia, and similarly for "CST", "CWST", and "WST".
+# However, these abbreviations were confusing and were not common
+# practice among Australians, and there were justifiable complaints
+# about them, so I attempted to survey current Australian usage.
+# For the tz database, the full English phrase is not that important;
+# what matters is the abbreviation.  It's difficult to survey the web
+# directly for abbreviation usage, as there are so many false hits for
+# strings like "EST" and "EDT", so I looked for pages that defined an
+# abbreviation for eastern or central DST in Australia, and got the
+# following numbers of unique hits for the listed Google queries:
+#
+#   10 "Eastern Daylight Time AEST" site:au [some are false hits]
+#   10 "Eastern Summer Time AEST" site:au
+#   10 "Summer Time AEDT" site:au
+#   13 "EDST Eastern Daylight Saving Time" site:au
+#   18 "Summer Time ESST" site:au
+#   28 "Eastern Daylight Saving Time EDST" site:au
+#   39 "EDT Eastern Daylight Time" site:au [some are false hits]
+#   53 "Eastern Daylight Time EDT" site:au [some are false hits]
+#   54 "AEDT Australian Eastern Daylight Time" site:au
+#  182 "Eastern Daylight Time AEDT" site:au
+#
+#   17 "Central Daylight Time CDT" site:au [some are false hits]
+#   46 "Central Daylight Time ACDT" site:au
+#
+# I tried several other variants (e.g., "Eastern Summer Time EST") but
+# they all returned fewer than 10 unique hits.  I also looked for pages
+# mentioning both "western standard time" and an abbreviation, since
+# there is no WST in the US to generate false hits, and found:
+#
+#  156 "western standard time" AWST site:au
+#  226 "western standard time" WST site:au
+#
+# I then surveyed the top ten newspapers in Australia by circulation as
+# listed in Wikipedia, using Google queries like "AEDT site:heraldsun.com.au"
+# and obtaining estimated counts from the initial page of search results.
+# All ten papers greatly preferred "AEDT" to "EDT".  The papers
+# surveyed were the Herald Sun, The Daily Telegraph, The Courier-Mail,
+# The Sydney Morning Herald, The West Australian, The Age, The Advertiser,
+# The Australian, The Financial Review, and The Herald (Newcastle).
+#
+# I also searched for historical usage, to see whether abbreviations
+# like "AEDT" are new.  A Trove search 
+# found only one newspaper (The Canberra Times) with a house style
+# dating back to the 1970s, I expect because other newspapers weren't
+# fully indexed.  The Canberra Times strongly preferred abbreviations
+# like "AEDT".  The first occurrence of "AEDT" was a World Weather
+# column (1971-11-17, page 24), and of "ACDT" was a Scoreboard column
+# (1993-01-24, p 16).  The style was the typical usage but was not
+# strictly enforced; for example, "Welcome to the twilight zones ..."
+# (1994-10-29, p 1) uses the abbreviations AEST/AEDT, CST/CDT, and
+# WST, and goes on to say, "The confusion and frustration some feel
+# about the lack of uniformity among Australia's six states and two
+# territories has prompted one group to form its very own political
+# party -- the Sydney-based Daylight Saving Extension Party."
+#
+# I also surveyed federal government sources.  They did not agree:
+#
+#   The Australian Government (2014-03-26)
+#   http://australia.gov.au/about-australia/our-country/time
+#   (This document was produced by the Department of Finance.)
+#   AEST ACST AWST AEDT ACDT
+#
+#   Bureau of Meteorology (2012-11-08)
+#   http://www.bom.gov.au/climate/averages/tables/daysavtm.shtml
+#   EST CST WST EDT CDT
+#
+#   Civil Aviation Safety Authority (undated)
+#   http://services.casa.gov.au/outnback/inc/pages/episode3/episode-3_time_zones.shtml
+#   EST CST WST (no abbreviations given for DST)
+#
+#   Geoscience Australia (2011-11-24)
+#   http://www.ga.gov.au/geodesy/astro/sunrise.jsp
+#   AEST ACST AWST AEDT ACDT
+#
+#   Parliamentary Library (2008-11-10)
+#   http://www.aph.gov.au/binaries/library/pubs/rp/2008-09/09rp14.pdf
+#   EST CST WST preferred for standard time; AEST AEDT ACST ACDT also used
+#
+#   The Transport Safety Bureau has an extensive series of accident reports,
+#   and investigators seem to use whatever abbreviation they like.
+#   Googling site:atsb.gov.au found the following number of unique hits:
+#   311 "ESuT", 195 "EDT", 26 "AEDT", 83 "CSuT", 46 "CDT".
+#   "_SuT" tended to appear in older reports, and "A_DT" tended to
+#   appear in reports of events with international implications.
+#
+# From the above it appears that there is a working consensus in
+# Australia to use trailing "DT" for daylight saving time; although
+# some sources use trailing "SST" or "ST" or "SuT" they are by far in
+# the minority.  The case for leading "A" is weaker, but since it
+# seems to be preferred in the overall web and is preferred in all
+# the leading newspaper websites and in many government departments,
+# it has a stronger case than omitting the leading "A".  The current
+# version of the database therefore uses abbreviations like "AEST" and
+# "AEDT" for Australian time zones.
 
 # From Paul Eggert (1995-12-19):
 # Shanks & Pottenger report 2:00 for all autumn changes in Australia and NZ.
 # Mark Prior writes that his newspaper
 # reports that NSW's fall 1995 change will occur at 2:00,
 # but Robert Elz says it's been 3:00 in Victoria since 1970
-# and perhaps the newspaper's `2:00' is referring to standard time.
+# and perhaps the newspaper's '2:00' is referring to standard time.
 # For now we'll continue to assume 2:00s for changes since 1960.
 
 # From Eric Ulevik (1998-01-05):
@@ -807,17 +1031,14 @@
 # relevant entries in this database.
 #
 # NSW (including LHI and Broken Hill):
-# 
 # Standard Time Act 1987 (updated 1995-04-04)
-# 
+# http://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html
 # ACT
-# 
 # Standard Time and Summer Time Act 1972
-# 
+# http://www.austlii.edu.au/au/legis/act/consol_act/stasta1972279/index.html
 # SA
-# 
 # Standard Time Act, 1898
-# 
+# http://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html
 
 # From David Grosz (2005-06-13):
 # It was announced last week that Daylight Saving would be extended by
@@ -835,7 +1056,7 @@
 # Victoria: I wasn't able to find anything separate, but the other articles
 # allude to it.
 # But not Queensland
-# http://www.news.com.au/story/0,10117,15564030-1248,00.html.
+# http://www.news.com.au/story/0,10117,15564030-1248,00.html
 
 # Northern Territory
 
@@ -882,9 +1103,9 @@
 # The 1992 ending date used in the rules is a best guess;
 # it matches what was used in the past.
 
-# 
 # The Australian Bureau of Meteorology FAQ
-#  (1999-09-27) writes that Giles Meteorological Station uses
+# http://www.bom.gov.au/faq/faqgen.htm
+# (1999-09-27) writes that Giles Meteorological Station uses
 # South Australian time even though it's located in Western Australia.
 
 # Queensland
@@ -925,9 +1146,9 @@
 # The chosen rules the union of the 1971/1972 change and the 1989-1992 changes.
 
 # From Christopher Hunt (2006-11-21), after an advance warning
-# from Jesper Norgaard Welen (2006-11-01):
+# from Jesper Nørgaard Welen (2006-11-01):
 # WA are trialing DST for three years.
-# 
+# http://www.parliament.wa.gov.au/parliament/bills.nsf/9A1B183144403DA54825721200088DF1/$File/Bill175-1B.pdf
 
 # From Rives McDow (2002-04-09):
 # The most interesting region I have found consists of three towns on the
@@ -941,7 +1162,7 @@
 # From Paul Eggert (2002-04-09):
 # This is confirmed by the section entitled
 # "What's the deal with time zones???" in
-# .
+# http://www.earthsci.unimelb.edu.au/~awatkins/null.html
 #
 # From Alex Livingston (2006-12-07):
 # ... it was just on four years ago that I drove along the Eyre Highway,
@@ -1089,7 +1310,7 @@
 # Based on law library research by John Mackin,
 # who notes:
 #	In Australia, time is not legislated federally, but rather by the
-#	individual states.  Thus, while such terms as ``Eastern Standard Time''
+#	individual states.  Thus, while such terms as "Eastern Standard Time"
 #	[I mean, of course, Australian EST, not any other kind] are in common
 #	use, _they have NO REAL MEANING_, as they are not defined in the
 #	legislation.  This is very important to understand.
@@ -1097,48 +1318,42 @@
 
 # From Eric Ulevik (1999-05-26):
 # DST will start in NSW on the last Sunday of August, rather than the usual
-# October in 2000.  [See: Matthew Moore,
-# 
-# Two months more daylight saving
-# 
-# Sydney Morning Herald (1999-05-26).]
+# October in 2000.  See: Matthew Moore,
+# Two months more daylight saving, Sydney Morning Herald (1999-05-26).
+# http://www.smh.com.au/news/9905/26/pageone/pageone4.html
 
 # From Paul Eggert (1999-09-27):
 # See the following official NSW source:
-# 
 # Daylight Saving in New South Wales.
-# 
+# http://dir.gis.nsw.gov.au/cgi-bin/genobject/document/other/daylightsaving/tigGmZ
 #
 # Narrabri Shire (NSW) council has announced it will ignore the extension of
 # daylight saving next year.  See:
-# 
 # Narrabri Council to ignore daylight saving
-#  (1999-07-22).  For now, we'll wait to see if this really happens.
+# http://abc.net.au/news/regionals/neweng/monthly/regeng-22jul1999-1.htm
+# (1999-07-22).  For now, we'll wait to see if this really happens.
 #
 # Victoria will following NSW.  See:
-# 
-# Vic to extend daylight saving
-#  (1999-07-28).
+# Vic to extend daylight saving (1999-07-28)
+# http://abc.net.au/local/news/olympics/1999/07/item19990728112314_1.htm
 #
 # However, South Australia rejected the DST request.  See:
-# 
-# South Australia rejects Olympics daylight savings request
-#  (1999-07-19).
+# South Australia rejects Olympics daylight savings request (1999-07-19)
+# http://abc.net.au/news/olympics/1999/07/item19990719151754_1.htm
 #
 # Queensland also will not observe DST for the Olympics.  See:
-# 
 # Qld says no to daylight savings for Olympics
-#  (1999-06-01), which quotes Queensland Premier Peter Beattie as saying
-# ``Look you've got to remember in my family when this came up last time
+# http://abc.net.au/news/olympics/1999/06/item19990601114608_1.htm
+# (1999-06-01), which quotes Queensland Premier Peter Beattie as saying
+# "Look you've got to remember in my family when this came up last time
 # I voted for it, my wife voted against it and she said to me it's all very
 # well for you, you don't have to worry about getting the children out of
 # bed, getting them to school, getting them to sleep at night.
-# I've been through all this argument domestically...my wife rules.''
+# I've been through all this argument domestically...my wife rules."
 #
 # Broken Hill will stick with South Australian time in 2000.  See:
-# 
-# Broken Hill to be behind the times
-#  (1999-07-21).
+# Broken Hill to be behind the times (1999-07-21)
+# http://abc.net.au/news/regionals/brokenh/monthly/regbrok-21jul1999-6.htm
 
 # IATA SSIM (1998-09) says that the spring 2000 change for Australian
 # Capital Territory, New South Wales except Lord Howe Island and Broken
@@ -1154,7 +1369,7 @@
 # Yancowinna
 
 # From John Mackin (1989-01-04):
-# `Broken Hill' means the County of Yancowinna.
+# 'Broken Hill' means the County of Yancowinna.
 
 # From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
 # # YANCOWINNA..  [ Confirmation courtesy of Broken Hill Postmaster ]
@@ -1186,7 +1401,7 @@
 # Lord Howe Island Board (controlling authority for the Island) is
 # seeking the community's views on various options for summer time
 # arrangements on the Island, e.g. advance clocks by 1 full hour
-# instead of only 30 minutes.  Dependant on the wishes of residents
+# instead of only 30 minutes.  [Dependent] on the wishes of residents
 # the Board may approach the NSW government to change the existing
 # arrangements.  The starting date for summer time on the Island will
 # however always coincide with the rest of NSW.
@@ -1206,26 +1421,22 @@
 # See "southeast Australia" above for 2008 and later.
 
 # From Steffen Thorsen (2009-04-28):
-# According to the official press release, South Australia's extended daylight 
-# saving period will continue with the same rules as used during the 2008-2009 
+# According to the official press release, South Australia's extended daylight
+# saving period will continue with the same rules as used during the 2008-2009
 # summer (southern hemisphere).
-# 
+#
 # From
-# 
 # http://www.safework.sa.gov.au/uploaded_files/DaylightDatesSet.pdf
-# 
-# The extended daylight saving period that South Australia has been trialling 
+# The extended daylight saving period that South Australia has been trialling
 # for over the last year is now set to be ongoing.
-# Daylight saving will continue to start on the first Sunday in October each 
+# Daylight saving will continue to start on the first Sunday in October each
 # year and finish on the first Sunday in April the following year.
-# Industrial Relations Minister, Paul Caica, says this provides South Australia 
-# with a consistent half hour time difference with NSW, Victoria, Tasmania and 
+# Industrial Relations Minister, Paul Caica, says this provides South Australia
+# with a consistent half hour time difference with NSW, Victoria, Tasmania and
 # the ACT for all 52 weeks of the year...
-# 
+#
 # We have a wrap-up here:
-# 
 # http://www.timeanddate.com/news/time/south-australia-extends-dst.html
-# 
 ###############################################################################
 
 # New Zealand
@@ -1234,7 +1445,7 @@
 # the 1989/90 year was a trial of an extended "daylight saving" period.
 # This trial was deemed successful and the extended period adopted for
 # subsequent years (with the addition of a further week at the start).
-# source -- phone call to Ministry of Internal Affairs Head Office.
+# source - phone call to Ministry of Internal Affairs Head Office.
 
 # From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
 # # The Country of New Zealand   (Australia's east island -) Gee they hate that!
@@ -1276,6 +1487,19 @@
 # that DST will begin on 2007-09-30 2008-04-06.
 # http://www.dia.govt.nz/diawebsite.nsf/wpg_URL/Services-Daylight-Saving-Daylight-saving-to-be-extended
 
+# From Paul Eggert (2014-07-14):
+# Chatham Island time was formally standardized on 1957-01-01 by
+# New Zealand's Standard Time Amendment Act 1956 (1956-10-26).
+# http://www.austlii.edu.au/nz/legis/hist_act/staa19561956n100244.pdf
+# According to Google Books snippet view, a speaker in the New Zealand
+# parliamentary debates in 1956 said "Clause 78 makes provision for standard
+# time in the Chatham Islands.  The time there is 45 minutes in advance of New
+# Zealand time.  I understand that is the time they keep locally, anyhow."
+# For now, assume this practice goes back to the introduction of standard time
+# in New Zealand, as this would make Chatham Islands time almost exactly match
+# LMT back when New Zealand was at UTC+11:30; also, assume Chatham Islands did
+# not observe New Zealand's prewar DST.
+
 ###############################################################################
 
 
@@ -1293,26 +1517,22 @@
 # From Paul Eggert (2000-01-08):
 # IATA SSIM (1999-09) says DST ends 0100 local time.  Go with McDow.
 
-# From the BBC World Service (1998-10-31 11:32 UTC):
-# The Fijiian government says the main reasons for the time change is to
-# improve productivity and reduce road accidents.  But correspondents say it
-# also hopes the move will boost Fiji's ability to compete with other pacific
-# islands in the effort to attract tourists to witness the dawning of the new
-# millenium.
+# From the BBC World Service in
+# http://news.bbc.co.uk/2/hi/asia-pacific/205226.stm (1998-10-31 16:03 UTC):
+# The Fijian government says the main reasons for the time change is to
+# improve productivity and reduce road accidents.... [T]he move is also
+# intended to boost Fiji's ability to attract tourists to witness the dawning
+# of the new millennium.
 
 # http://www.fiji.gov.fj/press/2000_09/2000_09_13-05.shtml (2000-09-13)
 # reports that Fiji has discontinued DST.
 
-# Johnston
-
-# Johnston data is from usno1995.
-
 
 # Kiribati
 
 # From Paul Eggert (1996-01-22):
 # Today's _Wall Street Journal_ (page 1) reports that Kiribati
-# ``declared it the same day throught the country as of Jan. 1, 1995''
+# "declared it the same day [throughout] the country as of Jan. 1, 1995"
 # as part of the competition to be first into the 21st century.
 
 
@@ -1327,8 +1547,8 @@
 
 # N Mariana Is, Guam
 
-# Howse writes (p 153) ``The Spaniards, on the other hand, reached the
-# Philippines and the Ladrones from America,'' and implies that the Ladrones
+# Howse writes (p 153) "The Spaniards, on the other hand, reached the
+# Philippines and the Ladrones from America," and implies that the Ladrones
 # (now called the Marianas) kept American date for quite some time.
 # For now, we assume the Ladrones switched at the same time as the Philippines;
 # see Asia/Manila.
@@ -1342,17 +1562,16 @@
 # Micronesia
 
 # Alan Eugene Davis writes (1996-03-16),
-# ``I am certain, having lived there for the past decade, that "Truk"
-# (now properly known as Chuuk) ... is in the time zone GMT+10.''
+# "I am certain, having lived there for the past decade, that 'Truk'
+# (now properly known as Chuuk) ... is in the time zone GMT+10."
 #
 # Shanks & Pottenger write that Truk switched from UTC+10 to UTC+11
 # on 1978-10-01; ignore this for now.
 
 # From Paul Eggert (1999-10-29):
 # The Federated States of Micronesia Visitors Board writes in
-# 
-# The Federated States of Micronesia - Visitor Information
-#  (1999-01-26)
+# The Federated States of Micronesia - Visitor Information (1999-01-26)
+# http://www.fsmgov.org/info/clocks.html
 # that Truk and Yap are UTC+10, and Ponape and Kosrae are UTC+11.
 # We don't know when Kosrae switched from UTC+12; assume January 1 for now.
 
@@ -1398,27 +1617,34 @@
 # Sacramento but it was changed a couple of years ago.
 
 
-# Samoa
+# (Western) Samoa and American Samoa
 
 # Howse writes (p 153, citing p 10 of the 1883-11-18 New York Herald)
 # that in 1879 the King of Samoa decided to change
-# ``the date in his kingdom from the Antipodean to the American system,
-# ordaining -- by a masterpiece of diplomatic flattery -- that
-# the Fourth of July should be celebrated twice in that year.''
-
+# "the date in his kingdom from the Antipodean to the American system,
+# ordaining - by a masterpiece of diplomatic flattery - that
+# the Fourth of July should be celebrated twice in that year."
+
+# Although Shanks & Pottenger says they both switched to UTC-11:30
+# in 1911, and to UTC-11 in 1950. many earlier sources give UTC-11
+# for American Samoa, e.g., the US National Bureau of Standards
+# circular "Standard Time Throughout the World", 1932.
+# Assume American Samoa switched to UTC-11 in 1911, not 1950,
+# and that after 1950 they agreed until (western) Samoa skipped a
+# day in 2011.  Assume also that the Samoas follow the US and New
+# Zealand's "ST"/"DT" style of daylight-saving abbreviations.
 
 # Tonga
 
 # From Paul Eggert (1996-01-22):
-# Today's _Wall Street Journal_ (p 1) reports that ``Tonga has been plotting
-# to sneak ahead of [New Zealanders] by introducing daylight-saving time.''
+# Today's _Wall Street Journal_ (p 1) reports that "Tonga has been plotting
+# to sneak ahead of [New Zealanders] by introducing daylight-saving time."
 # Since Kiribati has moved the Date Line it's not clear what Tonga will do.
 
 # Don Mundell writes in the 1997-02-20 Tonga Chronicle
-# 
-# How Tonga became `The Land where Time Begins'
-# :
-
+# How Tonga became 'The Land where Time Begins':
+# http://www.tongatapu.net.to/tonga/homeland/timebegins.htm
+#
 # Until 1941 Tonga maintained a standard time 50 minutes ahead of NZST
 # 12 hours and 20 minutes ahead of GMT.  When New Zealand adjusted its
 # standard time in 1940s, Tonga had the choice of subtracting from its
@@ -1426,8 +1652,8 @@
 # advancing its time to maintain the differential of 13 degrees
 # (approximately 50 minutes ahead of New Zealand time).
 #
-# Because His Majesty King Taufa'ahau Tupou IV, then Crown Prince
-# Tungi, preferred to ensure Tonga's title as the land where time
+# Because His Majesty King Tāufaʻāhau Tupou IV, then Crown Prince
+# Tungī, preferred to ensure Tonga's title as the land where time
 # begins, the Legislative Assembly approved the latter change.
 #
 # But some of the older, more conservative members from the outer
@@ -1443,7 +1669,7 @@
 # Shanks & Pottenger say the transition was on 1968-10-01; go with Mundell.
 
 # From Eric Ulevik (1999-05-03):
-# Tonga's director of tourism, who is also secretary of the National Millenium
+# Tonga's director of tourism, who is also secretary of the National Millennium
 # Committee, has a plan to get Tonga back in front.
 # He has proposed a one-off move to tropical daylight saving for Tonga from
 # October to March, which has won approval in principle from the Tongan
@@ -1453,9 +1679,7 @@
 # * Tonga will introduce DST in November
 #
 # I was given this link by John Letts:
-# 
 # http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm
-# 
 #
 # I have not been able to find exact dates for the transition in November
 # yet. By reading this article it seems like Fiji will be 14 hours ahead
@@ -1463,9 +1687,7 @@
 # (12 + 1 hour DST).
 
 # From Arthur David Olson (1999-09-20):
-# According to 
-# http://www.tongaonline.com/news/sept1799.html
-# :
+# According to :
 # "Daylight Savings Time will take effect on Oct. 2 through April 15, 2000
 # and annually thereafter from the first Saturday in October through the
 # third Saturday of April.  Under the system approved by Privy Council on
@@ -1483,7 +1705,7 @@
 # instead of the original reported date April 16. Unfortunately, the article
 # is no longer available on the site, and I did not make a copy of the
 # text, and I have forgotten to report it here.
-# (Original URL was: http://www.tongaonline.com/news/march162000.htm )
+# (Original URL was )
 
 # From Rives McDow (2000-12-01):
 # Tonga is observing DST as of 2000-11-04 and will stop on 2001-01-27.
@@ -1503,7 +1725,7 @@
 # From Vernice Anderson, Personal Secretary to Philip Jessup,
 # US Ambassador At Large (oral history interview, 1971-02-02):
 #
-# Saturday, the 14th [of October, 1950] -- ...  The time was all the
+# Saturday, the 14th [of October, 1950] - ...  The time was all the
 # more confusing at that point, because we had crossed the
 # International Date Line, thus getting two Sundays.  Furthermore, we
 # discovered that Wake Island had two hours of daylight saving time
@@ -1548,7 +1770,7 @@
 # on the high seas.  Whenever a ship was within the territorial waters of any
 # nation it would use that nation's standard time.  The captain was permitted
 # to change his ship's clocks at a time of his choice following his ship's
-# entry into another zone time--he often chose midnight.  These zones were
+# entry into another zone time - he often chose midnight.  These zones were
 # adopted by all major fleets between 1920 and 1925 but not by many
 # independent merchant ships until World War II.
 
@@ -1556,6 +1778,6 @@
 # (2005-03-20):
 #
 # The American Practical Navigator (2002)
-# 
+# http://pollux.nss.nima.mil/pubs/pubs_j_apn_sections.html?rid=187
 # talks only about the 180-degree meridian with respect to ships in
 # international waters; it ignores the international date line.
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/backward openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/backward
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/backward	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/backward	2015-01-20 02:20:42.000000000 +0000
@@ -1,35 +1,35 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
 # This file provides links between current names for time zones
 # and their old names.  Many names changed in late 1993.
 
+# Link	TARGET			LINK-NAME
 Link	Africa/Asmara		Africa/Asmera
-Link	Africa/Bamako		Africa/Timbuktu
+Link	Africa/Abidjan		Africa/Timbuktu
 Link	America/Argentina/Catamarca	America/Argentina/ComodRivadavia
 Link	America/Adak		America/Atka
 Link	America/Argentina/Buenos_Aires	America/Buenos_Aires
@@ -45,15 +45,20 @@
 Link	America/Argentina/Mendoza	America/Mendoza
 Link	America/Rio_Branco	America/Porto_Acre
 Link	America/Argentina/Cordoba	America/Rosario
-Link	America/St_Thomas	America/Virgin
+Link	America/Denver		America/Shiprock
+Link	America/Port_of_Spain	America/Virgin
+Link	Pacific/Auckland	Antarctica/South_Pole
 Link	Asia/Ashgabat		Asia/Ashkhabad
-Link	Asia/Chongqing		Asia/Chungking
+Link	Asia/Kolkata		Asia/Calcutta
+Link	Asia/Shanghai		Asia/Chongqing
+Link	Asia/Shanghai		Asia/Chungking
 Link	Asia/Dhaka		Asia/Dacca
+Link	Asia/Shanghai		Asia/Harbin
+Link	Asia/Urumqi		Asia/Kashgar
 Link	Asia/Kathmandu		Asia/Katmandu
-Link	Asia/Kolkata		Asia/Calcutta
 Link	Asia/Macau		Asia/Macao
-Link	Asia/Jerusalem		Asia/Tel_Aviv
 Link	Asia/Ho_Chi_Minh	Asia/Saigon
+Link	Asia/Jerusalem		Asia/Tel_Aviv
 Link	Asia/Thimphu		Asia/Thimbu
 Link	Asia/Makassar		Asia/Ujung_Pandang
 Link	Asia/Ulaanbaatar	Asia/Ulan_Bator
@@ -111,8 +116,10 @@
 Link	Pacific/Chatham		NZ-CHAT
 Link	America/Denver		Navajo
 Link	Asia/Shanghai		PRC
+Link	Pacific/Pohnpei		Pacific/Ponape
 Link	Pacific/Pago_Pago	Pacific/Samoa
-Link	Pacific/Truk		Pacific/Yap
+Link	Pacific/Chuuk		Pacific/Truk
+Link	Pacific/Chuuk		Pacific/Yap
 Link	Europe/Warsaw		Poland
 Link	Europe/Lisbon		Portugal
 Link	Asia/Taipei		ROC
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/etcetera openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/etcetera
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/etcetera	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/etcetera	2015-01-20 02:20:42.000000000 +0000
@@ -1,27 +1,26 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
@@ -37,7 +36,7 @@
 Zone	Etc/UCT		0	-	UCT
 
 # The following link uses older naming conventions,
-# but it belongs here, not in the file `backward',
+# but it belongs here, not in the file 'backward',
 # as functions like gmtime load the "GMT" file to handle leap seconds properly.
 # We want this to work even on installations that omit the other older names.
 Link	Etc/GMT				GMT
@@ -54,12 +53,11 @@
 # even though this is the opposite of what many people expect.
 # POSIX has positive signs west of Greenwich, but many people expect
 # positive signs east of Greenwich.  For example, TZ='Etc/GMT+4' uses
-# the abbreviation "GMT+4" and corresponds to 4 hours behind UTC
+# the abbreviation "GMT+4" and corresponds to 4 hours behind UT
 # (i.e. west of Greenwich) even though many people would expect it to
-# mean 4 hours ahead of UTC (i.e. east of Greenwich).
+# mean 4 hours ahead of UT (i.e. east of Greenwich).
 #
-# In the draft 5 of POSIX 1003.1-200x, the angle bracket notation
-# (which is not yet supported by the tz code) allows for
+# In the draft 5 of POSIX 1003.1-200x, the angle bracket notation allows for
 # TZ='+4'; if you want time zone abbreviations conforming to
 # ISO 8601 you can use TZ='<-0400>+4'.  Thus the commonly-expected
 # offset is kept within the angle bracket (and is used for display)
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/europe openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/europe
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/europe	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/europe	2015-01-20 02:20:42.000000000 +0000
@@ -1,44 +1,50 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
-# tz@elsie.nci.nih.gov for general use in the future).
+# tz@iana.org for general use in the future).  For more, please see
+# the file CONTRIBUTING in the tz distribution.
 
-# From Paul Eggert (2006-03-22):
-# A good source for time zone historical data outside the U.S. is
+# From Paul Eggert (2014-10-31):
+#
+# Unless otherwise specified, the source for data through 1990 is:
 # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
 # San Diego: ACS Publications, Inc. (2003).
+# Unfortunately this book contains many errors and cites no sources.
 #
 # Gwillim Law writes that a good source
 # for recent time zone data is the International Air Transport
 # Association's Standard Schedules Information Manual (IATA SSIM),
 # published semiannually.  Law sent in several helpful summaries
-# of the IATA's data after 1990.
+# of the IATA's data after 1990.  Except where otherwise noted,
+# IATA SSIM is the source for entries after 1990.
+#
+# A reliable and entertaining source about time zones is
+# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
 #
 # Except where otherwise noted, Shanks & Pottenger is the source for
 # entries through 1991, and IATA SSIM is the source for entries afterwards.
@@ -49,17 +55,33 @@
 #	Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated),
 #	which I found in the UCLA library.
 #
-#	
 #	William Willett, The Waste of Daylight, 19th edition
-#	 (1914-03)
+#	
+#	[PDF] (1914-03)
+#
+#	Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
+#	.  He writes:
+#	"It is requested that corrections and additions to these tables
+#	may be sent to Mr. John Milne, Royal Geographical Society,
+#	Savile Row, London."  Nowadays please email them to tz@iana.org.
+#
+#	Byalokoz EL. New Counting of Time in Russia since July 1, 1919.
+#	This Russian-language source was consulted by Vladimir Karpinsky; see
+#	http://mm.icann.org/pipermail/tz/2014-August/021320.html
+#	The full Russian citation is:
+#	Бялокоз, Евгений Людвигович. Новый счет времени в течении суток
+#	введенный декретом Совета народных комиссаров для всей России с 1-го
+#	июля 1919 г. / Изд. 2-е Междуведомственной комиссии. - Петроград:
+#	Десятая гос. тип., 1919.
+#	http://resolver.gpntb.ru/purl?docushare/dsweb/Get/Resource-2011/Byalokoz__E.L.__Novyy__schet__vremeni__v__techenie__sutok__izd__2(1).pdf
 #
-#	Brazil's Departamento Servico da Hora (DSH),
-#	
+#	Brazil's Divisão Serviço da Hora (DSHO),
 #	History of Summer Time
-#	 (1998-09-21, in Portuguese)
+#	
+#	(1998-09-21, in Portuguese)
 
 #
-# I invented the abbreviations marked `*' in the following table;
+# I invented the abbreviations marked '*' in the following table;
 # the rest are from earlier versions of this file, or from other sources.
 # Corrections are welcome!
 #                   std dst  2dst
@@ -72,13 +94,12 @@
 #        0:00       WET WEST WEMT Western Europe
 #        0:19:32.13 AMT NST       Amsterdam, Netherlands Summer (1835-1937)*
 #        0:20       NET NEST      Netherlands (1937-1940)*
+#        1:00       BST           British Standard (1968-1971)
 #        1:00       CET CEST CEMT Central Europe
 #        1:00:14    SET           Swedish (1879-1899)*
 #        2:00       EET EEST      Eastern Europe
-#        3:00       MSK MSD       Moscow
-#
-# A reliable and entertaining source about time zones, especially in Britain,
-# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
+#        3:00       FET           Further-eastern Europe (2011-2014)*
+#        3:00       MSK MSD  MSM* Moscow
 
 # From Peter Ilieve (1994-12-04),
 # The original six [EU members]: Belgium, France, (West) Germany, Italy,
@@ -113,7 +134,7 @@
 # and a sketch map showing some of the sightlines involved. One paragraph
 # of the text said:
 #
-# `An old stone obelisk marking a forgotten terrestrial meridian stands
+# 'An old stone obelisk marking a forgotten terrestrial meridian stands
 # beside the river at Kew. In the 18th century, before time and longitude
 # was standardised by the Royal Observatory in Greenwich, scholars observed
 # this stone and the movement of stars from Kew Observatory nearby. They
@@ -122,7 +143,7 @@
 # along the towpath within a few yards of it.'
 #
 # I have a one inch to one mile map of London and my estimate of the stone's
-# position is 51 deg. 28' 30" N, 0 deg. 18' 45" W. The longitude should
+# position is 51 degrees 28' 30" N, 0 degrees 18' 45" W. The longitude should
 # be within about +-2". The Ordnance Survey grid reference is TQ172761.
 #
 # [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.]
@@ -154,10 +175,24 @@
 # transition date for London, namely 1847-12-01.  We don't know as much
 # about Dublin, so we use 1880-08-02, the legal transition time.
 
-# From Paul Eggert (2003-09-27):
-# Summer Time was first seriously proposed by William Willett (1857-1915),
+# From Paul Eggert (2014-07-19):
+# The ancients had no need for daylight saving, as they kept time
+# informally or via hours whose length depended on the time of year.
+# Daylight saving time in its modern sense was invented by the
+# New Zealand entomologist George Vernon Hudson (1867-1946),
+# whose day job as a postal clerk led him to value
+# after-hours daylight in which to pursue his research.
+# In 1895 he presented a paper to the Wellington Philosophical Society
+# that proposed a two-hour daylight-saving shift.  See:
+# Hudson GV. On seasonal time-adjustment in countries south of lat. 30 deg.
+# Transactions and Proceedings of the New Zealand Institute. 1895;28:734
+# http://rsnz.natlib.govt.nz/volume/rsnz_28/rsnz_28_00_006110.html
+# Although some interest was expressed in New Zealand, his proposal
+# did not find its way into law and eventually it was almost forgotten.
+#
+# In England, DST was independently reinvented by William Willett (1857-1915),
 # a London builder and member of the Royal Astronomical Society
-# who circulated a pamphlet ``The Waste of Daylight'' (1907)
+# who circulated a pamphlet "The Waste of Daylight" (1907)
 # that proposed advancing clocks 20 minutes on each of four Sundays in April,
 # and retarding them by the same amount on four Sundays in September.
 # A bill was drafted in 1909 and introduced in Parliament several times,
@@ -168,7 +203,7 @@
 # A monument to Willett was unveiled on 1927-05-21, in an open space in
 # a 45-acre wood near Chislehurst, Kent that was purchased by popular
 # subscription and open to the public.  On the south face of the monolith,
-# designed by G. W. Miller, is the the William Willett Memorial Sundial,
+# designed by G. W. Miller, is the William Willett Memorial Sundial,
 # which is permanently set to Summer Time.
 
 # From Winston Churchill (1934-04-28):
@@ -177,18 +212,17 @@
 # between 160 and 170 hours more daylight leisure, to a war which
 # plunged Europe into darkness for four years, and shook the
 # foundations of civilization throughout the world.
-#	-- 
-#	"A Silent Toast to William Willett", Pictorial Weekly
-#	
+#	-- "A Silent Toast to William Willett", Pictorial Weekly;
+#	republished in Finest Hour (Spring 2002) 1(114):26
+#	http://www.winstonchurchill.org/images/finesthour/Vol.01%20No.114.pdf
 
 # From Paul Eggert (1996-09-03):
-# The OED Supplement says that the English originally said ``Daylight Saving''
+# The OED Supplement says that the English originally said "Daylight Saving"
 # when they were debating the adoption of DST in 1908; but by 1916 this
 # term appears only in quotes taken from DST's opponents, whereas the
-# proponents (who eventually won the argument) are quoted as using ``Summer''.
+# proponents (who eventually won the argument) are quoted as using "Summer".
 
 # From Arthur David Olson (1989-01-19):
-#
 # A source at the British Information Office in New York avers that it's
 # known as "British" Summer Time in all parts of the United Kingdom.
 
@@ -215,8 +249,8 @@
 # official designation; the reply of the 21st was that there wasn't
 # but he couldn't think of anything better than the "Double British
 # Summer Time" that the BBC had been using informally.
-# http://student.cusu.cam.ac.uk/~jsm28/british-time/bbc-19410418.png
-# http://student.cusu.cam.ac.uk/~jsm28/british-time/ho-19410421.png
+# http://www.polyomino.org.uk/british-time/bbc-19410418.png
+# http://www.polyomino.org.uk/british-time/ho-19410421.png
 
 # From Sir Alexander Maxwell in the above-mentioned letter (1941-04-21):
 # [N]o official designation has as far as I know been adopted for the time
@@ -225,25 +259,22 @@
 # which could not be said to run counter to any official description.
 
 # From Paul Eggert (2000-10-02):
-# Howse writes (p 157) `DBST' too, but `BDST' seems to have been common
+# Howse writes (p 157) 'DBST' too, but 'BDST' seems to have been common
 # and follows the more usual convention of putting the location name first,
-# so we use `BDST'.
+# so we use 'BDST'.
 
 # Peter Ilieve (1998-04-19) described at length
 # the history of summer time legislation in the United Kingdom.
 # Since 1998 Joseph S. Myers has been updating
 # and extending this list, which can be found in
-# 
-# History of legal time in Britain
-# 
+# http://www.polyomino.org.uk/british-time/
 
 # From Joseph S. Myers (1998-01-06):
 #
 # The legal time in the UK outside of summer time is definitely GMT, not UTC;
 # see Lord Tanlaw's speech
-# 
-# (Lords Hansard 11 June 1997 columns 964 to 976)
-# .
+# http://www.publications.parliament.uk/pa/ld199798/ldhansrd/vo970611/text/70611-10.htm#70611-10_head0
+# (Lords Hansard 11 June 1997 columns 964 to 976).
 
 # From Paul Eggert (2006-03-22):
 #
@@ -282,9 +313,17 @@
 #   "Timeball on the ballast office is down.  Dunsink time."
 #   -- James Joyce, Ulysses
 
+# "Countess Markievicz ... claimed that the [1916] abolition of Dublin Mean Time
+# was among various actions undertaken by the 'English' government that
+# would 'put the whole country into the SF (Sinn Féin) camp'.  She claimed
+# Irish 'public feeling (was) outraged by forcing of English time on us'."
+# -- Parsons M. Dublin lost its time zone - and 25 minutes - after 1916 Rising.
+# Irish Times 2014-10-27.
+# http://www.irishtimes.com/news/politics/dublin-lost-its-time-zone-and-25-minutes-after-1916-rising-1.1977411
+
 # From Joseph S. Myers (2005-01-26):
-# Irish laws are available online at www.irishstatutebook.ie.  These include
-# various relating to legal time, for example:
+# Irish laws are available online at .
+# These include various relating to legal time, for example:
 #
 # ZZA13Y1923.html ZZA12Y1924.html ZZA8Y1925.html ZZSIV20PG1267.html
 #
@@ -442,27 +481,31 @@
 Rule	GB-Eire 1990	1995	-	Oct	Sun>=22	1:00u	0	GMT
 # Summer Time Order 1997 (S.I. 1997/2982)
 # See EU for rules starting in 1996.
+#
+# Use Europe/London for Jersey, Guernsey, and the Isle of Man.
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/London	-0:01:15 -	LMT	1847 Dec  1 0:00s
+Zone	Europe/London	-0:01:15 -	LMT	1847 Dec  1  0:00s
 			 0:00	GB-Eire	%s	1968 Oct 27
-			 1:00	-	BST	1971 Oct 31 2:00u
+			 1:00	-	BST	1971 Oct 31  2:00u
 			 0:00	GB-Eire	%s	1996
 			 0:00	EU	GMT/BST
 Link	Europe/London	Europe/Jersey
 Link	Europe/London	Europe/Guernsey
 Link	Europe/London	Europe/Isle_of_Man
+
+# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Dublin	-0:25:00 -	LMT	1880 Aug  2
-			-0:25:21 -	DMT	1916 May 21 2:00
-			-0:25:21 1:00	IST	1916 Oct  1 2:00s
+			-0:25:21 -	DMT	1916 May 21  2:00
+			-0:25:21 1:00	IST	1916 Oct  1  2:00s
 			 0:00	GB-Eire	%s	1921 Dec  6 # independence
-			 0:00	GB-Eire	GMT/IST	1940 Feb 25 2:00
-			 0:00	1:00	IST	1946 Oct  6 2:00
-			 0:00	-	GMT	1947 Mar 16 2:00
-			 0:00	1:00	IST	1947 Nov  2 2:00
-			 0:00	-	GMT	1948 Apr 18 2:00
+			 0:00	GB-Eire	GMT/IST	1940 Feb 25  2:00
+			 0:00	1:00	IST	1946 Oct  6  2:00
+			 0:00	-	GMT	1947 Mar 16  2:00
+			 0:00	1:00	IST	1947 Nov  2  2:00
+			 0:00	-	GMT	1948 Apr 18  2:00
 			 0:00	GB-Eire	GMT/IST	1968 Oct 27
-			 1:00	-	IST	1971 Oct 31 2:00u
+			 1:00	-	IST	1971 Oct 31  2:00u
 			 0:00	GB-Eire	GMT/IST	1996
 			 0:00	EU	GMT/IST
 
@@ -481,10 +524,9 @@
 Rule	EU	1981	max	-	Mar	lastSun	 1:00u	1:00	S
 Rule	EU	1996	max	-	Oct	lastSun	 1:00u	0	-
 # The most recent directive covers the years starting in 2002.  See:
-# 
 # Directive 2000/84/EC of the European Parliament and of the Council
 # of 19 January 2001 on summer-time arrangements.
-# 
+# http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:32000L0084:EN:NOT
 
 # W-Eur differs from EU only in that W-Eur uses standard time.
 Rule	W-Eur	1977	1980	-	Apr	Sun>=1	 1:00s	1:00	S
@@ -507,18 +549,18 @@
 Rule	C-Eur	1944	1945	-	Apr	Mon>=1	 2:00s	1:00	S
 # Whitman gives 1944 Oct 7; go with Shanks & Pottenger.
 Rule	C-Eur	1944	only	-	Oct	 2	 2:00s	0	-
-# From Jesper Norgaard Welen (2008-07-13):
+# From Jesper Nørgaard Welen (2008-07-13):
 #
 # I found what is probably a typo of 2:00 which should perhaps be 2:00s
 # in the C-Eur rule from tz database version 2008d (this part was
-# corrected in version 2008d). The circumstancial evidence is simply the
+# corrected in version 2008d). The circumstantial evidence is simply the
 # tz database itself, as seen below:
 #
 # Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15  0:01
 #    0:00 France WE%sT 1945 Sep 16  3:00
 #
 # Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
-#    0:00 France WE%sT 1945 Sep 16 3:00
+#    0:00 France WE%sT 1945 Sep 16  3:00
 #
 # Zone Europe/Belgrade 1:22:00 - LMT 1884
 #    1:00 1:00 CEST 1945 Sep 16  2:00s
@@ -534,7 +576,7 @@
 # It seems that Paris, Monaco, Rule France, Rule Belgium all agree on
 # 2:00 standard time, e.g. 3:00 local time.  However there are no
 # countries that use C-Eur rules in September 1945, so the only items
-# affected are apparently these ficticious zones that translates acronyms
+# affected are apparently these fictitious zones that translate acronyms
 # CET and MET:
 #
 # Zone CET  1:00 C-Eur CE%sT
@@ -562,16 +604,16 @@
 Rule	E-Eur	1996	max	-	Oct	lastSun	 0:00	0	-
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Russia	1917	only	-	Jul	 1	23:00	1:00	MST	# Moscow Summer Time
-Rule	Russia	1917	only	-	Dec	28	 0:00	0	MMT	# Moscow Mean Time
-Rule	Russia	1918	only	-	May	31	22:00	2:00	MDST	# Moscow Double Summer Time
+Rule	Russia	1917	only	-	Jul	 1	23:00	1:00	MST  # Moscow Summer Time
+Rule	Russia	1917	only	-	Dec	28	 0:00	0	MMT  # Moscow Mean Time
+Rule	Russia	1918	only	-	May	31	22:00	2:00	MDST # Moscow Double Summer Time
 Rule	Russia	1918	only	-	Sep	16	 1:00	1:00	MST
 Rule	Russia	1919	only	-	May	31	23:00	2:00	MDST
-Rule	Russia	1919	only	-	Jul	 1	 2:00	1:00	S
-Rule	Russia	1919	only	-	Aug	16	 0:00	0	-
-Rule	Russia	1921	only	-	Feb	14	23:00	1:00	S
-Rule	Russia	1921	only	-	Mar	20	23:00	2:00	M # Midsummer
-Rule	Russia	1921	only	-	Sep	 1	 0:00	1:00	S
+Rule	Russia	1919	only	-	Jul	 1	 2:00	1:00	MSD
+Rule	Russia	1919	only	-	Aug	16	 0:00	0	MSK
+Rule	Russia	1921	only	-	Feb	14	23:00	1:00	MSD
+Rule	Russia	1921	only	-	Mar	20	23:00	2:00	MSM  # Midsummer
+Rule	Russia	1921	only	-	Sep	 1	 0:00	1:00	MSD
 Rule	Russia	1921	only	-	Oct	 1	 0:00	0	-
 # Act No.925 of the Council of Ministers of the USSR (1980-10-24):
 Rule	Russia	1981	1984	-	Apr	 1	 0:00	1:00	S
@@ -583,9 +625,25 @@
 #
 Rule	Russia	1992	only	-	Mar	lastSat	 23:00	1:00	S
 Rule	Russia	1992	only	-	Sep	lastSat	 23:00	0	-
-Rule	Russia	1993	max	-	Mar	lastSun	 2:00s	1:00	S
+Rule	Russia	1993	2010	-	Mar	lastSun	 2:00s	1:00	S
 Rule	Russia	1993	1995	-	Sep	lastSun	 2:00s	0	-
-Rule	Russia	1996	max	-	Oct	lastSun	 2:00s	0	-
+Rule	Russia	1996	2010	-	Oct	lastSun	 2:00s	0	-
+# As described below, Russia's 2014 change affects Zone data, not Rule data.
+
+# From Alexander Krivenyshev (2011-06-14):
+# According to Kremlin press service, Russian President Dmitry Medvedev
+# signed a federal law "On calculation of time" on June 9, 2011.
+# According to the law Russia is abolishing daylight saving time.
+#
+# Medvedev signed a law "On the Calculation of Time" (in russian):
+# http://bmockbe.ru/events/?ID=7583
+#
+# Medvedev signed a law on the calculation of the time (in russian):
+# http://www.regnum.ru/news/polit/1413906.html
+
+# From Arthur David Olson (2011-06-15):
+# Take "abolishing daylight saving time" to mean that time is now considered
+# to be standard.
 
 # These are for backward compatibility with older versions.
 
@@ -601,10 +659,10 @@
 # From Markus Kuhn (1996-07-12):
 # The official German names ... are
 #
-#	Mitteleuropaeische Zeit (MEZ)         = UTC+01:00
-#	Mitteleuropaeische Sommerzeit (MESZ)  = UTC+02:00
+#	Mitteleuropäische Zeit (MEZ)         = UTC+01:00
+#	Mitteleuropäische Sommerzeit (MESZ)  = UTC+02:00
 #
-# as defined in the German Time Act (Gesetz ueber die Zeitbestimmung (ZeitG),
+# as defined in the German Time Act (Gesetz über die Zeitbestimmung (ZeitG),
 # 1978-07-25, Bundesgesetzblatt, Jahrgang 1978, Teil I, S. 1110-1111)....
 # I wrote ... to the German Federal Physical-Technical Institution
 #
@@ -659,11 +717,13 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Andorra	0:06:04 -	LMT	1901
 			0:00	-	WET	1946 Sep 30
-			1:00	-	CET	1985 Mar 31 2:00
+			1:00	-	CET	1985 Mar 31  2:00
 			1:00	EU	CE%sT
 
 # Austria
 
+# Milne says Vienna time was 1:05:21.
+
 # From Paul Eggert (2006-03-22): Shanks & Pottenger give 1918-06-16 and
 # 1945-11-18, but the Austrian Federal Office of Metrology and
 # Surveying (BEV) gives 1918-09-16 and for Vienna gives the "alleged"
@@ -681,35 +741,52 @@
 Rule	Austria	1980	only	-	Apr	 6	0:00	1:00	S
 Rule	Austria	1980	only	-	Sep	28	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Vienna	1:05:20 -	LMT	1893 Apr
+Zone	Europe/Vienna	1:05:21 -	LMT	1893 Apr
 			1:00	C-Eur	CE%sT	1920
-			1:00	Austria	CE%sT	1940 Apr  1 2:00s
-			1:00	C-Eur	CE%sT	1945 Apr  2 2:00s
-			1:00	1:00	CEST	1945 Apr 12 2:00s
+			1:00	Austria	CE%sT	1940 Apr  1  2:00s
+			1:00	C-Eur	CE%sT	1945 Apr  2  2:00s
+			1:00	1:00	CEST	1945 Apr 12  2:00s
 			1:00	-	CET	1946
 			1:00	Austria	CE%sT	1981
 			1:00	EU	CE%sT
 
 # Belarus
+# From Yauhen Kharuzhy (2011-09-16):
+# By latest Belarus government act Europe/Minsk timezone was changed to
+# GMT+3 without DST (was GMT+2 with DST).
+#
+# Sources (Russian language):
+# http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html
+# http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/
+# http://news.tut.by/society/250578.html
+#
+# From Alexander Bokovoy (2014-10-09):
+# Belarussian government decided against changing to winter time....
+# http://eng.belta.by/all_news/society/Belarus-decides-against-adjusting-time-in-Russias-wake_i_76335.html
+# From Paul Eggert (2014-10-08):
+# Hence Belarus can share time zone abbreviations with Moscow again.
+#
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Minsk	1:50:16 -	LMT	1880
-			1:50	-	MMT	1924 May 2 # Minsk Mean Time
+			1:50	-	MMT	1924 May  2 # Minsk Mean Time
 			2:00	-	EET	1930 Jun 21
 			3:00	-	MSK	1941 Jun 28
 			1:00	C-Eur	CE%sT	1944 Jul  3
 			3:00	Russia	MSK/MSD	1990
-			3:00	-	MSK	1991 Mar 31 2:00s
-			2:00	1:00	EEST	1991 Sep 29 2:00s
-			2:00	-	EET	1992 Mar 29 0:00s
-			2:00	1:00	EEST	1992 Sep 27 0:00s
-			2:00	Russia	EE%sT
+			3:00	-	MSK	1991 Mar 31  2:00s
+			2:00	1:00	EEST	1991 Sep 29  2:00s
+			2:00	-	EET	1992 Mar 29  0:00s
+			2:00	1:00	EEST	1992 Sep 27  0:00s
+			2:00	Russia	EE%sT	2011 Mar 27  2:00s
+			3:00	-	FET	2014 Oct 26  1:00s
+			3:00	-	MSK
 
 # Belgium
 #
 # From Paul Eggert (1997-07-02):
 # Entries from 1918 through 1991 are taken from:
 #	Annuaire de L'Observatoire Royal de Belgique,
-#	Avenue Circulaire, 3, B-1180 BRUXELLES, CLVIIe annee, 1991
+#	Avenue Circulaire, 3, B-1180 BRUXELLES, CLVIIe année, 1991
 #	(Imprimerie HAYEZ, s.p.r.l., Rue Fin, 4, 1080 BRUXELLES, MCMXC),
 #	pp 8-9.
 # LMT before 1892 was 0:17:30, according to the official journal of Belgium:
@@ -759,7 +836,7 @@
 Rule	Belgium	1946	only	-	Oct	 7	 2:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Brussels	0:17:30 -	LMT	1880
-			0:17:30	-	BMT	1892 May  1 12:00 # Brussels MT
+			0:17:30	-	BMT	1892 May  1 12:00  # Brussels MT
 			0:00	-	WET	1914 Nov  8
 			1:00	-	CET	1916 May  1  0:00
 			1:00	C-Eur	CE%sT	1918 Nov 11 11:00u
@@ -769,14 +846,14 @@
 			1:00	EU	CE%sT
 
 # Bosnia and Herzegovina
-# see Serbia
+# See Europe/Belgrade.
 
 # Bulgaria
 #
 # From Plamen Simenov via Steffen Thorsen (1999-09-09):
 # A document of Government of Bulgaria (No.94/1997) says:
-# EET --> EETDST is in 03:00 Local time in last Sunday of March ...
-# EETDST --> EET is in 04:00 Local time in last Sunday of October
+# EET -> EETDST is in 03:00 Local time in last Sunday of March ...
+# EETDST -> EET is in 04:00 Local time in last Sunday of October
 #
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Bulg	1979	only	-	Mar	31	23:00	1:00	S
@@ -789,7 +866,7 @@
 			1:56:56	-	IMT	1894 Nov 30 # Istanbul MT?
 			2:00	-	EET	1942 Nov  2  3:00
 			1:00	C-Eur	CE%sT	1945
-			1:00	-	CET	1945 Apr 2 3:00
+			1:00	-	CET	1945 Apr  2  3:00
 			2:00	-	EET	1979 Mar 31 23:00
 			2:00	Bulg	EE%sT	1982 Sep 26  2:00
 			2:00	C-Eur	EE%sT	1991
@@ -797,10 +874,10 @@
 			2:00	EU	EE%sT
 
 # Croatia
-# see Serbia
+# See Europe/Belgrade.
 
 # Cyprus
-# Please see the `asia' file for Asia/Nicosia.
+# Please see the 'asia' file for Asia/Nicosia.
 
 # Czech Republic
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -813,14 +890,15 @@
 Rule	Czech	1949	only	-	Apr	 9	2:00s	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Prague	0:57:44 -	LMT	1850
-			0:57:44	-	PMT	1891 Oct     # Prague Mean Time
-			1:00	C-Eur	CE%sT	1944 Sep 17 2:00s
+			0:57:44	-	PMT	1891 Oct    # Prague Mean Time
+			1:00	C-Eur	CE%sT	1944 Sep 17  2:00s
 			1:00	Czech	CE%sT	1979
 			1:00	EU	CE%sT
+# Use Europe/Prague also for Slovakia.
 
 # Denmark, Faroe Islands, and Greenland
 
-# From Jesper Norgaard Welen (2005-04-26):
+# From Jesper Nørgaard Welen (2005-04-26):
 # http://www.hum.aau.dk/~poe/tid/tine/DanskTid.htm says that the law
 # [introducing standard time] was in effect from 1894-01-01....
 # The page http://www.retsinfo.dk/_GETDOCI_/ACCN/A18930008330-REGL
@@ -830,7 +908,7 @@
 # http://www.retsinfo.dk/_GETDOCI_/ACCN/A19722110030-REGL
 #
 # This provoked a new law from 1974 to make possible summer time changes
-# in subsequenet decrees with the law
+# in subsequent decrees with the law
 # http://www.retsinfo.dk/_GETDOCI_/ACCN/A19740022330-REGL
 #
 # It seems however that no decree was set forward until 1980.  I have
@@ -845,7 +923,7 @@
 # was suspended on that night):
 # http://www.retsinfo.dk/_GETDOCI_/ACCN/C19801120554-REGL
 
-# From Jesper Norgaard Welen (2005-06-11):
+# From Jesper Nørgaard Welen (2005-06-11):
 # The Herning Folkeblad (1980-09-26) reported that the night between
 # Saturday and Sunday the clock is set back from three to two.
 
@@ -869,11 +947,11 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Copenhagen	 0:50:20 -	LMT	1890
 			 0:50:20 -	CMT	1894 Jan  1 # Copenhagen MT
-			 1:00	Denmark	CE%sT	1942 Nov  2 2:00s
-			 1:00	C-Eur	CE%sT	1945 Apr  2 2:00
+			 1:00	Denmark	CE%sT	1942 Nov  2  2:00s
+			 1:00	C-Eur	CE%sT	1945 Apr  2  2:00
 			 1:00	Denmark	CE%sT	1980
 			 1:00	EU	CE%sT
-Zone Atlantic/Faroe	-0:27:04 -	LMT	1908 Jan 11	# Torshavn
+Zone Atlantic/Faroe	-0:27:04 -	LMT	1908 Jan 11 # Tórshavn
 			 0:00	-	WET	1981
 			 0:00	EU	WE%sT
 #
@@ -885,11 +963,11 @@
 # From Paul Eggert (2006-03-22):
 # Greenland joined the EU as part of Denmark, obtained home rule on 1979-05-01,
 # and left the EU on 1985-02-01.  It therefore should have been using EU
-# rules at least through 1984.  Shanks & Pottenger say Scoresbysund and Godthab
+# rules at least through 1984.  Shanks & Pottenger say Scoresbysund and Godthåb
 # used C-Eur rules after 1980, but IATA SSIM (1991/1996) says they use EU
 # rules since at least 1991.  Assume EU rules since 1980.
 
-# From Gwillin Law (2001-06-06), citing
+# From Gwillim Law (2001-06-06), citing
 #  (2001-03-15),
 # and with translations corrected by Steffen Thorsen:
 #
@@ -924,16 +1002,16 @@
 # DPC research station at Zackenberg.
 #
 # Scoresbysund and two small villages nearby keep time UTC-1 and use
-# the same daylight savings time period as in West Greenland (Godthab).
+# the same daylight savings time period as in West Greenland (Godthåb).
 #
-# The rest of Greenland, including Godthab (this area, although it
+# The rest of Greenland, including Godthåb (this area, although it
 # includes central Greenland, is known as west Greenland), keeps time
 # UTC-3, with daylight savings methods according to European rules.
 #
 # It is common procedure to use UTC 0 in the wilderness of East and
 # North Greenland, because it is mainly Icelandic aircraft operators
 # maintaining traffic in these areas.  However, the official status of
-# this area is that it sticks with Godthab time.  This area might be
+# this area is that it sticks with Godthåb time.  This area might be
 # considered a dual time zone in some respects because of this.
 
 # From Rives McDow (2001-11-19):
@@ -942,8 +1020,8 @@
 
 # From Paul Eggert (2006-03-22):
 # From 1997 on the CIA map shows Danmarkshavn on GMT;
-# the 1995 map as like Godthab.
-# For lack of better info, assume they were like Godthab before 1996.
+# the 1995 map as like Godthåb.
+# For lack of better info, assume they were like Godthåb before 1996.
 # startkart.no says Thule does not observe DST, but this is clearly an error,
 # so go with Shanks & Pottenger for Thule transitions until this year.
 # For 2007 on assume Thule will stay in sync with US DST rules.
@@ -958,15 +1036,15 @@
 #
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Danmarkshavn -1:14:40 -	LMT	1916 Jul 28
-			-3:00	-	WGT	1980 Apr  6 2:00
+			-3:00	-	WGT	1980 Apr  6  2:00
 			-3:00	EU	WG%sT	1996
 			0:00	-	GMT
 Zone America/Scoresbysund -1:27:52 -	LMT	1916 Jul 28 # Ittoqqortoormiit
-			-2:00	-	CGT	1980 Apr  6 2:00
+			-2:00	-	CGT	1980 Apr  6  2:00
 			-2:00	C-Eur	CG%sT	1981 Mar 29
 			-1:00	EU	EG%sT
 Zone America/Godthab	-3:26:56 -	LMT	1916 Jul 28 # Nuuk
-			-3:00	-	WGT	1980 Apr  6 2:00
+			-3:00	-	WGT	1980 Apr  6  2:00
 			-3:00	EU	WG%sT
 Zone America/Thule	-4:35:08 -	LMT	1916 Jul 28 # Pituffik air base
 			-4:00	Thule	A%sT
@@ -980,25 +1058,24 @@
 # From Peter Ilieve (1996-10-28):
 # [IATA SSIM (1992/1996) claims that the Baltic republics switch at 01:00s,
 # but a relative confirms that Estonia still switches at 02:00s, writing:]
-# ``I do not [know] exactly but there are some little different
+# "I do not [know] exactly but there are some little different
 # (confusing) rules for International Air and Railway Transport Schedules
 # conversion in Sunday connected with end of summer time in Estonia....
 # A discussion is running about the summer time efficiency and effect on
 # human physiology.  It seems that Estonia maybe will not change to
-# summer time next spring.''
+# summer time next spring."
 
 # From Peter Ilieve (1998-11-04), heavily edited:
-# 
 # The 1998-09-22 Estonian time law
-# 
+# http://trip.rk.ee/cgi-bin/thw?${BASE}=akt&${OOHTML}=rtd&TA=1998&TO=1&AN=1390
 # refers to the Eighth Directive and cites the association agreement between
-# the EU and Estonia, ratified by the Estonian law (RT II 1995, 22--27, 120).
+# the EU and Estonia, ratified by the Estonian law (RT II 1995, 22-27, 120).
 #
 # I also asked [my relative] whether they use any standard abbreviation
 # for their standard and summer times. He says no, they use "suveaeg"
 # (summer time) and "talveaeg" (winter time).
 
-# From The Baltic Times (1999-09-09)
+# From The Baltic Times  (1999-09-09)
 # via Steffen Thorsen:
 # This year will mark the last time Estonia shifts to summer time,
 # a council of the ruling coalition announced Sept. 6....
@@ -1016,44 +1093,79 @@
 # The Estonian government has changed once again timezone politics.
 # Now we are using again EU rules.
 #
-# From Urmet Jaanes (2002-03-28):
+# From Urmet Jänes (2002-03-28):
 # The legislative reference is Government decree No. 84 on 2002-02-21.
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Tallinn	1:39:00	-	LMT	1880
-			1:39:00	-	TMT	1918 Feb # Tallinn Mean Time
+			1:39:00	-	TMT	1918 Feb    # Tallinn Mean Time
 			1:00	C-Eur	CE%sT	1919 Jul
 			1:39:00	-	TMT	1921 May
 			2:00	-	EET	1940 Aug  6
 			3:00	-	MSK	1941 Sep 15
 			1:00	C-Eur	CE%sT	1944 Sep 22
-			3:00	Russia	MSK/MSD	1989 Mar 26 2:00s
-			2:00	1:00	EEST	1989 Sep 24 2:00s
+			3:00	Russia	MSK/MSD	1989 Mar 26  2:00s
+			2:00	1:00	EEST	1989 Sep 24  2:00s
 			2:00	C-Eur	EE%sT	1998 Sep 22
 			2:00	EU	EE%sT	1999 Nov  1
 			2:00	-	EET	2002 Feb 21
 			2:00	EU	EE%sT
 
 # Finland
-#
+
 # From Hannu Strang (1994-09-25 06:03:37 UTC):
 # Well, here in Helsinki we're just changing from summer time to regular one,
 # and it's supposed to change at 4am...
+
+# From Janne Snabb (2010-07-15):
 #
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger say Finland has switched at 02:00 standard time
-# since 1981.  Go with Strang instead.
+# I noticed that the Finland data is not accurate for years 1981 and 1982.
+# During these two first trial years the DST adjustment was made one hour
+# earlier than in forthcoming years. Starting 1983 the adjustment was made
+# according to the central European standards.
+#
+# This is documented in Heikki Oja: Aikakirja 2007, published by The Almanac
+# Office of University of Helsinki, ISBN 952-10-3221-9, available online (in
+# Finnish) at
+# http://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf
 #
+# Page 105 (56 in PDF version) has a handy table of all past daylight savings
+# transitions. It is easy enough to interpret without Finnish skills.
+#
+# This is also confirmed by Finnish Broadcasting Company's archive at:
+# http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401
+#
+# The news clip from 1981 says that "the time between 2 and 3 o'clock does not
+# exist tonight."
+
+# From Konstantin Hyppönen (2014-06-13):
+# [Heikki Oja's book Aikakirja 2013]
+# http://almanakka.helsinki.fi/images/aikakirja/Aikakirja2013kokonaan.pdf
+# pages 104-105, including a scan from a newspaper published on Apr 2 1942
+# say that ... [o]n Apr 2 1942, 24 o'clock (which means Apr 3 1942,
+# 00:00), clocks were moved one hour forward. The newspaper
+# mentions "on the night from Thursday to Friday"....
+# On Oct 4 1942, clocks were moved at 1:00 one hour backwards.
+#
+# From Paul Eggert (2014-06-14):
+# Go with Oja over Shanks.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Finland	1942	only	-	Apr	3	0:00	1:00	S
-Rule	Finland	1942	only	-	Oct	3	0:00	0	-
+Rule	Finland	1942	only	-	Apr	2	24:00	1:00	S
+Rule	Finland	1942	only	-	Oct	4	1:00	0	-
+Rule	Finland	1981	1982	-	Mar	lastSun	2:00	1:00	S
+Rule	Finland	1981	1982	-	Sep	lastSun	3:00	0	-
+
+# Milne says Helsinki (Helsingfors) time was 1:39:49.2 (official document);
+# round to nearest.
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Helsinki	1:39:52 -	LMT	1878 May 31
-			1:39:52	-	HMT	1921 May    # Helsinki Mean Time
-			2:00	Finland	EE%sT	1981 Mar 29 2:00
+Zone	Europe/Helsinki	1:39:49 -	LMT	1878 May 31
+			1:39:49	-	HMT	1921 May    # Helsinki Mean Time
+			2:00	Finland	EE%sT	1983
 			2:00	EU	EE%sT
 
-# Aaland Is
+# Åland Is
 Link	Europe/Helsinki	Europe/Mariehamn
 
 
@@ -1061,18 +1173,18 @@
 
 # From Ciro Discepolo (2000-12-20):
 #
-# Henri Le Corre, Regimes Horaires pour le monde entier, Editions
+# Henri Le Corre, Régimes horaires pour le monde entier, Éditions
 # Traditionnelles - Paris 2 books, 1993
 #
-# Gabriel, Traite de l'heure dans le monde, Guy Tredaniel editeur,
+# Gabriel, Traité de l'heure dans le monde, Guy Trédaniel,
 # Paris, 1991
 #
-# Francoise Gauquelin, Problemes de l'heure resolus en astrologie,
-# Guy tredaniel, Paris 1987
+# Françoise Gauquelin, Problèmes de l'heure résolus en astrologie,
+# Guy Trédaniel, Paris 1987
 
 
 #
-# Shank & Pottenger seem to use `24:00' ambiguously; resolve it with Whitman.
+# Shank & Pottenger seem to use '24:00' ambiguously; resolve it with Whitman.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	France	1916	only	-	Jun	14	23:00s	1:00	S
 Rule	France	1916	1919	-	Oct	Sun>=1	23:00s	0	-
@@ -1109,16 +1221,16 @@
 Rule	France	1940	only	-	Feb	25	 2:00	1:00	S
 # The French rules for 1941-1944 were not used in Paris, but Shanks & Pottenger
 # write that they were used in Monaco and in many French locations.
-# Le Corre writes that the upper limit of the free zone was Arneguy, Orthez,
-# Mont-de-Marsan, Bazas, Langon, Lamotte-Montravel, Marouil, La
-# Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Decartes,
+# Le Corre writes that the upper limit of the free zone was Arnéguy, Orthez,
+# Mont-de-Marsan, Bazas, Langon, Lamothe-Montravel, Marœuil, La
+# Rochefoucauld, Champagne-Mouton, La Roche-Posay, La Haye-Descartes,
 # Loches, Montrichard, Vierzon, Bourges, Moulins, Digoin,
-# Paray-le-Monial, Montceau-les-Mines, Chalons-sur-Saone, Arbois,
-# Dole, Morez, St-Claude, and Collognes (Haute-Savioe).
+# Paray-le-Monial, Montceau-les-Mines, Chalon-sur-Saône, Arbois,
+# Dole, Morez, St-Claude, and Collonges (Haute-Savoie).
 Rule	France	1941	only	-	May	 5	 0:00	2:00	M # Midsummer
 # Shanks & Pottenger say this transition occurred at Oct 6 1:00,
 # but go with Denis Excoffier (1997-12-12),
-# who quotes the Ephemerides Astronomiques for 1998 from Bureau des Longitudes
+# who quotes the Ephémérides astronomiques for 1998 from Bureau des Longitudes
 # as saying 5/10/41 22hUT.
 Rule	France	1941	only	-	Oct	 6	 0:00	1:00	S
 Rule	France	1942	only	-	Mar	 9	 0:00	2:00	M
@@ -1139,7 +1251,7 @@
 # on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Paris	0:09:21 -	LMT	1891 Mar 15  0:01
-			0:09:21	-	PMT	1911 Mar 11  0:01  # Paris MT
+			0:09:21	-	PMT	1911 Mar 11  0:01 # Paris MT
 # Shanks & Pottenger give 1940 Jun 14 0:00; go with Excoffier and Le Corre.
 			0:00	France	WE%sT	1940 Jun 14 23:00
 # Le Corre says Paris stuck with occupied-France time after the liberation;
@@ -1156,15 +1268,13 @@
 # Bundesanstalt contains DST information back to 1916.
 # [See tz-link.htm for the URL.]
 
-# From Joerg Schilling (2002-10-23):
+# From Jörg Schilling (2002-10-23):
 # In 1945, Berlin was switched to Moscow Summer time (GMT+4) by
-# 
-# General [Nikolai] Bersarin.
+# http://www.dhm.de/lemo/html/biografien/BersarinNikolai/
+# General [Nikolai] Bersarin.
 
 # From Paul Eggert (2003-03-08):
-# 
 # http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf
-# 
 # says that Bersarin issued an order to use Moscow time on May 20.
 # However, Moscow did not observe daylight saving in 1945, so
 # this was equivalent to CEMT (GMT+3), not GMT+4.
@@ -1189,11 +1299,26 @@
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Berlin	0:53:28 -	LMT	1893 Apr
-			1:00	C-Eur	CE%sT	1945 May 24 2:00
+			1:00	C-Eur	CE%sT	1945 May 24  2:00
 			1:00 SovietZone	CE%sT	1946
 			1:00	Germany	CE%sT	1980
 			1:00	EU	CE%sT
 
+# From Tobias Conradi (2011-09-12):
+# Büsingen , surrounded by the Swiss canton
+# Schaffhausen, did not start observing DST in 1980 as the rest of DE
+# (West Germany at that time) and DD (East Germany at that time) did.
+# DD merged into DE, the area is currently covered by code DE in ISO 3166-1,
+# which in turn is covered by the zone Europe/Berlin.
+#
+# Source for the time in Büsingen 1980:
+# http://www.srf.ch/player/video?id=c012c029-03b7-4c2b-9164-aa5902cd58d3
+
+# From Arthur David Olson (2012-03-03):
+# Büsingen and Zurich have shared clocks since 1970.
+
+Link	Europe/Zurich	Europe/Busingen
+
 # Georgia
 # Please see the "asia" file for Asia/Tbilisi.
 # Herodotus (Histories, IV.45) says Georgia north of the Phasis (now Rioni)
@@ -1201,8 +1326,8 @@
 
 # Gibraltar
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Europe/Gibraltar	-0:21:24 -	LMT	1880 Aug  2 0:00s
-			0:00	GB-Eire	%s	1957 Apr 14 2:00
+Zone Europe/Gibraltar	-0:21:24 -	LMT	1880 Aug  2  0:00s
+			0:00	GB-Eire	%s	1957 Apr 14  2:00
 			1:00	-	CET	1982
 			1:00	EU	CE%sT
 
@@ -1233,7 +1358,7 @@
 Rule	Greece	1980	only	-	Sep	28	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Athens	1:34:52 -	LMT	1895 Sep 14
-			1:34:52	-	AMT	1916 Jul 28 0:01     # Athens MT
+			1:34:52	-	AMT	1916 Jul 28  0:01 # Athens MT
 			2:00	Greece	EE%sT	1941 Apr 30
 			1:00	Greece	CE%sT	1944 Apr  4
 			2:00	Greece	EE%sT	1981
@@ -1242,15 +1367,20 @@
 			2:00	EU	EE%sT
 
 # Hungary
+# From Paul Eggert (2014-07-15):
+# Dates for 1916-1945 are taken from:
+# Oross A. Jelen a múlt jövője: a nyári időszámítás Magyarországon 1916-1945.
+# National Archives of Hungary (2012-10-29).
+# http://mnl.gov.hu/a_het_dokumentuma/a_nyari_idoszamitas_magyarorszagon_19161945.html
+# This source does not always give times, which are taken from Shanks
+# & Pottenger (which disagree about the dates).
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Hungary	1918	only	-	Apr	 1	 3:00	1:00	S
-Rule	Hungary	1918	only	-	Sep	29	 3:00	0	-
+Rule	Hungary	1918	only	-	Sep	16	 3:00	0	-
 Rule	Hungary	1919	only	-	Apr	15	 3:00	1:00	S
-Rule	Hungary	1919	only	-	Sep	15	 3:00	0	-
-Rule	Hungary	1920	only	-	Apr	 5	 3:00	1:00	S
-Rule	Hungary	1920	only	-	Sep	30	 3:00	0	-
+Rule	Hungary	1919	only	-	Nov	24	 3:00	0	-
 Rule	Hungary	1945	only	-	May	 1	23:00	1:00	S
-Rule	Hungary	1945	only	-	Nov	 3	 0:00	0	-
+Rule	Hungary	1945	only	-	Nov	 1	 0:00	0	-
 Rule	Hungary	1946	only	-	Mar	31	 2:00s	1:00	S
 Rule	Hungary	1946	1949	-	Oct	Sun>=1	 2:00s	0	-
 Rule	Hungary	1947	1949	-	Apr	Sun>=4	 2:00s	1:00	S
@@ -1266,7 +1396,7 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Budapest	1:16:20 -	LMT	1890 Oct
 			1:00	C-Eur	CE%sT	1918
-			1:00	Hungary	CE%sT	1941 Apr  6  2:00
+			1:00	Hungary	CE%sT	1941 Apr  8
 			1:00	C-Eur	CE%sT	1945
 			1:00	Hungary	CE%sT	1980 Sep 28  2:00s
 			1:00	EU	CE%sT
@@ -1329,7 +1459,7 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Atlantic/Reykjavik	-1:27:24 -	LMT	1837
 			-1:27:48 -	RMT	1908 # Reykjavik Mean Time?
-			-1:00	Iceland	IS%sT	1968 Apr 7 1:00s
+			-1:00	Iceland	IS%sT	1968 Apr  7  1:00s
 			 0:00	-	GMT
 
 # Italy
@@ -1344,10 +1474,9 @@
 # From Paul Eggert (2006-03-22):
 # For Italian DST we have three sources: Shanks & Pottenger, Whitman, and
 # F. Pollastri
-# 
 # Day-light Saving Time in Italy (2006-02-03)
-# 
-# (`FP' below), taken from an Italian National Electrotechnical Institute
+# http://toi.iriti.cnr.it/uk/ienitlt.html
+# ('FP' below), taken from an Italian National Electrotechnical Institute
 # publication. When the three sources disagree, guess who's right, as follows:
 #
 # year	FP	Shanks&P. (S)	Whitman (W)	Go with:
@@ -1406,8 +1535,8 @@
 Rule	Italy	1979	only	-	Sep	30	0:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Rome	0:49:56 -	LMT	1866 Sep 22
-			0:49:56	-	RMT	1893 Nov  1 0:00s # Rome Mean
-			1:00	Italy	CE%sT	1942 Nov  2 2:00s
+			0:49:56	-	RMT	1893 Nov  1  0:00s # Rome Mean
+			1:00	Italy	CE%sT	1942 Nov  2  2:00s
 			1:00	C-Eur	CE%sT	1944 Jul
 			1:00	Italy	CE%sT	1980
 			1:00	EU	CE%sT
@@ -1454,18 +1583,18 @@
 
 # From Andrei Ivanov (2000-03-06):
 # This year Latvia will not switch to Daylight Savings Time (as specified in
-# 
 # The Regulations of the Cabinet of Ministers of the Rep. of Latvia of
-# 29-Feb-2000 (#79), in Latvian for subscribers only).
+# 29-Feb-2000 (#79) ,
+# in Latvian for subscribers only).
 
-# 
-# From RFE/RL Newsline (2001-01-03), noted after a heads-up by Rives McDow:
-# 
+# From RFE/RL Newsline
+# http://www.rferl.org/newsline/2001/01/3-CEE/cee-030101.html
+# (2001-01-03), noted after a heads-up by Rives McDow:
 # The Latvian government on 2 January decided that the country will
 # institute daylight-saving time this spring, LETA reported.
 # Last February the three Baltic states decided not to turn back their
 # clocks one hour in the spring....
-# Minister of Economy Aigars Kalvitis noted that Latvia had too few
+# Minister of Economy Aigars Kalvītis noted that Latvia had too few
 # daylight hours and thus decided to comply with a draft European
 # Commission directive that provides for instituting daylight-saving
 # time in EU countries between 2002 and 2006. The Latvian government
@@ -1475,28 +1604,45 @@
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Latvia	1989	1996	-	Mar	lastSun	 2:00s	1:00	S
 Rule	Latvia	1989	1996	-	Sep	lastSun	 2:00s	0	-
+
+# Milne 1899 says Riga was 1:36:28 (Polytechnique House time).
+# Byalokoz 1919 says Latvia was 1:36:34.
+# Go with Byalokoz.
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Riga	1:36:24	-	LMT	1880
-			1:36:24	-	RMT	1918 Apr 15 2:00 #Riga Mean Time
-			1:36:24	1:00	LST	1918 Sep 16 3:00 #Latvian Summer
-			1:36:24	-	RMT	1919 Apr  1 2:00
-			1:36:24	1:00	LST	1919 May 22 3:00
-			1:36:24	-	RMT	1926 May 11
+Zone	Europe/Riga	1:36:34	-	LMT	1880
+			1:36:34	-	RMT	1918 Apr 15  2:00 # Riga MT
+			1:36:34	1:00	LST	1918 Sep 16  3:00 # Latvian ST
+			1:36:34	-	RMT	1919 Apr  1  2:00
+			1:36:34	1:00	LST	1919 May 22  3:00
+			1:36:34	-	RMT	1926 May 11
 			2:00	-	EET	1940 Aug  5
 			3:00	-	MSK	1941 Jul
 			1:00	C-Eur	CE%sT	1944 Oct 13
-			3:00	Russia	MSK/MSD	1989 Mar lastSun 2:00s
-			2:00	1:00	EEST	1989 Sep lastSun 2:00s
+			3:00	Russia	MSK/MSD	1989 Mar lastSun  2:00s
+			2:00	1:00	EEST	1989 Sep lastSun  2:00s
 			2:00	Latvia	EE%sT	1997 Jan 21
 			2:00	EU	EE%sT	2000 Feb 29
 			2:00	-	EET	2001 Jan  2
 			2:00	EU	EE%sT
 
 # Liechtenstein
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Vaduz	0:38:04 -	LMT	1894 Jun
-			1:00	-	CET	1981
-			1:00	EU	CE%sT
+
+# From Paul Eggert (2013-09-09):
+# Shanks & Pottenger say Vaduz is like Zurich.
+
+# From Alois Treindl (2013-09-18):
+# http://www.eliechtensteinensia.li/LIJ/1978/1938-1978/1941.pdf
+# ... confirms on p. 6 that Liechtenstein followed Switzerland in 1941 and 1942.
+# I ... translate only the last two paragraphs:
+#    ... during second world war, in the years 1941 and 1942, Liechtenstein
+#    introduced daylight saving time, adapting to Switzerland.  From 1943 on
+#    central European time was in force throughout the year.
+#    From a report of the duke's government to the high council,
+#    regarding the introduction of a time law, of 31 May 1977.
+
+Link Europe/Zurich Europe/Vaduz
+
 
 # Lithuania
 
@@ -1508,7 +1654,7 @@
 # I would like to inform that in this year Lithuanian time zone
 # (Europe/Vilnius) was changed.
 
-# From ELTA No. 972 (2582) (1999-09-29),
+# From ELTA No. 972 (2582) (1999-09-29) ,
 # via Steffen Thorsen:
 # Lithuania has shifted back to the second time zone (GMT plus two hours)
 # to be valid here starting from October 31,
@@ -1517,9 +1663,9 @@
 # motion to give up shifting to summer time in spring, as it was
 # already done by Estonia.
 
-# From the 
-# Fact File, Lithuanian State Department of Tourism
-#  (2000-03-27): Local time is GMT+2 hours ..., no daylight saving.
+# From the Fact File, Lithuanian State Department of Tourism
+#  (2000-03-27):
+# Local time is GMT+2 hours ..., no daylight saving.
 
 # From a user via Klaus Marten (2003-02-07):
 # As a candidate for membership of the European Union, Lithuania will
@@ -1532,18 +1678,18 @@
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Vilnius	1:41:16	-	LMT	1880
-			1:24:00	-	WMT	1917	    # Warsaw Mean Time
+			1:24:00	-	WMT	1917        # Warsaw Mean Time
 			1:35:36	-	KMT	1919 Oct 10 # Kaunas Mean Time
 			1:00	-	CET	1920 Jul 12
 			2:00	-	EET	1920 Oct  9
 			1:00	-	CET	1940 Aug  3
 			3:00	-	MSK	1941 Jun 24
 			1:00	C-Eur	CE%sT	1944 Aug
-			3:00	Russia	MSK/MSD	1991 Mar 31 2:00s
-			2:00	1:00	EEST	1991 Sep 29 2:00s
+			3:00	Russia	MSK/MSD	1991 Mar 31  2:00s
+			2:00	1:00	EEST	1991 Sep 29  2:00s
 			2:00	C-Eur	EE%sT	1998
-			2:00	-	EET	1998 Mar 29 1:00u
-			1:00	EU	CE%sT	1999 Oct 31 1:00u
+			2:00	-	EET	1998 Mar 29  1:00u
+			1:00	EU	CE%sT	1999 Oct 31  1:00u
 			2:00	-	EET	2003 Jan  1
 			2:00	EU	EE%sT
 
@@ -1577,14 +1723,14 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Luxembourg	0:24:36 -	LMT	1904 Jun
 			1:00	Lux	CE%sT	1918 Nov 25
-			0:00	Lux	WE%sT	1929 Oct  6 2:00s
-			0:00	Belgium	WE%sT	1940 May 14 3:00
-			1:00	C-Eur	WE%sT	1944 Sep 18 3:00
+			0:00	Lux	WE%sT	1929 Oct  6  2:00s
+			0:00	Belgium	WE%sT	1940 May 14  3:00
+			1:00	C-Eur	WE%sT	1944 Sep 18  3:00
 			1:00	Belgium	CE%sT	1977
 			1:00	EU	CE%sT
 
 # Macedonia
-# see Serbia
+# See Europe/Belgrade.
 
 # Malta
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -1596,9 +1742,9 @@
 Rule	Malta	1975	1980	-	Sep	Sun>=15	2:00	0	-
 Rule	Malta	1980	only	-	Mar	31	2:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2 0:00s # Valletta
-			1:00	Italy	CE%sT	1942 Nov  2 2:00s
-			1:00	C-Eur	CE%sT	1945 Apr  2 2:00s
+Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2  0:00s # Valletta
+			1:00	Italy	CE%sT	1942 Nov  2  2:00s
+			1:00	C-Eur	CE%sT	1945 Apr  2  2:00s
 			1:00	Italy	CE%sT	1973 Mar 31
 			1:00	Malta	CE%sT	1981
 			1:00	EU	CE%sT
@@ -1613,8 +1759,36 @@
 # In early 1992 there was large-scale interethnic violence in the area
 # and it's possible that some Russophones continued to observe Moscow time.
 # But [two people] separately reported via
-# Jesper Norgaard that as of 2001-01-24 Tiraspol was like Chisinau.
+# Jesper Nørgaard that as of 2001-01-24 Tiraspol was like Chisinau.
 # The Tiraspol entry has therefore been removed for now.
+#
+# From Alexander Krivenyshev (2011-10-17):
+# Pridnestrovian Moldavian Republic (PMR, also known as
+# "Pridnestrovie") has abolished seasonal clock change (no transition
+# to the Winter Time).
+#
+# News (in Russian):
+# http://www.kyivpost.ua/russia/news/pridnestrove-otkazalos-ot-perehoda-na-zimnee-vremya-30954.html
+# http://www.allmoldova.com/moldova-news/1249064116.html
+#
+# The substance of this change (reinstatement of the Tiraspol entry)
+# is from a patch from Petr Machata (2011-10-17)
+#
+# From Tim Parenti (2011-10-19)
+# In addition, being situated at +4651+2938 would give Tiraspol
+# a pre-1880 LMT offset of 1:58:32.
+#
+# (which agrees with the earlier entry that had been removed)
+#
+# From Alexander Krivenyshev (2011-10-26)
+# NO need to divide Moldova into two timezones at this point.
+# As of today, Transnistria (Pridnestrovie)- Tiraspol reversed its own
+# decision to abolish DST this winter.
+# Following Moldova and neighboring Ukraine- Transnistria (Pridnestrovie)-
+# Tiraspol will go back to winter time on October 30, 2011.
+# News from Moldova (in russian):
+# http://ru.publika.md/link_317061.html
+
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Chisinau	1:55:20 -	LMT	1880
@@ -1636,13 +1810,13 @@
 # more precise 0:09:21.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Monaco	0:29:32 -	LMT	1891 Mar 15
-			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
-			0:00	France	WE%sT	1945 Sep 16 3:00
+			0:09:21	-	PMT	1911 Mar 11 # Paris Mean Time
+			0:00	France	WE%sT	1945 Sep 16  3:00
 			1:00	France	CE%sT	1977
 			1:00	EU	CE%sT
 
 # Montenegro
-# see Serbia
+# See Europe/Belgrade.
 
 # Netherlands
 
@@ -1681,8 +1855,8 @@
 # was not until 1866 when they were all required by law to observe
 # Amsterdam mean time.
 
-# The data before 1945 are taken from
-# .
+# The data entries before 1945 are taken from
+# http://www.phys.uu.nl/~vgent/wettijd/wettijd.htm
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Neth	1916	only	-	May	 1	0:00	1:00	NST	# Netherlands Summer Time
@@ -1713,8 +1887,8 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Amsterdam	0:19:32 -	LMT	1835
 			0:19:32	Neth	%s	1937 Jul  1
-			0:20	Neth	NE%sT	1940 May 16 0:00 # Dutch Time
-			1:00	C-Eur	CE%sT	1945 Apr  2 2:00
+			0:20	Neth	NE%sT	1940 May 16  0:00 # Dutch Time
+			1:00	C-Eur	CE%sT	1945 Apr  2  2:00
 			1:00	Neth	CE%sT	1977
 			1:00	EU	CE%sT
 
@@ -1744,20 +1918,20 @@
 # time they were declared as parts of Norway.  Svalbard was declared
 # as a part of Norway by law of 1925-07-17 no 11, section 4 and Jan
 # Mayen by law of 1930-02-27 no 2, section 2. (From
-# http://www.lovdata.no/all/nl-19250717-011.html and
-# http://www.lovdata.no/all/nl-19300227-002.html).  The law/regulation
+#  and
+# ).  The law/regulation
 # for normal/standard time in Norway is from 1894-06-29 no 1 (came
 # into operation on 1895-01-01) and Svalbard/Jan Mayen seem to be a
 # part of this law since 1925/1930. (From
-# http://www.lovdata.no/all/nl-18940629-001.html ) I have not been
+# ) I have not been
 # able to find if Jan Mayen used a different time zone (e.g. -0100)
-# before 1930. Jan Mayen has only been "inhabitated" since 1921 by
+# before 1930. Jan Mayen has only been "inhabited" since 1921 by
 # Norwegian meteorologists and maybe used the same time as Norway ever
 # since 1921.  Svalbard (Arctic/Longyearbyen) has been inhabited since
 # before 1895, and therefore probably changed the local time somewhere
 # between 1895 and 1925 (inclusive).
 
-# From Paul Eggert (2001-05-01):
+# From Paul Eggert (2013-09-04):
 #
 # Actually, Jan Mayen was never occupied by Germany during World War II,
 # so it must have diverged from Oslo time during the war, as Oslo was
@@ -1766,9 +1940,9 @@
 #  says that the meteorologists
 # burned down their station in 1940 and left the island, but returned in
 # 1941 with a small Norwegian garrison and continued operations despite
-# frequent air ttacks from Germans.  In 1943 the Americans established a
+# frequent air attacks from Germans.  In 1943 the Americans established a
 # radiolocating station on the island, called "Atlantic City".  Possibly
-# the UTC offset changed during the war, but I think it unlikely that
+# the UT offset changed during the war, but I think it unlikely that
 # Jan Mayen used German daylight-saving rules.
 #
 # Svalbard is more complicated, as it was raided in August 1941 by an
@@ -1777,16 +1951,19 @@
 #  says that the Germans were
 # expelled on 1942-05-14.  However, small parties of Germans did return,
 # and according to Wilhelm Dege's book "War North of 80" (1954)
-# 
+# http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html
 # the German armed forces at the Svalbard weather station code-named
 # Haudegen did not surrender to the Allies until September 1945.
 #
-# All these events predate our cutoff date of 1970.  Unless we can
-# come up with more definitive info about the timekeeping during the
-# war years it's probably best just do do the following for now:
+# All these events predate our cutoff date of 1970, so use Europe/Oslo
+# for these regions.
 Link	Europe/Oslo	Arctic/Longyearbyen
 
 # Poland
+
+# The 1919 dates and times can be found in Tygodnik Urzędowy nr 1 (1919-03-20),
+#  pp 1-2.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Poland	1918	1919	-	Sep	16	2:00s	0	-
 Rule	Poland	1919	only	-	Apr	15	2:00s	1:00	S
@@ -1797,9 +1974,9 @@
 Rule	Poland	1945	only	-	Apr	29	0:00	1:00	S
 Rule	Poland	1945	only	-	Nov	 1	0:00	0	-
 # For 1946 on the source is Kazimierz Borkowski,
-# Torun Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U.,
-# 
-# Thanks to Przemyslaw Augustyniak (2005-05-28) for this reference.
+# Toruń Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U.,
+# http://www.astro.uni.torun.pl/~kb/Artykuly/U-PA/Czas2.htm#tth_tAb1
+# Thanks to Przemysław Augustyniak (2005-05-28) for this reference.
 # He also gives these further references:
 # Mon Pol nr 13, poz 162 (1995) 
 # Druk nr 2180 (2003) 
@@ -1819,10 +1996,10 @@
 Rule	Poland	1962	1964	-	Sep	lastSun	1:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Warsaw	1:24:00 -	LMT	1880
-			1:24:00	-	WMT	1915 Aug  5   # Warsaw Mean Time
-			1:00	C-Eur	CE%sT	1918 Sep 16 3:00
+			1:24:00	-	WMT	1915 Aug  5 # Warsaw Mean Time
+			1:00	C-Eur	CE%sT	1918 Sep 16  3:00
 			2:00	Poland	EE%sT	1922 Jun
-			1:00	Poland	CE%sT	1940 Jun 23 2:00
+			1:00	Poland	CE%sT	1940 Jun 23  2:00
 			1:00	C-Eur	CE%sT	1944 Oct
 			1:00	Poland	CE%sT	1977
 			1:00	W-Eur	CE%sT	1988
@@ -1830,6 +2007,14 @@
 
 # Portugal
 #
+# From Paul Eggert (2014-08-11), after a heads-up from Stephen Colebourne:
+# According to a Portuguese decree (1911-05-26)
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# Lisbon was at -0:36:44.68, but switched to GMT on 1912-01-01 at 00:00.
+# Round the old offset to -0:36:45.  This agrees with Willett but disagrees
+# with Shanks, who says the transition occurred on 1911-05-24 at 00:00 for
+# Europe/Lisbon, Atlantic/Azores, and Atlantic/Madeira.
+#
 # From Rui Pedro Salgueiro (1992-11-12):
 # Portugal has recently (September, 27) changed timezone
 # (from WET to MET or CET) to harmonize with EEC.
@@ -1909,35 +2094,34 @@
 Rule	Port	1980	only	-	Mar	lastSun	 0:00s	1:00	S
 Rule	Port	1981	1982	-	Mar	lastSun	 1:00s	1:00	S
 Rule	Port	1983	only	-	Mar	lastSun	 2:00s	1:00	S
+#
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-# Shanks & Pottenger say the transition from LMT to WET occurred 1911-05-24;
-# Willett says 1912-01-01.  Go with Willett.
-Zone	Europe/Lisbon	-0:36:32 -	LMT	1884
-			-0:36:32 -	LMT	1912 Jan  1  # Lisbon Mean Time
-			 0:00	Port	WE%sT	1966 Apr  3 2:00
-			 1:00	-	CET	1976 Sep 26 1:00
-			 0:00	Port	WE%sT	1983 Sep 25 1:00s
-			 0:00	W-Eur	WE%sT	1992 Sep 27 1:00s
-			 1:00	EU	CE%sT	1996 Mar 31 1:00u
+Zone	Europe/Lisbon	-0:36:45 -	LMT	1884
+			-0:36:45 -	LMT	1912 Jan  1 # Lisbon Mean Time
+			 0:00	Port	WE%sT	1966 Apr  3  2:00
+			 1:00	-	CET	1976 Sep 26  1:00
+			 0:00	Port	WE%sT	1983 Sep 25  1:00s
+			 0:00	W-Eur	WE%sT	1992 Sep 27  1:00s
+			 1:00	EU	CE%sT	1996 Mar 31  1:00u
 			 0:00	EU	WE%sT
-Zone Atlantic/Azores	-1:42:40 -	LMT	1884		# Ponta Delgada
-			-1:54:32 -	HMT	1911 May 24  # Horta Mean Time
-			-2:00	Port	AZO%sT	1966 Apr  3 2:00 # Azores Time
-			-1:00	Port	AZO%sT	1983 Sep 25 1:00s
-			-1:00	W-Eur	AZO%sT	1992 Sep 27 1:00s
-			 0:00	EU	WE%sT	1993 Mar 28 1:00u
+Zone Atlantic/Azores	-1:42:40 -	LMT	1884        # Ponta Delgada
+			-1:54:32 -	HMT	1912 Jan  1 # Horta Mean Time
+			-2:00	Port	AZO%sT	1966 Apr  3  2:00  # Azores Time
+			-1:00	Port	AZO%sT	1983 Sep 25  1:00s
+			-1:00	W-Eur	AZO%sT	1992 Sep 27  1:00s
+			 0:00	EU	WE%sT	1993 Mar 28  1:00u
 			-1:00	EU	AZO%sT
-Zone Atlantic/Madeira	-1:07:36 -	LMT	1884		# Funchal
-			-1:07:36 -	FMT	1911 May 24  # Funchal Mean Time
-			-1:00	Port	MAD%sT	1966 Apr  3 2:00 # Madeira Time
-			 0:00	Port	WE%sT	1983 Sep 25 1:00s
+Zone Atlantic/Madeira	-1:07:36 -	LMT	1884        # Funchal
+			-1:07:36 -	FMT	1912 Jan  1 # Funchal Mean Time
+			-1:00	Port	MAD%sT	1966 Apr  3  2:00 # Madeira Time
+			 0:00	Port	WE%sT	1983 Sep 25  1:00s
 			 0:00	EU	WE%sT
 
 # Romania
 #
 # From Paul Eggert (1999-10-07):
-# 
-# Nine O'clock (1998-10-23) reports that the switch occurred at
+# Nine O'clock 
+# (1998-10-23) reports that the switch occurred at
 # 04:00 local time in fall 1998.  For lack of better info,
 # assume that Romania and Moldova switched to EU rules in 1997,
 # the same year as Bulgaria.
@@ -1954,15 +2138,88 @@
 Rule	Romania	1991	1993	-	Sep	lastSun	 0:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Bucharest	1:44:24 -	LMT	1891 Oct
-			1:44:24	-	BMT	1931 Jul 24	# Bucharest MT
-			2:00	Romania	EE%sT	1981 Mar 29 2:00s
+			1:44:24	-	BMT	1931 Jul 24 # Bucharest MT
+			2:00	Romania	EE%sT	1981 Mar 29  2:00s
 			2:00	C-Eur	EE%sT	1991
 			2:00	Romania	EE%sT	1994
 			2:00	E-Eur	EE%sT	1997
 			2:00	EU	EE%sT
 
+
 # Russia
 
+# From Alexander Krivenyshev (2011-09-15):
+# Based on last Russian Government Decree # 725 on August 31, 2011
+# (Government document
+# http://www.government.ru/gov/results/16355/print/
+# in Russian)
+# there are few corrections have to be made for some Russian time zones...
+# All updated Russian Time Zones were placed in table and translated to English
+# by WorldTimeZone.com at the link below:
+# http://www.worldtimezone.com/dst_news/dst_news_russia36.htm
+
+# From Sanjeev Gupta (2011-09-27):
+# Scans of [Decree #23 of January 8, 1992] are available at:
+# http://government.consultant.ru/page.aspx?1223966
+# They are in Cyrillic letters (presumably Russian).
+
+# From Arthur David Olson (2012-05-09):
+# Regarding the instant when clocks in time-zone-shifting parts of Russia
+# changed in September 2011:
+#
+# One source is
+# http://government.ru/gov/results/16355/
+# which, according to translate.google.com, begins "Decree of August 31,
+# 2011 No 725" and contains no other dates or "effective date" information.
+#
+# Another source is
+# http://www.rg.ru/2011/09/06/chas-zona-dok.html
+# which, according to translate.google.com, begins "Resolution of the
+# Government of the Russian Federation on August 31, 2011 N 725" and also
+# contains "Date first official publication: September 6, 2011 Posted on:
+# in the 'RG' - Federal Issue number 5573 September 6, 2011" but which
+# does not contain any "effective date" information.
+#
+# Another source is
+# http://en.wikipedia.org/wiki/Oymyakonsky_District#cite_note-RuTime-7
+# which, in note 8, contains "Resolution #725 of August 31, 2011...
+# Effective as of after 7 days following the day of the official publication"
+# but which does not contain any reference to September 6, 2011.
+#
+# The Wikipedia article refers to
+# http://base.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=118896
+# which seems to copy the text of the government.ru page.
+#
+# Tobias Conradi combines Wikipedia's
+# "as of after 7 days following the day of the official publication"
+# with www.rg.ru's "Date of first official publication: September 6, 2011" to
+# get September 13, 2011 as the cutover date (unusually, a Tuesday, as Tobias
+# Conradi notes).
+#
+# None of the sources indicates a time of day for changing clocks.
+#
+# Go with 2011-09-13 0:00s.
+
+# From Alexander Krivenyshev (2014-07-01):
+# According to the Russian news (ITAR-TASS News Agency)
+# http://en.itar-tass.com/russia/738562
+# the State Duma has approved ... the draft bill on returning to
+# winter time standard and return Russia 11 time zones.  The new
+# regulations will come into effect on October 26, 2014 at 02:00 ...
+# http://asozd2.duma.gov.ru/main.nsf/%28Spravka%29?OpenAgent&RN=431985-6&02
+# Here is a link where we put together table (based on approved Bill N
+# 431985-6) with proposed 11 Russian time zones and corresponding
+# areas/cities/administrative centers in the Russian Federation (in English):
+# http://www.worldtimezone.com/dst_news/dst_news_russia65.html
+#
+# From Alexander Krivenyshev (2014-07-22):
+# Putin signed the Federal Law 431985-6 ... (in Russian)
+# http://itar-tass.com/obschestvo/1333711
+# http://www.pravo.gov.ru:8080/page.aspx?111660
+# http://www.kremlin.ru/acts/46279
+# From October 26, 2014 the new Russian time zone map will looks like this:
+# http://www.worldtimezone.com/dst_news/dst_news_russia-map-2014-07.html
+
 # From Paul Eggert (2006-03-22):
 # Except for Moscow after 1919-07-01, I invented the time zone abbreviations.
 # Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991,
@@ -1977,7 +2234,7 @@
 # so we (Novosibirsk) simply did not switch.
 #
 # From Andrey A. Chernov (1996-10-04):
-# `MSK' and `MSD' were born and used initially on Moscow computers with
+# 'MSK' and 'MSD' were born and used initially on Moscow computers with
 # UNIX-like OSes by several developer groups (e.g. Demos group, Kiae group)....
 # The next step was the UUCP network, the Relcom predecessor
 # (used mainly for mail), and MSK/MSD was actively used there.
@@ -1989,9 +2246,9 @@
 #
 # For Grozny, Chechnya, we have the following story from
 # John Daniszewski, "Scavengers in the Rubble", Los Angeles Times (2001-02-07):
-# News--often false--is spread by word of mouth.  A rumor that it was
+# News - often false - is spread by word of mouth.  A rumor that it was
 # time to move the clocks back put this whole city out of sync with
-# the rest of Russia for two weeks--even soldiers stationed here began
+# the rest of Russia for two weeks - even soldiers stationed here began
 # enforcing curfew at the wrong time.
 #
 # From Gwillim Law (2001-06-05):
@@ -2002,100 +2259,265 @@
 # since September 1997....  Although the Kuril Islands are
 # administratively part of Sakhalin oblast', they appear to have
 # remained on UTC+11 along with Magadan.
-#
+
+# From Tim Parenti (2014-07-06):
+# The comments detailing the coverage of each Russian zone are meant to assist
+# with maintenance only and represent our best guesses as to which regions
+# are covered by each zone.  They are not meant to be taken as an authoritative
+# listing.  The region codes listed come from
+# http://en.wikipedia.org/w/?title=Federal_subjects_of_Russia&oldid=611810498
+# and are used for convenience only; no guarantees are made regarding their
+# future stability.  ISO 3166-2:RU codes are also listed for first-level
+# divisions where available.
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-#
-# Kaliningradskaya oblast'.
+
+
+# From Tim Parenti (2014-07-03):
+# Europe/Kaliningrad covers...
+# 39	RU-KGD	Kaliningrad Oblast
+
 Zone Europe/Kaliningrad	 1:22:00 -	LMT	1893 Apr
 			 1:00	C-Eur	CE%sT	1945
 			 2:00	Poland	CE%sT	1946
-			 3:00	Russia	MSK/MSD	1991 Mar 31 2:00s
-			 2:00	Russia	EE%sT
-#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Adygeya, Arkhangel'skaya oblast',
-# Belgorodskaya oblast', Bryanskaya oblast', Vladimirskaya oblast',
-# Vologodskaya oblast', Voronezhskaya oblast',
-# Respublika Dagestan, Ivanovskaya oblast', Respublika Ingushetiya,
-# Kabarbino-Balkarskaya Respublika, Respublika Kalmykiya,
-# Kalyzhskaya oblast', Respublika Karachaevo-Cherkessiya,
-# Respublika Kareliya, Respublika Komi,
-# Kostromskaya oblast', Krasnodarskij kraj, Kurskaya oblast',
-# Leningradskaya oblast', Lipetskaya oblast', Respublika Marij El,
-# Respublika Mordoviya, Moskva, Moskovskaya oblast',
-# Murmanskaya oblast', Nenetskij avtonomnyj okrug,
-# Nizhegorodskaya oblast', Novgorodskaya oblast', Orlovskaya oblast',
-# Penzenskaya oblast', Pskovskaya oblast', Rostovskaya oblast',
-# Ryazanskaya oblast', Sankt-Peterburg,
-# Respublika Severnaya Osetiya, Smolenskaya oblast',
-# Stavropol'skij kraj, Tambovskaya oblast', Respublika Tatarstan,
-# Tverskaya oblast', Tyl'skaya oblast', Ul'yanovskaya oblast',
-# Chechenskaya Respublika, Chuvashskaya oblast',
-# Yaroslavskaya oblast'
-Zone Europe/Moscow	 2:30:20 -	LMT	1880
-			 2:30	-	MMT	1916 Jul  3 # Moscow Mean Time
-			 2:30:48 Russia	%s	1919 Jul  1 2:00
+			 3:00	Russia	MSK/MSD	1991 Mar 31  2:00s
+			 2:00	Russia	EE%sT	2011 Mar 27  2:00s
+			 3:00	-	FET	2014 Oct 26  2:00s
+			 2:00	-	EET
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Europe/Moscow covers...
+# 01	RU-AD	Adygea, Republic of
+# 05	RU-DA	Dagestan, Republic of
+# 06	RU-IN	Ingushetia, Republic of
+# 07	RU-KB	Kabardino-Balkar Republic
+# 08	RU-KL	Kalmykia, Republic of
+# 09	RU-KC	Karachay-Cherkess Republic
+# 10	RU-KR	Karelia, Republic of
+# 11	RU-KO	Komi Republic
+# 12	RU-ME	Mari El Republic
+# 13	RU-MO	Mordovia, Republic of
+# 15	RU-SE	North Ossetia-Alania, Republic of
+# 16	RU-TA	Tatarstan, Republic of
+# 20	RU-CE	Chechen Republic
+# 21	RU-CU	Chuvash Republic
+# 23	RU-KDA	Krasnodar Krai
+# 26	RU-STA	Stavropol Krai
+# 29	RU-ARK	Arkhangelsk Oblast
+# 31	RU-BEL	Belgorod Oblast
+# 32	RU-BRY	Bryansk Oblast
+# 33	RU-VLA	Vladimir Oblast
+# 35	RU-VLG	Vologda Oblast
+# 36	RU-VOR	Voronezh Oblast
+# 37	RU-IVA	Ivanovo Oblast
+# 40	RU-KLU	Kaluga Oblast
+# 44	RU-KOS	Kostroma Oblast
+# 46	RU-KRS	Kursk Oblast
+# 47	RU-LEN	Leningrad Oblast
+# 48	RU-LIP	Lipetsk Oblast
+# 50	RU-MOS	Moscow Oblast
+# 51	RU-MUR	Murmansk Oblast
+# 52	RU-NIZ	Nizhny Novgorod Oblast
+# 53	RU-NGR	Novgorod Oblast
+# 57	RU-ORL	Oryol Oblast
+# 58	RU-PNZ	Penza Oblast
+# 60	RU-PSK	Pskov Oblast
+# 61	RU-ROS	Rostov Oblast
+# 62	RU-RYA	Ryazan Oblast
+# 67	RU-SMO	Smolensk Oblast
+# 68	RU-TAM	Tambov Oblast
+# 69	RU-TVE	Tver Oblast
+# 71	RU-TUL	Tula Oblast
+# 73	RU-ULY	Ulyanovsk Oblast
+# 76	RU-YAR	Yaroslavl Oblast
+# 77	RU-MOW	Moscow
+# 78	RU-SPE	Saint Petersburg
+# 83	RU-NEN	Nenets Autonomous Okrug
+
+# From Vladimir Karpinsky (2014-07-08):
+# LMT in Moscow (before Jul 3, 1916) is 2:30:17, that was defined by Moscow
+# Observatory (coordinates: 55 deg. 45'29.70", 37 deg. 34'05.30")....
+# LMT in Moscow since Jul 3, 1916 is 2:31:01 as a result of new standard.
+# (The info is from the book by Byalokoz ... p. 18.)
+# The time in St. Petersburg as capital of Russia was defined by
+# Pulkov observatory, near St. Petersburg.  In 1916 LMT Moscow
+# was synchronized with LMT St. Petersburg (+30 minutes), (Pulkov observatory
+# coordinates: 59 deg. 46'18.70", 30 deg. 19'40.70") so 30 deg. 19'40.70" >
+# 2h01m18.7s = 2:01:19.  LMT Moscow = LMT St.Petersburg + 30m 2:01:19 + 0:30 =
+# 2:31:19 ...
+#
+# From Paul Eggert (2014-07-08):
+# Milne does not list Moscow, but suggests that its time might be listed in
+# Résumés mensuels et annuels des observations météorologiques (1895).
+# Presumably this is OCLC 85825704, a journal published with parallel text in
+# Russian and French.  This source has not been located; go with Karpinsky.
+
+Zone Europe/Moscow	 2:30:17 -	LMT	1880
+			 2:30:17 -	MMT	1916 Jul  3 # Moscow Mean Time
+			 2:31:19 Russia	%s	1919 Jul  1  2:00
+			 3:00	Russia	%s	1921 Oct
 			 3:00	Russia	MSK/MSD	1922 Oct
 			 2:00	-	EET	1930 Jun 21
-			 3:00	Russia	MSK/MSD	1991 Mar 31 2:00s
-			 2:00	Russia	EE%sT	1992 Jan 19 2:00s
-			 3:00	Russia	MSK/MSD
-#
-# Astrakhanskaya oblast', Kirovskaya oblast', Saratovskaya oblast',
-# Volgogradskaya oblast'.  Shanks & Pottenger say Kirov is still at +0400
-# but Wikipedia (2006-05-09) says +0300.  Perhaps it switched after the
-# others?  But we have no data.
+			 3:00	Russia	MSK/MSD	1991 Mar 31  2:00s
+			 2:00	Russia	EE%sT	1992 Jan 19  2:00s
+			 3:00	Russia	MSK/MSD	2011 Mar 27  2:00s
+			 4:00	-	MSK	2014 Oct 26  2:00s
+			 3:00	-	MSK
+
+
+# From Tim Parenti (2014-07-03):
+# Europe/Simferopol covers...
+# **	****	Crimea, Republic of
+# **	****	Sevastopol
+
+Zone Europe/Simferopol	 2:16:24 -	LMT	1880
+			 2:16	-	SMT	1924 May  2 # Simferopol Mean T
+			 2:00	-	EET	1930 Jun 21
+			 3:00	-	MSK	1941 Nov
+			 1:00	C-Eur	CE%sT	1944 Apr 13
+			 3:00	Russia	MSK/MSD	1990
+			 3:00	-	MSK	1990 Jul  1  2:00
+			 2:00	-	EET	1992
+# Central Crimea used Moscow time 1994/1997.
+#
+# From Paul Eggert (2006-03-22):
+# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
+# from Kiev to Moscow time sometime after the January 1994 elections.
+# Shanks (1999) says "date of change uncertain", but implies that it happened
+# sometime between the 1994 DST switches.  Shanks & Pottenger simply say
+# 1994-09-25 03:00, but that can't be right.  For now, guess it
+# changed in May.
+			 2:00	E-Eur	EE%sT	1994 May
+# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.
+			 3:00	E-Eur	MSK/MSD	1996 Mar 31  3:00s
+			 3:00	1:00	MSD	1996 Oct 27  3:00s
+# IATA SSIM (1997-09) says Crimea switched to EET/EEST.
+# Assume it happened in March by not changing the clocks.
+			 3:00	Russia	MSK/MSD	1997
+			 3:00	-	MSK	1997 Mar lastSun  1:00u
+# From Alexander Krivenyshev (2014-03-17):
+# time change at 2:00 (2am) on March 30, 2014
+# http://vz.ru/news/2014/3/17/677464.html
+# From Paul Eggert (2014-03-30):
+# Simferopol and Sevastopol reportedly changed their central town clocks
+# late the previous day, but this appears to have been ceremonial
+# and the discrepancies are small enough to not worry about.
+			 2:00	EU	EE%sT	2014 Mar 30  2:00
+			 4:00	-	MSK	2014 Oct 26  2:00s
+			 3:00	-	MSK
+
+
+# From Tim Parenti (2014-07-03):
+# Europe/Volgograd covers...
+# 30	RU-AST	Astrakhan Oblast
+# 34	RU-VGG	Volgograd Oblast
+# 43	RU-KIR	Kirov Oblast
+# 64	RU-SAR	Saratov Oblast
+
+# From Paul Eggert (2006-05-09):
+# Shanks & Pottenger say Kirov is still at +0400 but Wikipedia says +0300.
+# Perhaps it switched after the others?  But we have no data.
+
 Zone Europe/Volgograd	 2:57:40 -	LMT	1920 Jan  3
 			 3:00	-	TSAT	1925 Apr  6 # Tsaritsyn Time
 			 3:00	-	STAT	1930 Jun 21 # Stalingrad Time
 			 4:00	-	STAT	1961 Nov 11
-			 4:00	Russia	VOL%sT	1989 Mar 26 2:00s # Volgograd T
-			 3:00	Russia	VOL%sT	1991 Mar 31 2:00s
-			 4:00	-	VOLT	1992 Mar 29 2:00s
-			 3:00	Russia	VOL%sT
-#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Samarskaya oblast', Udmyrtskaya respublika
-Zone Europe/Samara	 3:20:36 -	LMT	1919 Jul  1 2:00
+			 4:00	Russia	VOL%sT	1989 Mar 26  2:00s # Volgograd T
+			 3:00	Russia	VOL%sT	1991 Mar 31  2:00s
+			 4:00	-	VOLT	1992 Mar 29  2:00s
+			 3:00	Russia	MSK	2011 Mar 27  2:00s
+			 4:00	-	MSK	2014 Oct 26  2:00s
+			 3:00	-	MSK
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Europe/Samara covers...
+# 18	RU-UD	Udmurt Republic
+# 63	RU-SAM	Samara Oblast
+
+# Byalokoz 1919 says Samara was 3:20:20.
+
+Zone Europe/Samara	 3:20:20 -	LMT	1919 Jul  1  2:00
 			 3:00	-	SAMT	1930 Jun 21
 			 4:00	-	SAMT	1935 Jan 27
-			 4:00	Russia	KUY%sT	1989 Mar 26 2:00s # Kuybyshev
-			 3:00	Russia	KUY%sT	1991 Mar 31 2:00s
-			 2:00	Russia	KUY%sT	1991 Sep 29 2:00s
-			 3:00	-	KUYT	1991 Oct 20 3:00
-			 4:00	Russia	SAM%sT	2010 Mar 28 2:00s # Samara Time
-			 3:00	Russia	SAM%sT
+			 4:00	Russia	KUY%sT	1989 Mar 26  2:00s # Kuybyshev
+			 3:00	Russia	MSK/MSD	1991 Mar 31  2:00s
+			 2:00	Russia	EE%sT	1991 Sep 29  2:00s
+			 3:00	-	KUYT	1991 Oct 20  3:00
+			 4:00	Russia	SAM%sT	2010 Mar 28  2:00s # Samara Time
+			 3:00	Russia	SAM%sT	2011 Mar 27  2:00s
+			 4:00	-	SAMT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Yekaterinburg covers...
+# 02	RU-BA	Bashkortostan, Republic of
+# 90	RU-PER	Perm Krai
+# 45	RU-KGN	Kurgan Oblast
+# 56	RU-ORE	Orenburg Oblast
+# 66	RU-SVE	Sverdlovsk Oblast
+# 72	RU-TYU	Tyumen Oblast
+# 74	RU-CHE	Chelyabinsk Oblast
+# 86	RU-KHM	Khanty-Mansi Autonomous Okrug - Yugra
+# 89	RU-YAN	Yamalo-Nenets Autonomous Okrug
+#
+# Note: Effective 2005-12-01, (59) Perm Oblast and (81) Komi-Permyak
+# Autonomous Okrug merged to form (90, RU-PER) Perm Krai.
+
+# Milne says Yekaterinburg was 4:02:32.9; round to nearest.
+# Byalokoz 1919 says its provincial time was based on Perm, at 3:45:05.
+# Assume it switched on 1916-07-03, the time of the new standard.
+# The 1919 and 1930 transitions are from Shanks.
 
-#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Bashkortostan, Komi-Permyatskij avtonomnyj okrug,
-# Kurganskaya oblast', Orenburgskaya oblast', Permskaya oblast',
-# Sverdlovskaya oblast', Tyumenskaya oblast',
-# Khanty-Manskijskij avtonomnyj okrug, Chelyabinskaya oblast',
-# Yamalo-Nenetskij avtonomnyj okrug.
-Zone Asia/Yekaterinburg	 4:02:24 -	LMT	1919 Jul 15 4:00
+Zone Asia/Yekaterinburg	 4:02:33 -	LMT	1916 Jul  3
+			 3:45:05 -	PMT	1919 Jul 15  4:00
 			 4:00	-	SVET	1930 Jun 21 # Sverdlovsk Time
-			 5:00	Russia	SVE%sT	1991 Mar 31 2:00s
-			 4:00	Russia	SVE%sT	1992 Jan 19 2:00s
-			 5:00	Russia	YEK%sT	# Yekaterinburg Time
-#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Altaj, Altajskij kraj, Omskaya oblast'.
-Zone Asia/Omsk		 4:53:36 -	LMT	1919 Nov 14
-			 5:00	-	OMST	1930 Jun 21 # Omsk TIme
-			 6:00	Russia	OMS%sT	1991 Mar 31 2:00s
-			 5:00	Russia	OMS%sT	1992 Jan 19 2:00s
-			 6:00	Russia	OMS%sT
-#
+			 5:00	Russia	SVE%sT	1991 Mar 31  2:00s
+			 4:00	Russia	SVE%sT	1992 Jan 19  2:00s
+			 5:00	Russia	YEK%sT	2011 Mar 27  2:00s
+			 6:00	-	YEKT	2014 Oct 26  2:00s
+			 5:00	-	YEKT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Omsk covers...
+# 04	RU-AL	Altai Republic
+# 22	RU-ALT	Altai Krai
+# 55	RU-OMS	Omsk Oblast
+
+# Byalokoz 1919 says Omsk was 4:53:30.
+
+Zone Asia/Omsk		 4:53:30 -	LMT	1919 Nov 14
+			 5:00	-	OMST	1930 Jun 21 # Omsk Time
+			 6:00	Russia	OMS%sT	1991 Mar 31  2:00s
+			 5:00	Russia	OMS%sT	1992 Jan 19  2:00s
+			 6:00	Russia	OMS%sT	2011 Mar 27  2:00s
+			 7:00	-	OMST	2014 Oct 26  2:00s
+			 6:00	-	OMST
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Novosibirsk covers...
+# 54	RU-NVS	Novosibirsk Oblast
+# 70	RU-TOM	Tomsk Oblast
+
 # From Paul Eggert (2006-08-19): I'm guessing about Tomsk here; it's
 # not clear when it switched from +7 to +6.
-# Novosibirskaya oblast', Tomskaya oblast'.
-Zone Asia/Novosibirsk	 5:31:40 -	LMT	1919 Dec 14 6:00
+
+Zone Asia/Novosibirsk	 5:31:40 -	LMT	1919 Dec 14  6:00
 			 6:00	-	NOVT	1930 Jun 21 # Novosibirsk Time
-			 7:00	Russia	NOV%sT	1991 Mar 31 2:00s
-			 6:00	Russia	NOV%sT	1992 Jan 19 2:00s
+			 7:00	Russia	NOV%sT	1991 Mar 31  2:00s
+			 6:00	Russia	NOV%sT	1992 Jan 19  2:00s
 			 7:00	Russia	NOV%sT	1993 May 23 # say Shanks & P.
-			 6:00	Russia	NOV%sT
+			 6:00	Russia	NOV%sT	2011 Mar 27  2:00s
+			 7:00	-	NOVT	2014 Oct 26  2:00s
+			 6:00	-	NOVT
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Novokuznetsk covers...
+# 42	RU-KEM	Kemerovo Oblast
 
 # From Alexander Krivenyshev (2009-10-13):
 # Kemerovo oblast' (Kemerovo region) in Russia will change current time zone on
@@ -2108,14 +2530,10 @@
 # time zone." ("Russia Zone 5" or old "USSR Zone 5" is GMT +0600)
 #
 # Russian Government web site (Russian language)
-# 
 # http://www.government.ru/content/governmentactivity/rfgovernmentdecisions/archive/2009/09/14/991633.htm
-# 
 # or Russian-English translation by WorldTimeZone.com with reference
 # map to local region and new Russia Time Zone map after March 28, 2010
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_russia03.html
-# 
 #
 # Thus, when Russia will switch to DST on the night of March 28, 2010
 # Kemerovo region (Kemerovo oblast') will not change the clock.
@@ -2123,123 +2541,332 @@
 # As a result, Kemerovo oblast' will be in the same time zone as
 # Novosibirsk, Omsk, Tomsk, Barnaul and Altai Republic.
 
-Zone Asia/Novokuznetsk	 5:48:48 -	NMT	1920 Jan  6
-			 6:00	-	KRAT	1930 Jun 21 # Krasnoyarsk Time
-			 7:00	Russia	KRA%sT	1991 Mar 31 2:00s
-			 6:00	Russia	KRA%sT	1992 Jan 19 2:00s
-			 7:00	Russia	KRA%sT	2010 Mar 28 2:00s
-			 6:00	Russia	NOV%sT # Novosibirsk/Novokuznetsk Time
+# From Tim Parenti (2014-07-02), per Alexander Krivenyshev (2014-07-02):
+# The Kemerovo region will remain at UTC+7 through the 2014-10-26 change, thus
+# realigning itself with KRAT.
 
+Zone Asia/Novokuznetsk	 5:48:48 -	LMT	1924 May  1
+			 6:00	-	KRAT	1930 Jun 21 # Krasnoyarsk Time
+			 7:00	Russia	KRA%sT	1991 Mar 31  2:00s
+			 6:00	Russia	KRA%sT	1992 Jan 19  2:00s
+			 7:00	Russia	KRA%sT	2010 Mar 28  2:00s
+			 6:00	Russia	NOV%sT	2011 Mar 27  2:00s # Novosibirsk
+			 7:00	-	NOVT	2014 Oct 26  2:00s
+			 7:00	-	KRAT	# Krasnoyarsk Time
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Krasnoyarsk covers...
+# 17	RU-TY	Tuva Republic
+# 19	RU-KK	Khakassia, Republic of
+# 24	RU-KYA	Krasnoyarsk Krai
 #
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Krasnoyarskij kraj,
-# Tajmyrskij (Dolgano-Nenetskij) avtonomnyj okrug,
-# Respublika Tuva, Respublika Khakasiya, Evenkijskij avtonomnyj okrug.
-Zone Asia/Krasnoyarsk	 6:11:20 -	LMT	1920 Jan  6
+# Note: Effective 2007-01-01, (88) Evenk Autonomous Okrug and (84) Taymyr
+# Autonomous Okrug were merged into (24, RU-KYA) Krasnoyarsk Krai.
+
+# Byalokoz 1919 says Krasnoyarsk was 6:11:26.
+
+Zone Asia/Krasnoyarsk	 6:11:26 -	LMT	1920 Jan  6
 			 6:00	-	KRAT	1930 Jun 21 # Krasnoyarsk Time
-			 7:00	Russia	KRA%sT	1991 Mar 31 2:00s
-			 6:00	Russia	KRA%sT	1992 Jan 19 2:00s
-			 7:00	Russia	KRA%sT
-#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Buryatiya, Irkutskaya oblast',
-# Ust'-Ordynskij Buryatskij avtonomnyj okrug.
-Zone Asia/Irkutsk	 6:57:20 -	LMT	1880
-			 6:57:20 -	IMT	1920 Jan 25 # Irkutsk Mean Time
+			 7:00	Russia	KRA%sT	1991 Mar 31  2:00s
+			 6:00	Russia	KRA%sT	1992 Jan 19  2:00s
+			 7:00	Russia	KRA%sT	2011 Mar 27  2:00s
+			 8:00	-	KRAT	2014 Oct 26  2:00s
+			 7:00	-	KRAT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Irkutsk covers...
+# 03	RU-BU	Buryatia, Republic of
+# 38	RU-IRK	Irkutsk Oblast
+#
+# Note: Effective 2008-01-01, (85) Ust-Orda Buryat Autonomous Okrug was
+# merged into (38, RU-IRK) Irkutsk Oblast.
+
+# Milne 1899 says Irkutsk was 6:57:15.
+# Byalokoz 1919 says Irkutsk was 6:57:05.
+# Go with Byalokoz.
+
+Zone Asia/Irkutsk	 6:57:05 -	LMT	1880
+			 6:57:05 -	IMT	1920 Jan 25 # Irkutsk Mean Time
 			 7:00	-	IRKT	1930 Jun 21 # Irkutsk Time
-			 8:00	Russia	IRK%sT	1991 Mar 31 2:00s
-			 7:00	Russia	IRK%sT	1992 Jan 19 2:00s
-			 8:00	Russia	IRK%sT
-#
-# From Oscar van Vlijmen (2003-10-18): [This region consists of]
-# Aginskij Buryatskij avtonomnyj okrug, Amurskaya oblast',
-# [parts of] Respublika Sakha (Yakutiya), Chitinskaya oblast'.
-
-# From Oscar van Vlijmen (2009-11-29):
-# ...some regions of RUssia were merged with others since 2005...
-# Some names were changed, no big deal, except for one instance: a new name.
-# YAK/YAKST: UTC+9 Zabajkal'skij kraj.
-
-# From Oscar van Vlijmen (2009-11-29):
-# The Sakha districts are: Aldanskij, Amginskij, Anabarskij,
-# Verkhnevilyujskij, Vilyujskij, Gornyj,
-# Zhiganskij, Kobyajskij, Lenskij, Megino-Kangalasskij, Mirninskij,
-# Namskij, Nyurbinskij, Olenyokskij, Olyokminskij,
-# Suntarskij, Tattinskij, Ust'-Aldanskij, Khangalasskij,
-# Churapchinskij, Eveno-Bytantajskij Natsional'nij.
+			 8:00	Russia	IRK%sT	1991 Mar 31  2:00s
+			 7:00	Russia	IRK%sT	1992 Jan 19  2:00s
+			 8:00	Russia	IRK%sT	2011 Mar 27  2:00s
+			 9:00	-	IRKT	2014 Oct 26  2:00s
+			 8:00	-	IRKT
+
 
-Zone Asia/Yakutsk	 8:38:40 -	LMT	1919 Dec 15
+# From Tim Parenti (2014-07-06):
+# Asia/Chita covers...
+# 92	RU-ZAB	Zabaykalsky Krai
+#
+# Note: Effective 2008-03-01, (75) Chita Oblast and (80) Agin-Buryat
+# Autonomous Okrug merged to form (92, RU-ZAB) Zabaykalsky Krai.
+
+Zone Asia/Chita	 7:33:52 -	LMT	1919 Dec 15
+			 8:00	-	YAKT	1930 Jun 21 # Yakutsk Time
+			 9:00	Russia	YAK%sT	1991 Mar 31  2:00s
+			 8:00	Russia	YAK%sT	1992 Jan 19  2:00s
+			 9:00	Russia	YAK%sT	2011 Mar 27  2:00s
+			10:00	-	YAKT	2014 Oct 26  2:00s
+			 8:00	-	IRKT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
+# Asia/Yakutsk covers...
+# 28	RU-AMU	Amur Oblast
+#
+# ...and parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-02	****	Aldansky District
+# 14-04	****	Amginsky District
+# 14-05	****	Anabarsky District
+# 14-06	****	Bulunsky District
+# 14-07	****	Verkhnevilyuysky District
+# 14-10	****	Vilyuysky District
+# 14-11	****	Gorny District
+# 14-12	****	Zhigansky District
+# 14-13	****	Kobyaysky District
+# 14-14	****	Lensky District
+# 14-15	****	Megino-Kangalassky District
+# 14-16	****	Mirninsky District
+# 14-18	****	Namsky District
+# 14-19	****	Neryungrinsky District
+# 14-21	****	Nyurbinsky District
+# 14-23	****	Olenyoksky District
+# 14-24	****	Olyokminsky District
+# 14-26	****	Suntarsky District
+# 14-27	****	Tattinsky District
+# 14-29	****	Ust-Aldansky District
+# 14-32	****	Khangalassky District
+# 14-33	****	Churapchinsky District
+# 14-34	****	Eveno-Bytantaysky National District
+
+# From Tim Parenti (2014-07-03):
+# Our commentary seems to have lost mention of (14-19) Neryungrinsky District.
+# Since the surrounding districts of Sakha are all YAKT, assume this is, too.
+# Also assume its history has been the same as the rest of Asia/Yakutsk.
+
+# Byalokoz 1919 says Yakutsk was 8:38:58.
+
+Zone Asia/Yakutsk	 8:38:58 -	LMT	1919 Dec 15
 			 8:00	-	YAKT	1930 Jun 21 # Yakutsk Time
-			 9:00	Russia	YAK%sT	1991 Mar 31 2:00s
-			 8:00	Russia	YAK%sT	1992 Jan 19 2:00s
-			 9:00	Russia	YAK%sT
-#
-# From Oscar van Vlijmen (2003-10-18): [This region consists of]
-# Evrejskaya avtonomnaya oblast', Khabarovskij kraj, Primorskij kraj,
-# [parts of] Respublika Sakha (Yakutiya).
-
-# From Oscar van Vlijmen (2009-11-29):
-# The Sakha districts are: Bulunskij, Verkhoyanskij, Tomponskij, Ust'-Majskij,
-# Ust'-Yanskij.
-Zone Asia/Vladivostok	 8:47:44 -	LMT	1922 Nov 15
+			 9:00	Russia	YAK%sT	1991 Mar 31  2:00s
+			 8:00	Russia	YAK%sT	1992 Jan 19  2:00s
+			 9:00	Russia	YAK%sT	2011 Mar 27  2:00s
+			10:00	-	YAKT	2014 Oct 26  2:00s
+			 9:00	-	YAKT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
+# Asia/Vladivostok covers...
+# 25	RU-PRI	Primorsky Krai
+# 27	RU-KHA	Khabarovsk Krai
+# 79	RU-YEV	Jewish Autonomous Oblast
+#
+# ...and parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-09	****	Verkhoyansky District
+# 14-31	****	Ust-Yansky District
+
+# Milne 1899 says Vladivostok was 8:47:33.5.
+# Byalokoz 1919 says Vladivostok was 8:47:31.
+# Go with Byalokoz.
+
+Zone Asia/Vladivostok	 8:47:31 -	LMT	1922 Nov 15
 			 9:00	-	VLAT	1930 Jun 21 # Vladivostok Time
-			10:00	Russia	VLA%sT	1991 Mar 31 2:00s
-			 9:00	Russia	VLA%sST	1992 Jan 19 2:00s
-			10:00	Russia	VLA%sT
-#
-# Sakhalinskaya oblast'.
-# The Zone name should be Yuzhno-Sakhalinsk, but that's too long.
+			10:00	Russia	VLA%sT	1991 Mar 31  2:00s
+			 9:00	Russia	VLA%sT	1992 Jan 19  2:00s
+			10:00	Russia	VLA%sT	2011 Mar 27  2:00s
+			11:00	-	VLAT	2014 Oct 26  2:00s
+			10:00	-	VLAT
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Khandyga covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-28	****	Tomponsky District
+# 14-30	****	Ust-Maysky District
+
+# From Arthur David Olson (2012-05-09):
+# Tomponskij and Ust'-Majskij switched from Vladivostok time to Yakutsk time
+# in 2011.
+
+# From Paul Eggert (2012-11-25):
+# Shanks and Pottenger (2003) has Khandyga on Yakutsk time.
+# Make a wild guess that it switched to Vladivostok time in 2004.
+# This transition is no doubt wrong, but we have no better info.
+
+Zone Asia/Khandyga	 9:02:13 -	LMT	1919 Dec 15
+			 8:00	-	YAKT	1930 Jun 21 # Yakutsk Time
+			 9:00	Russia	YAK%sT	1991 Mar 31  2:00s
+			 8:00	Russia	YAK%sT	1992 Jan 19  2:00s
+			 9:00	Russia	YAK%sT	2004
+			10:00	Russia	VLA%sT	2011 Mar 27  2:00s
+			11:00	-	VLAT	2011 Sep 13  0:00s # Decree 725?
+			10:00	-	YAKT	2014 Oct 26  2:00s
+			 9:00	-	YAKT
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Sakhalin covers...
+# 65	RU-SAK	Sakhalin Oblast
+# ...with the exception of:
+# 65-11	****	Severo-Kurilsky District (North Kuril Islands)
+
+# The Zone name should be Asia/Yuzhno-Sakhalinsk, but that's too long.
 Zone Asia/Sakhalin	 9:30:48 -	LMT	1905 Aug 23
-			 9:00	-	CJT	1938
+			 9:00	-	JCST	1937 Oct  1
 			 9:00	-	JST	1945 Aug 25
-			11:00	Russia	SAK%sT	1991 Mar 31 2:00s # Sakhalin T.
-			10:00	Russia	SAK%sT	1992 Jan 19 2:00s
-			11:00	Russia	SAK%sT	1997 Mar lastSun 2:00s
-			10:00	Russia	SAK%sT
-#
-# From Oscar van Vlijmen (2003-10-18): [This region consists of]
-# Magadanskaya oblast', Respublika Sakha (Yakutiya).
-# Probably also: Kuril Islands.
-
-# From Oscar van Vlijmen (2009-11-29):
-# The Sakha districts are: Abyjskij, Allaikhovskij, Verkhhhnekolymskij, Momskij,
-# Nizhnekolymskij, Ojmyakonskij, Srednekolymskij.
+			11:00	Russia	SAK%sT	1991 Mar 31  2:00s # Sakhalin T
+			10:00	Russia	SAK%sT	1992 Jan 19  2:00s
+			11:00	Russia	SAK%sT	1997 Mar lastSun  2:00s
+			10:00	Russia	SAK%sT	2011 Mar 27  2:00s
+			11:00	-	SAKT	2014 Oct 26  2:00s
+			10:00	-	SAKT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
+# Asia/Magadan covers...
+# 49	RU-MAG	Magadan Oblast
+
+# From Tim Parenti (2014-07-06), per Alexander Krivenyshev (2014-07-02):
+# Magadan Oblast is moving from UTC+12 to UTC+10 on 2014-10-26; however,
+# several districts of Sakha Republic as well as Severo-Kurilsky District of
+# the Sakhalin Oblast (also known as the North Kuril Islands), represented
+# until now by Asia/Magadan, will instead move to UTC+11.  These regions will
+# need their own zone.
+
 Zone Asia/Magadan	10:03:12 -	LMT	1924 May  2
 			10:00	-	MAGT	1930 Jun 21 # Magadan Time
-			11:00	Russia	MAG%sT	1991 Mar 31 2:00s
-			10:00	Russia	MAG%sT	1992 Jan 19 2:00s
-			11:00	Russia	MAG%sT
+			11:00	Russia	MAG%sT	1991 Mar 31  2:00s
+			10:00	Russia	MAG%sT	1992 Jan 19  2:00s
+			11:00	Russia	MAG%sT	2011 Mar 27  2:00s
+			12:00	-	MAGT	2014 Oct 26  2:00s
+			10:00	-	MAGT
+
+
+# From Tim Parenti (2014-07-06):
+# Asia/Srednekolymsk covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-01	****	Abyysky District
+# 14-03	****	Allaikhovsky District
+# 14-08	****	Verkhnekolymsky District
+# 14-17	****	Momsky District
+# 14-20	****	Nizhnekolymsky District
+# 14-25	****	Srednekolymsky District
+#
+# ...and parts of (65, RU-SAK) Sakhalin Oblast:
+# 65-11	****	Severo-Kurilsky District (North Kuril Islands)
+
+# From Tim Parenti (2014-07-02):
+# Oymyakonsky District of Sakha Republic (represented by Ust-Nera), along with
+# most of Sakhalin Oblast (represented by Sakhalin) will be moving to UTC+10 on
+# 2014-10-26 to stay aligned with VLAT/SAKT; however, Severo-Kurilsky District
+# of the Sakhalin Oblast (also known as the North Kuril Islands, represented by
+# Severo-Kurilsk) will remain on UTC+11.
+
+# From Tim Parenti (2014-07-06):
+# Assume North Kuril Islands have history like Magadan before 2011-03-27.
+# There is a decent chance this is wrong, in which case a new zone
+# Asia/Severo-Kurilsk would become necessary.
+#
+# Srednekolymsk and Zyryanka are the most populous places amongst these
+# districts, but have very similar populations.  In fact, Wikipedia currently
+# lists them both as having 3528 people, exactly 1668 males and 1860 females
+# each!  (Yikes!)
+# http://en.wikipedia.org/w/?title=Srednekolymsky_District&oldid=603435276
+# http://en.wikipedia.org/w/?title=Verkhnekolymsky_District&oldid=594378493
+# Assume this is a mistake, albeit an amusing one.
+#
+# Looking at censuses, the populations of the two municipalities seem to have
+# fluctuated recently.  Zyryanka was more populous than Srednekolymsk in the
+# 1989 and 2002 censuses, but Srednekolymsk was more populous in the most
+# recent (2010) census, 3525 to 3170.  (See pages 195 and 197 of
+# http://www.gks.ru/free_doc/new_site/perepis2010/croc/Documents/Vol1/pub-01-05.pdf
+# in Russian.)  In addition, Srednekolymsk appears to be a much older
+# settlement and the population of Zyryanka seems to be declining.
+# Go with Srednekolymsk.
 #
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Kamchatskaya oblast', Koryakskij avtonomnyj okrug.
+# Since Magadan Oblast moves to UTC+10 on 2014-10-26, we cannot keep using MAGT
+# as the abbreviation.  Use SRET instead.
+
+Zone Asia/Srednekolymsk	10:14:52 -	LMT	1924 May  2
+			10:00	-	MAGT	1930 Jun 21 # Magadan Time
+			11:00	Russia	MAG%sT	1991 Mar 31  2:00s
+			10:00	Russia	MAG%sT	1992 Jan 19  2:00s
+			11:00	Russia	MAG%sT	2011 Mar 27  2:00s
+			12:00	-	MAGT	2014 Oct 26  2:00s
+			11:00	-	SRET	# Srednekolymsk Time
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Ust-Nera covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-22	****	Oymyakonsky District
+
+# From Arthur David Olson (2012-05-09):
+# Ojmyakonskij [and the Kuril Islands] switched from
+# Magadan time to Vladivostok time in 2011.
+#
+# From Tim Parenti (2014-07-06), per Alexander Krivenyshev (2014-07-02):
+# It's unlikely that any of the Kuril Islands were involved in such a switch,
+# as the South and Middle Kurils have been on UTC+11 (SAKT) with the rest of
+# Sakhalin Oblast since at least 2011-09, and the North Kurils have been on
+# UTC+12 since at least then, too.
+
+Zone Asia/Ust-Nera	 9:32:54 -	LMT	1919 Dec 15
+			 8:00	-	YAKT	1930 Jun 21 # Yakutsk Time
+			 9:00	Russia	YAKT	1981 Apr  1
+			11:00	Russia	MAG%sT	1991 Mar 31  2:00s
+			10:00	Russia	MAG%sT	1992 Jan 19  2:00s
+			11:00	Russia	MAG%sT	2011 Mar 27  2:00s
+			12:00	-	MAGT	2011 Sep 13  0:00s # Decree 725?
+			11:00	-	VLAT	2014 Oct 26  2:00s
+			10:00	-	VLAT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Kamchatka covers...
+# 91	RU-KAM	Kamchatka Krai
 #
-# The Zone name should be Asia/Petropavlovsk-Kamchatski, but that's too long.
+# Note: Effective 2007-07-01, (41) Kamchatka Oblast and (82) Koryak
+# Autonomous Okrug merged to form (91, RU-KAM) Kamchatka Krai.
+
+# The Zone name should be Asia/Petropavlovsk-Kamchatski or perhaps
+# Asia/Petropavlovsk-Kamchatsky, but these are too long.
 Zone Asia/Kamchatka	10:34:36 -	LMT	1922 Nov 10
 			11:00	-	PETT	1930 Jun 21 # P-K Time
-			12:00	Russia	PET%sT	1991 Mar 31 2:00s
-			11:00	Russia	PET%sT	1992 Jan 19 2:00s
-			12:00	Russia	PET%sT	2010 Mar 28 2:00s
-			11:00	Russia	PET%sT
-#
-# Chukotskij avtonomnyj okrug
+			12:00	Russia	PET%sT	1991 Mar 31  2:00s
+			11:00	Russia	PET%sT	1992 Jan 19  2:00s
+			12:00	Russia	PET%sT	2010 Mar 28  2:00s
+			11:00	Russia	PET%sT	2011 Mar 27  2:00s
+			12:00	-	PETT
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Anadyr covers...
+# 87	RU-CHU	Chukotka Autonomous Okrug
+
 Zone Asia/Anadyr	11:49:56 -	LMT	1924 May  2
 			12:00	-	ANAT	1930 Jun 21 # Anadyr Time
-			13:00	Russia	ANA%sT	1982 Apr  1 0:00s
-			12:00	Russia	ANA%sT	1991 Mar 31 2:00s
-			11:00	Russia	ANA%sT	1992 Jan 19 2:00s
-			12:00	Russia	ANA%sT	2010 Mar 28 2:00s
-			11:00	Russia	ANA%sT
+			13:00	Russia	ANA%sT	1982 Apr  1  0:00s
+			12:00	Russia	ANA%sT	1991 Mar 31  2:00s
+			11:00	Russia	ANA%sT	1992 Jan 19  2:00s
+			12:00	Russia	ANA%sT	2010 Mar 28  2:00s
+			11:00	Russia	ANA%sT	2011 Mar 27  2:00s
+			12:00	-	ANAT
+
+
+# San Marino
+# See Europe/Rome.
 
 # Serbia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Belgrade	1:22:00	-	LMT	1884
 			1:00	-	CET	1941 Apr 18 23:00
 			1:00	C-Eur	CE%sT	1945
-			1:00	-	CET	1945 May 8 2:00s
+			1:00	-	CET	1945 May  8  2:00s
 			1:00	1:00	CEST	1945 Sep 16  2:00s
-# Metod Kozelj reports that the legal date of
+# Metod Koželj reports that the legal date of
 # transition to EU rules was 1982-11-27, for all of Yugoslavia at the time.
-# Shanks & Pottenger don't give as much detail, so go with Kozelj.
+# Shanks & Pottenger don't give as much detail, so go with Koželj.
 			1:00	-	CET	1982 Nov 27
 			1:00	EU	CE%sT
 Link Europe/Belgrade Europe/Ljubljana	# Slovenia
@@ -2252,7 +2879,7 @@
 Link Europe/Prague Europe/Bratislava
 
 # Slovenia
-# see Serbia
+# See Europe/Belgrade.
 
 # Spain
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -2315,13 +2942,13 @@
 			 0:00	1:00	WEST	1918 Oct  7 23:00
 			 0:00	-	WET	1924
 			 0:00	Spain	WE%sT	1929
-			 0:00 SpainAfrica WE%sT 1984 Mar 16
+			 0:00 SpainAfrica WE%sT	1984 Mar 16
 			 1:00	-	CET	1986
 			 1:00	EU	CE%sT
 Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
-			-1:00	-	CANT	1946 Sep 30 1:00 # Canaries Time
-			 0:00	-	WET	1980 Apr  6 0:00s
-			 0:00	1:00	WEST	1980 Sep 28 0:00s
+			-1:00	-	CANT	1946 Sep 30  1:00 # Canaries T
+			 0:00	-	WET	1980 Apr  6  0:00s
+			 0:00	1:00	WEST	1980 Sep 28  0:00s
 			 0:00	EU	WE%sT
 # IATA SSIM (1996-09) says the Canaries switch at 2:00u, not 1:00u.
 # Ignore this for now, as the Canaries are part of the EU.
@@ -2330,7 +2957,7 @@
 
 # From Ivan Nilsson (2001-04-13), superseding Shanks & Pottenger:
 #
-# The law "Svensk forfattningssamling 1878, no 14" about standard time in 1879:
+# The law "Svensk författningssamling 1878, no 14" about standard time in 1879:
 # From the beginning of 1879 (that is 01-01 00:00) the time for all
 # places in the country is "the mean solar time for the meridian at
 # three degrees, or twelve minutes of time, to the west of the
@@ -2341,7 +2968,7 @@
 # national standard time as 01:00:14 ahead of GMT....
 #
 # About the beginning of CET in Sweden. The lawtext ("Svensk
-# forfattningssamling 1899, no 44") states, that "from the beginning
+# författningssamling 1899, no 44") states, that "from the beginning
 # of 1900... ... the same as the mean solar time for the meridian at
 # the distance of one hour of time from the meridian of the English
 # observatory at Greenwich, or at 12 minutes 14 seconds to the west
@@ -2349,7 +2976,7 @@
 # 1899-06-16.  In short: At 1900-01-01 00:00:00 the new standard time
 # in Sweden is 01:00:00 ahead of GMT.
 #
-# 1916: The lawtext ("Svensk forfattningssamling 1916, no 124") states
+# 1916: The lawtext ("Svensk författningssamling 1916, no 124") states
 # that "1916-05-15 is considered to begin one hour earlier". It is
 # pretty obvious that at 05-14 23:00 the clocks are set to 05-15 00:00....
 # Further the law says, that "1916-09-30 is considered to end one hour later".
@@ -2359,7 +2986,7 @@
 # not available on the site (to my knowledge they are only available
 # in Swedish):  (type
 # "sommartid" without the quotes in the field "Fritext" and then click
-# the Sok-button).
+# the Sök-button).
 #
 # (2001-05-13):
 #
@@ -2374,9 +3001,9 @@
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Stockholm	1:12:12 -	LMT	1879 Jan  1
-			1:00:14	-	SET	1900 Jan  1	# Swedish Time
+			1:00:14	-	SET	1900 Jan  1 # Swedish Time
 			1:00	-	CET	1916 May 14 23:00
-			1:00	1:00	CEST	1916 Oct  1 01:00
+			1:00	1:00	CEST	1916 Oct  1  1:00
 			1:00	-	CET	1980
 			1:00	EU	CE%sT
 
@@ -2384,9 +3011,9 @@
 # From Howse:
 # By the end of the 18th century clocks and watches became commonplace
 # and their performance improved enormously.  Communities began to keep
-# mean time in preference to apparent time -- Geneva from 1780 ....
+# mean time in preference to apparent time - Geneva from 1780 ....
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-# From Whitman (who writes ``Midnight?''):
+# From Whitman (who writes "Midnight?"):
 # Rule	Swiss	1940	only	-	Nov	 2	0:00	1:00	S
 # Rule	Swiss	1940	only	-	Dec	31	0:00	0	-
 # From Shanks & Pottenger:
@@ -2400,7 +3027,7 @@
 # to be wrong. This is now verified.
 #
 # I have found copies of the original ruling by the Swiss Federal
-# government, in 'Eidgen[o]ssische Gesetzessammlung 1941 and 1942' (Swiss
+# government, in 'Eidgenössische Gesetzessammlung 1941 and 1942' (Swiss
 # federal law collection)...
 #
 # DST began on Monday 5 May 1941, 1:00 am by shifting the clocks to 2:00 am
@@ -2419,7 +3046,7 @@
 # night as an absolute novelty, because this was the first time that such
 # a thing had happened in Switzerland.
 #
-# I have also checked 1916, because one book source (Gabriel, Traite de
+# I have also checked 1916, because one book source (Gabriel, Traité de
 # l'heure dans le monde) claims that Switzerland had DST in 1916. This is
 # false, no official document could be found. Probably Gabriel got misled
 # by references to Germany, which introduced DST in 1916 for the first time.
@@ -2431,23 +3058,53 @@
 # The 1940 rules must be deleted.
 #
 # One further detail for Switzerland, which is probably out of scope for
-# most users of tzdata:
-# The zone file
-# Zone    Europe/Zurich   0:34:08 -       LMT     1848 Sep 12
-#                          0:29:44 -       BMT     1894 Jun #Bern Mean Time
-#                          1:00    Swiss   CE%sT   1981
-#                          1:00    EU      CE%sT
+# most users of tzdata: The [Europe/Zurich zone] ...
 # describes all of Switzerland correctly, with the exception of
-# the Cantone Geneve (Geneva, Genf). Between 1848 and 1894 Geneve did not
+# the Canton de Genève (Geneva, Genf). Between 1848 and 1894 Geneva did not
 # follow Bern Mean Time but kept its own local mean time.
 # To represent this, an extra zone would be needed.
+#
+# From Alois Treindl (2013-09-11):
+# The Federal regulations say
+# http://www.admin.ch/opc/de/classified-compilation/20071096/index.html
+# ... the meridian for Bern mean time ... is 7 degrees 26' 22.50".
+# Expressed in time, it is 0h29m45.5s.
+
+# From Pierre-Yves Berger (2013-09-11):
+# the "Circulaire du conseil fédéral" (December 11 1893)
+# http://www.amtsdruckschriften.bar.admin.ch/viewOrigDoc.do?id=10071353
+# clearly states that the [1894-06-01] change should be done at midnight
+# but if no one is present after 11 at night, could be postponed until one
+# hour before the beginning of service.
+
+# From Paul Eggert (2013-09-11):
+# Round BMT to the nearest even second, 0:29:46.
+#
+# We can find no reliable source for Shanks's assertion that all of Switzerland
+# except Geneva switched to Bern Mean Time at 00:00 on 1848-09-12.  This book:
+#
+#	Jakob Messerli. Gleichmässig, pünktlich, schnell. Zeiteinteilung und
+#	Zeitgebrauch in der Schweiz im 19. Jahrhundert. Chronos, Zurich 1995,
+#	ISBN 3-905311-68-2, OCLC 717570797.
+#
+# suggests that the transition was more gradual, and that the Swiss did not
+# agree about civil time during the transition.  The timekeeping it gives the
+# most detail for is postal and telegraph time: here, federal legislation (the
+# "Bundesgesetz über die Erstellung von elektrischen Telegraphen") passed on
+# 1851-11-23, and an official implementation notice was published 1853-07-16
+# (Bundesblatt 1853, Bd. II, S. 859).  On p 72 Messerli writes that in
+# practice since July 1853 Bernese time was used in "all postal and telegraph
+# offices in Switzerland from Geneva to St. Gallen and Basel to Chiasso"
+# (Google translation).  For now, model this transition as occurring on
+# 1853-07-16, though it probably occurred at some other date in Zurich, and
+# legal civil time probably changed at still some other transition date.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Swiss	1941	1942	-	May	Mon>=1	1:00	1:00	S
 Rule	Swiss	1941	1942	-	Oct	Mon>=1	2:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Zurich	0:34:08 -	LMT	1848 Sep 12
-			0:29:44	-	BMT	1894 Jun # Bern Mean Time
+Zone	Europe/Zurich	0:34:08 -	LMT	1853 Jul 16 # See above comment.
+			0:29:46	-	BMT	1894 Jun    # Bern Mean Time
 			1:00	Swiss	CE%sT	1981
 			1:00	EU	CE%sT
 
@@ -2455,7 +3112,7 @@
 
 # From Amar Devegowda (2007-01-03):
 # The time zone rules for Istanbul, Turkey have not been changed for years now.
-# ... The latest rules are available at -
+# ... The latest rules are available at:
 # http://www.timeanddate.com/worldclock/timezone.html?n=107
 # From Steffen Thorsen (2007-01-03):
 # I have been able to find press records back to 1996 which all say that
@@ -2480,26 +3137,29 @@
 # (on a non-government server though) describing dates between 2002 and 2006:
 # http://www.alomaliye.com/bkk_2002_3769.htm
 
-# From Sue Williams (2008-08-11):
-# I spotted this news article about a potential change in Turkey.
-#
-# 
-# http://www.hurriyet.com.tr/english/domestic/9626174.asp?scr=1
-# 
-
-# From Sue Williams (2008-08-20):
-# This article says that around the end of March 2011, Turkey wants to
-# adjust the clocks forward by 1/2 hour and stay that way permanently.
-# The article indicates that this is a change in timezone offset in addition
-# to stopping observance of DST.
-# This proposal has not yet been approved.
-#
-# Read more here...
-#
-# Turkey to abandon daylight saving time in 2011
-# 
-# http://www.turkishdailynews.com.tr/article.php?enewsid=112989
-# 
+# From Gökdeniz Karadağ (2011-03-10):
+# According to the articles linked below, Turkey will change into summer
+# time zone (GMT+3) on March 28, 2011 at 3:00 a.m. instead of March 27.
+# This change is due to a nationwide exam on 27th.
+# http://www.worldbulletin.net/?aType=haber&ArticleID=70872
+# Turkish:
+# http://www.hurriyet.com.tr/ekonomi/17230464.asp?gid=373
+
+# From Faruk Pasin (2014-02-14):
+# The DST for Turkey has been changed for this year because of the
+# Turkish Local election....
+# http://www.sabah.com.tr/Ekonomi/2014/02/12/yaz-saatinde-onemli-degisiklik
+# ... so Turkey will move clocks forward one hour on March 31 at 3:00 a.m.
+# From Randal L. Schwartz (2014-04-15):
+# Having landed on a flight from the states to Istanbul (via AMS) on March 31,
+# I can tell you that NOBODY (even the airlines) respected this timezone DST
+# change delay.  Maybe the word just didn't get out in time.
+# From Paul Eggert (2014-06-15):
+# The press reported massive confusion, as election officials obeyed the rule
+# change but cell phones (and airline baggage systems) did not.  See:
+# Kostidis M. Eventful elections in Turkey. Balkan News Agency
+# http://www.balkaneu.com/eventful-elections-turkey/ 2014-03-30.
+# I guess the best we can do is document the official time.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Turkey	1916	only	-	May	 1	0:00	1:00	S
@@ -2566,19 +3226,82 @@
 			2:00	Turkey	EE%sT	1978 Oct 15
 			3:00	Turkey	TR%sT	1985 Apr 20 # Turkey Time
 			2:00	Turkey	EE%sT	2007
+			2:00	EU	EE%sT	2011 Mar 27  1:00u
+			2:00	-	EET	2011 Mar 28  1:00u
+			2:00	EU	EE%sT	2014 Mar 30  1:00u
+			2:00	-	EET	2014 Mar 31  1:00u
 			2:00	EU	EE%sT
 Link	Europe/Istanbul	Asia/Istanbul	# Istanbul is in both continents.
 
 # Ukraine
 #
-# From Igor Karpov, who works for the Ukranian Ministry of Justice,
+# From Igor Karpov, who works for the Ukrainian Ministry of Justice,
 # via Garrett Wollman (2003-01-27):
-# BTW, I've found the official document on this matter. It's goverment
+# BTW, I've found the official document on this matter. It's government
 # regulations number 509, May 13, 1996. In my poor translation it says:
 # "Time in Ukraine is set to second timezone (Kiev time). Each last Sunday
 # of March at 3am the time is changing to 4am and each last Sunday of
 # October the time at 4am is changing to 3am"
 
+# From Alexander Krivenyshev (2011-09-20):
+# On September 20, 2011 the deputies of the Verkhovna Rada agreed to
+# abolish the transfer clock to winter time.
+#
+# Bill number 8330 of MP from the Party of Regions Oleg Nadoshi got
+# approval from 266 deputies.
+#
+# Ukraine abolishes transfer back to the winter time (in Russian)
+# http://news.mail.ru/politics/6861560/
+#
+# The Ukrainians will no longer change the clock (in Russian)
+# http://www.segodnya.ua/news/14290482.html
+#
+# Deputies cancelled the winter time (in Russian)
+# http://www.pravda.com.ua/rus/news/2011/09/20/6600616/
+#
+# From Philip Pizzey (2011-10-18):
+# Today my Ukrainian colleagues have informed me that the
+# Ukrainian parliament have decided that they will go to winter
+# time this year after all.
+#
+# From Udo Schwedt (2011-10-18):
+# As far as I understand, the recent change to the Ukrainian time zone
+# (Europe/Kiev) to introduce permanent daylight saving time (similar
+# to Russia) was reverted today:
+# http://portal.rada.gov.ua/rada/control/en/publish/article/info_left?art_id=287324&cat_id=105995
+#
+# Also reported by Alexander Bokovoy (2011-10-18) who also noted:
+# The law documents themselves are at
+# http://w1.c1.rada.gov.ua/pls/zweb_n/webproc4_1?id=&pf3511=41484
+
+# From Vladimir in Moscow via Alois Treindl re Kiev time 1991/2 (2014-02-28):
+# First in Ukraine they changed Time zone from UTC+3 to UTC+2 with DST:
+#       03 25 1990 02:00 -03.00 1       Time Zone 3 with DST
+#       07 01 1990 02:00 -02.00 1       Time Zone 2 with DST
+# * Ukrainian Government's Resolution of 18.06.1990, No. 134.
+# http://search.ligazakon.ua/l_doc2.nsf/link1/T001500.html
+#
+# They did not end DST in September, 1990 (according to the law,
+# "summer time" was still in action):
+#       09 30 1990 03:00 -02.00 1       Time Zone 2 with DST
+# * Ukrainian Government's Resolution of 21.09.1990, No. 272.
+# http://search.ligazakon.ua/l_doc2.nsf/link1/KP900272.html
+#
+# Again no change in March, 1991 ("summer time" in action):
+#       03 31 1991 02:00 -02.00 1       Time Zone 2 with DST
+#
+# DST ended in September 1991 ("summer time" ended):
+#       09 29 1991 03:00 -02.00 0       Time Zone 2, no DST
+# * Ukrainian Government's Resolution of 25.09.1991, No. 225.
+# http://www.uazakon.com/documents/date_21/pg_iwgdoc.htm
+# This is an answer.
+#
+# Since 1992 they had normal DST procedure:
+#       03 29 1992 02:00 -02.00 1       DST started
+#       09 27 1992 03:00 -02.00 0       DST ended
+# * Ukrainian Government's Resolution of 20.03.1992, No. 139.
+# http://www.uazakon.com/documents/date_8u/pg_grcasa.htm
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 # Most of Ukraine since 1970 has been like Kiev.
 # "Kyiv" is the transliteration of the Ukrainian name, but
@@ -2588,13 +3311,12 @@
 			2:00	-	EET	1930 Jun 21
 			3:00	-	MSK	1941 Sep 20
 			1:00	C-Eur	CE%sT	1943 Nov  6
-			3:00	Russia	MSK/MSD	1990
-			3:00	-	MSK	1990 Jul  1 2:00
-			2:00	-	EET	1992
+			3:00	Russia	MSK/MSD	1990 Jul  1  2:00
+			2:00	1:00	EEST	1991 Sep 29  3:00
 			2:00	E-Eur	EE%sT	1995
 			2:00	EU	EE%sT
 # Ruthenia used CET 1990/1991.
-# "Uzhhorod" is the transliteration of the Ukrainian name, but
+# "Uzhhorod" is the transliteration of the Rusyn/Ukrainian pronunciation, but
 # "Uzhgorod" is more common in English.
 Zone Europe/Uzhgorod	1:29:12 -	LMT	1890 Oct
 			1:00	-	CET	1940
@@ -2602,8 +3324,8 @@
 			1:00	1:00	CEST	1944 Oct 26
 			1:00	-	CET	1945 Jun 29
 			3:00	Russia	MSK/MSD	1990
-			3:00	-	MSK	1990 Jul  1 2:00
-			1:00	-	CET	1991 Mar 31 3:00
+			3:00	-	MSK	1990 Jul  1  2:00
+			1:00	-	CET	1991 Mar 31  3:00
 			2:00	-	EET	1992
 			2:00	E-Eur	EE%sT	1995
 			2:00	EU	EE%sT
@@ -2617,34 +3339,12 @@
 			2:00	-	EET	1930 Jun 21
 			3:00	-	MSK	1941 Aug 25
 			1:00	C-Eur	CE%sT	1943 Oct 25
-			3:00	Russia	MSK/MSD	1991 Mar 31 2:00
+			3:00	Russia	MSK/MSD	1991 Mar 31  2:00
 			2:00	E-Eur	EE%sT	1995
 			2:00	EU	EE%sT
-# Central Crimea used Moscow time 1994/1997.
-Zone Europe/Simferopol	2:16:24 -	LMT	1880
-			2:16	-	SMT	1924 May  2 # Simferopol Mean T
-			2:00	-	EET	1930 Jun 21
-			3:00	-	MSK	1941 Nov
-			1:00	C-Eur	CE%sT	1944 Apr 13
-			3:00	Russia	MSK/MSD	1990
-			3:00	-	MSK	1990 Jul  1 2:00
-			2:00	-	EET	1992
-# From Paul Eggert (2006-03-22):
-# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
-# from Kiev to Moscow time sometime after the January 1994 elections.
-# Shanks (1999) says ``date of change uncertain'', but implies that it happened
-# sometime between the 1994 DST switches.  Shanks & Pottenger simply say
-# 1994-09-25 03:00, but that can't be right.  For now, guess it
-# changed in May.
-			2:00	E-Eur	EE%sT	1994 May
-# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.
-			3:00	E-Eur	MSK/MSD	1996 Mar 31 3:00s
-			3:00	1:00	MSD	1996 Oct 27 3:00s
-# IATA SSIM (1997-09) says Crimea switched to EET/EEST.
-# Assume it happened in March by not changing the clocks.
-			3:00	Russia	MSK/MSD	1997
-			3:00	-	MSK	1997 Mar lastSun 1:00u
-			2:00	EU	EE%sT
+
+# Vatican City
+# See Europe/Rome.
 
 ###############################################################################
 
@@ -2665,7 +3365,7 @@
 # ...
 #
 # ...the European time rules are...standardized since 1981, when
-# most European coun[tr]ies started DST.  Before that year, only
+# most European countries started DST.  Before that year, only
 # a few countries (UK, France, Italy) had DST, each according
 # to own national rules.  In 1981, however, DST started on
 # 'Apr firstSun', and not on 'Mar lastSun' as in the following
@@ -2673,7 +3373,7 @@
 # But also since 1981 there are some more national exceptions
 # than listed in 'europe': Switzerland, for example, joined DST
 # one year later, Denmark ended DST on 'Oct 1' instead of 'Sep
-# lastSun' in 1981---I don't know how they handle now.
+# lastSun' in 1981 - I don't know how they handle now.
 #
 # Finally, DST ist always from 'Apr 1' to 'Oct 1' in the
 # Soviet Union (as far as I know).
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/factory openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/factory
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/factory	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/factory	2015-01-20 02:20:42.000000000 +0000
@@ -1,27 +1,26 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/iso3166.tab openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/iso3166.tab
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/iso3166.tab	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/iso3166.tab	2015-01-20 02:20:42.000000000 +0000
@@ -1,50 +1,52 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
+# ISO 3166 alpha-2 country codes
+#
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
-# ISO 3166 alpha-2 country codes
 #
-# From Paul Eggert (2006-09-27):
+# From Paul Eggert (2014-07-18):
+# This file contains a table of two-letter country codes.  Columns are
+# separated by a single tab.  Lines beginning with '#' are comments.
+# Although all text currently uses ASCII encoding, this is planned to
+# change to UTF-8 soon.  The columns of the table are as follows:
 #
-# This file contains a table with the following columns:
 # 1.  ISO 3166-1 alpha-2 country code, current as of
-#     ISO 3166-1 Newsletter VI-1 (2007-09-21).  See:
-#     
-#     ISO 3166 Maintenance agency (ISO 3166/MA)
-#     .
-# 2.  The usual English name for the country,
+#     ISO 3166-1 Newsletter VI-16 (2013-07-11).  See: Updates on ISO 3166
+#   http://www.iso.org/iso/home/standards/country_codes/updates_on_iso_3166.htm
+# 2.  The usual English name for the coded region,
 #     chosen so that alphabetic sorting of subsets produces helpful lists.
 #     This is not the same as the English name in the ISO 3166 tables.
 #
-# Columns are separated by a single tab.
 # The table is sorted by country code.
 #
-# Lines beginning with `#' are comments.
+# This table is intended as an aid for users, to help them select time
+# zone data appropriate for their practical needs.  It is not intended
+# to take or endorse any position on legal or territorial claims.
 #
 #country-
-#code	country name
+#code	name of country, territory, area, or subdivision
 AD	Andorra
 AE	United Arab Emirates
 AF	Afghanistan
@@ -52,7 +54,6 @@
 AI	Anguilla
 AL	Albania
 AM	Armenia
-AN	Netherlands Antilles
 AO	Angola
 AQ	Antarctica
 AR	Argentina
@@ -75,6 +76,7 @@
 BM	Bermuda
 BN	Brunei
 BO	Bolivia
+BQ	Caribbean Netherlands
 BR	Brazil
 BS	Bahamas
 BT	Bhutan
@@ -97,6 +99,7 @@
 CR	Costa Rica
 CU	Cuba
 CV	Cape Verde
+CW	Curacao
 CX	Christmas Island
 CY	Cyprus
 CZ	Czech Republic
@@ -251,8 +254,10 @@
 SN	Senegal
 SO	Somalia
 SR	Suriname
+SS	South Sudan
 ST	Sao Tome & Principe
 SV	El Salvador
+SX	St Maarten (Dutch part)
 SY	Syria
 SZ	Swaziland
 TC	Turks & Caicos Is
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/leapseconds openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/leapseconds
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/leapseconds	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/leapseconds	2015-01-20 02:20:42.000000000 +0000
@@ -1,37 +1,43 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
+# Allowance for leap seconds added to each time zone file.
 
-# Allowance for leapseconds added to each timezone file.
+# This file is in the public domain.
 
-# The International Earth Rotation Service periodically uses leap seconds
-# to keep UTC to within 0.9 s of UT1
+# This file is generated automatically from the data in the public-domain
+# leap-seconds.list file available from most NIST time servers.
+# If the URL  does not work,
+# you should be able to pick up leap-seconds.list from a secondary NIST server.
+# For more about leap-seconds.list, please see
+# The NTP Timescale and Leap Seconds
+# http://www.eecis.udel.edu/~mills/leap.html
+
+# The International Earth Rotation and Reference Systems Service
+# periodically uses leap seconds to keep UTC to within 0.9 s of UT1
 # (which measures the true angular orientation of the earth in space); see
 # Terry J Quinn, The BIPM and the accurate measure of time,
-# Proc IEEE 79, 7 (July 1991), 894-905.
+# Proc IEEE 79, 7 (July 1991), 894-905 .
 # There were no leap seconds before 1972, because the official mechanism
 # accounting for the discrepancy between atomic time and the earth's rotation
 # did not exist until the early 1970s.
@@ -42,8 +48,8 @@
 # or
 #	Leap	YEAR	MON	DAY	23:59:59	-	R/S
 
-# If the leapsecond is Rolling (R) the given time is local time
-# If the leapsecond is Stationary (S) the given time is UTC
+# If the leapsecond is Rolling (R) the given time is local time.
+# If the leapsecond is Stationary (S) the given time is UTC.
 
 # Leap	YEAR	MONTH	DAY	HH:MM:SS	CORR	R/S
 Leap	1972	Jun	30	23:59:60	+	S
@@ -70,40 +76,4 @@
 Leap	1998	Dec	31	23:59:60	+	S
 Leap	2005	Dec	31	23:59:60	+	S
 Leap	2008	Dec	31	23:59:60	+	S
-
-# INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE (IERS)
-#
-# SERVICE INTERNATIONAL DE LA ROTATION TERRESTRE ET DES SYSTEMES DE REFERENCE
-#
-# SERVICE DE LA ROTATION TERRESTRE
-# OBSERVATOIRE DE PARIS
-# 61, Av. de l'Observatoire 75014 PARIS (France)
-# Tel.      : 33 (0) 1 40 51 22 26
-# FAX       : 33 (0) 1 40 51 22 91
-# Internet  : services.iers@obspm.fr
-#
-# Paris, 4 July 2009
-#
-# Bulletin C 38
-#
-# To authorities responsible
-# for the measurement and
-# distribution of time
-#
-# INFORMATION ON UTC - TAI
-#
-# NO positive leap second will be introduced at the end of December 2009.
-# The difference between Coordinated Universal Time UTC and the
-# International Atomic Time TAI is :		
-#
-# from 2009 January 1, 0h UTC, until further notice : UTC-TAI = -34 s
-#
-# Leap seconds can be introduced in UTC at the end of the months of December
-# or June,  depending on the evolution of UT1-TAI. Bulletin C is mailed every
-# six months, either to announce a time step in UTC, or to confirm that there
-# will be no time step at the next possible date.
-#
-# Daniel GAMBIS
-# Director			
-# Earth Orientation Center of IERS
-# Observatoire de Paris, France
+Leap	2012	Jun	30	23:59:60	+	S
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/northamerica openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/northamerica
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/northamerica	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/northamerica	2015-01-20 02:20:42.000000000 +0000
@@ -1,35 +1,35 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
 # also includes Central America and the Caribbean
 
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
-# tz@elsie.nci.nih.gov for general use in the future).
+# tz@iana.org for general use in the future).  For more, please see
+# the file CONTRIBUTING in the tz distribution.
 
 # From Paul Eggert (1999-03-22):
 # A reliable and entertaining source about time zones is
@@ -43,7 +43,7 @@
 # Howse writes (pp 121-125) that time zones were invented by
 # Professor Charles Ferdinand Dowd (1825-1904),
 # Principal of Temple Grove Ladies' Seminary (Saratoga Springs, NY).
-# His pamphlet ``A System of National Time for Railroads'' (1870)
+# His pamphlet "A System of National Time for Railroads" (1870)
 # was the result of his proposals at the Convention of Railroad Trunk Lines
 # in New York City (1869-10).  His 1870 proposal was based on Washington, DC,
 # but in 1872-05 he moved the proposed origin to Greenwich.
@@ -63,8 +63,8 @@
 
 # From Paul Eggert (2001-03-06):
 # Daylight Saving Time was first suggested as a joke by Benjamin Franklin
-# in his whimsical essay ``An Economical Project for Diminishing the Cost
-# of Light'' published in the Journal de Paris (1784-04-26).
+# in his whimsical essay "An Economical Project for Diminishing the Cost
+# of Light" published in the Journal de Paris (1784-04-26).
 # Not everyone is happy with the results:
 #
 #	I don't really care how time is reckoned so long as there is some
@@ -78,13 +78,13 @@
 #	to push people into bed earlier, and get them up earlier, to make
 #	them healthy, wealthy and wise in spite of themselves.
 #
-#	-- Robertson Davies, The diary of Samuel Marchbanks,
+#	 -- Robertson Davies, The diary of Samuel Marchbanks,
 #	   Clarke, Irwin (1947), XIX, Sunday
 #
 # For more about the first ten years of DST in the United States, see
-# Robert Garland's 
-# Ten years of daylight saving from the Pittsburgh standpoint
-# (Carnegie Library of Pittsburgh, 1927).
+# Robert Garland, Ten years of daylight saving from the Pittsburgh standpoint
+# (Carnegie Library of Pittsburgh, 1927).
+# http://www.clpgh.org/exhibit/dst.html
 #
 # Shanks says that DST was called "War Time" in the US in 1918 and 1919.
 # However, DST was imposed by the Standard Time Act of 1918, which
@@ -103,11 +103,11 @@
 # From Arthur David Olson (2000-09-25):
 # Last night I heard part of a rebroadcast of a 1945 Arch Oboler radio drama.
 # In the introduction, Oboler spoke of "Eastern Peace Time."
-# An AltaVista search turned up
-# :
+# An AltaVista search turned up:
+# http://rowayton.org/rhs/hstaug45.html
 # "When the time is announced over the radio now, it is 'Eastern Peace
 # Time' instead of the old familiar 'Eastern War Time.'  Peace is wonderful."
-#  (August 1945) by way of confirmation.
+# (August 1945) by way of confirmation.
 
 # From Joseph Gallant citing
 # George H. Douglas, _The Early Days of Radio Broadcasting_ (1987):
@@ -190,8 +190,8 @@
 #    of the Aleutian islands.   No DST.
 
 # From Paul Eggert (1995-12-19):
-# The tables below use `NST', not `NT', for Nome Standard Time.
-# I invented `CAWT' for Central Alaska War Time.
+# The tables below use 'NST', not 'NT', for Nome Standard Time.
+# I invented 'CAWT' for Central Alaska War Time.
 
 # From U. S. Naval Observatory (1989-01-19):
 # USA  EASTERN       5 H  BEHIND UTC    NEW YORK, WASHINGTON
@@ -205,7 +205,7 @@
 # USA  ALASKA STD    9 H  BEHIND UTC    MOST OF ALASKA     (AKST)
 # USA  ALASKA STD    8 H  BEHIND UTC    APR 3 - OCT 30 (AKDT)
 # USA  ALEUTIAN     10 H  BEHIND UTC    ISLANDS WEST OF 170W
-# USA  - " -         9 H  BEHIND UTC    APR 3 - OCT 30
+# USA    "           9 H  BEHIND UTC    APR 3 - OCT 30
 # USA  HAWAII       10 H  BEHIND UTC
 # USA  BERING       11 H  BEHIND UTC    SAMOA, MIDWAY
 
@@ -258,19 +258,19 @@
 # The following was signed into law on 2005-08-08.
 #
 # H.R. 6, Energy Policy Act of 2005, SEC. 110. DAYLIGHT SAVINGS.
-#   (a) Amendment- Section 3(a) of the Uniform Time Act of 1966 (15
+#   (a) Amendment.--Section 3(a) of the Uniform Time Act of 1966 (15
 #   U.S.C. 260a(a)) is amended--
-#     (1) by striking `first Sunday of April' and inserting `second
-#     Sunday of March'; and
-#     (2) by striking `last Sunday of October' and inserting `first
+#     (1) by striking "first Sunday of April" and inserting "second
+#     Sunday of March"; and
+#     (2) by striking "last Sunday of October" and inserting "first
 #     Sunday of November'.
-#   (b) Effective Date- Subsection (a) shall take effect 1 year after the
+#   (b) Effective Date.--Subsection (a) shall take effect 1 year after the
 #   date of enactment of this Act or March 1, 2007, whichever is later.
-#   (c) Report to Congress- Not later than 9 months after the effective
+#   (c) Report to Congress.--Not later than 9 months after the effective
 #   date stated in subsection (b), the Secretary shall report to Congress
 #   on the impact of this section on energy consumption in the United
 #   States.
-#   (d) Right to Revert- Congress retains the right to revert the
+#   (d) Right to Revert.--Congress retains the right to revert the
 #   Daylight Saving Time back to the 2005 time schedules once the
 #   Department study is complete.
 
@@ -292,7 +292,7 @@
 
 # From Paul Eggert (2005-08-26):
 # According to today's Huntsville Times
-# 
+# http://www.al.com/news/huntsvilletimes/index.ssf?/base/news/1125047783228320.xml&coll=1
 # a few towns on Alabama's "eastern border with Georgia, such as Phenix City
 # in Russell County, Lanett in Chambers County and some towns in Lee County,
 # set their watches and clocks on Eastern time."  It quotes H.H. "Bubba"
@@ -300,6 +300,12 @@
 # time zone, but we do go by the Eastern time zone because so many people work
 # in Columbus."
 
+# From Paul Eggert (2014-09-06):
+# Monthly Notices of the Royal Astronomical Society 44, 4 (1884-02-08), 208
+# says that New York City Hall time was 3 minutes 58.4 seconds fast of
+# Eastern time (i.e., -4:56:01.6) just before the 1883 switch.  Round to the
+# nearest second.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
 Rule	NYC	1920	only	-	Mar	lastSun	2:00	1:00	D
 Rule	NYC	1920	only	-	Oct	lastSun	2:00	0	S
@@ -347,15 +353,15 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Chicago	-5:50:36 -	LMT	1883 Nov 18 12:09:24
 			-6:00	US	C%sT	1920
-			-6:00	Chicago	C%sT	1936 Mar  1 2:00
-			-5:00	-	EST	1936 Nov 15 2:00
+			-6:00	Chicago	C%sT	1936 Mar  1  2:00
+			-5:00	-	EST	1936 Nov 15  2:00
 			-6:00	Chicago	C%sT	1942
 			-6:00	US	C%sT	1946
 			-6:00	Chicago	C%sT	1967
 			-6:00	US	C%sT
 # Oliver County, ND switched from mountain to central time on 1992-10-25.
 Zone America/North_Dakota/Center -6:45:12 - LMT	1883 Nov 18 12:14:48
-			-7:00	US	M%sT	1992 Oct 25 02:00
+			-7:00	US	M%sT	1992 Oct 25  2:00
 			-6:00	US	C%sT
 # Morton County, ND, switched from mountain to central time on
 # 2003-10-26, except for the area around Mandan which was already central time.
@@ -364,8 +370,26 @@
 # Jones, Mellette, and Todd Counties in South Dakota;
 # but in practice these other counties were already observing central time.
 # See .
-Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
-			-7:00	US	M%sT	2003 Oct 26 02:00
+Zone America/North_Dakota/New_Salem -6:45:39 - LMT	1883 Nov 18 12:14:21
+			-7:00	US	M%sT	2003 Oct 26  2:00
+			-6:00	US	C%sT
+
+# From Josh Findley (2011-01-21):
+# ...it appears that Mercer County, North Dakota, changed from the
+# mountain time zone to the central time zone at the last transition from
+# daylight-saving to standard time (on Nov. 7, 2010):
+# http://www.gpo.gov/fdsys/pkg/FR-2010-09-29/html/2010-24376.htm
+# http://www.bismarcktribune.com/news/local/article_1eb1b588-c758-11df-b472-001cc4c03286.html
+
+# From Andy Lipscomb (2011-01-24):
+# ...according to the Census Bureau, the largest city is Beulah (although
+# it's commonly referred to as Beulah-Hazen, with Hazen being the next
+# largest city in Mercer County).  Google Maps places Beulah's city hall
+# at 47 degrees 15' 51" N, 101 degrees 46' 40" W, which yields an offset
+# of 6h47'07".
+
+Zone America/North_Dakota/Beulah -6:47:07 - LMT	1883 Nov 18 12:12:53
+			-7:00	US	M%sT	2010 Nov  7  2:00
 			-6:00	US	C%sT
 
 # US mountain time, represented by Denver
@@ -393,9 +417,10 @@
 # US Pacific time, represented by Los Angeles
 #
 # California, northern Idaho (Benewah, Bonner, Boundary, Clearwater,
-# Idaho, Kootenai, Latah, Lewis, Nez Perce, and Shoshone counties,
-# and the northern three-quarters of Idaho county),
-# most of Nevada, most of Oregon, and Washington
+# Kootenai, Latah, Lewis, Nez Perce, and Shoshone counties, Idaho county
+# north of the Salmon River, and the towns of Burgdorf and Warren),
+# Nevada (except West Wendover), Oregon (except the northern 3/4 of
+# Malheur county), and Washington
 #
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
 Rule	CA	1948	only	-	Mar	14	2:00	1:00	D
@@ -426,16 +451,80 @@
 # was destroyed in 1805 by a Yakutat-kon war party.)  However, there
 # were nearby inhabitants in some cases and for our purposes perhaps
 # it's best to simply use the official transition.
-#
+
+# From Paul Eggert (2014-07-18):
+# One opinion of the early-1980s turmoil in Alaska over time zones and
+# daylight saving time appeared as graffiti on a Juneau airport wall:
+# "Welcome to Juneau.  Please turn your watch back to the 19th century."
+# See: Turner W. Alaska's four time zones now two. NY Times 1983-11-01.
+# http://www.nytimes.com/1983/11/01/us/alaska-s-four-time-zones-now-two.html
+#
+# Steve Ferguson (2011-01-31) referred to the following source:
+# Norris F. Keeping time in Alaska: national directives, local response.
+# Alaska History 2001;16(1-2).
+# http://alaskahistoricalsociety.org/discover-alaska/glimpses-of-the-past/keeping-time-in-alaska/
+
+# From Arthur David Olson (2011-02-01):
+# Here's database-relevant material from the 2001 "Alaska History" article:
+#
+# On September 20 [1979]...DOT...officials decreed that on April 27,
+# 1980, Juneau and other nearby communities would move to Yukon Time.
+# Sitka, Petersburg, Wrangell, and Ketchikan, however, would remain on
+# Pacific Time.
+#
+# ...on September 22, 1980, DOT Secretary Neil E. Goldschmidt rescinded the
+# Department's September 1979 decision. Juneau and other communities in
+# northern Southeast reverted to Pacific Time on October 26.
+#
+# On October 28 [1983]...the Metlakatla Indian Community Council voted
+# unanimously to keep the reservation on Pacific Time.
+#
+# According to DOT official Joanne Petrie, Indian reservations are not
+# bound to follow time zones imposed by neighboring jurisdictions.
+#
+# (The last is consistent with how the database now handles the Navajo
+# Nation.)
+
+# From Arthur David Olson (2011-02-09):
+# I just spoke by phone with a staff member at the Metlakatla Indian
+# Community office (using contact information available at
+# http://www.commerce.state.ak.us/dca/commdb/CIS.cfm?Comm_Boro_name=Metlakatla
+# It's shortly after 1:00 here on the east coast of the United States;
+# the staffer said it was shortly after 10:00 there. When I asked whether
+# that meant they were on Pacific time, they said no - they were on their
+# own time. I asked about daylight saving; they said it wasn't used. I
+# did not inquire about practices in the past.
+
+# From Arthur David Olson (2011-08-17):
+# For lack of better information, assume that Metlakatla's
+# abandonment of use of daylight saving resulted from the 1983 vote.
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Juneau	 15:02:19 -	LMT	1867 Oct 18
 			 -8:57:41 -	LMT	1900 Aug 20 12:00
 			 -8:00	-	PST	1942
 			 -8:00	US	P%sT	1946
 			 -8:00	-	PST	1969
-			 -8:00	US	P%sT	1983 Oct 30 2:00
+			 -8:00	US	P%sT	1980 Apr 27  2:00
+			 -9:00	US	Y%sT	1980 Oct 26  2:00
+			 -8:00	US	P%sT	1983 Oct 30  2:00
+			 -9:00	US	Y%sT	1983 Nov 30
+			 -9:00	US	AK%sT
+Zone America/Sitka	 14:58:47 -	LMT	1867 Oct 18
+			 -9:01:13 -	LMT	1900 Aug 20 12:00
+			 -8:00	-	PST	1942
+			 -8:00	US	P%sT	1946
+			 -8:00	-	PST	1969
+			 -8:00	US	P%sT	1983 Oct 30  2:00
 			 -9:00	US	Y%sT	1983 Nov 30
 			 -9:00	US	AK%sT
+Zone America/Metlakatla	 15:13:42 -	LMT	1867 Oct 18
+			 -8:46:18 -	LMT	1900 Aug 20 12:00
+			 -8:00	-	PST	1942
+			 -8:00	US	P%sT	1946
+			 -8:00	-	PST	1969
+			 -8:00	US	P%sT	1983 Oct 30  2:00
+			 -8:00	-	PST
 Zone America/Yakutat	 14:41:05 -	LMT	1867 Oct 18
 			 -9:18:55 -	LMT	1900 Aug 20 12:00
 			 -9:00	-	YST	1942
@@ -450,7 +539,7 @@
 			-10:00	US	CAT/CAPT 1946 # Peace
 			-10:00	-	CAT	1967 Apr
 			-10:00	-	AHST	1969
-			-10:00	US	AH%sT	1983 Oct 30 2:00
+			-10:00	US	AH%sT	1983 Oct 30  2:00
 			 -9:00	US	Y%sT	1983 Nov 30
 			 -9:00	US	AK%sT
 Zone America/Nome	 12:58:21 -	LMT	1867 Oct 18
@@ -459,7 +548,7 @@
 			-11:00	US	N%sT	1946
 			-11:00	-	NST	1967 Apr
 			-11:00	-	BST	1969
-			-11:00	US	B%sT	1983 Oct 30 2:00
+			-11:00	US	B%sT	1983 Oct 30  2:00
 			 -9:00	US	Y%sT	1983 Nov 30
 			 -9:00	US	AK%sT
 Zone America/Adak	 12:13:21 -	LMT	1867 Oct 18
@@ -468,7 +557,7 @@
 			-11:00	US	N%sT	1946
 			-11:00	-	NST	1967 Apr
 			-11:00	-	BST	1969
-			-11:00	US	B%sT	1983 Oct 30 2:00
+			-11:00	US	B%sT	1983 Oct 30  2:00
 			-10:00	US	AH%sT	1983 Nov 30
 			-10:00	US	HA%sT
 # The following switches don't quite make our 1970 cutoff.
@@ -486,28 +575,58 @@
 #  Minutes of the Unalaska City Council Meeting, January 10, 1967:
 #  "Except for St. Paul and Akutan, Unalaska is the only important
 #  location not on Alaska Standard Time.  The following resolution was
-#  made by William Robinson and seconded by Henry Swanson:  Be it
+#  made by William Robinson and seconded by Henry Swanson: Be it
 #  resolved that the City of Unalaska hereby goes to Alaska Standard
 #  Time as of midnight Friday, January 13, 1967 (1 A.M. Saturday,
 #  January 14, Alaska Standard Time.)  This resolution was passed with
 #  three votes for and one against."
 
 # Hawaii
-#
-# From Arthur David Olson:
-# And then there's Hawaii.
-# DST was observed for one day in 1933;
-# standard time was changed by half an hour in 1947;
-# it's always standard as of 1986.
-#
-# From Paul Eggert:
-# Shanks says the 1933 experiment lasted for three weeks.  Go with Shanks.
-#
-Zone Pacific/Honolulu	-10:31:26 -	LMT	1900 Jan  1 12:00
-			-10:30	-	HST	1933 Apr 30 2:00
-			-10:30	1:00	HDT	1933 May 21 2:00
-			-10:30	US	H%sT	1947 Jun  8 2:00
+
+# From Arthur David Olson (2010-12-09):
+# "Hawaiian Time" by Robert C. Schmitt and Doak C. Cox appears on pages 207-225
+# of volume 26 of The Hawaiian Journal of History (1992). As of 2010-12-09,
+# the article is available at
+# http://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf
+# and indicates that standard time was adopted effective noon, January
+# 13, 1896 (page 218), that in "1933, the Legislature decreed daylight
+# saving for the period between the last Sunday of each April and the
+# last Sunday of each September, but less than a month later repealed the
+# act," (page 220), that year-round daylight saving time was in effect
+# from 1942-02-09 to 1945-09-30 (page 221, with no time of day given for
+# when clocks changed) and that clocks were changed by 30 minutes
+# effective the second Sunday of June, 1947 (page 219, with no time of
+# day given for when clocks changed). A footnote for the 1933 changes
+# cites Session Laws of Hawaii 1933, "Act. 90 (approved 26 Apr. 1933)
+# and Act 163 (approved 21 May 1933)."
+
+# From Arthur David Olson (2011-01-19):
+# The following is from "Laws of the Territory of Hawaii Passed by the
+# Seventeenth Legislature: Regular Session 1933," available (as of
+# 2011-01-19) at American University's Pence Law Library. Page 85: "Act
+# 90...At 2 o'clock ante meridian of the last Sunday in April of each
+# year, the standard time of this Territory shall be advanced one
+# hour...This Act shall take effect upon its approval. Approved this 26th
+# day of April, A. D. 1933. LAWRENCE M JUDD, Governor of the Territory of
+# Hawaii." Page 172: "Act 163...Act 90 of the Session Laws of 1933 is
+# hereby repealed...This Act shall take effect upon its approval, upon
+# which date the standard time of this Territory shall be restored to
+# that existing immediately prior to the taking effect of said Act 90.
+# Approved this 21st day of May, A. D. 1933. LAWRENCE M. JUDD, Governor
+# of the Territory of Hawaii."
+#
+# Note that 1933-05-21 was a Sunday.
+# We're left to guess the time of day when Act 163 was approved; guess noon.
+
+# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+Zone Pacific/Honolulu	-10:31:26 -	LMT	1896 Jan 13 12:00
+			-10:30	-	HST	1933 Apr 30  2:00
+			-10:30	1:00	HDT	1933 May 21 12:00
+			-10:30	-	HST	1942 Feb  9  2:00
+			-10:30	1:00	HDT	1945 Sep 30  2:00
+			-10:30	-	HST	1947 Jun  8  2:00
 			-10:00	-	HST
+Link Pacific/Honolulu Pacific/Johnston
 
 # Now we turn to US areas that have diverged from the consensus since 1970.
 
@@ -516,9 +635,9 @@
 # From Paul Eggert (2002-10-20):
 #
 # The information in the rest of this paragraph is derived from the
-# 
-# Daylight Saving Time web page (2002-01-23) maintained by the
-# Arizona State Library, Archives and Public Records.
+# Daylight Saving Time web page
+#  (2002-01-23)
+# maintained by the Arizona State Library, Archives and Public Records.
 # Between 1944-01-01 and 1944-04-01 the State of Arizona used standard
 # time, but by federal law railroads, airlines, bus lines, military
 # personnel, and some engaged in interstate commerce continued to
@@ -532,10 +651,11 @@
 # Shanks says the 1944 experiment came to an end on 1944-03-17.
 # Go with the Arizona State Library instead.
 
+# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Phoenix	-7:28:18 -	LMT	1883 Nov 18 11:31:42
-			-7:00	US	M%sT	1944 Jan  1 00:01
-			-7:00	-	MST	1944 Apr  1 00:01
-			-7:00	US	M%sT	1944 Oct  1 00:01
+			-7:00	US	M%sT	1944 Jan  1  0:01
+			-7:00	-	MST	1944 Apr  1  0:01
+			-7:00	US	M%sT	1944 Oct  1  0:01
 			-7:00	-	MST	1967
 			-7:00	US	M%sT	1968 Mar 21
 			-7:00	-	MST
@@ -545,8 +665,9 @@
 # Navajo Nation participates in the Daylight Saving Time policy, due to its
 # large size and location in three states."  (The "only" means that other
 # tribal nations don't use DST.)
-
-Link America/Denver America/Shiprock
+#
+# From Paul Eggert (2013-08-26):
+# See America/Denver for a zone appropriate for the Navajo Nation.
 
 # Southern Idaho (Ada, Adams, Bannock, Bear Lake, Bingham, Blaine,
 # Boise, Bonneville, Butte, Camas, Canyon, Caribou, Cassia, Clark,
@@ -558,24 +679,22 @@
 #
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Boise	-7:44:49 -	LMT	1883 Nov 18 12:15:11
-			-8:00	US	P%sT	1923 May 13 2:00
+			-8:00	US	P%sT	1923 May 13  2:00
 			-7:00	US	M%sT	1974
-			-7:00	-	MST	1974 Feb  3 2:00
+			-7:00	-	MST	1974 Feb  3  2:00
 			-7:00	US	M%sT
 
 # Indiana
 #
 # For a map of Indiana's time zone regions, see:
-# 
-# What time is it in Indiana?
-#  (2006-03-01)
+# http://en.wikipedia.org/wiki/Time_in_Indiana
 #
 # From Paul Eggert (2007-08-17):
 # Since 1970, most of Indiana has been like America/Indiana/Indianapolis,
 # with the following exceptions:
 #
 # - Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer,
-#   Vandenburgh, and Warrick counties have been like America/Chicago.
+#   Vanderburgh, and Warrick counties have been like America/Chicago.
 #
 # - Dearborn and Ohio counties have been like America/New_York.
 #
@@ -586,30 +705,24 @@
 #   and Switzerland counties have their own time zone histories as noted below.
 #
 # Shanks partitioned Indiana into 345 regions, each with its own time history,
-# and wrote ``Even newspaper reports present contradictory information.''
+# and wrote "Even newspaper reports present contradictory information."
 # Those Hoosiers!  Such a flighty and changeable people!
 # Fortunately, most of the complexity occurred before our cutoff date of 1970.
 #
 # Other than Indianapolis, the Indiana place names are so nondescript
-# that they would be ambiguous if we left them at the `America' level.
-# So we reluctantly put them all in a subdirectory `America/Indiana'.
-
-# From Paul Eggert (2005-08-16):
-# http://www.mccsc.edu/time.html says that Indiana will use DST starting 2006.
+# that they would be ambiguous if we left them at the 'America' level.
+# So we reluctantly put them all in a subdirectory 'America/Indiana'.
 
-# From Nathan Stratton Treadway (2006-03-30):
-# http://www.dot.gov/affairs/dot0406.htm [3705 B]
-# From Deborah Goldsmith (2006-01-18):
-# http://dmses.dot.gov/docimages/pdf95/382329_web.pdf [2.9 MB]
-# From Paul Eggert (2006-01-20):
-# It says "DOT is relocating the time zone boundary in Indiana to move Starke,
+# From Paul Eggert (2014-06-26):
+# https://www.federalregister.gov/articles/2006/01/20/06-563/standard-time-zone-boundary-in-the-state-of-indiana
+# says "DOT is relocating the time zone boundary in Indiana to move Starke,
 # Pulaski, Knox, Daviess, Martin, Pike, Dubois, and Perry Counties from the
 # Eastern Time Zone to the Central Time Zone.... The effective date of
-# this rule is 2:OO a.m. EST Sunday, April 2, 2006, which is the
+# this rule is 2 a.m. EST Sunday, April 2, 2006, which is the
 # changeover date from standard time to Daylight Saving Time."
-# Strictly speaking, this means the affected counties will change their
-# clocks twice that night, but this obviously is in error.  The intent
-# is that 01:59:59 EST be followed by 02:00:00 CDT.
+# Strictly speaking, this meant the affected counties changed their
+# clocks twice that night, but this obviously was in error.  The intent
+# was that 01:59:59 EST be followed by 02:00:00 CDT.
 
 # From Gwillim Law (2007-02-10):
 # The Associated Press has been reporting that Pulaski County, Indiana is
@@ -621,13 +734,13 @@
 Rule Indianapolis 1941	1954	-	Sep	lastSun	2:00	0	S
 Rule Indianapolis 1946	1954	-	Apr	lastSun	2:00	1:00	D
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
+Zone America/Indiana/Indianapolis -5:44:38 - LMT	1883 Nov 18 12:15:22
 			-6:00	US	C%sT	1920
 			-6:00 Indianapolis C%sT	1942
 			-6:00	US	C%sT	1946
-			-6:00 Indianapolis C%sT	1955 Apr 24 2:00
-			-5:00	-	EST	1957 Sep 29 2:00
-			-6:00	-	CST	1958 Apr 27 2:00
+			-6:00 Indianapolis C%sT	1955 Apr 24  2:00
+			-5:00	-	EST	1957 Sep 29  2:00
+			-6:00	-	CST	1958 Apr 27  2:00
 			-5:00	-	EST	1969
 			-5:00	US	E%sT	1971
 			-5:00	-	EST	2006
@@ -643,10 +756,10 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Marengo -5:45:23 -	LMT	1883 Nov 18 12:14:37
 			-6:00	US	C%sT	1951
-			-6:00	Marengo	C%sT	1961 Apr 30 2:00
+			-6:00	Marengo	C%sT	1961 Apr 30  2:00
 			-5:00	-	EST	1969
-			-5:00	US	E%sT	1974 Jan  6 2:00
-			-6:00	1:00	CDT	1974 Oct 27 2:00
+			-5:00	US	E%sT	1974 Jan  6  2:00
+			-6:00	1:00	CDT	1974 Oct 27  2:00
 			-5:00	US	E%sT	1976
 			-5:00	-	EST	2006
 			-5:00	US	E%sT
@@ -667,11 +780,11 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Vincennes -5:50:07 - LMT	1883 Nov 18 12:09:53
 			-6:00	US	C%sT	1946
-			-6:00 Vincennes	C%sT	1964 Apr 26 2:00
+			-6:00 Vincennes	C%sT	1964 Apr 26  2:00
 			-5:00	-	EST	1969
 			-5:00	US	E%sT	1971
-			-5:00	-	EST	2006 Apr  2 2:00
-			-6:00	US	C%sT	2007 Nov  4 2:00
+			-5:00	-	EST	2006 Apr  2  2:00
+			-6:00	US	C%sT	2007 Nov  4  2:00
 			-5:00	US	E%sT
 #
 # Perry County, Indiana, switched from eastern to central time in April 2006.
@@ -688,10 +801,10 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Tell_City -5:47:03 - LMT	1883 Nov 18 12:12:57
 			-6:00	US	C%sT	1946
-			-6:00 Perry	C%sT	1964 Apr 26 2:00
+			-6:00 Perry	C%sT	1964 Apr 26  2:00
 			-5:00	-	EST	1969
 			-5:00	US	E%sT	1971
-			-5:00	-	EST	2006 Apr  2 2:00
+			-5:00	-	EST	2006 Apr  2  2:00
 			-6:00	US	C%sT
 #
 # Pike County, Indiana moved from central to eastern time in 1977,
@@ -704,11 +817,11 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Petersburg -5:49:07 - LMT	1883 Nov 18 12:10:53
 			-6:00	US	C%sT	1955
-			-6:00	Pike	C%sT	1965 Apr 25 2:00
-			-5:00	-	EST	1966 Oct 30 2:00
-			-6:00	US	C%sT	1977 Oct 30 2:00
-			-5:00	-	EST	2006 Apr  2 2:00
-			-6:00	US	C%sT	2007 Nov  4 2:00
+			-6:00	Pike	C%sT	1965 Apr 25  2:00
+			-5:00	-	EST	1966 Oct 30  2:00
+			-6:00	US	C%sT	1977 Oct 30  2:00
+			-5:00	-	EST	2006 Apr  2  2:00
+			-6:00	US	C%sT	2007 Nov  4  2:00
 			-5:00	US	E%sT
 #
 # Starke County, Indiana moved from central to eastern time in 1991,
@@ -726,10 +839,10 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Knox -5:46:30 -	LMT	1883 Nov 18 12:13:30
 			-6:00	US	C%sT	1947
-			-6:00	Starke	C%sT	1962 Apr 29 2:00
-			-5:00	-	EST	1963 Oct 27 2:00
-			-6:00	US	C%sT	1991 Oct 27 2:00
-			-5:00	-	EST	2006 Apr  2 2:00
+			-6:00	Starke	C%sT	1962 Apr 29  2:00
+			-5:00	-	EST	1963 Oct 27  2:00
+			-6:00	US	C%sT	1991 Oct 27  2:00
+			-5:00	-	EST	2006 Apr  2  2:00
 			-6:00	US	C%sT
 #
 # Pulaski County, Indiana, switched from eastern to central time in
@@ -742,17 +855,17 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Winamac -5:46:25 - LMT	1883 Nov 18 12:13:35
 			-6:00	US	C%sT	1946
-			-6:00	Pulaski	C%sT	1961 Apr 30 2:00
+			-6:00	Pulaski	C%sT	1961 Apr 30  2:00
 			-5:00	-	EST	1969
 			-5:00	US	E%sT	1971
-			-5:00	-	EST	2006 Apr  2 2:00
-			-6:00	US	C%sT	2007 Mar 11 2:00
+			-5:00	-	EST	2006 Apr  2  2:00
+			-6:00	US	C%sT	2007 Mar 11  2:00
 			-5:00	US	E%sT
 #
 # Switzerland County, Indiana, did not observe DST from 1973 through 2005.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Vevay -5:40:16 -	LMT	1883 Nov 18 12:19:44
-			-6:00	US	C%sT	1954 Apr 25 2:00
+			-6:00	US	C%sT	1954 Apr 25  2:00
 			-5:00	-	EST	1969
 			-5:00	US	E%sT	1973
 			-5:00	-	EST	2006
@@ -773,18 +886,17 @@
 			-6:00	US	C%sT	1921
 			-6:00 Louisville C%sT	1942
 			-6:00	US	C%sT	1946
-			-6:00 Louisville C%sT	1961 Jul 23 2:00
+			-6:00 Louisville C%sT	1961 Jul 23  2:00
 			-5:00	-	EST	1968
-			-5:00	US	E%sT	1974 Jan  6 2:00
-			-6:00	1:00	CDT	1974 Oct 27 2:00
+			-5:00	US	E%sT	1974 Jan  6  2:00
+			-6:00	1:00	CDT	1974 Oct 27  2:00
 			-5:00	US	E%sT
 #
 # Wayne County, Kentucky
 #
-# From
-# 
-# Lake Cumberland LIFE
-#  (1999-01-29) via WKYM-101.7:
+# From Lake Cumberland LIFE
+# http://www.lake-cumberland.com/life/archive/news990129time.shtml
+# (1999-01-29) via WKYM-101.7:
 # Clinton County has joined Wayne County in asking the DoT to change from
 # the Central to the Eastern time zone....  The Wayne County government made
 # the same request in December.  And while Russell County officials have not
@@ -801,9 +913,8 @@
 #
 # From Paul Eggert (2001-07-16):
 # The final rule was published in the
-# 
-# Federal Register 65, 160 (2000-08-17), page 50154-50158.
-# 
+# Federal Register 65, 160 (2000-08-17), pp 50154-50158.
+# http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=2000_register&docid=fr17au00-22
 #
 Zone America/Kentucky/Monticello -5:39:24 - LMT	1883 Nov 18 12:20:36
 			-6:00	US	C%sT	1946
@@ -828,9 +939,8 @@
 # See America/North_Dakota/Center for the Oliver County, ND change.
 # West Wendover, NV officially switched from Pacific to mountain time on
 # 1999-10-31.  See the
-# 
-# Federal Register 64, 203 (1999-10-21), page 56705-56707.
-# 
+# Federal Register 64, 203 (1999-10-21), pp 56705-56707.
+# http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=1999_register&docid=fr21oc99-15
 # However, the Federal Register says that West Wendover already operated
 # on mountain time, and the rule merely made this official;
 # hence a separate tz entry is not needed.
@@ -856,8 +966,8 @@
 # This story is too entertaining to be false, so go with Howse over Shanks.
 #
 # From Paul Eggert (2001-03-06):
-# Garland (1927) writes ``Cleveland and Detroit advanced their clocks
-# one hour in 1914.''  This change is not in Shanks.  We have no more
+# Garland (1927) writes "Cleveland and Detroit advanced their clocks
+# one hour in 1914."  This change is not in Shanks.  We have no more
 # info, so omit this for now.
 #
 # Most of Michigan observed DST from 1973 on, but was a bit late in 1975.
@@ -868,12 +978,12 @@
 Rule	Detroit	1967	only	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Detroit	-5:32:11 -	LMT	1905
-			-6:00	-	CST	1915 May 15 2:00
+			-6:00	-	CST	1915 May 15  2:00
 			-5:00	-	EST	1942
 			-5:00	US	E%sT	1946
 			-5:00	Detroit	E%sT	1973
 			-5:00	US	E%sT	1975
-			-5:00	-	EST	1975 Apr 27 2:00
+			-5:00	-	EST	1975 Apr 27  2:00
 			-5:00	US	E%sT
 #
 # Dickinson, Gogebic, Iron, and Menominee Counties, Michigan,
@@ -886,8 +996,8 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
 			-6:00	US	C%sT	1946
-			-6:00 Menominee	C%sT	1969 Apr 27 2:00
-			-5:00	-	EST	1973 Apr 29 2:00
+			-6:00 Menominee	C%sT	1969 Apr 27  2:00
+			-5:00	-	EST	1973 Apr 29  2:00
 			-6:00	US	C%sT
 
 # Navassa
@@ -897,26 +1007,26 @@
 # occupied 1857/1900 by the Navassa Phosphate Co
 # US lighthouse 1917/1996-09
 # currently uninhabited
-# see Mark Fineman, ``An Isle Rich in Guano and Discord'',
+# see Mark Fineman, "An Isle Rich in Guano and Discord",
 # _Los Angeles Times_ (1998-11-10), A1, A10; it cites
 # Jimmy Skaggs, _The Great Guano Rush_ (1994).
 
 ################################################################################
 
 
-# From Paul Eggert (2006-03-22):
-# A good source for time zone historical data outside the U.S. is
+# From Paul Eggert (2014-10-31):
+#
+# Unless otherwise specified, the source for data through 1990 is:
 # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
 # San Diego: ACS Publications, Inc. (2003).
+# Unfortunately this book contains many errors and cites no sources.
 #
 # Gwillim Law writes that a good source
 # for recent time zone data is the International Air Transport
 # Association's Standard Schedules Information Manual (IATA SSIM),
 # published semiannually.  Law sent in several helpful summaries
-# of the IATA's data after 1990.
-#
-# Except where otherwise noted, Shanks & Pottenger is the source for
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
+# of the IATA's data after 1990.  Except where otherwise noted,
+# IATA SSIM is the source for entries after 1990.
 #
 # Other sources occasionally used include:
 #
@@ -924,19 +1034,22 @@
 #	Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated),
 #	which I found in the UCLA library.
 #
-#	
 #	William Willett, The Waste of Daylight, 19th edition
-#	 (1914-03)
+#	
+#	[PDF] (1914-03)
+#
+#	Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
+#	.
 #
-# See the `europe' file for Greenland.
+# See the 'europe' file for Greenland.
 
 # Canada
 
-# From Alain LaBont (1994-11-14):
+# From Alain LaBonté (1994-11-14):
 # I post here the time zone abbreviations standardized in Canada
 # for both English and French in the CAN/CSA-Z234.4-89 standard....
 #
-#	UTC	Standard time	Daylight savings time
+#	UTC	Standard time	Daylight saving time
 #	offset	French	English	French	English
 #	-2:30	-	-	HAT	NDT
 #	-3	-	-	HAA	ADT
@@ -949,7 +1062,7 @@
 #	-9	HNY	YST	-	-
 #
 #	HN: Heure Normale	ST: Standard Time
-#	HA: Heure Avance	DT: Daylight saving Time
+#	HA: Heure Avancée	DT: Daylight saving Time
 #
 #	A: de l'Atlantique	Atlantic
 #	C: du Centre		Central
@@ -964,7 +1077,7 @@
 # From Paul Eggert (1994-11-22):
 # Alas, this sort of thing must be handled by localization software.
 
-# Unless otherwise specified, the data for Canada are all from Shanks
+# Unless otherwise specified, the data entries for Canada are all from Shanks
 # & Pottenger.
 
 # From Chris Walton (2006-04-01, 2006-04-25, 2006-06-26, 2007-01-31,
@@ -1011,26 +1124,40 @@
 # An amendment to the Interpretation Act was registered on February 19/2007....
 # http://action.attavik.ca/home/justice-gn/attach/2007/gaz02part2.pdf
 
-# From Paul Eggert (2006-04-25):
+# From Paul Eggert (2014-10-18):
 # H. David Matthews and Mary Vincent's map
-# 
 # "It's about TIME", _Canadian Geographic_ (September-October 1998)
-#  contains detailed boundaries for regions observing nonstandard
+# http://www.canadiangeographic.ca/Magazine/SO98/alacarte.asp
+# contains detailed boundaries for regions observing nonstandard
 # time and daylight saving time arrangements in Canada circa 1998.
 #
-# INMS, the Institute for National Measurement Standards in Ottawa, has 
-# information about standard and daylight saving time zones in Canada.
-#  (updated periodically).
+# National Research Council Canada maintains info about time zones and DST.
+# http://www.nrc-cnrc.gc.ca/eng/services/time/time_zones.html
+# http://www.nrc-cnrc.gc.ca/eng/services/time/faq/index.html#Q5
 # Its unofficial information is often taken from Matthews and Vincent.
 
 # From Paul Eggert (2006-06-27):
 # For now, assume all of DST-observing Canada will fall into line with the
 # new US DST rules,
 
+# From Chris Walton (2011-12-01)
+# In the first of Tammy Hardwick's articles
+# http://www.ilovecreston.com/?p=articles&t=spec&ar=260
+# she quotes the Friday November 1/1918 edition of the Creston Review.
+# The quote includes these two statements:
+# 'Sunday the CPR went back to the old system of time...'
+# '... The daylight saving scheme was dropped all over Canada at the same time,'
+# These statements refer to a transition from daylight time to standard time
+# that occurred nationally on Sunday October 27/1918.  This transition was
+# also documented in the Saturday October 26/1918 edition of the Toronto Star.
+
+# In light of that evidence, we alter the date from the earlier believed
+# Oct 31, to Oct 27, 1918 (and Sunday is a more likely transition day
+# than Thursday) in all Canadian rulesets.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Canada	1918	only	-	Apr	14	2:00	1:00	D
-Rule	Canada	1918	only	-	Oct	31	2:00	0	S
+Rule	Canada	1918	only	-	Oct	27	2:00	0	S
 Rule	Canada	1942	only	-	Feb	 9	2:00	1:00	W # War
 Rule	Canada	1945	only	-	Aug	14	23:00u	1:00	P # Peace
 Rule	Canada	1945	only	-	Sep	30	2:00	0	S
@@ -1075,12 +1202,27 @@
 # From Paul Eggert (2000-10-02):
 # INMS (2000-09-12) says that, since 1988 at least, Newfoundland switches
 # at 00:01 local time.  For now, assume it started in 1987.
+
+# From Michael Pelley (2011-09-12):
+# We received today, Monday, September 12, 2011, notification that the
+# changes to the Newfoundland Standard Time Act have been proclaimed.
+# The change in the Act stipulates that the change from Daylight Savings
+# Time to Standard Time and from Standard Time to Daylight Savings Time
+# now occurs at 2:00AM.
+# ...
+# http://www.assembly.nl.ca/legislation/sr/annualstatutes/2011/1106.chp.htm
+# ...
+# MICHAEL PELLEY  |  Manager of Enterprise Architecture - Solution Delivery
+# Office of the Chief Information Officer
+# Executive Council
+# Government of Newfoundland & Labrador
+
 Rule	StJohns	1987	only	-	Apr	Sun>=1	0:01	1:00	D
 Rule	StJohns	1987	2006	-	Oct	lastSun	0:01	0	S
 Rule	StJohns	1988	only	-	Apr	Sun>=1	0:01	2:00	DD
 Rule	StJohns	1989	2006	-	Apr	Sun>=1	0:01	1:00	D
-Rule	StJohns	2007	max	-	Mar	Sun>=8	0:01	1:00	D
-Rule	StJohns	2007	max	-	Nov	Sun>=1	0:01	0	S
+Rule	StJohns	2007	2011	-	Mar	Sun>=8	0:01	1:00	D
+Rule	StJohns	2007	2010	-	Nov	Sun>=1	0:01	0	S
 #
 # St John's has an apostrophe, but Posix file names can't have apostrophes.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -1090,11 +1232,12 @@
 			-3:30:52 StJohns N%sT	1935 Mar 30
 			-3:30	StJohns	N%sT	1942 May 11
 			-3:30	Canada	N%sT	1946
-			-3:30	StJohns	N%sT
+			-3:30	StJohns	N%sT	2011 Nov
+			-3:30	Canada	N%sT
 
 # most of east Labrador
 
-# The name `Happy Valley-Goose Bay' is too long; use `Goose Bay'.
+# The name 'Happy Valley-Goose Bay' is too long; use 'Goose Bay'.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Goose_Bay	-4:01:40 -	LMT	1884 # Happy Valley-Goose Bay
 			-3:30:52 -	NST	1918
@@ -1103,8 +1246,9 @@
 			-3:30	-	NST	1936
 			-3:30	StJohns	N%sT	1942 May 11
 			-3:30	Canada	N%sT	1946
-			-3:30	StJohns	N%sT	1966 Mar 15 2:00
-			-4:00	StJohns	A%sT
+			-3:30	StJohns	N%sT	1966 Mar 15  2:00
+			-4:00	StJohns	A%sT	2011 Nov
+			-4:00	Canada	A%sT
 
 
 # west Labrador, Nova Scotia, Prince Edward I
@@ -1163,7 +1307,7 @@
 Zone America/Halifax	-4:14:24 -	LMT	1902 Jun 15
 			-4:00	Halifax	A%sT	1918
 			-4:00	Canada	A%sT	1919
-			-4:00	Halifax	A%sT	1942 Feb  9 2:00s
+			-4:00	Halifax	A%sT	1942 Feb  9  2:00s
 			-4:00	Canada	A%sT	1946
 			-4:00	Halifax	A%sT	1974
 			-4:00	Canada	A%sT
@@ -1210,22 +1354,23 @@
 
 # Quebec
 
-# From Paul Eggert (2006-07-09):
-# Shanks & Pottenger write that since 1970 most of Quebec has been
-# like Montreal.
+# From Paul Eggert (2013-08-30):
+# Since 1970 most of Quebec has been like Toronto.
+# However, because earlier versions of the tz database mistakenly relied on data
+# from Shanks & Pottenger saying that Quebec differed from Ontario after 1970,
+# a separate entry was created for most of Quebec.  We're loath to lose
+# its pre-1970 info, even though the tz database is normally limited to
+# zones that differ after 1970, so keep this otherwise out-of-scope entry.
 
-# From Paul Eggert (2006-06-27):
 # Matthews and Vincent (1998) also write that Quebec east of the -63
 # meridian is supposed to observe AST, but residents as far east as
 # Natashquan use EST/EDT, and residents east of Natashquan use AST.
-# In "Official time in Quebec" the Quebec department of justice writes in
-# http://www.justice.gouv.qc.ca/english/publications/generale/temps-regl-1-a.htm
-# that "The residents of the Municipality of the
-# Cote-Nord-du-Golfe-Saint-Laurent and the municipalities of Saint-Augustin,
-# Bonne-Esperance and Blanc-Sablon apply the Official Time Act as it is
-# written and use Atlantic standard time all year round. The same applies to
-# the residents of the Native facilities along the lower North Shore."
-# 
+# The Quebec department of justice writes in
+# "The situation in Minganie and Basse-Côte-Nord"
+# http://www.justice.gouv.qc.ca/english/publications/generale/temps-minganie-a.htm
+# that the coastal strip from just east of Natashquan to Blanc-Sablon
+# observes Atlantic standard time all year round.
+# http://www.assnat.qc.ca/Media/Process.aspx?MediaId=ANQ.Vigie.Bll.DocumentGenerique_8845en
 # says this common practice was codified into law as of 2007.
 # For lack of better info, guess this practice began around 1970, contra to
 # Shanks & Pottenger who have this region observing AST/ADT.
@@ -1242,18 +1387,10 @@
 Rule	Mont	1924	only	-	May	17	2:00	1:00	D
 Rule	Mont	1924	1926	-	Sep	lastSun	2:30	0	S
 Rule	Mont	1925	1926	-	May	Sun>=1	2:00	1:00	D
-# The 1927-to-1937 rules can be expressed more simply as
-# Rule	Mont	1927	1937	-	Apr	lastSat	24:00	1:00	D
-# Rule	Mont	1927	1937	-	Sep	lastSat	24:00	0	S
-# The rules below avoid use of 24:00
-# (which pre-1998 versions of zic cannot handle).
-Rule	Mont	1927	only	-	May	1	0:00	1:00	D
-Rule	Mont	1927	1932	-	Sep	lastSun	0:00	0	S
-Rule	Mont	1928	1931	-	Apr	lastSun	0:00	1:00	D
-Rule	Mont	1932	only	-	May	1	0:00	1:00	D
-Rule	Mont	1933	1940	-	Apr	lastSun	0:00	1:00	D
-Rule	Mont	1933	only	-	Oct	1	0:00	0	S
-Rule	Mont	1934	1939	-	Sep	lastSun	0:00	0	S
+Rule	Mont	1927	1937	-	Apr	lastSat	24:00	1:00	D
+Rule	Mont	1927	1937	-	Sep	lastSat	24:00	0	S
+Rule	Mont	1938	1940	-	Apr	lastSun	0:00	1:00	D
+Rule	Mont	1938	1939	-	Sep	lastSun	0:00	0	S
 Rule	Mont	1946	1973	-	Apr	lastSun	2:00	1:00	D
 Rule	Mont	1945	1948	-	Sep	lastSun	2:00	0	S
 Rule	Mont	1949	1950	-	Oct	lastSun	2:00	0	S
@@ -1267,12 +1404,11 @@
 Zone America/Montreal	-4:54:16 -	LMT	1884
 			-5:00	Mont	E%sT	1918
 			-5:00	Canada	E%sT	1919
-			-5:00	Mont	E%sT	1942 Feb  9 2:00s
+			-5:00	Mont	E%sT	1942 Feb  9  2:00s
 			-5:00	Canada	E%sT	1946
 			-5:00	Mont	E%sT	1974
 			-5:00	Canada	E%sT
 
-
 # Ontario
 
 # From Paul Eggert (2006-07-09):
@@ -1290,7 +1426,7 @@
 # have already done so.  In Orillia DST was to run until Saturday,
 # 1912-08-31 (no time mentioned), but it was met with considerable
 # hostility from certain segments of the public, and was revoked after
-# only two weeks -- I copied it as Saturday, 1912-07-07, 22:00, but
+# only two weeks - I copied it as Saturday, 1912-07-07, 22:00, but
 # presumably that should be -07-06.  (1912-06-19, -07-12; also letters
 # earlier in June).
 #
@@ -1300,10 +1436,8 @@
 # Mark Brader writes that an article in the 1997-10-14 Toronto Star
 # says that Atikokan, Ontario currently does not observe DST,
 # but will vote on 11-10 whether to use EST/EDT.
-# He also writes that the
-# 
-# Ontario Time Act (1990, Chapter T.9)
-# 
+# He also writes that the Ontario Time Act (1990, Chapter T.9)
+# http://www.gov.on.ca/MBS/english/publications/statregs/conttext.html
 # says that Ontario east of 90W uses EST/EDT, and west of 90W uses CST/CDT.
 # Officially Atikokan is therefore on CST/CDT, and most likely this report
 # concerns a non-official time observed as a matter of local practice.
@@ -1346,6 +1480,81 @@
 # entry since our cutoff date of 1970, so we can move
 # America/Coral_Harbour to the 'backward' file.
 
+# From Mark Brader (2010-03-06):
+#
+# Currently the database has:
+#
+# # Ontario
+#
+# # From Paul Eggert (2006-07-09):
+# # Shanks & Pottenger write that since 1970 most of Ontario has been like
+# # Toronto.
+# # Thunder Bay skipped DST in 1973.
+# # Many smaller locales did not observe peacetime DST until 1974;
+# # Nipigon (EST) and Rainy River (CST) are the largest that we know of.
+#
+# In the (Toronto) Globe and Mail for Saturday, 1955-09-24, in the bottom
+# right corner of page 1, it says that Toronto will return to standard
+# time at 2 am Sunday morning (which agrees with the database), and that:
+#
+#     The one-hour setback will go into effect throughout most of Ontario,
+#     except in areas like Windsor which remains on standard time all year.
+#
+# Windsor is, of course, a lot larger than Nipigon.
+#
+# I only came across this incidentally.  I don't know if Windsor began
+# observing DST when Detroit did, or in 1974, or on some other date.
+#
+# By the way, the article continues by noting that:
+#
+#     Some cities in the United States have pushed the deadline back
+#     three weeks and will change over from daylight saving in October.
+
+# From Arthur David Olson (2010-07-17):
+#
+# "Standard Time and Time Zones in Canada" appeared in
+# The Journal of The Royal Astronomical Society of Canada,
+# volume 26, number 2 (February 1932) and, as of 2010-07-17,
+# was available at
+# http://adsabs.harvard.edu/full/1932JRASC..26...49S
+#
+# It includes the text below (starting on page 57):
+#
+#   A list of the places in Canada using daylight saving time would
+# require yearly revision. From information kindly furnished by
+# the provincial governments and by the postmasters in many cities
+# and towns, it is found that the following places used daylight sav-
+# ing in 1930. The information for the province of Quebec is definite,
+# for the other provinces only approximate:
+#
+#	Province	Daylight saving time used
+# Prince Edward Island	Not used.
+# Nova Scotia		In Halifax only.
+# New Brunswick		In St. John only.
+# Quebec		In the following places:
+#			Montreal	Lachine
+#			Quebec		Mont-Royal
+#			Lévis		Iberville
+#			St. Lambert	Cap de la Madelèine
+#			Verdun		Loretteville
+#			Westmount	Richmond
+#			Outremont	St. Jérôme
+#			Longueuil	Greenfield Park
+#			Arvida		Waterloo
+#			Chambly-Canton	Beaulieu
+#			Melbourne	La Tuque
+#			St. Théophile	Buckingham
+# Ontario		Used generally in the cities and towns along
+#			the southerly part of the province. Not
+#			used in the northwesterly part.
+# Manitoba		Not used.
+# Saskatchewan		In Regina only.
+# Alberta		Not used.
+# British Columbia	Not used.
+#
+#   With some exceptions, the use of daylight saving may be said to be limited
+# to those cities and towns lying between Quebec city and Windsor, Ont.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Toronto	1919	only	-	Mar	30	23:30	1:00	D
 Rule	Toronto	1919	only	-	Oct	26	0:00	0	S
@@ -1406,7 +1615,7 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Toronto	-5:17:32 -	LMT	1895
 			-5:00	Canada	E%sT	1919
-			-5:00	Toronto	E%sT	1942 Feb  9 2:00s
+			-5:00	Toronto	E%sT	1942 Feb  9  2:00s
 			-5:00	Canada	E%sT	1946
 			-5:00	Toronto	E%sT	1974
 			-5:00	Canada	E%sT
@@ -1414,21 +1623,21 @@
 			-6:00	-	CST	1910
 			-5:00	-	EST	1942
 			-5:00	Canada	E%sT	1970
-			-5:00	Mont	E%sT	1973
+			-5:00	Toronto	E%sT	1973
 			-5:00	-	EST	1974
 			-5:00	Canada	E%sT
 Zone America/Nipigon	-5:53:04 -	LMT	1895
 			-5:00	Canada	E%sT	1940 Sep 29
-			-5:00	1:00	EDT	1942 Feb  9 2:00s
+			-5:00	1:00	EDT	1942 Feb  9  2:00s
 			-5:00	Canada	E%sT
 Zone America/Rainy_River -6:18:16 -	LMT	1895
 			-6:00	Canada	C%sT	1940 Sep 29
-			-6:00	1:00	CDT	1942 Feb  9 2:00s
+			-6:00	1:00	CDT	1942 Feb  9  2:00s
 			-6:00	Canada	C%sT
 Zone America/Atikokan	-6:06:28 -	LMT	1895
 			-6:00	Canada	C%sT	1940 Sep 29
-			-6:00	1:00	CDT	1942 Feb  9 2:00s
-			-6:00	Canada	C%sT	1945 Sep 30 2:00
+			-6:00	1:00	CDT	1942 Feb  9  2:00s
+			-6:00	Canada	C%sT	1945 Sep 30  2:00
 			-5:00	-	EST
 
 
@@ -1441,7 +1650,7 @@
 # the first Sunday of April of each year and two o'clock Central
 # Standard Time in the morning of the last Sunday of October next
 # following, one hour in advance of Central Standard Time."...
-# I believe that the English legislation [of the old time act] had =
+# I believe that the English legislation [of the old time act] had
 # been assented to (March 22, 1967)....
 # Also, as far as I can tell, there was no order-in-council varying
 # the time of Daylight Saving Time for 2005 and so the provisions of
@@ -1457,7 +1666,7 @@
 Rule	Winn	1916	only	-	Apr	23	0:00	1:00	D
 Rule	Winn	1916	only	-	Sep	17	0:00	0	S
 Rule	Winn	1918	only	-	Apr	14	2:00	1:00	D
-Rule	Winn	1918	only	-	Oct	31	2:00	0	S
+Rule	Winn	1918	only	-	Oct	27	2:00	0	S
 Rule	Winn	1937	only	-	May	16	2:00	1:00	D
 Rule	Winn	1937	only	-	Sep	26	2:00	0	S
 Rule	Winn	1942	only	-	Feb	 9	2:00	1:00	W # War
@@ -1540,7 +1749,7 @@
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Regina	1918	only	-	Apr	14	2:00	1:00	D
-Rule	Regina	1918	only	-	Oct	31	2:00	0	S
+Rule	Regina	1918	only	-	Oct	27	2:00	0	S
 Rule	Regina	1930	1934	-	May	Sun>=1	0:00	1:00	D
 Rule	Regina	1930	1934	-	Oct	Sun>=1	0:00	0	S
 Rule	Regina	1937	1941	-	Apr	Sun>=8	0:00	1:00	D
@@ -1564,12 +1773,12 @@
 Rule	Swift	1960	1961	-	Sep	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Regina	-6:58:36 -	LMT	1905 Sep
-			-7:00	Regina	M%sT	1960 Apr lastSun 2:00
+			-7:00	Regina	M%sT	1960 Apr lastSun  2:00
 			-6:00	-	CST
 Zone America/Swift_Current -7:11:20 -	LMT	1905 Sep
-			-7:00	Canada	M%sT	1946 Apr lastSun 2:00
+			-7:00	Canada	M%sT	1946 Apr lastSun  2:00
 			-7:00	Regina	M%sT	1950
-			-7:00	Swift	M%sT	1972 Apr lastSun 2:00
+			-7:00	Swift	M%sT	1972 Apr lastSun  2:00
 			-6:00	-	CST
 
 
@@ -1577,7 +1786,7 @@
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Edm	1918	1919	-	Apr	Sun>=8	2:00	1:00	D
-Rule	Edm	1918	only	-	Oct	31	2:00	0	S
+Rule	Edm	1918	only	-	Oct	27	2:00	0	S
 Rule	Edm	1919	only	-	May	27	2:00	0	S
 Rule	Edm	1920	1923	-	Apr	lastSun	2:00	1:00	D
 Rule	Edm	1920	only	-	Oct	lastSun	2:00	0	S
@@ -1607,9 +1816,62 @@
 # Dawson Creek uses MST.  Much of east BC is like Edmonton.
 # Matthews and Vincent (1998) write that Creston is like Dawson Creek.
 
+# It seems though that (re: Creston) is not entirely correct:
+
+# From Chris Walton (2011-12-01):
+# There are two areas within the Canadian province of British Columbia
+# that do not currently observe daylight saving:
+# a) The Creston Valley (includes the town of Creston and surrounding area)
+# b) The eastern half of the Peace River Regional District
+# (includes the cities of Dawson Creek and Fort St. John)
+
+# Earlier this year I stumbled across a detailed article about the time
+# keeping history of Creston; it was written by Tammy Hardwick who is the
+# manager of the Creston & District Museum. The article was written in May 2009.
+# http://www.ilovecreston.com/?p=articles&t=spec&ar=260
+# According to the article, Creston has not changed its clocks since June 1918.
+# i.e. Creston has been stuck on UTC-7 for 93 years.
+# Dawson Creek, on the other hand, changed its clocks as recently as April 1972.
+
+# Unfortunately the exact date for the time change in June 1918 remains
+# unknown and will be difficult to ascertain.  I e-mailed Tammy a few months
+# ago to ask if Sunday June 2 was a reasonable guess.  She said it was just
+# as plausible as any other date (in June).  She also said that after writing
+# the article she had discovered another time change in 1916; this is the
+# subject of another article which she wrote in October 2010.
+# http://www.creston.museum.bc.ca/index.php?module=comments&uop=view_comment&cm+id=56
+
+# Here is a summary of the three clock change events in Creston's history:
+# 1. 1884 or 1885: adoption of Mountain Standard Time (GMT-7)
+# Exact date unknown
+# 2. Oct 1916: switch to Pacific Standard Time (GMT-8)
+# Exact date in October unknown; Sunday October 1 is a reasonable guess.
+# 3. June 1918: switch to Pacific Daylight Time (GMT-7)
+# Exact date in June unknown; Sunday June 2 is a reasonable guess.
+# note#1:
+# On Oct 27/1918 when daylight saving ended in the rest of Canada,
+# Creston did not change its clocks.
+# note#2:
+# During WWII when the Federal Government legislated a mandatory clock change,
+# Creston did not oblige.
+# note#3:
+# There is no guarantee that Creston will remain on Mountain Standard Time
+# (UTC-7) forever.
+# The subject was debated at least once this year by the town Council.
+# http://www.bclocalnews.com/kootenay_rockies/crestonvalleyadvance/news/116760809.html
+
+# During a period WWII, summer time (Daylight saying) was mandatory in Canada.
+# In Creston, that was handled by shifting the area to PST (-8:00) then applying
+# summer time to cause the offset to be -7:00, the same as it had been before
+# the change.  It can be argued that the timezone abbreviation during this
+# period should be PDT rather than MST, but that doesn't seem important enough
+# (to anyone) to further complicate the rules.
+
+# The transition dates (and times) are guesses.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Vanc	1918	only	-	Apr	14	2:00	1:00	D
-Rule	Vanc	1918	only	-	Oct	31	2:00	0	S
+Rule	Vanc	1918	only	-	Oct	27	2:00	0	S
 Rule	Vanc	1942	only	-	Feb	 9	2:00	1:00	W # War
 Rule	Vanc	1945	only	-	Aug	14	23:00u	1:00	P # Peace
 Rule	Vanc	1945	only	-	Sep	30	2:00	0	S
@@ -1623,9 +1885,12 @@
 			-8:00	Canada	P%sT
 Zone America/Dawson_Creek -8:00:56 -	LMT	1884
 			-8:00	Canada	P%sT	1947
-			-8:00	Vanc	P%sT	1972 Aug 30 2:00
+			-8:00	Vanc	P%sT	1972 Aug 30  2:00
+			-7:00	-	MST
+Zone America/Creston	-7:46:04 -	LMT	1884
+			-7:00	-	MST	1916 Oct 1
+			-8:00	-	PST	1918 Jun 2
 			-7:00	-	MST
-
 
 # Northwest Territories, Nunavut, Yukon
 
@@ -1647,18 +1912,17 @@
 
 # From Rives McDow (1999-09-04):
 # Nunavut ... moved ... to incorporate the whole territory into one time zone.
-# 
 # Nunavut moves to single time zone Oct. 31
-# 
+# http://www.nunatsiaq.com/nunavut/nvt90903_13.html
 #
 # From Antoine Leca (1999-09-06):
 # We then need to create a new timezone for the Kitikmeot region of Nunavut
 # to differentiate it from the Yellowknife region.
 
 # From Paul Eggert (1999-09-20):
-# 
 # Basic Facts: The New Territory
-#  (1999) reports that Pangnirtung operates on eastern time,
+# http://www.nunavut.com/basicfacts/english/basicfacts_1territory.html
+# (1999) reports that Pangnirtung operates on eastern time,
 # and that Coral Harbour does not observe DST.  We don't know when
 # Pangnirtung switched to eastern time; we'll guess 1995.
 
@@ -1686,8 +1950,8 @@
 # the current state of affairs.
 
 # From Michaela Rodrigue, writing in the
-# 
-# Nunatsiaq News (1999-11-19):
+# Nunatsiaq News (1999-11-19):
+# http://www.nunatsiaq.com/archives/nunavut991130/nvt91119_17.html
 # Clyde River, Pangnirtung and Sanikiluaq now operate with two time zones,
 # central - or Nunavut time - for government offices, and eastern time
 # for municipal offices and schools....  Igloolik [was similar but then]
@@ -1705,10 +1969,8 @@
 # Central Time and Southampton Island [in the Central zone] is not
 # required to use daylight savings.
 
-# From
-# 
-# Nunavut now has two time zones
-#  (2000-11-10):
+# From 
+# Nunavut now has two time zones (2000-11-10):
 # The Nunavut government would allow its employees in Kugluktuk and
 # Cambridge Bay to operate on central time year-round, putting them
 # one hour behind the rest of Nunavut for six months during the winter.
@@ -1736,10 +1998,7 @@
 # [Also see  (2001-03-09).]
 
 # From Gwillim Law (2005-05-21):
-# According to maps at
-# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SWE.jpg
-# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SSE.jpg
-# (both dated 2003), and
+# According to ...
 # http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp
 # (from a 1998 Canadian Geographic article), the de facto and de jure time
 # for Southampton Island (at the north end of Hudson Bay) is UTC-5 all year
@@ -1748,9 +2007,11 @@
 # predates the creation of Nunavut, it probably goes back many years....
 # The Inuktitut name of Coral Harbour is Sallit, but it's rarely used.
 #
-# From Paul Eggert (2005-07-26):
+# From Paul Eggert (2014-10-17):
 # For lack of better information, assume that Southampton Island observed
-# daylight saving only during wartime.
+# daylight saving only during wartime.  Gwillim Law's email also
+# mentioned maps now maintained by National Research Council Canada;
+# see above for an up-to-date link.
 
 # From Chris Walton (2007-03-01):
 # ... the community of Resolute (located on Cornwallis Island in
@@ -1759,20 +2020,67 @@
 # daylight saving....
 # http://www.nnsl.com/frames/newspapers/2006-11/nov13_06none.html
 
-# From Chris Walton (2007-03-14):
-# Today I phoned the "hamlet office" to find out what Resolute was doing with
-# its clocks.
-#
-# The individual that answered the phone confirmed that the clocks did not
-# move at the end of daylight saving on October 29/2006.  He also told me that
-# the clocks did not move this past weekend (March 11/2007)....
-
-# From Chris Walton (2008-11-13):
-# ...the residents of Resolute believe that they are changing "time zones"
-# twice a year.  In winter months, local time is qualified with "Eastern
-# Time" which is really "Eastern Standard Time (UTC-5)".  In summer
-# months, local time is qualified with "Central Time" which is really
-# "Central Daylight Time (UTC-5)"...
+# From Chris Walton (2011-03-21):
+# Back in 2007 I initiated the creation of a new "zone file" for Resolute
+# Bay. Resolute Bay is a small community located about 900km north of
+# the Arctic Circle. The zone file was required because Resolute Bay had
+# decided to use UTC-5 instead of UTC-6 for the winter of 2006-2007.
+#
+# According to new information which I received last week, Resolute Bay
+# went back to using UTC-6 in the winter of 2007-2008...
+#
+# On March 11/2007 most of Canada went onto daylight saving. On March
+# 14/2007 I phoned the Resolute Bay hamlet office to do a "time check." I
+# talked to somebody that was both knowledgeable and helpful. I was able
+# to confirm that Resolute Bay was still operating on UTC-5. It was
+# explained to me that Resolute Bay had been on the Eastern Time zone
+# (EST) in the winter, and was now back on the Central Time zone (CDT).
+# i.e. the time zone had changed twice in the last year but the clocks
+# had not moved. The residents had to know which time zone they were in
+# so they could follow the correct TV schedule...
+#
+# On Nov 02/2008 most of Canada went onto standard time. On Nov 03/2008 I
+# phoned the Resolute Bay hamlet office...[D]ue to the challenging nature
+# of the phone call, I decided to seek out an alternate source of
+# information. I found an e-mail address for somebody by the name of
+# Stephanie Adams whose job was listed as "Inns North Support Officer for
+# Arctic Co-operatives." I was under the impression that Stephanie lived
+# and worked in Resolute Bay...
+#
+# On March 14/2011 I phoned the hamlet office again. I was told that
+# Resolute Bay had been using Central Standard Time over the winter of
+# 2010-2011 and that the clocks had therefore been moved one hour ahead
+# on March 13/2011. The person I talked to was aware that Resolute Bay
+# had previously experimented with Eastern Standard Time but he could not
+# tell me when the practice had stopped.
+#
+# On March 17/2011 I searched the Web to find an e-mail address of
+# somebody that might be able to tell me exactly when Resolute Bay went
+# off Eastern Standard Time. I stumbled on the name "Aziz Kheraj." Aziz
+# used to be the mayor of Resolute Bay and he apparently owns half the
+# businesses including "South Camp Inn." This website has some info on
+# Aziz:
+# http://www.uphere.ca/node/493
+#
+# I sent Aziz an e-mail asking when Resolute Bay had stopped using
+# Eastern Standard Time.
+#
+# Aziz responded quickly with this: "hi, The time was not changed for the
+# 1 year only, the following year, the community went back to the old way
+# of "spring ahead-fall behind" currently we are zulu plus 5 hrs and in
+# the winter Zulu plus 6 hrs"
+#
+# This of course conflicted with everything I had ascertained in November 2008.
+#
+# I sent Aziz a copy of my 2008 e-mail exchange with Stephanie. Aziz
+# responded with this: "Hi, Stephanie lives in Winnipeg. I live here, You
+# may want to check with the weather office in Resolute Bay or do a
+# search on the weather through Env. Canada. web site"
+#
+# If I had realized the Stephanie did not live in Resolute Bay I would
+# never have contacted her.  I now believe that all the information I
+# obtained in November 2008 should be ignored...
+# I apologize for reporting incorrect information in 2008.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	NT_YK	1918	only	-	Apr	14	2:00	1:00	D
@@ -1790,49 +2098,47 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 # aka Panniqtuuq
 Zone America/Pangnirtung 0	-	zzz	1921 # trading post est.
-			-4:00	NT_YK	A%sT	1995 Apr Sun>=1 2:00
-			-5:00	Canada	E%sT	1999 Oct 31 2:00
-			-6:00	Canada	C%sT	2000 Oct 29 2:00
+			-4:00	NT_YK	A%sT	1995 Apr Sun>=1  2:00
+			-5:00	Canada	E%sT	1999 Oct 31  2:00
+			-6:00	Canada	C%sT	2000 Oct 29  2:00
 			-5:00	Canada	E%sT
 # formerly Frobisher Bay
 Zone America/Iqaluit	0	-	zzz	1942 Aug # Frobisher Bay est.
-			-5:00	NT_YK	E%sT	1999 Oct 31 2:00
-			-6:00	Canada	C%sT	2000 Oct 29 2:00
+			-5:00	NT_YK	E%sT	1999 Oct 31  2:00
+			-6:00	Canada	C%sT	2000 Oct 29  2:00
 			-5:00	Canada	E%sT
 # aka Qausuittuq
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Resolute 2006	max	-	Nov	Sun>=1	2:00	0	ES
-Rule	Resolute 2007	max	-	Mar	Sun>=8	2:00	0	CD
 Zone America/Resolute	0	-	zzz	1947 Aug 31 # Resolute founded
-			-6:00	NT_YK	C%sT	2000 Oct 29 2:00
-			-5:00	-	EST	2001 Apr  1 3:00
-			-6:00	Canada	C%sT	2006 Oct 29 2:00
-			-5:00	Resolute	%sT
+			-6:00	NT_YK	C%sT	2000 Oct 29  2:00
+			-5:00	-	EST	2001 Apr  1  3:00
+			-6:00	Canada	C%sT	2006 Oct 29  2:00
+			-5:00	-	EST	2007 Mar 11  3:00
+			-6:00	Canada	C%sT
 # aka Kangiqiniq
 Zone America/Rankin_Inlet 0	-	zzz	1957 # Rankin Inlet founded
-			-6:00	NT_YK	C%sT	2000 Oct 29 2:00
-			-5:00	-	EST	2001 Apr  1 3:00
+			-6:00	NT_YK	C%sT	2000 Oct 29  2:00
+			-5:00	-	EST	2001 Apr  1  3:00
 			-6:00	Canada	C%sT
 # aka Iqaluktuuttiaq
 Zone America/Cambridge_Bay 0	-	zzz	1920 # trading post est.?
-			-7:00	NT_YK	M%sT	1999 Oct 31 2:00
-			-6:00	Canada	C%sT	2000 Oct 29 2:00
-			-5:00	-	EST	2000 Nov  5 0:00
-			-6:00	-	CST	2001 Apr  1 3:00
+			-7:00	NT_YK	M%sT	1999 Oct 31  2:00
+			-6:00	Canada	C%sT	2000 Oct 29  2:00
+			-5:00	-	EST	2000 Nov  5  0:00
+			-6:00	-	CST	2001 Apr  1  3:00
 			-7:00	Canada	M%sT
 Zone America/Yellowknife 0	-	zzz	1935 # Yellowknife founded?
 			-7:00	NT_YK	M%sT	1980
 			-7:00	Canada	M%sT
 Zone America/Inuvik	0	-	zzz	1953 # Inuvik founded
-			-8:00	NT_YK	P%sT	1979 Apr lastSun 2:00
+			-8:00	NT_YK	P%sT	1979 Apr lastSun  2:00
 			-7:00	NT_YK	M%sT	1980
 			-7:00	Canada	M%sT
 Zone America/Whitehorse	-9:00:12 -	LMT	1900 Aug 20
-			-9:00	NT_YK	Y%sT	1966 Jul 1 2:00
+			-9:00	NT_YK	Y%sT	1966 Jul  1  2:00
 			-8:00	NT_YK	P%sT	1980
 			-8:00	Canada	P%sT
 Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
-			-9:00	NT_YK	Y%sT	1973 Oct 28 0:00
+			-9:00	NT_YK	Y%sT	1973 Oct 28  0:00
 			-8:00	NT_YK	P%sT	1980
 			-8:00	Canada	P%sT
 
@@ -1844,9 +2150,8 @@
 # From Paul Eggert (2001-03-05):
 # The Investigation and Analysis Service of the
 # Mexican Library of Congress (MLoC) has published a
-# 
 # history of Mexican local time (in Spanish)
-# .
+# http://www.cddhcu.gob.mx/bibliot/publica/inveyana/polisoc/horver/
 #
 # Here are the discrepancies between Shanks & Pottenger (S&P) and the MLoC.
 # (In all cases we go with the MLoC.)
@@ -1891,9 +2196,8 @@
 # -------------- End Forwarded Message --------------
 # From Paul Eggert (1996-06-12):
 # For an English translation of the decree, see
-# 
-# ``Diario Oficial: Time Zone Changeover'' (1996-01-04).
-# 
+# "Diario Oficial: Time Zone Changeover" (1996-01-04).
+# http://mexico-travel.com/extra/timezone_eng.html
 
 # From Rives McDow (1998-10-08):
 # The State of Quintana Roo has reverted back to central STD and DST times
@@ -1905,7 +2209,7 @@
 # savings time so as to stay on the same time zone as the southern part of
 # Arizona year round.
 
-# From Jesper Norgaard, translating
+# From Jesper Nørgaard, translating
 #  (2001-01-17):
 # In Oaxaca, the 55.000 teachers from the Section 22 of the National
 # Syndicate of Education Workers, refuse to apply daylight saving each
@@ -1918,7 +2222,7 @@
 # January 17, 2000 - The Energy Secretary, Ernesto Martens, announced
 # that Summer Time will be reduced from seven to five months, starting
 # this year....
-# 
+# http://www.publico.com.mx/scripts/texto3.asp?action=pagina&pag=21&pos=p&secc=naci&date=01/17/2001
 # [translated], says "summer time will ... take effect on the first Sunday
 # in May, and end on the last Sunday of September.
 
@@ -1926,23 +2230,22 @@
 # The 2001-01-24 traditional Washington Post contained the page one
 # story "Timely Issue Divides Mexicans."...
 # http://www.washingtonpost.com/wp-dyn/articles/A37383-2001Jan23.html
-# ... Mexico City Mayor Lopez Obrador "...is threatening to keep
+# ... Mexico City Mayor López Obrador "...is threatening to keep
 # Mexico City and its 20 million residents on a different time than
-# the rest of the country..." In particular, Lopez Obrador would abolish
+# the rest of the country..." In particular, López Obrador would abolish
 # observation of Daylight Saving Time.
 
-# 
 # Official statute published by the Energy Department
-#  (2001-02-01) shows Baja and Chihauhua as still using US DST rules,
-# and Sonora with no DST.  This was reported by Jesper Norgaard (2001-02-03).
+# http://www.conae.gob.mx/ahorro/decretohorver2001.html#decre
+# (2001-02-01) shows Baja and Chihauhua as still using US DST rules,
+# and Sonora with no DST.  This was reported by Jesper Nørgaard (2001-02-03).
 
 # From Paul Eggert (2001-03-03):
 #
-# 
+# http://www.latimes.com/news/nation/20010303/t000018766.html
 # James F. Smith writes in today's LA Times
-# 
 # * Sonora will continue to observe standard time.
-# * Last week Mexico City's mayor Andres Manuel Lopez Obrador decreed that
+# * Last week Mexico City's mayor Andrés Manuel López Obrador decreed that
 #   the Federal District will not adopt DST.
 # * 4 of 16 district leaders announced they'll ignore the decree.
 # * The decree does not affect federal-controlled facilities including
@@ -1950,7 +2253,7 @@
 #
 # For now we'll assume that the Federal District will bow to federal rules.
 
-# From Jesper Norgaard (2001-04-01):
+# From Jesper Nørgaard (2001-04-01):
 # I found some references to the Mexican application of daylight
 # saving, which modifies what I had already sent you, stating earlier
 # that a number of northern Mexican states would go on daylight
@@ -1959,7 +2262,7 @@
 # saving all year) will follow the original decree of president
 # Vicente Fox, starting daylight saving May 6, 2001 and ending
 # September 30, 2001.
-# References: "Diario de Monterrey" 
+# References: "Diario de Monterrey" 
 # Palabra  (2001-03-31)
 
 # From Reuters (2001-09-04):
@@ -1971,7 +2274,7 @@
 # standard time. "This is so residents of the Federal District are not
 # subject to unexpected time changes," a statement from the court said.
 
-# From Jesper Norgaard Welen (2002-03-12):
+# From Jesper Nørgaard Welen (2002-03-12):
 # ... consulting my local grocery store(!) and my coworkers, they all insisted
 # that a new decision had been made to reinstate US style DST in Mexico....
 # http://www.conae.gob.mx/ahorro/horaver2001_m1_2002.html (2002-02-20)
@@ -1985,48 +2288,36 @@
 # > the United States.
 # Now this has passed both the Congress and the Senate, so starting from
 # 2010, some border regions will be the same:
-# 
 # http://www.signonsandiego.com/news/2009/dec/28/clocks-will-match-both-sides-border/
-# 
-# 
 # http://www.elmananarey.com/diario/noticia/nacional/noticias/empatan_horario_de_frontera_con_eu/621939
-# 
 # (Spanish)
 #
 # Could not find the new law text, but the proposed law text changes are here:
-# 
 # http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/20091210-V.pdf
-# 
 # (Gaceta Parlamentaria)
 #
 # There is also a list of the votes here:
-# 
 # http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/V2-101209.html
-# 
 #
 # Our page:
-# 
 # http://www.timeanddate.com/news/time/north-mexico-dst-change.html
-# 
 
 # From Arthur David Olson (2010-01-20):
 # The page
-# 
 # http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010
-# 
 # includes this text:
 # En los municipios fronterizos de Tijuana y Mexicali en Baja California;
-# Juárez y Ojinaga en Chihuahua; Acuña y Piedras Negras en Coahuila;
-# Anáhuac en Nuevo León; y Nuevo Laredo, Reynosa y Matamoros en
-# Tamaulipas, la aplicación de este horario estacional surtirá efecto
-# desde las dos horas del segundo domingo de marzo y concluirá a las dos
+# Juárez y Ojinaga en Chihuahua; Acuña y Piedras Negras en Coahuila;
+# Anáhuac en Nuevo León; y Nuevo Laredo, Reynosa y Matamoros en
+# Tamaulipas, la aplicación de este horario estacional surtirá efecto
+# desde las dos horas del segundo domingo de marzo y concluirá a las dos
 # horas del primer domingo de noviembre.
 # En los municipios fronterizos que se encuentren ubicados en la franja
-# fronteriza norte en el territorio comprendido entre la línea
-# internacional y la línea paralela ubicada a una distancia de veinte
-# kilómetros, así como la Ciudad de Ensenada, Baja California, hacia el
-# interior del país, la aplicación de este horario estacional surtirá
-# efecto desde las dos horas del segundo domingo de marzo y concluirá a
+# fronteriza norte en el territorio comprendido entre la línea
+# internacional y la línea paralela ubicada a una distancia de veinte
+# kilómetros, así como la Ciudad de Ensenada, Baja California, hacia el
+# interior del país, la aplicación de este horario estacional surtirá
+# efecto desde las dos horas del segundo domingo de marzo y concluirá a
 # las dos horas del primer domingo de noviembre.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -2045,39 +2336,39 @@
 Rule	Mexico	2002	max	-	Apr	Sun>=1	2:00	1:00	D
 Rule	Mexico	2002	max	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-# Quintana Roo
+# Quintana Roo; represented by Cancún
 Zone America/Cancun	-5:47:04 -	LMT	1922 Jan  1  0:12:56
 			-6:00	-	CST	1981 Dec 23
 			-5:00	Mexico	E%sT	1998 Aug  2  2:00
 			-6:00	Mexico	C%sT
-# Campeche, Yucatan
+# Campeche, Yucatán; represented by Mérida
 Zone America/Merida	-5:58:28 -	LMT	1922 Jan  1  0:01:32
 			-6:00	-	CST	1981 Dec 23
 			-5:00	-	EST	1982 Dec  2
 			-6:00	Mexico	C%sT
-# Coahuila, Durango, Nuevo Leon, Tamaulipas (near US border)
+# Coahuila, Durango, Nuevo León, Tamaulipas (near US border)
 Zone America/Matamoros	-6:40:00 -	LMT	1921 Dec 31 23:20:00
 			-6:00	-	CST	1988
 			-6:00	US	C%sT	1989
 			-6:00	Mexico	C%sT	2010
 			-6:00	US	C%sT
-# Coahuila, Durango, Nuevo Leon, Tamaulipas (away from US border)
+# Coahuila, Durango, Nuevo León, Tamaulipas (away from US border)
 Zone America/Monterrey	-6:41:16 -	LMT	1921 Dec 31 23:18:44
 			-6:00	-	CST	1988
 			-6:00	US	C%sT	1989
 			-6:00	Mexico	C%sT
 # Central Mexico
-Zone America/Mexico_City -6:36:36 -	LMT	1922 Jan  1 0:23:24
+Zone America/Mexico_City -6:36:36 -	LMT	1922 Jan  1  0:23:24
 			-7:00	-	MST	1927 Jun 10 23:00
 			-6:00	-	CST	1930 Nov 15
 			-7:00	-	MST	1931 May  1 23:00
 			-6:00	-	CST	1931 Oct
 			-7:00	-	MST	1932 Apr  1
-			-6:00	Mexico	C%sT	2001 Sep 30 02:00
+			-6:00	Mexico	C%sT	2001 Sep 30  2:00
 			-6:00	-	CST	2002 Feb 20
 			-6:00	Mexico	C%sT
 # Chihuahua (near US border)
-Zone America/Ojinaga	-6:57:40 -	LMT	1922 Jan 1 0:02:20
+Zone America/Ojinaga	-6:57:40 -	LMT	1922 Jan  1  0:02:20
 			-7:00	-	MST	1927 Jun 10 23:00
 			-6:00	-	CST	1930 Nov 15
 			-7:00	-	MST	1931 May  1 23:00
@@ -2085,7 +2376,7 @@
 			-7:00	-	MST	1932 Apr  1
 			-6:00	-	CST	1996
 			-6:00	Mexico	C%sT	1998
-			-6:00	-	CST	1998 Apr Sun>=1 3:00
+			-6:00	-	CST	1998 Apr Sun>=1  3:00
 			-7:00	Mexico	M%sT	2010
 			-7:00	US	M%sT
 # Chihuahua (away from US border)
@@ -2097,7 +2388,7 @@
 			-7:00	-	MST	1932 Apr  1
 			-6:00	-	CST	1996
 			-6:00	Mexico	C%sT	1998
-			-6:00	-	CST	1998 Apr Sun>=1 3:00
+			-6:00	-	CST	1998 Apr Sun>=1  3:00
 			-7:00	Mexico	M%sT
 # Sonora
 Zone America/Hermosillo	-7:23:52 -	LMT	1921 Dec 31 23:36:08
@@ -2111,7 +2402,35 @@
 			-8:00	-	PST	1970
 			-7:00	Mexico	M%sT	1999
 			-7:00	-	MST
+
+# From Alexander Krivenyshev (2010-04-21):
+# According to news, Bahía de Banderas (Mexican state of Nayarit)
+# changed time zone UTC-7 to new time zone UTC-6 on April 4, 2010 (to
+# share the same time zone as nearby city Puerto Vallarta, Jalisco).
+#
+# (Spanish)
+# Bahía de Banderas homologa su horario al del centro del
+# país, a partir de este domingo
+# http://www.nayarit.gob.mx/notes.asp?id=20748
+#
+# Bahía de Banderas homologa su horario con el del Centro del
+# País
+# http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50
+#
+# (English)
+# Puerto Vallarta and Bahía de Banderas: One Time Zone
+# http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml
+# http://www.worldtimezone.com/dst_news/dst_news_mexico08.html
+#
+# "Mexico's Senate approved the amendments to the Mexican Schedule System that
+# will allow Bahía de Banderas and Puerto Vallarta to share the same time
+# zone ..."
 # Baja California Sur, Nayarit, Sinaloa
+
+# From Arthur David Olson (2010-05-01):
+# Use "Bahia_Banderas" to keep the name to fourteen characters.
+
+# Mazatlán
 Zone America/Mazatlan	-7:05:40 -	LMT	1921 Dec 31 23:54:20
 			-7:00	-	MST	1927 Jun 10 23:00
 			-6:00	-	CST	1930 Nov 15
@@ -2122,6 +2441,20 @@
 			-7:00	-	MST	1949 Jan 14
 			-8:00	-	PST	1970
 			-7:00	Mexico	M%sT
+
+# Bahía de Banderas
+Zone America/Bahia_Banderas	-7:01:00 -	LMT	1921 Dec 31 23:59:00
+			-7:00	-	MST	1927 Jun 10 23:00
+			-6:00	-	CST	1930 Nov 15
+			-7:00	-	MST	1931 May  1 23:00
+			-6:00	-	CST	1931 Oct
+			-7:00	-	MST	1932 Apr  1
+			-6:00	-	CST	1942 Apr 24
+			-7:00	-	MST	1949 Jan 14
+			-8:00	-	PST	1970
+			-7:00	Mexico	M%sT	2010 Apr  4  2:00
+			-6:00	Mexico	C%sT
+
 # Baja California (near US border)
 Zone America/Tijuana	-7:48:04 -	LMT	1922 Jan  1  0:11:56
 			-7:00	-	MST	1924
@@ -2166,7 +2499,7 @@
 # America/Tijuana only in that it did not observe DST from 1976
 # through 1995.  This was as per Shanks (1999).  But Shanks & Pottenger say
 # Ensenada did not observe DST from 1948 through 1975.  Guy Harris reports
-# that the 1987 OAG says "Only Ensenada, Mexicale, San Felipe and
+# that the 1987 OAG says "Only Ensenada, Mexicali, San Felipe and
 # Tijuana observe DST," which agrees with Shanks & Pottenger but implies that
 # DST-observance was a town-by-town matter back then.  This concerns
 # data after 1970 so most likely there should be at least one Zone
@@ -2179,9 +2512,7 @@
 ###############################################################################
 
 # Anguilla
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Anguilla	-4:12:16 -	LMT	1912 Mar 2
-			-4:00	-	AST
+# See America/Port_of_Spain.
 
 # Antigua and Barbuda
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -2191,6 +2522,8 @@
 
 # Bahamas
 #
+# For 1899 Milne gives -5:09:29.5; round that.
+#
 # From Sue Williams (2006-12-07):
 # The Bahamas announced about a month ago that they plan to change their DST
 # rules to sync with the U.S. starting in 2007....
@@ -2200,11 +2533,14 @@
 Rule	Bahamas	1964	1975	-	Oct	lastSun	2:00	0	S
 Rule	Bahamas	1964	1975	-	Apr	lastSun	2:00	1:00	D
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Nassau	-5:09:24 -	LMT	1912 Mar 2
+Zone	America/Nassau	-5:09:30 -	LMT	1912 Mar 2
 			-5:00	Bahamas	E%sT	1976
 			-5:00	US	E%sT
 
 # Barbados
+
+# For 1899 Milne gives -3:58:29.2; round that.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Barb	1977	only	-	Jun	12	2:00	1:00	D
 Rule	Barb	1977	1978	-	Oct	Sun>=1	2:00	0	S
@@ -2212,8 +2548,8 @@
 Rule	Barb	1979	only	-	Sep	30	2:00	0	S
 Rule	Barb	1980	only	-	Sep	25	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Barbados	-3:58:28 -	LMT	1924		# Bridgetown
-			-3:58:28 -	BMT	1932	  # Bridgetown Mean Time
+Zone America/Barbados	-3:58:29 -	LMT	1924 # Bridgetown
+			-3:58:29 -	BMT	1932 # Bridgetown Mean Time
 			-4:00	Barb	A%sT
 
 # Belize
@@ -2231,6 +2567,9 @@
 
 # Bermuda
 
+# For 1899 Milne gives -4:19:18.3 as the meridian of the clock tower,
+# Bermuda dockyard, Ireland I; round that.
+
 # From Dan Jones, reporting in The Royal Gazette (2006-06-26):
 
 # Next year, however, clocks in the US will go forward on the second Sunday
@@ -2240,18 +2579,21 @@
 # http://www.theroyalgazette.com/apps/pbcs.dll/article?AID=/20060529/NEWS/105290135
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Atlantic/Bermuda	-4:19:04 -	LMT	1930 Jan  1 2:00    # Hamilton
-			-4:00	-	AST	1974 Apr 28 2:00
-			-4:00	Bahamas	A%sT	1976
+Zone Atlantic/Bermuda	-4:19:18 -	LMT	1930 Jan  1  2:00 # Hamilton
+			-4:00	-	AST	1974 Apr 28  2:00
+			-4:00	Canada	A%sT	1976
 			-4:00	US	A%sT
 
 # Cayman Is
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Cayman	-5:25:32 -	LMT	1890		# Georgetown
-			-5:07:12 -	KMT	1912 Feb    # Kingston Mean Time
+Zone	America/Cayman	-5:25:32 -	LMT	1890     # Georgetown
+			-5:07:11 -	KMT	1912 Feb # Kingston Mean Time
 			-5:00	-	EST
 
 # Costa Rica
+
+# Milne gives -5:36:13.3 as San José mean time; round to nearest.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	CR	1979	1980	-	Feb	lastSun	0:00	1:00	D
 Rule	CR	1979	1980	-	Jun	Sun>=1	0:00	0	S
@@ -2260,16 +2602,21 @@
 # go with Shanks & Pottenger.
 Rule	CR	1991	only	-	Jul	 1	0:00	0	S
 Rule	CR	1992	only	-	Mar	15	0:00	0	S
-# There are too many San Joses elsewhere, so we'll use `Costa Rica'.
+# There are too many San Josés elsewhere, so we'll use 'Costa Rica'.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Costa_Rica	-5:36:20 -	LMT	1890		# San Jose
-			-5:36:20 -	SJMT	1921 Jan 15 # San Jose Mean Time
+Zone America/Costa_Rica	-5:36:13 -	LMT	1890        # San José
+			-5:36:13 -	SJMT	1921 Jan 15 # San José Mean Time
 			-6:00	CR	C%sT
 # Coco
 # no information; probably like America/Costa_Rica
 
 # Cuba
 
+# From Paul Eggert (2013-02-21):
+# Milne gives -5:28:50.45 for the observatory at Havana, -5:29:23.57
+# for the port, and -5:30 for meteorological observations.
+# For now, stick with Shanks & Pottenger.
+
 # From Arthur David Olson (1999-03-29):
 # The 1999-03-28 exhibition baseball game held in Havana, Cuba, between
 # the Cuban National Team and the Baltimore Orioles was carried live on
@@ -2277,10 +2624,15 @@
 # During the game, play-by-play announcer Jim Hunter noted that
 # "We'll be losing two hours of sleep...Cuba switched to Daylight Saving
 # Time today."  (The "two hour" remark referred to losing one hour of
-# sleep on 1999-03-28--when the announcers were in Cuba as it switched
-# to DST--and one more hour on 1999-04-04--when the announcers will have
+# sleep on 1999-03-28 - when the announcers were in Cuba as it switched
+# to DST - and one more hour on 1999-04-04 - when the announcers will have
 # returned to Baltimore, which switches on that date.)
 
+# From Steffen Thorsen (2013-11-11):
+# DST start in Cuba in 2004 ... does not follow the same rules as the
+# years before.  The correct date should be Sunday 2004-03-28 00:00 ...
+# https://web.archive.org/web/20040402060750/http://www.granma.cu/espanol/2004/marzo/sab27/reloj.html
+
 # From Evert van der Veer via Steffen Thorsen (2004-10-28):
 # Cuba is not going back to standard time this year.
 # From Paul Eggert (2006-03-22):
@@ -2295,57 +2647,52 @@
 # adjustment in Cuba.  We will stay in daylight saving time:
 # http://www.granma.cu/espanol/2005/noviembre/mier9/horario.html
 
-# From Jesper Norgaard Welen (2006-10-21):
+# From Jesper Nørgaard Welen (2006-10-21):
 # An article in GRANMA INTERNACIONAL claims that Cuba will end
 # the 3 years of permanent DST next weekend, see
 # http://www.granma.cu/ingles/2006/octubre/lun16/43horario.html
 # "On Saturday night, October 28 going into Sunday, October 29, at 01:00,
-# watches should be set back one hour -- going back to 00:00 hours -- returning
+# watches should be set back one hour - going back to 00:00 hours - returning
 # to the normal schedule....
 
 # From Paul Eggert (2007-03-02):
-# http://www.granma.cubaweb.cu/english/news/art89.html, dated yesterday,
+# , dated yesterday,
 # says Cuban clocks will advance at midnight on March 10.
 # For lack of better information, assume Cuba will use US rules,
 # except that it switches at midnight standard time as usual.
 #
 # From Steffen Thorsen (2007-10-25):
-# Carlos Alberto Fonseca Arauz informed me that Cuba will end DST one week 
+# Carlos Alberto Fonseca Arauz informed me that Cuba will end DST one week
 # earlier - on the last Sunday of October, just like in 2006.
-# 
+#
 # He supplied these references:
-# 
+#
 # http://www.prensalatina.com.mx/article.asp?ID=%7B4CC32C1B-A9F7-42FB-8A07-8631AFC923AF%7D&language=ES
 # http://actualidad.terra.es/sociedad/articulo/cuba_llama_ahorrar_energia_cambio_1957044.htm
-# 
-# From Alex Kryvenishev (2007-10-25):
+#
+# From Alex Krivenyshev (2007-10-25):
 # Here is also article from Granma (Cuba):
-# 
-# [Regira] el Horario Normal desde el [proximo] domingo 28 de octubre
+#
+# Regirá el Horario Normal desde el próximo domingo 28 de octubre
 # http://www.granma.cubaweb.cu/2007/10/24/nacional/artic07.html
-# 
+#
 # http://www.worldtimezone.com/dst_news/dst_news_cuba03.html
 
 # From Arthur David Olson (2008-03-09):
 # I'm in Maryland which is now observing United States Eastern Daylight
 # Time. At 9:44 local time I used RealPlayer to listen to
-# 
 # http://media.enet.cu/radioreloj
-# , a Cuban information station, and heard
+# a Cuban information station, and heard
 # the time announced as "ocho cuarenta y cuatro" ("eight forty-four"),
 # indicating that Cuba is still on standard time.
 
 # From Steffen Thorsen (2008-03-12):
 # It seems that Cuba will start DST on Sunday, 2007-03-16...
 # It was announced yesterday, according to this source (in Spanish):
-# 
 # http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm
-# 
 #
 # Some more background information is posted here:
-# 
 # http://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html
-# 
 #
 # The article also says that Cuba has been observing DST since 1963,
 # while Shanks (and tzdata) has 1965 as the first date (except in the
@@ -2355,18 +2702,14 @@
 # change some historic records as well.
 #
 # One example:
-# 
 # http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm
-# 
 
-# From Jesper Norgaard Welen (2008-03-13):
+# From Jesper Nørgaard Welen (2008-03-13):
 # The Cuban time change has just been confirmed on the most authoritative
 # web site, the Granma.  Please check out
-# 
 # http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html
-# 
 #
-# Basically as expected after Steffen Thorsens information, the change
+# Basically as expected after Steffen Thorsen's information, the change
 # will take place midnight between Saturday and Sunday.
 
 # From Arthur David Olson (2008-03-12):
@@ -2377,20 +2720,54 @@
 # midnight between Saturday, March 07, 2009 and Sunday, March 08, 2009-
 # not on midnight March 14 / March 15 as previously thought.
 #
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_cuba05.html
 # (in Spanish)
-# 
 
 # From Arthur David Olson (2009-03-09)
 # I listened over the Internet to
-# 
 # http://media.enet.cu/readioreloj
-# 
 # this morning; when it was 10:05 a. m. here in Bethesda, Maryland the
-# the time was announced as "diez cinco"--the same time as here, indicating
+# the time was announced as "diez cinco" - the same time as here, indicating
 # that has indeed switched to DST. Assume second Sunday from 2009 forward.
 
+# From Steffen Thorsen (2011-03-08):
+# Granma announced that Cuba is going to start DST on 2011-03-20 00:00:00
+# this year. Nothing about the end date known so far (if that has
+# changed at all).
+#
+# Source:
+# http://granma.co.cu/2011/03/08/nacional/artic01.html
+#
+# Our info:
+# http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html
+#
+# From Steffen Thorsen (2011-10-30)
+# Cuba will end DST two weeks later this year. Instead of going back
+# tonight, it has been delayed to 2011-11-13 at 01:00.
+#
+# One source (Spanish)
+# http://www.radioangulo.cu/noticias/cuba/17105-cuba-restablecera-el-horario-del-meridiano-de-greenwich.html
+#
+# Our page:
+# http://www.timeanddate.com/news/time/cuba-time-changes-2011.html
+#
+# From Steffen Thorsen (2012-03-01)
+# According to Radio Reloj, Cuba will start DST on Midnight between March
+# 31 and April 1.
+#
+# Radio Reloj has the following info (Spanish):
+# http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril
+#
+# Our info on it:
+# http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html
+
+# From Steffen Thorsen (2012-11-03):
+# Radio Reloj and many other sources report that Cuba is changing back
+# to standard time on 2012-11-04:
+# http://www.radioreloj.cu/index.php/noticias-radio-reloj/36-nacionales/9961-regira-horario-normal-en-cuba-desde-el-domingo-cuatro-de-noviembre
+# From Paul Eggert (2012-11-03):
+# For now, assume the future rule is first Sunday in November.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Cuba	1928	only	-	Jun	10	0:00	1:00	D
 Rule	Cuba	1928	only	-	Oct	10	0:00	0	S
@@ -2420,11 +2797,17 @@
 Rule	Cuba	1997	only	-	Oct	12	0:00s	0	S
 Rule	Cuba	1998	1999	-	Mar	lastSun	0:00s	1:00	D
 Rule	Cuba	1998	2003	-	Oct	lastSun	0:00s	0	S
-Rule	Cuba	2000	2004	-	Apr	Sun>=1	0:00s	1:00	D
-Rule	Cuba	2006	max	-	Oct	lastSun	0:00s	0	S
+Rule	Cuba	2000	2003	-	Apr	Sun>=1	0:00s	1:00	D
+Rule	Cuba	2004	only	-	Mar	lastSun	0:00s	1:00	D
+Rule	Cuba	2006	2010	-	Oct	lastSun	0:00s	0	S
 Rule	Cuba	2007	only	-	Mar	Sun>=8	0:00s	1:00	D
 Rule	Cuba	2008	only	-	Mar	Sun>=15	0:00s	1:00	D
-Rule	Cuba	2009	max	-	Mar	Sun>=8	0:00s	1:00	D
+Rule	Cuba	2009	2010	-	Mar	Sun>=8	0:00s	1:00	D
+Rule	Cuba	2011	only	-	Mar	Sun>=15	0:00s	1:00	D
+Rule	Cuba	2011	only	-	Nov	13	0:00s	0	S
+Rule	Cuba	2012	only	-	Apr	1	0:00s	1:00	D
+Rule	Cuba	2012	max	-	Nov	Sun>=1	0:00s	0	S
+Rule	Cuba	2013	max	-	Mar	Sun>=8	0:00s	1:00	D
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Havana	-5:29:28 -	LMT	1890
@@ -2432,9 +2815,7 @@
 			-5:00	Cuba	C%sT
 
 # Dominica
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Dominica	-4:05:36 -	LMT	1911 Jul 1 0:01		# Roseau
-			-4:00	-	AST
+# See America/Port_of_Spain.
 
 # Dominican Republic
 
@@ -2467,8 +2848,8 @@
 Zone America/Santo_Domingo -4:39:36 -	LMT	1890
 			-4:40	-	SDMT	1933 Apr  1 12:00 # S. Dom. MT
 			-5:00	DR	E%sT	1974 Oct 27
-			-4:00	-	AST	2000 Oct 29 02:00
-			-5:00	US	E%sT	2000 Dec  3 01:00
+			-4:00	-	AST	2000 Oct 29  2:00
+			-5:00	US	E%sT	2000 Dec  3  1:00
 			-4:00	-	AST
 
 # El Salvador
@@ -2479,28 +2860,20 @@
 # There are too many San Salvadors elsewhere, so use America/El_Salvador
 # instead of America/San_Salvador.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/El_Salvador -5:56:48 -	LMT	1921		# San Salvador
+Zone America/El_Salvador -5:56:48 -	LMT	1921 # San Salvador
 			-6:00	Salv	C%sT
 
 # Grenada
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Grenada	-4:07:00 -	LMT	1911 Jul	# St George's
-			-4:00	-	AST
-
 # Guadeloupe
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Guadeloupe	-4:06:08 -	LMT	1911 Jun 8	# Pointe a Pitre
-			-4:00	-	AST
-# St Barthelemy
-Link America/Guadeloupe	America/St_Barthelemy
+# St Barthélemy
 # St Martin (French part)
-Link America/Guadeloupe	America/Marigot
+# See America/Port_of_Spain.
 
 # Guatemala
 #
 # From Gwillim Law (2006-04-22), after a heads-up from Oscar van Vlijmen:
 # Diario Co Latino, at
-# http://www.diariocolatino.com/internacionales/detalles.asp?NewsID=8079,
+# ,
 # says in an article dated 2006-04-19 that the Guatemalan government had
 # decided on that date to advance official time by 60 minutes, to lessen the
 # impact of the elevated cost of oil....  Daylight saving time will last from
@@ -2508,7 +2881,7 @@
 # From Paul Eggert (2006-06-22):
 # The Ministry of Energy and Mines, press release CP-15/2006
 # (2006-04-19), says DST ends at 24:00.  See
-# .
+# http://www.sieca.org.gt/Sitio_publico/Energeticos/Doc/Medidas/Cambio_Horario_Nac_190406.pdf
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Guat	1973	only	-	Nov	25	0:00	1:00	D
@@ -2525,11 +2898,10 @@
 
 # Haiti
 # From Gwillim Law (2005-04-15):
-# Risto O. Nykanen wrote me that Haiti is now on DST.
-# I searched for confirmation, and I found a
-#  press release
+# Risto O. Nykänen wrote me that Haiti is now on DST.
+# I searched for confirmation, and I found a press release
 # on the Web page of the Haitian Consulate in Chicago (2005-03-31),
-# .  Translated from French, it says:
+# .  Translated from French, it says:
 #
 #  "The Prime Minister's Communication Office notifies the public in general
 #   and the press in particular that, following a decision of the Interior
@@ -2558,6 +2930,26 @@
 # From Stephen Colebourne (2007-02-22):
 # Some IATA info: Haiti won't be having DST in 2007.
 
+# From Steffen Thorsen (2012-03-11):
+# According to several news sources, Haiti will observe DST this year,
+# apparently using the same start and end date as USA/Canada.
+# So this means they have already changed their time.
+#
+# http://www.alterpresse.org/spip.php?article12510
+# http://radiovision2000haiti.net/home/?p=13253
+#
+# From Arthur David Olson (2012-03-11):
+# The alterpresse.org source seems to show a US-style leap from 2:00 a.m. to
+# 3:00 a.m. rather than the traditional Haitian jump at midnight.
+# Assume a US-style fall back as well.
+
+# From Steffen Thorsen (2013-03-10):
+# It appears that Haiti is observing DST this year as well, same rules
+# as US/Canada.  They did it last year as well, and it looks like they
+# are going to observe DST every year now...
+#
+# http://radiovision2000haiti.net/public/haiti-avis-changement-dheure-dimanche/
+# http://www.canalplushaiti.net/?p=6714
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Haiti	1983	only	-	May	8	0:00	1:00	D
@@ -2569,6 +2961,8 @@
 Rule	Haiti	1988	1997	-	Oct	lastSun	1:00s	0	S
 Rule	Haiti	2005	2006	-	Apr	Sun>=1	0:00	1:00	D
 Rule	Haiti	2005	2006	-	Oct	lastSun	0:00	0	S
+Rule	Haiti	2012	max	-	Mar	Sun>=8	2:00	1:00	D
+Rule	Haiti	2012	max	-	Nov	Sun>=1	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Port-au-Prince -4:49:20 -	LMT	1890
 			-4:49	-	PPMT	1917 Jan 24 12:00 # P-a-P MT
@@ -2584,14 +2978,14 @@
 #  that Manuel Zelaya, the president
 # of Honduras, refused to back down on this.
 
-# From Jesper Norgaard Welen (2006-08-08):
+# From Jesper Nørgaard Welen (2006-08-08):
 # It seems that Honduras has returned from DST to standard time this Monday at
 # 00:00 hours (prolonging Sunday to 25 hours duration).
 # http://www.worldtimezone.com/dst_news/dst_news_honduras04.html
 
 # From Paul Eggert (2006-08-08):
-# Also see Diario El Heraldo, The country returns to standard time (2006-08-08)
-# .
+# Also see Diario El Heraldo, The country returns to standard time (2006-08-08).
+# http://www.elheraldo.hn/nota.php?nid=54941&sec=12
 # It mentions executive decree 18-2006.
 
 # From Steffen Thorsen (2006-08-17):
@@ -2615,36 +3009,37 @@
 # Great Swan I ceded by US to Honduras in 1972
 
 # Jamaica
-
-# From Bob Devine (1988-01-28):
-# Follows US rules.
-
-# From U. S. Naval Observatory (1989-01-19):
-# JAMAICA             5 H  BEHIND UTC
-
-# From Shanks & Pottenger:
+# Shanks & Pottenger give -5:07:12, but Milne records -5:07:10.41 from an
+# unspecified official document, and says "This time is used throughout the
+# island".  Go with Milne.  Round to the nearest second as required by zic.
+#
+# Shanks & Pottenger give April 28 for the 1974 spring-forward transition, but
+# Lance Neita writes that Prime Minister Michael Manley decreed it January 5.
+# Assume Neita meant Jan 6 02:00, the same as the US.  Neita also writes that
+# Manley's supporters associated this act with Manley's nickname "Joshua"
+# (recall that in the Bible the sun stood still at Joshua's request),
+# and with the Rod of Correction which Manley said he had received from
+# Haile Selassie, Emperor of Ethiopia.  See:
+# Neita L. The politician in all of us. Jamaica Observer 2014-09-20
+# http://www.jamaicaobserver.com/columns/The-politician-in-all-of-us_17573647
+#
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Jamaica	-5:07:12 -	LMT	1890		# Kingston
-			-5:07:12 -	KMT	1912 Feb    # Kingston Mean Time
-			-5:00	-	EST	1974 Apr 28 2:00
+Zone	America/Jamaica	-5:07:11 -	LMT	1890        # Kingston
+			-5:07:11 -	KMT	1912 Feb    # Kingston Mean Time
+			-5:00	-	EST	1974
 			-5:00	US	E%sT	1984
 			-5:00	-	EST
 
 # Martinique
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Martinique	-4:04:20 -      LMT	1890		# Fort-de-France
-			-4:04:20 -	FFMT	1911 May     # Fort-de-France MT
+Zone America/Martinique	-4:04:20 -      LMT	1890        # Fort-de-France
+			-4:04:20 -	FFMT	1911 May    # Fort-de-France MT
 			-4:00	-	AST	1980 Apr  6
 			-4:00	1:00	ADT	1980 Sep 28
 			-4:00	-	AST
 
 # Montserrat
-# From Paul Eggert (2006-03-22):
-# In 1995 volcanic eruptions forced evacuation of Plymouth, the capital.
-# world.gazetteer.com says Cork Hill is the most populous location now.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Montserrat	-4:08:52 -	LMT	1911 Jul 1 0:01   # Cork Hill
-			-4:00	-	AST
+# See America/Port_of_Spain.
 
 # Nicaragua
 #
@@ -2667,27 +3062,27 @@
 # From Gwillim Law (2005-04-21):
 # The Associated Press story on the time change, which can be found at
 # http://www.lapalmainteractivo.com/guias/content/gen/ap/America_Latina/AMC_GEN_NICARAGUA_HORA.html
-# and elsewhere, says (fifth paragraph, translated from Spanish):  "The last
+# and elsewhere, says (fifth paragraph, translated from Spanish): "The last
 # time that a change of clocks was applied to save energy was in the year 2000
-# during the Arnoldo Aleman administration."...
+# during the Arnoldo Alemán administration."...
 # The northamerica file says that Nicaragua has been on UTC-6 continuously
 # since December 1998.  I wasn't able to find any details of Nicaraguan time
 # changes in 2000.  Perhaps a note could be added to the northamerica file, to
 # the effect that we have indirect evidence that DST was observed in 2000.
 #
-# From Jesper Norgaard Welen (2005-11-02):
+# From Jesper Nørgaard Welen (2005-11-02):
 # Nicaragua left DST the 2005-10-02 at 00:00 (local time).
 # http://www.presidencia.gob.ni/presidencia/files_index/secretaria/comunicados/2005/septiembre/26septiembre-cambio-hora.htm
 # (2005-09-26)
 #
-# From Jesper Norgaard Welen (2006-05-05):
+# From Jesper Nørgaard Welen (2006-05-05):
 # http://www.elnuevodiario.com.ni/2006/05/01/nacionales/18410
 # (my informal translation)
-# By order of the president of the republic, Enrique Bolanos, Nicaragua
+# By order of the president of the republic, Enrique Bolaños, Nicaragua
 # advanced by sixty minutes their official time, yesterday at 2 in the
-# morning, and will stay that way until 30.th. of september.
+# morning, and will stay that way until 30th of September.
 #
-# From Jesper Norgaard Welen (2006-09-30):
+# From Jesper Nørgaard Welen (2006-09-30):
 # http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2006/D-063-2006P-PRN-Cambio-Hora.pdf
 # My informal translation runs:
 # The natural sun time is restored in all the national territory, in that the
@@ -2705,7 +3100,7 @@
 			-5:45:12 -	MMT	1934 Jun 23 # Managua Mean Time?
 			-6:00	-	CST	1973 May
 			-5:00	-	EST	1975 Feb 16
-			-6:00	Nic	C%sT	1992 Jan  1 4:00
+			-6:00	Nic	C%sT	1992 Jan  1  4:00
 			-5:00	-	EST	1992 Sep 24
 			-6:00	-	CST	1993
 			-5:00	-	EST	1997
@@ -2714,46 +3109,36 @@
 # Panama
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Panama	-5:18:08 -	LMT	1890
-			-5:19:36 -	CMT	1908 Apr 22   # Colon Mean Time
+			-5:19:36 -	CMT	1908 Apr 22 # Colón Mean Time
 			-5:00	-	EST
 
 # Puerto Rico
-# There are too many San Juans elsewhere, so we'll use `Puerto_Rico'.
+# There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Puerto_Rico -4:24:25 -	LMT	1899 Mar 28 12:00    # San Juan
+Zone America/Puerto_Rico -4:24:25 -	LMT	1899 Mar 28 12:00 # San Juan
 			-4:00	-	AST	1942 May  3
 			-4:00	US	A%sT	1946
 			-4:00	-	AST
 
 # St Kitts-Nevis
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/St_Kitts	-4:10:52 -	LMT	1912 Mar 2	# Basseterre
-			-4:00	-	AST
-
 # St Lucia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/St_Lucia	-4:04:00 -	LMT	1890		# Castries
-			-4:04:00 -	CMT	1912	    # Castries Mean Time
-			-4:00	-	AST
+# See America/Port_of_Spain.
 
 # St Pierre and Miquelon
-# There are too many St Pierres elsewhere, so we'll use `Miquelon'.
+# There are too many St Pierres elsewhere, so we'll use 'Miquelon'.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Miquelon	-3:44:40 -	LMT	1911 May 15	# St Pierre
+Zone America/Miquelon	-3:44:40 -	LMT	1911 May 15 # St Pierre
 			-4:00	-	AST	1980 May
 			-3:00	-	PMST	1987 # Pierre & Miquelon Time
 			-3:00	Canada	PM%sT
 
 # St Vincent and the Grenadines
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/St_Vincent	-4:04:56 -	LMT	1890		# Kingstown
-			-4:04:56 -	KMT	1912	   # Kingstown Mean Time
-			-4:00	-	AST
+# See America/Port_of_Spain.
 
 # Turks and Caicos
 #
 # From Chris Dunn in
-# 
+# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=415007
 # (2007-03-15): In the Turks & Caicos Islands (America/Grand_Turk) the
 # daylight saving dates for time changes have been adjusted to match
 # the recent U.S. change of dates.
@@ -2766,27 +3151,27 @@
 # Clocks are set back one hour at 2:00 a.m. local Daylight Saving Time"
 # indicating that the normal ET rules are followed.
 #
-# From Paul Eggert (2006-05-01):
-# Shanks & Pottenger say they use US DST rules, but IATA SSIM (1991/1998)
-# says they switch at midnight.  Go with Shanks & Pottenger.
+# From Paul Eggert (2014-08-19):
+# The 2014-08-13 Cabinet meeting decided to stay on UTC-4 year-round.  See:
+# http://tcweeklynews.com/daylight-savings-time-to-be-maintained-p5353-127.htm
+# Model this as a switch from EST/EDT to AST ...
+# From Chris Walton (2014-11-04):
+# ... the TCI government appears to have delayed the switch to
+# "permanent daylight saving time" by one year....
+# http://tcweeklynews.com/time-change-to-go-ahead-this-november-p5437-127.htm
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	TC	1979	1986	-	Apr	lastSun	2:00	1:00	D
-Rule	TC	1979	2006	-	Oct	lastSun	2:00	0	S
-Rule	TC	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
-Rule	TC	2007	max	-	Mar	Sun>=8	2:00	1:00	D
-Rule	TC	2007	max	-	Nov	Sun>=1	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Grand_Turk	-4:44:32 -	LMT	1890
-			-5:07:12 -	KMT	1912 Feb    # Kingston Mean Time
-			-5:00	TC	E%sT
-
-# British Virgin Is
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Tortola	-4:18:28 -	LMT	1911 Jul    # Road Town
+			-5:07:11 -	KMT	1912 Feb # Kingston Mean Time
+			-5:00	-	EST	1979
+			-5:00	US	E%sT	2015 Nov Sun>=1 2:00
 			-4:00	-	AST
 
+# British Virgin Is
 # Virgin Is
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/St_Thomas	-4:19:44 -	LMT	1911 Jul    # Charlotte Amalie
-			-4:00	-	AST
+# See America/Port_of_Spain.
+
+
+# Local Variables:
+# coding: utf-8
+# End:
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/pacificnew openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/pacificnew
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/pacificnew	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/pacificnew	2015-01-20 02:20:42.000000000 +0000
@@ -1,27 +1,26 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/solar87 openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/solar87
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/solar87	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/solar87	2015-01-20 02:20:42.000000000 +0000
@@ -1,22 +1,22 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/solar88 openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/solar88
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/solar88	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/solar88	2015-01-20 02:20:42.000000000 +0000
@@ -1,22 +1,22 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/solar89 openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/solar89
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/solar89	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/solar89	2015-01-20 02:20:42.000000000 +0000
@@ -1,22 +1,22 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/southamerica openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/southamerica
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/southamerica	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/southamerica	2015-01-20 02:20:42.000000000 +0000
@@ -1,47 +1,51 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
-# tz@elsie.nci.nih.gov for general use in the future).
+# tz@iana.org for general use in the future).  For more, please see
+# the file CONTRIBUTING in the tz distribution.
 
-# From Paul Eggert (2006-03-22):
-# A good source for time zone historical data outside the U.S. is
+# From Paul Eggert (2014-10-31):
+#
+# Unless otherwise specified, the source for data through 1990 is:
 # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
 # San Diego: ACS Publications, Inc. (2003).
+# Unfortunately this book contains many errors and cites no sources.
 #
 # Gwillim Law writes that a good source
 # for recent time zone data is the International Air Transport
 # Association's Standard Schedules Information Manual (IATA SSIM),
 # published semiannually.  Law sent in several helpful summaries
-# of the IATA's data after 1990.
+# of the IATA's data after 1990.  Except where otherwise noted,
+# IATA SSIM is the source for entries after 1990.
 #
-# Except where otherwise noted, Shanks & Pottenger is the source for
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
+# For data circa 1899, a common source is:
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
+# http://www.jstor.org/stable/1774359
 #
 # Earlier editions of these tables used the North American style (e.g. ARST and
 # ARDT for Argentine Standard and Daylight Time), but the following quote
@@ -49,24 +53,24 @@
 #	I suggest the use of _Summer time_ instead of the more cumbersome
 #	_daylight-saving time_.  _Summer time_ seems to be in general use
 #	in Europe and South America.
-#	-- E O Cutler, _New York Times_ (1937-02-14), quoted in
+#	-- E O Cutler, _New York Times_ (1937-02-14), quoted in
 #	H L Mencken, _The American Language: Supplement I_ (1960), p 466
 #
 # Earlier editions of these tables also used the North American style
 # for time zones in Brazil, but this was incorrect, as Brazilians say
-# "summer time".  Reinaldo Goulart, a Sao Paulo businessman active in
+# "summer time".  Reinaldo Goulart, a São Paulo businessman active in
 # the railroad sector, writes (1999-07-06):
 #	The subject of time zones is currently a matter of discussion/debate in
-#	Brazil.  Let's say that "the Brasilia time" is considered the
-#	"official time" because Brasilia is the capital city.
-#	The other three time zones are called "Brasilia time "minus one" or
+#	Brazil.  Let's say that "the Brasília time" is considered the
+#	"official time" because Brasília is the capital city.
+#	The other three time zones are called "Brasília time "minus one" or
 #	"plus one" or "plus two".  As far as I know there is no such
 #	name/designation as "Eastern Time" or "Central Time".
 # So I invented the following (English-language) abbreviations for now.
 # Corrections are welcome!
 #		std	dst
 #	-2:00	FNT	FNST	Fernando de Noronha
-#	-3:00	BRT	BRST	Brasilia
+#	-3:00	BRT	BRST	Brasília
 #	-4:00	AMT	AMST	Amazon
 #	-5:00	ACT	ACST	Acre
 
@@ -80,7 +84,7 @@
 # Argentina: first Sunday in October to first Sunday in April since 1976.
 # Double Summer time from 1969 to 1974.  Switches at midnight.
 
-# From U. S. Naval Observatory (1988-01-199):
+# From U. S. Naval Observatory (1988-01-19):
 # ARGENTINA           3 H BEHIND   UTC
 
 # From Hernan G. Otero (1995-06-26):
@@ -114,7 +118,7 @@
 # From Hernan G. Otero (1995-06-26):
 # These corrections were contributed by InterSoft Argentina S.A.,
 # obtaining the data from the:
-# Talleres de Hidrografia Naval Argentina
+# Talleres de Hidrografía Naval Argentina
 # (Argentine Naval Hydrography Institute)
 Rule	Arg	1989	1993	-	Mar	Sun>=1	0:00	0	-
 Rule	Arg	1989	1992	-	Oct	Sun>=15	0:00	1:00	S
@@ -136,13 +140,13 @@
 Rule	Arg	2000	only	-	Mar	3	0:00	0	-
 #
 # From Peter Gradelski via Steffen Thorsen (2000-03-01):
-# We just checked with our Sao Paulo office and they say the government of
+# We just checked with our São Paulo office and they say the government of
 # Argentina decided not to become one of the countries that go on or off DST.
 # So Buenos Aires should be -3 hours from GMT at all times.
 #
-# From Fabian L. Arce Jofre (2000-04-04):
+# From Fabián L. Arce Jofré (2000-04-04):
 # The law that claimed DST for Argentina was derogated by President Fernando
-# de la Rua on March 2, 2000, because it would make people spend more energy
+# de la Rúa on March 2, 2000, because it would make people spend more energy
 # in the winter time, rather than less.  The change took effect on March 3.
 #
 # From Mariano Absatz (2001-06-06):
@@ -175,15 +179,13 @@
 # that Argentina will use DST next year as well, from October to
 # March, although exact rules are not given.
 #
-# From Jesper Norgaard Welen (2007-12-26)
+# From Jesper Nørgaard Welen (2007-12-26)
 # The last hurdle of Argentina DST is over, the proposal was approved in
-# the lower chamber too (Deputados) with a vote 192 for and 2 against.
+# the lower chamber too (Diputados) with a vote 192 for and 2 against.
 # By the way thanks to Mariano Absatz and Daniel Mario Vega for the link to
 # the original scanned proposal, where the dates and the zero hours are
 # clear and unambiguous...This is the article about final approval:
-# 
 # http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996
-# 
 #
 # From Paul Eggert (2007-12-22):
 # For dates after mid-2008, the following rules are my guesses and
@@ -193,13 +195,8 @@
 # As per message from Carlos Alberto Fonseca Arauz (Nicaragua),
 # Argentina will start DST on Sunday October 19, 2008.
 #
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_argentina03.html
-# 
-# OR
-# 
 # http://www.impulsobaires.com.ar/nota.php?id=57832 (in spanish)
-# 
 
 # From Rodrigo Severo (2008-10-06):
 # Here is some info available at a Gentoo bug related to TZ on Argentina's DST:
@@ -208,53 +205,44 @@
 # Hi, there is a problem with timezone-data-2008e and maybe with
 # timezone-data-2008f
 # Argentinian law [Number] 25.155 is no longer valid.
-# 
 # http://www.infoleg.gov.ar/infolegInternet/anexos/60000-64999/60036/norma.htm
-# 
 # The new one is law [Number] 26.350
-# 
 # http://www.infoleg.gov.ar/infolegInternet/anexos/135000-139999/136191/norma.htm
-# 
 # So there is no summer time in Argentina for now.
 
 # From Mariano Absatz (2008-10-20):
-# Decree 1693/2008 applies Law 26.350 for the summer 2008/2009 establishing DST in Argentina
-# From 2008-10-19 until 2009-03-15
-# 
+# Decree 1693/2008 applies Law 26.350 for the summer 2008/2009 establishing DST
+# in Argentina from 2008-10-19 until 2009-03-15.
 # http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=16102008&pi=3&pf=4&s=0&sec=01
-# 
 #
-# Decree 1705/2008 excepting 12 Provinces from applying DST in the summer 2008/2009:
-# Catamarca, La Rioja, Mendoza, Salta, San Juan, San Luis, La Pampa, Neuquen, Rio Negro, Chubut, Santa Cruz
-# and Tierra del Fuego
-# 
+
+# Decree 1705/2008 excepting 12 Provinces from applying DST in the summer
+# 2008/2009: Catamarca, La Rioja, Mendoza, Salta, San Juan, San Luis, La
+# Pampa, Neuquén, Rio Negro, Chubut, Santa Cruz and Tierra del Fuego
 # http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=17102008&pi=1&pf=1&s=0&sec=01
-# 
 #
-# Press release 235 dated Saturday October 18th, from the Government of the Province of Jujuy saying
-# it will not apply DST either (even when it was not included in Decree 1705/2008)
-# 
+# Press release 235 dated Saturday October 18th, from the Government of the
+# Province of Jujuy saying it will not apply DST either (even when it was not
+# included in Decree 1705/2008).
 # http://www.jujuy.gov.ar/index2/partes_prensa/18_10_08/235-181008.doc
-# 
 
 # From fullinet (2009-10-18):
 # As announced in
-# 
 # http://www.argentina.gob.ar/argentina/portal/paginas.dhtml?pagina=356
-# 
-# (an official .gob.ar) under title: "Sin Cambio de Hora" (english: "No hour change")
+# (an official .gob.ar) under title: "Sin Cambio de Hora"
+# (English: "No hour change").
 #
-# "Por el momento, el Gobierno Nacional resolvio no modificar la hora
-# oficial, decision que estaba en estudio para su implementacion el
-# domingo 18 de octubre. Desde el Ministerio de Planificacion se anuncio
-# que la Argentina hoy, en estas condiciones meteorologicas, no necesita
-# la modificacion del huso horario, ya que 2009 nos encuentra con
-# crecimiento en la produccion y distribucion energetica."
+# "Por el momento, el Gobierno Nacional resolvió no modificar la hora
+# oficial, decisión que estaba en estudio para su implementación el
+# domingo 18 de octubre. Desde el Ministerio de Planificación se anunció
+# que la Argentina hoy, en estas condiciones meteorológicas, no necesita
+# la modificación del huso horario, ya que 2009 nos encuentra con
+# crecimiento en la producción y distribución energética."
 
 Rule	Arg	2007	only	-	Dec	30	0:00	1:00	S
 Rule	Arg	2008	2009	-	Mar	Sun>=15	0:00	0	-
 Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
- 
+
 # From Mariano Absatz (2004-05-21):
 # Today it was officially published that the Province of Mendoza is changing
 # its timezone this winter... starting tomorrow night....
@@ -263,10 +251,10 @@
 # It's Law No. 7,210.  This change is due to a public power emergency, so for
 # now we'll assume it's for this year only.
 #
-# From Paul Eggert (2006-03-22):
-# 
-# Hora de verano para la Republica Argentina (2003-06-08)
-#  says that standard time in Argentina from 1894-10-31
+# From Paul Eggert (2014-08-09):
+# Hora de verano para la República Argentina
+# http://buenasiembra.com.ar/esoterismo/astrologia/hora-de-verano-de-la-republica-argentina-27.html
+# says that standard time in Argentina from 1894-10-31
 # to 1920-05-01 was -4:16:48.25.  Go with this more-precise value
 # over Shanks & Pottenger.
 #
@@ -281,10 +269,10 @@
 # time in October 17th.
 #
 # Catamarca, Chubut, La Rioja, San Juan, San Luis, Santa Cruz,
-# Tierra del Fuego, Tucuman.
+# Tierra del Fuego, Tucumán.
 #
 # From Mariano Absatz (2004-06-14):
-# ... this weekend, the Province of Tucuman decided it'd go back to UTC-03:00
+# ... this weekend, the Province of Tucumán decided it'd go back to UTC-03:00
 # yesterday midnight (that is, at 24:00 Saturday 12th), since the people's
 # annoyance with the change is much higher than the power savings obtained....
 #
@@ -319,49 +307,38 @@
 # Here are articles that Argentina Province San Luis is planning to end DST
 # as earlier as upcoming Monday January 21, 2008 or February 2008:
 #
-# Provincia argentina retrasa reloj y marca diferencia con resto del pais
+# Provincia argentina retrasa reloj y marca diferencia con resto del país
 # (Argentine Province delayed clock and mark difference with the rest of the
 # country)
-# 
 # http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel
-# 
 #
 # Es inminente que en San Luis atrasen una hora los relojes
 # (It is imminent in San Luis clocks one hour delay)
-# 
-# http://www.lagaceta.com.ar/vernotae.asp?id_nota=253414
-# 
-#
-# 
+# http://www.lagaceta.com.ar/nota/253414/Economia/Es-inminente-que-en-San-Luis-atrasen-una-hora-los-relojes.html
 # http://www.worldtimezone.net/dst_news/dst_news_argentina02.html
-# 
 
-# From Jesper Norgaard Welen (2008-01-18):
+# From Jesper Nørgaard Welen (2008-01-18):
 # The page of the San Luis provincial government
-# 
 # http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812
-# 
 # confirms what Alex Krivenyshev has earlier sent to the tz
 # emailing list about that San Luis plans to return to standard
 # time much earlier than the rest of the country. It also
-# confirms that upon request the provinces San Juan and Mendoza 
-# refused to follow San Luis in this change. 
-# 
-# The change is supposed to take place Monday the 21.st at 0:00
+# confirms that upon request the provinces San Juan and Mendoza
+# refused to follow San Luis in this change.
+#
+# The change is supposed to take place Monday the 21st at 0:00
 # hours. As far as I understand it if this goes ahead, we need
 # a new timezone for San Luis (although there are also documented
 # independent changes in the southamerica file of San Luis in
 # 1990 and 1991 which has not been confirmed).
 
-# From Jesper Norgaard Welen (2008-01-25):
+# From Jesper Nørgaard Welen (2008-01-25):
 # Unfortunately the below page has become defunct, about the San Luis
 # time change. Perhaps because it now is part of a group of pages "Most
 # important pages of 2008."
 #
 # You can use
-# 
 # http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834
-# 
 # instead it seems. Or use "Buscador" from the main page of the San Luis
 # government, and fill in "huso" and click OK, and you will get 3 pages
 # from which the first one is identical to the above.
@@ -381,9 +358,9 @@
 # back in 2004, when these provinces changed to UTC-4 for a few days, I
 # mailed them personally and never got an answer).
 
-# From Paul Eggert (2008-06-30):
-# Unless otherwise specified, data are from Shanks & Pottenger through 1992,
-# from the IATA otherwise.  As noted below, Shanks & Pottenger say that
+# From Paul Eggert (2014-08-12):
+# Unless otherwise specified, data entries are from Shanks & Pottenger through
+# 1992, from the IATA otherwise.  As noted below, Shanks & Pottenger say that
 # America/Cordoba split into 6 subregions during 1991/1992, one of which
 # was America/San_Luis, but we haven't verified this yet so for now we'll
 # keep America/Cordoba a single region rather than splitting it into the
@@ -395,30 +372,15 @@
 # to utc-04:00 until the second Saturday in October...
 #
 # The press release is at
-# 
 # http://www.sanluis.gov.ar/SL/Paginas/NoticiaDetalle.asp?TemaId=1&InfoPrensaId=3102
-# 
-# (I couldn't find the decree, but
-# 
-# www.sanluis.gov.ar
-# 
-# is the official page for the Province Government).
+# (I couldn't find the decree, but www.sanluis.gov.ar
+# is the official page for the Province Government.)
 #
-# There's also a note in only one of the major national papers (La Nacin) at
-# 
+# There's also a note in only one of the major national papers ...
 # http://www.lanacion.com.ar/nota.asp?nota_id=1107912
-# 
-# 
-# The press release says:
-#  (...) anunci que el prximo domingo a las 00:00 los puntanos debern
-# atrasar una hora sus relojes.
-#
-# A partir de entonces, San Luis establecer el huso horario propio de
-# la Provincia. De esta manera, durante el periodo del calendario anual
-# 2009, el cambio horario quedar comprendido entre las 00:00 del tercer
-# domingo de marzo y las 24:00 del segundo sbado de octubre.
-# Quick&dirty translation
-# (...) announced that next Sunday, at 00:00, Puntanos (the San Luis
+#
+# The press release says [quick and dirty translation]:
+# ... announced that next Sunday, at 00:00, Puntanos (the San Luis
 # inhabitants) will have to turn back one hour their clocks
 #
 # Since then, San Luis will establish its own Province timezone. Thus,
@@ -429,9 +391,7 @@
 # ...the Province of San Luis is a case in itself.
 #
 # The Law at
-# 
 # is ambiguous because establishes a calendar from the 2nd Sunday in
 # October at 0:00 thru the 2nd Saturday in March at 24:00 and the
 # complement of that starting on the 2nd Sunday of March at 0:00 and
@@ -460,19 +420,15 @@
 # ...
 
 # From Alexander Krivenyshev (2010-04-09):
-# According to news reports from El Diario de la Republica Province San
+# According to news reports from El Diario de la República Province San
 # Luis, Argentina (standard time UTC-04) will keep Daylight Saving Time
-# after April 11, 2010--will continue to have same time as rest of
+# after April 11, 2010 - will continue to have same time as rest of
 # Argentina (UTC-3) (no DST).
 #
-# Confirmaron la prórroga del huso horario de verano (Spanish)
-# 
+# Confirmaron la prórroga del huso horario de verano (Spanish)
 # http://www.eldiariodelarepublica.com/index.php?option=com_content&task=view&id=29383&Itemid=9
-# 
 # or (some English translation):
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_argentina08.html
-# 
 
 # From Mariano Absatz (2010-04-12):
 # yes...I can confirm this...and given that San Luis keeps calling
@@ -480,18 +436,32 @@
 # rules...San Luis is still using "Western ARgentina Time" and it got
 # stuck on Summer daylight savings time even though the summer is over.
 
+# From Paul Eggert (2013-09-05):
+# Perhaps San Luis operates on the legal fiction that it is at UTC-4
+# with perpetual summer time, but ordinary usage typically seems to
+# just say it's at UTC-3; see, for example,
+# http://es.wikipedia.org/wiki/Hora_oficial_argentina
+# We've documented similar situations as being plain changes to
+# standard time, so let's do that here too.  This does not change UTC
+# offsets, only tm_isdst and the time zone abbreviations.  One minor
+# plus is that this silences a zic complaint that there's no POSIX TZ
+# setting for time stamps past 2038.
+
+# From Paul Eggert (2013-02-21):
+# Milne says Córdoba time was -4:16:48.2.  Round to the nearest second.
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 #
 # Buenos Aires (BA), Capital Federal (CF),
-Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
-			-4:16:48 -	CMT	1920 May # Cordoba Mean Time
+Zone America/Argentina/Buenos_Aires -3:53:48 - LMT	1894 Oct 31
+			-4:16:48 -	CMT	1920 May    # Córdoba Mean Time
 			-4:00	-	ART	1930 Dec
 			-4:00	Arg	AR%sT	1969 Oct  5
 			-3:00	Arg	AR%sT	1999 Oct  3
 			-4:00	Arg	AR%sT	2000 Mar  3
 			-3:00	Arg	AR%sT
 #
-# Cordoba (CB), Santa Fe (SF), Entre Rios (ER), Corrientes (CN), Misiones (MN),
+# Córdoba (CB), Santa Fe (SF), Entre Ríos (ER), Corrientes (CN), Misiones (MN),
 # Chaco (CC), Formosa (FM), Santiago del Estero (SE)
 #
 # Shanks & Pottenger also make the following claims, which we haven't verified:
@@ -511,7 +481,7 @@
 			-4:00	Arg	AR%sT	2000 Mar  3
 			-3:00	Arg	AR%sT
 #
-# Salta (SA), La Pampa (LP), Neuquen (NQ), Rio Negro (RN)
+# Salta (SA), La Pampa (LP), Neuquén (NQ), Rio Negro (RN)
 Zone America/Argentina/Salta -4:21:40 - LMT	1894 Oct 31
 			-4:16:48 -	CMT	1920 May
 			-4:00	-	ART	1930 Dec
@@ -523,7 +493,7 @@
 			-3:00	Arg	AR%sT	2008 Oct 18
 			-3:00	-	ART
 #
-# Tucuman (TM)
+# Tucumán (TM)
 Zone America/Argentina/Tucuman -4:20:52 - LMT	1894 Oct 31
 			-4:16:48 -	CMT	1920 May
 			-4:00	-	ART	1930 Dec
@@ -614,7 +584,7 @@
 # San Luis (SL)
 
 Rule	SanLuis	2008	2009	-	Mar	Sun>=8	0:00	0	-
-Rule	SanLuis	2007	2009	-	Oct	Sun>=8	0:00	1:00	S
+Rule	SanLuis	2007	2008	-	Oct	Sun>=8	0:00	1:00	S
 
 Zone America/Argentina/San_Luis -4:25:24 - LMT	1894 Oct 31
 			-4:16:48 -	CMT	1920 May
@@ -630,11 +600,12 @@
 			-3:00	-	ART	2004 May 31
 			-4:00	-	WART	2004 Jul 25
 			-3:00	Arg	AR%sT	2008 Jan 21
-			-4:00	SanLuis	WAR%sT
+			-4:00	SanLuis	WAR%sT	2009 Oct 11
+			-3:00	-	ART
 #
 # Santa Cruz (SC)
-Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
-			-4:16:48 -	CMT	1920 May # Cordoba Mean Time
+Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT	1894 Oct 31
+			-4:16:48 -	CMT	1920 May    # Córdoba Mean Time
 			-4:00	-	ART	1930 Dec
 			-4:00	Arg	AR%sT	1969 Oct  5
 			-3:00	Arg	AR%sT	1999 Oct  3
@@ -644,9 +615,9 @@
 			-3:00	Arg	AR%sT	2008 Oct 18
 			-3:00	-	ART
 #
-# Tierra del Fuego, Antartida e Islas del Atlantico Sur (TF)
-Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
-			-4:16:48 -	CMT	1920 May # Cordoba Mean Time
+# Tierra del Fuego, Antártida e Islas del Atlántico Sur (TF)
+Zone America/Argentina/Ushuaia -4:33:12 - LMT	1894 Oct 31
+			-4:16:48 -	CMT	1920 May    # Córdoba Mean Time
 			-4:00	-	ART	1930 Dec
 			-4:00	Arg	AR%sT	1969 Oct  5
 			-3:00	Arg	AR%sT	1999 Oct  3
@@ -657,10 +628,7 @@
 			-3:00	-	ART
 
 # Aruba
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Aruba	-4:40:24 -	LMT	1912 Feb 12	# Oranjestad
-			-4:30	-	ANT	1965 # Netherlands Antilles Time
-			-4:00	-	AST
+Link America/Curacao America/Aruba
 
 # Bolivia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -680,13 +648,13 @@
 
 # From IATA SSIM (1996-02):
 # _Only_ the following states in BR1 observe DST: Rio Grande do Sul (RS),
-# Santa Catarina (SC), Parana (PR), Sao Paulo (SP), Rio de Janeiro (RJ),
-# Espirito Santo (ES), Minas Gerais (MG), Bahia (BA), Goias (GO),
+# Santa Catarina (SC), Paraná (PR), São Paulo (SP), Rio de Janeiro (RJ),
+# Espírito Santo (ES), Minas Gerais (MG), Bahia (BA), Goiás (GO),
 # Distrito Federal (DF), Tocantins (TO), Sergipe [SE] and Alagoas [AL].
 # [The last three states are new to this issue of the IATA SSIM.]
 
 # From Gwillim Law (1996-10-07):
-# Geography, history (Tocantins was part of Goias until 1989), and other
+# Geography, history (Tocantins was part of Goiás until 1989), and other
 # sources of time zone information lead me to believe that AL, SE, and TO were
 # always in BR1, and so the only change was whether or not they observed DST....
 # The earliest issue of the SSIM I have is 2/91.  Each issue from then until
@@ -700,16 +668,14 @@
 # However, some conclusions can be drawn from another IATA manual: the Airline
 # Coding Directory, which lists close to 400 airports in Brazil.  For each
 # airport it gives a time zone which is coded to the SSIM.  From that
-# information, I'm led to conclude that the states of Amapa (AP), Ceara (CE),
-# Maranhao (MA), Paraiba (PR), Pernambuco (PE), Piaui (PI), and Rio Grande do
-# Norte (RN), and the eastern part of Para (PA) are all in BR1 without DST.
+# information, I'm led to conclude that the states of Amapá (AP), Ceará (CE),
+# Maranhão (MA), Paraíba (PR), Pernambuco (PE), Piauí (PI), and Rio Grande do
+# Norte (RN), and the eastern part of Pará (PA) are all in BR1 without DST.
 
 # From Marcos Tadeu (1998-09-27):
-# 
-# Brazilian official page
-# 
+# Brazilian official page 
 
-# From Jesper Norgaard (2000-11-03):
+# From Jesper Nørgaard (2000-11-03):
 # [For an official list of which regions in Brazil use which time zones, see:]
 # http://pcdsh01.on.br/Fusbr.htm
 # http://pcdsh01.on.br/Fusbrhv.htm
@@ -742,13 +708,13 @@
 
 # From Paul Schulze (2008-06-24):
 # ...by law number 11.662 of April 24, 2008 (published in the "Diario
-# Oficial da Uniao"...) in Brazil there are changes in the timezones,
+# Oficial da União"...) in Brazil there are changes in the timezones,
 # effective today (00:00am at June 24, 2008) as follows:
 #
-# a) The timezone UTC+5 is e[x]tinguished, with all the Acre state and the
+# a) The timezone UTC+5 is extinguished, with all the Acre state and the
 # part of the Amazonas state that had this timezone now being put to the
 # timezone UTC+4
-# b) The whole Para state now is put at timezone UTC+3, instead of just
+# b) The whole Pará state now is put at timezone UTC+3, instead of just
 # part of it, as was before.
 #
 # This change follows a proposal of senator Tiao Viana of Acre state, that
@@ -761,13 +727,11 @@
 
 # From Rodrigo Severo (2008-06-24):
 # Just correcting the URL:
-# 
 # https://www.in.gov.br/imprensa/visualiza/index.jsp?jornal=do&secao=1&pagina=1&data=25/04/2008
-# 
 #
 # As a result of the above Decree I believe the America/Rio_Branco
 # timezone shall be modified from UTC-5 to UTC-4 and a new timezone shall
-# be created to represent the the west side of the Para State. I
+# be created to represent the...west side of the Pará State. I
 # suggest this new timezone be called Santarem as the most
 # important/populated city in the affected area.
 #
@@ -776,19 +740,16 @@
 
 # From Alex Krivenyshev (2008-06-24):
 # This is a quick reference page for New and Old Brazil Time Zones map.
-# 
 # http://www.worldtimezone.com/brazil-time-new-old.php
-# 
 #
-# - 4 time zones replaced by 3 time zones-eliminating time zone UTC- 05
-# (state Acre and the part of the Amazonas will be UTC/GMT- 04) - western
-# part of Par state is moving to one timezone UTC- 03 (from UTC -04).
+# - 4 time zones replaced by 3 time zones - eliminating time zone UTC-05
+# (state Acre and the part of the Amazonas will be UTC/GMT-04) - western
+# part of Par state is moving to one timezone UTC-03 (from UTC-04).
 
 # From Paul Eggert (2002-10-10):
 # The official decrees referenced below are mostly taken from
-# 
-# Decretos sobre o Horario de Verao no Brasil
-# .
+# Decretos sobre o Horário de Verão no Brasil.
+# http://pcdsh01.on.br/DecHV.html
 
 # From Steffen Thorsen (2008-08-29):
 # As announced by the government and many newspapers in Brazil late
@@ -800,63 +761,105 @@
 # It has not yet been posted to http://pcdsh01.on.br/DecHV.html
 #
 # An official page about it:
-# 
 # http://www.mme.gov.br/site/news/detail.do?newsId=16722
-# 
 # Note that this link does not always work directly, but must be accessed
 # by going to
-# 
 # http://www.mme.gov.br/first
-# 
 #
 # One example link that works directly:
-# 
 # http://jornale.com.br/index.php?option=com_content&task=view&id=13530&Itemid=54
 # (Portuguese)
-# 
 #
 # We have a written a short article about it as well:
-# 
 # http://www.timeanddate.com/news/time/brazil-dst-2008-2009.html
-# 
+#
+# From Alexander Krivenyshev (2011-10-04):
+# State Bahia will return to Daylight savings time this year after 8 years off.
+# The announcement was made by Governor Jaques Wagner in an interview to a
+# television station in Salvador.
+
+# In Portuguese:
+# http://g1.globo.com/bahia/noticia/2011/10/governador-jaques-wagner-confirma-horario-de-verao-na-bahia.html
+# http://noticias.terra.com.br/brasil/noticias/0,,OI5390887-EI8139,00-Bahia+volta+a+ter+horario+de+verao+apos+oito+anos.html
+
+# From Guilherme Bernardes Rodrigues (2011-10-07):
+# There is news in the media, however there is still no decree about it.
+# I just send a e-mail to Zulmira Brandao at http://pcdsh01.on.br/ the
+# official agency about time in Brazil, and she confirmed that the old rule is
+# still in force.
+
+# From Guilherme Bernardes Rodrigues (2011-10-14)
+# It's official, the President signed a decree that includes Bahia in summer
+# time.
+#	 [ and in a second message (same day): ]
+# I found the decree.
+#
+# DECRETO No- 7.584, DE 13 DE OUTUBRO DE 2011
+# Link :
+# http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6
+
+# From Kelley Cook (2012-10-16):
+# The governor of state of Bahia in Brazil announced on Thursday that
+# due to public pressure, he is reversing the DST policy they implemented
+# last year and will not be going to Summer Time on October 21st....
+# http://www.correio24horas.com.br/r/artigo/apos-pressoes-wagner-suspende-horario-de-verao-na-bahia
+
+# From Rodrigo Severo (2012-10-16):
+# Tocantins state will have DST.
+# http://noticias.terra.com.br/brasil/noticias/0,,OI6232536-EI306.html
+
+# From Steffen Thorsen (2013-09-20):
+# Tocantins in Brazil is very likely not to observe DST from October....
+# http://conexaoto.com.br/2013/09/18/ministerio-confirma-que-tocantins-esta-fora-do-horario-de-verao-em-2013-mas-falta-publicacao-de-decreto
+# We will keep this article updated when this is confirmed:
+# http://www.timeanddate.com/news/time/brazil-starts-dst-2013.html
+
+# From Steffen Thorsen (2013-10-17):
+# http://www.timeanddate.com/news/time/acre-amazonas-change-time-zone.html
+# Senator Jorge Viana announced that Acre will change time zone on November 10.
+# He did not specify the time of the change, nor if western parts of Amazonas
+# will change as well.
+#
+# From Paul Eggert (2013-10-17):
+# For now, assume western Amazonas will change as well.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-# Decree 20,466 (1931-10-01)
-# Decree 21,896 (1932-01-10)
+# Decree 20,466  (1931-10-01)
+# Decree 21,896  (1932-01-10)
 Rule	Brazil	1931	only	-	Oct	 3	11:00	1:00	S
 Rule	Brazil	1932	1933	-	Apr	 1	 0:00	0	-
 Rule	Brazil	1932	only	-	Oct	 3	 0:00	1:00	S
-# Decree 23,195 (1933-10-10)
+# Decree 23,195  (1933-10-10)
 # revoked DST.
-# Decree 27,496 (1949-11-24)
-# Decree 27,998 (1950-04-13)
+# Decree 27,496  (1949-11-24)
+# Decree 27,998  (1950-04-13)
 Rule	Brazil	1949	1952	-	Dec	 1	 0:00	1:00	S
 Rule	Brazil	1950	only	-	Apr	16	 1:00	0	-
 Rule	Brazil	1951	1952	-	Apr	 1	 0:00	0	-
-# Decree 32,308 (1953-02-24)
+# Decree 32,308  (1953-02-24)
 Rule	Brazil	1953	only	-	Mar	 1	 0:00	0	-
-# Decree 34,724 (1953-11-30)
+# Decree 34,724  (1953-11-30)
 # revoked DST.
-# Decree 52,700 (1963-10-18)
+# Decree 52,700  (1963-10-18)
 # established DST from 1963-10-23 00:00 to 1964-02-29 00:00
 # in SP, RJ, GB, MG, ES, due to the prolongation of the drought.
-# Decree 53,071 (1963-12-03)
+# Decree 53,071  (1963-12-03)
 # extended the above decree to all of the national territory on 12-09.
 Rule	Brazil	1963	only	-	Dec	 9	 0:00	1:00	S
-# Decree 53,604 (1964-02-25)
+# Decree 53,604  (1964-02-25)
 # extended summer time by one day to 1964-03-01 00:00 (start of school).
 Rule	Brazil	1964	only	-	Mar	 1	 0:00	0	-
-# Decree 55,639 (1965-01-27)
+# Decree 55,639  (1965-01-27)
 Rule	Brazil	1965	only	-	Jan	31	 0:00	1:00	S
 Rule	Brazil	1965	only	-	Mar	31	 0:00	0	-
-# Decree 57,303 (1965-11-22)
+# Decree 57,303  (1965-11-22)
 Rule	Brazil	1965	only	-	Dec	 1	 0:00	1:00	S
-# Decree 57,843 (1966-02-18)
+# Decree 57,843  (1966-02-18)
 Rule	Brazil	1966	1968	-	Mar	 1	 0:00	0	-
 Rule	Brazil	1966	1967	-	Nov	 1	 0:00	1:00	S
-# Decree 63,429 (1968-10-15)
+# Decree 63,429  (1968-10-15)
 # revoked DST.
-# Decree 91,698 (1985-09-27)
+# Decree 91,698  (1985-09-27)
 Rule	Brazil	1985	only	-	Nov	 2	 0:00	1:00	S
 # Decree 92,310 (1986-01-21)
 # Decree 92,463 (1986-03-13)
@@ -864,42 +867,42 @@
 # Decree 93,316 (1986-10-01)
 Rule	Brazil	1986	only	-	Oct	25	 0:00	1:00	S
 Rule	Brazil	1987	only	-	Feb	14	 0:00	0	-
-# Decree 94,922 (1987-09-22)
+# Decree 94,922  (1987-09-22)
 Rule	Brazil	1987	only	-	Oct	25	 0:00	1:00	S
 Rule	Brazil	1988	only	-	Feb	 7	 0:00	0	-
-# Decree 96,676 (1988-09-12)
+# Decree 96,676  (1988-09-12)
 # except for the states of AC, AM, PA, RR, RO, and AP (then a territory)
 Rule	Brazil	1988	only	-	Oct	16	 0:00	1:00	S
 Rule	Brazil	1989	only	-	Jan	29	 0:00	0	-
-# Decree 98,077 (1989-08-21)
+# Decree 98,077  (1989-08-21)
 # with the same exceptions
 Rule	Brazil	1989	only	-	Oct	15	 0:00	1:00	S
 Rule	Brazil	1990	only	-	Feb	11	 0:00	0	-
-# Decree 99,530 (1990-09-17)
+# Decree 99,530  (1990-09-17)
 # adopted by RS, SC, PR, SP, RJ, ES, MG, GO, MS, DF.
 # Decree 99,629 (1990-10-19) adds BA, MT.
 Rule	Brazil	1990	only	-	Oct	21	 0:00	1:00	S
 Rule	Brazil	1991	only	-	Feb	17	 0:00	0	-
-# Unnumbered decree (1991-09-25)
+# Unnumbered decree  (1991-09-25)
 # adopted by RS, SC, PR, SP, RJ, ES, MG, BA, GO, MT, MS, DF.
 Rule	Brazil	1991	only	-	Oct	20	 0:00	1:00	S
 Rule	Brazil	1992	only	-	Feb	 9	 0:00	0	-
-# Unnumbered decree (1992-10-16)
+# Unnumbered decree  (1992-10-16)
 # adopted by same states.
 Rule	Brazil	1992	only	-	Oct	25	 0:00	1:00	S
 Rule	Brazil	1993	only	-	Jan	31	 0:00	0	-
-# Decree 942 (1993-09-28)
+# Decree 942  (1993-09-28)
 # adopted by same states, plus AM.
-# Decree 1,252 (1994-09-22;
+# Decree 1,252  (1994-09-22;
 # web page corrected 2004-01-07) adopted by same states, minus AM.
-# Decree 1,636 (1995-09-14)
+# Decree 1,636  (1995-09-14)
 # adopted by same states, plus MT and TO.
-# Decree 1,674 (1995-10-13)
+# Decree 1,674  (1995-10-13)
 # adds AL, SE.
 Rule	Brazil	1993	1995	-	Oct	Sun>=11	 0:00	1:00	S
 Rule	Brazil	1994	1995	-	Feb	Sun>=15	 0:00	0	-
 Rule	Brazil	1996	only	-	Feb	11	 0:00	0	-
-# Decree 2,000 (1996-09-04)
+# Decree 2,000  (1996-09-04)
 # adopted by same states, minus AL, SE.
 Rule	Brazil	1996	only	-	Oct	 6	 0:00	1:00	S
 Rule	Brazil	1997	only	-	Feb	16	 0:00	0	-
@@ -912,53 +915,51 @@
 #
 # Decree 2,317 (1997-09-04), adopted by same states.
 Rule	Brazil	1997	only	-	Oct	 6	 0:00	1:00	S
-# Decree 2,495
+# Decree 2,495 
 # (1998-02-10)
 Rule	Brazil	1998	only	-	Mar	 1	 0:00	0	-
-# Decree 2,780 (1998-09-11)
+# Decree 2,780  (1998-09-11)
 # adopted by the same states as before.
 Rule	Brazil	1998	only	-	Oct	11	 0:00	1:00	S
 Rule	Brazil	1999	only	-	Feb	21	 0:00	0	-
-# Decree 3,150
+# Decree 3,150 
 # (1999-08-23) adopted by same states.
-# Decree 3,188 (1999-09-30)
+# Decree 3,188  (1999-09-30)
 # adds SE, AL, PB, PE, RN, CE, PI, MA and RR.
 Rule	Brazil	1999	only	-	Oct	 3	 0:00	1:00	S
 Rule	Brazil	2000	only	-	Feb	27	 0:00	0	-
-# Decree 3,592 (2000-09-06)
+# Decree 3,592  (2000-09-06)
 # adopted by the same states as before.
-# Decree 3,630 (2000-10-13)
+# Decree 3,630  (2000-10-13)
 # repeals DST in PE and RR, effective 2000-10-15 00:00.
-# Decree 3,632 (2000-10-17)
+# Decree 3,632  (2000-10-17)
 # repeals DST in SE, AL, PB, RN, CE, PI and MA, effective 2000-10-22 00:00.
-# Decree 3,916
+# Decree 3,916 
 # (2001-09-13) reestablishes DST in AL, CE, MA, PB, PE, PI, RN, SE.
 Rule	Brazil	2000	2001	-	Oct	Sun>=8	 0:00	1:00	S
 Rule	Brazil	2001	2006	-	Feb	Sun>=15	 0:00	0	-
 # Decree 4,399 (2002-10-01) repeals DST in AL, CE, MA, PB, PE, PI, RN, SE.
-# 4,399
+# 4,399 
 Rule	Brazil	2002	only	-	Nov	 3	 0:00	1:00	S
 # Decree 4,844 (2003-09-24; corrected 2003-09-26) repeals DST in BA, MT, TO.
-# 4,844
+# 4,844 
 Rule	Brazil	2003	only	-	Oct	19	 0:00	1:00	S
 # Decree 5,223 (2004-10-01) reestablishes DST in MT.
-# 5,223
+# 5,223 
 Rule	Brazil	2004	only	-	Nov	 2	 0:00	1:00	S
-# Decree 5,539 (2005-09-19),
+# Decree 5,539  (2005-09-19),
 # adopted by the same states as before.
 Rule	Brazil	2005	only	-	Oct	16	 0:00	1:00	S
-# Decree 5,920 (2006-10-03),
+# Decree 5,920  (2006-10-03),
 # adopted by the same states as before.
 Rule	Brazil	2006	only	-	Nov	 5	 0:00	1:00	S
 Rule	Brazil	2007	only	-	Feb	25	 0:00	0	-
-# Decree 6,212 (2007-09-26),
+# Decree 6,212  (2007-09-26),
 # adopted by the same states as before.
 Rule	Brazil	2007	only	-	Oct	Sun>=8	 0:00	1:00	S
 # From Frederico A. C. Neves (2008-09-10):
-# Acording to this decree
-# 
+# According to this decree
 # http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm
-# 
 # [t]he DST period in Brazil now on will be from the 3rd Oct Sunday to the
 # 3rd Feb Sunday. There is an exception on the return date when this is
 # the Carnival Sunday then the return date will be the next Sunday...
@@ -993,29 +994,29 @@
 			-2:00	Brazil	FN%sT	2002 Oct  1
 			-2:00	-	FNT
 # Other Atlantic islands have no permanent settlement.
-# These include Trindade and Martin Vaz (administratively part of ES),
-# Atol das Rocas (RN), and Penedos de Sao Pedro e Sao Paulo (PE).
+# These include Trindade and Martim Vaz (administratively part of ES),
+# Rocas Atoll (RN), and the St Peter and St Paul Archipelago (PE).
 # Fernando de Noronha was a separate territory from 1942-09-02 to 1989-01-01;
 # it also included the Penedos.
 #
-# Amapa (AP), east Para (PA)
-# East Para includes Belem, Maraba, Serra Norte, and Sao Felix do Xingu.
-# The division between east and west Para is the river Xingu.
+# Amapá (AP), east Pará (PA)
+# East Pará includes Belém, Marabá, Serra Norte, and São Félix do Xingu.
+# The division between east and west Pará is the river Xingu.
 # In the north a very small part from the river Javary (now Jari I guess,
-# the border with Amapa) to the Amazon, then to the Xingu.
+# the border with Amapá) to the Amazon, then to the Xingu.
 Zone America/Belem	-3:13:56 -	LMT	1914
 			-3:00	Brazil	BR%sT	1988 Sep 12
 			-3:00	-	BRT
 #
-# west Para (PA)
-# West Para includes Altamira, Oribidos, Prainha, Oriximina, and Santarem.
+# west Pará (PA)
+# West Pará includes Altamira, Óbidos, Prainha, Oriximiná, and Santarém.
 Zone America/Santarem	-3:38:48 -	LMT	1914
 			-4:00	Brazil	AM%sT	1988 Sep 12
-			-4:00	-	AMT	2008 Jun 24 00:00
+			-4:00	-	AMT	2008 Jun 24  0:00
 			-3:00	-	BRT
 #
-# Maranhao (MA), Piaui (PI), Ceara (CE), Rio Grande do Norte (RN),
-# Paraiba (PB)
+# Maranhão (MA), Piauí (PI), Ceará (CE), Rio Grande do Norte (RN),
+# Paraíba (PB)
 Zone America/Fortaleza	-2:34:00 -	LMT	1914
 			-3:00	Brazil	BR%sT	1990 Sep 17
 			-3:00	-	BRT	1999 Sep 30
@@ -1038,6 +1039,8 @@
 			-3:00	Brazil	BR%sT	1990 Sep 17
 			-3:00	-	BRT	1995 Sep 14
 			-3:00	Brazil	BR%sT	2003 Sep 24
+			-3:00	-	BRT	2012 Oct 21
+			-3:00	Brazil	BR%sT	2013 Sep
 			-3:00	-	BRT
 #
 # Alagoas (AL), Sergipe (SE)
@@ -1056,13 +1059,15 @@
 # of America/Salvador.
 Zone America/Bahia	-2:34:04 -	LMT	1914
 			-3:00	Brazil	BR%sT	2003 Sep 24
+			-3:00	-	BRT	2011 Oct 16
+			-3:00	Brazil	BR%sT	2012 Oct 21
 			-3:00	-	BRT
 #
-# Goias (GO), Distrito Federal (DF), Minas Gerais (MG),
-# Espirito Santo (ES), Rio de Janeiro (RJ), Sao Paulo (SP), Parana (PR),
+# Goiás (GO), Distrito Federal (DF), Minas Gerais (MG),
+# Espírito Santo (ES), Rio de Janeiro (RJ), São Paulo (SP), Paraná (PR),
 # Santa Catarina (SC), Rio Grande do Sul (RS)
 Zone America/Sao_Paulo	-3:06:28 -	LMT	1914
-			-3:00	Brazil	BR%sT	1963 Oct 23 00:00
+			-3:00	Brazil	BR%sT	1963 Oct 23  0:00
 			-3:00	1:00	BRST	1964
 			-3:00	Brazil	BR%sT
 #
@@ -1076,7 +1081,7 @@
 			-4:00	-	AMT	2004 Oct  1
 			-4:00	Brazil	AM%sT
 #
-# Rondonia (RO)
+# Rondônia (RO)
 Zone America/Porto_Velho -4:15:36 -	LMT	1914
 			-4:00	Brazil	AM%sT	1988 Sep 12
 			-4:00	-	AMT
@@ -1088,7 +1093,7 @@
 			-4:00	Brazil	AM%sT	2000 Oct 15
 			-4:00	-	AMT
 #
-# east Amazonas (AM): Boca do Acre, Jutai, Manaus, Floriano Peixoto
+# east Amazonas (AM): Boca do Acre, Jutaí, Manaus, Floriano Peixoto
 # The great circle line from Tabatinga to Porto Acre divides
 # east from west Amazonas.
 Zone America/Manaus	-4:00:04 -	LMT	1914
@@ -1098,19 +1103,21 @@
 			-4:00	-	AMT
 #
 # west Amazonas (AM): Atalaia do Norte, Boca do Maoco, Benjamin Constant,
-#	Eirunepe, Envira, Ipixuna
+#	Eirunepé, Envira, Ipixuna
 Zone America/Eirunepe	-4:39:28 -	LMT	1914
 			-5:00	Brazil	AC%sT	1988 Sep 12
 			-5:00	-	ACT	1993 Sep 28
 			-5:00	Brazil	AC%sT	1994 Sep 22
-			-5:00	-	ACT	2008 Jun 24 00:00
-			-4:00	-	AMT
+			-5:00	-	ACT	2008 Jun 24  0:00
+			-4:00	-	AMT	2013 Nov 10
+			-5:00	-	ACT
 #
 # Acre (AC)
 Zone America/Rio_Branco	-4:31:12 -	LMT	1914
 			-5:00	Brazil	AC%sT	1988 Sep 12
-			-5:00	-	ACT	2008 Jun 24 00:00
-			-4:00	-	AMT
+			-5:00	-	ACT	2008 Jun 24  0:00
+			-4:00	-	AMT	2013 Nov 10
+			-5:00	-	ACT
 
 # Chile
 
@@ -1129,53 +1136,102 @@
 # From Oscar van Vlijmen (2006-10-08):
 # http://www.horaoficial.cl/cambio.htm
 
-# From Jesper Norgaard Welen (2006-10-08):
+# From Jesper Nørgaard Welen (2006-10-08):
 # I think that there are some obvious mistakes in the suggested link
 # from Oscar van Vlijmen,... for instance entry 66 says that GMT-4
 # ended 1990-09-12 while entry 67 only begins GMT-3 at 1990-09-15
 # (they should have been 1990-09-15 and 1990-09-16 respectively), but
 # anyhow it clears up some doubts too.
 
-# From Paul Eggert (2006-12-27):
-# The following data for Chile and America/Santiago are from
+# From Paul Eggert (2014-08-12):
+# The following data entries for Chile and America/Santiago are from
 #  (2006-09-20), transcribed by
-# Jesper Norgaard Welen.  The data for Pacific/Easter are from Shanks
+# Jesper Nørgaard Welen.  The data entries for Pacific/Easter are from Shanks
 # & Pottenger, except with DST transitions after 1932 cloned from
-# America/Santiago.  The pre-1980 Pacific/Easter data are dubious,
+# America/Santiago.  The pre-1980 Pacific/Easter data entries are dubious,
 # but we have no other source.
 
-# From German Poo-Caaman~o (2008-03-03):
+# From Germán Poo-Caamaño (2008-03-03):
 # Due to drought, Chile extends Daylight Time in three weeks.  This
 # is one-time change (Saturday 3/29 at 24:00 for America/Santiago
 # and Saturday 3/29 at 22:00 for Pacific/Easter)
-# The Supreme Decree is located at 
-# 
+# The Supreme Decree is located at
 # http://www.shoa.cl/servicios/supremo316.pdf
-# 
 # and the instructions for 2008 are located in:
-# 
 # http://www.horaoficial.cl/cambio.htm
-# .
 
-# From Jose Miguel Garrido (2008-03-05):
+# From José Miguel Garrido (2008-03-05):
 # ...
-# You could see the announces of the change on 
-# 
+# You could see the announces of the change on
 # http://www.shoa.cl/noticias/2008/04hora/hora.htm
-# .
 
 # From Angel Chiang (2010-03-04):
 # Subject: DST in Chile exceptionally extended to 3 April due to earthquake
-# 
 # http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098
-# 
 # (in Spanish, last paragraph).
 #
 # This is breaking news. There should be more information available later.
 
-# From Arthur Daivd Olson (2010-03-06):
+# From Arthur David Olson (2010-03-06):
 # Angel Chiang's message confirmed by Julio Pacheco; Julio provided a patch.
 
+# From Glenn Eychaner (2011-03-02):
+# It appears that the Chilean government has decided to postpone the
+# change from summer time to winter time again, by three weeks to April
+# 2nd:
+# http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651
+#
+# This is not yet reflected in the official "cambio de hora" site, but
+# probably will be soon:
+# http://www.horaoficial.cl/cambio.htm
+
+# From Arthur David Olson (2011-03-02):
+# The emol.com article mentions a water shortage as the cause of the
+# postponement, which may mean that it's not a permanent change.
+
+# From Glenn Eychaner (2011-03-28):
+# The article:
+# http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E}
+#
+# In English:
+# Chile's clocks will go back an hour this year on the 7th of May instead
+# of this Saturday. They will go forward again the 3rd Saturday in
+# August, not in October as they have since 1968. This is a pilot plan
+# which will be reevaluated in 2012.
+
+# From Mauricio Parada (2012-02-22), translated by Glenn Eychaner (2012-02-23):
+# As stated in the website of the Chilean Energy Ministry
+# http://www.minenergia.cl/ministerio/noticias/generales/gobierno-anuncia-fechas-de-cambio-de.html
+# The Chilean Government has decided to postpone the entrance into winter time
+# (to leave DST) from March 11 2012 to April 28th 2012. The decision has not
+# been yet formalized but it will within the next days.
+# Quote from the website communication:
+#
+# 6. For the year 2012, the dates of entry into winter time will be as follows:
+# a. Saturday April 28, 2012, clocks should go back 60 minutes; that is, at
+# 23:59:59, instead of passing to 0:00, the time should be adjusted to be 23:00
+# of the same day.
+# b. Saturday, September 1, 2012, clocks should go forward 60 minutes; that is,
+# at 23:59:59, instead of passing to 0:00, the time should be adjusted to be
+# 01:00 on September 2.
+
+# From Steffen Thorsen (2013-02-15):
+# According to several news sources, Chile has extended DST this year,
+# they will end DST later and start DST earlier than planned.  They
+# hope to save energy.  The new end date is 2013-04-28 00:00 and new
+# start date is 2013-09-08 00:00....
+# http://www.gob.cl/informa/2013/02/15/gobierno-anuncia-fechas-de-cambio-de-hora-para-el-ano-2013.htm
+
+# From José Miguel Garrido (2014-02-19):
+# Today appeared in the Diario Oficial a decree amending the time change
+# dates to 2014.
+# DST End: last Saturday of April 2014 (Sun 27 Apr 2014 03:00 UTC)
+# DST Start: first Saturday of September 2014 (Sun 07 Sep 2014 04:00 UTC)
+# http://www.diariooficial.interior.gob.cl//media/2014/02/19/do-20140219.pdf
+
+# NOTE: ChileAQ rules for Antarctic bases are stored separately in the
+# 'antarctica' file.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Chile	1927	1932	-	Sep	 1	0:00	1:00	S
 Rule	Chile	1928	1932	-	Apr	 1	0:00	0	-
@@ -1205,19 +1261,22 @@
 Rule	Chile	1998	only	-	Mar	Sun>=9	3:00u	0	-
 Rule	Chile	1998	only	-	Sep	27	4:00u	1:00	S
 Rule	Chile	1999	only	-	Apr	 4	3:00u	0	-
-Rule	Chile	1999	max	-	Oct	Sun>=9	4:00u	1:00	S
+Rule	Chile	1999	2010	-	Oct	Sun>=9	4:00u	1:00	S
 Rule	Chile	2000	2007	-	Mar	Sun>=9	3:00u	0	-
 # N.B.: the end of March 29 in Chile is March 30 in Universal time,
 # which is used below in specifying the transition.
 Rule	Chile	2008	only	-	Mar	30	3:00u	0	-
 Rule	Chile	2009	only	-	Mar	Sun>=9	3:00u	0	-
-Rule	Chile	2010	only	-	Apr	 4	3:00u	0	-
-Rule	Chile	2011	max	-	Mar	Sun>=9	3:00u	0	-
+Rule	Chile	2010	only	-	Apr	Sun>=1	3:00u	0	-
+Rule	Chile	2011	only	-	May	Sun>=2	3:00u	0	-
+Rule	Chile	2011	only	-	Aug	Sun>=16	4:00u	1:00	S
+Rule	Chile	2012	max	-	Apr	Sun>=23	3:00u	0	-
+Rule	Chile	2012	max	-	Sep	Sun>=2	4:00u	1:00	S
 # IATA SSIM anomalies: (1992-02) says 1992-03-14;
 # (1996-09) says 1998-03-08.  Ignore these.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Santiago	-4:42:46 -	LMT	1890
-			-4:42:46 -	SMT	1910 	    # Santiago Mean Time
+			-4:42:46 -	SMT	1910        # Santiago Mean Time
 			-5:00	-	CLT	1916 Jul  1 # Chile Time
 			-4:42:46 -	SMT	1918 Sep  1 # Santiago Mean Time
 			-4:00	-	CLT	1919 Jul  1 # Chile Time
@@ -1226,47 +1285,63 @@
 			-4:00	Chile	CL%sT
 Zone Pacific/Easter	-7:17:44 -	LMT	1890
 			-7:17:28 -	EMT	1932 Sep    # Easter Mean Time
-			-7:00	Chile	EAS%sT	1982 Mar 13 21:00 # Easter I Time
+			-7:00	Chile	EAS%sT	1982 Mar 13 21:00 # Easter Time
 			-6:00	Chile	EAS%sT
 #
-# Sala y Gomez Island is like Pacific/Easter.
-# Other Chilean locations, including Juan Fernandez Is, San Ambrosio,
-# San Felix, and Antarctic bases, are like America/Santiago.
+# Salas y Gómez Island is uninhabited.
+# Other Chilean locations, including Juan Fernández Is, Desventuradas Is,
+# and Antarctic bases, are like America/Santiago.
 
 # Colombia
+
+# Milne gives 4:56:16.4 for Bogotá time in 1899; round to nearest.  He writes,
+# "A variation of fifteen minutes in the public clocks of Bogota is not rare."
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	CO	1992	only	-	May	 3	0:00	1:00	S
 Rule	CO	1993	only	-	Apr	 4	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Bogota	-4:56:20 -	LMT	1884 Mar 13
-			-4:56:20 -	BMT	1914 Nov 23 # Bogota Mean Time
+Zone	America/Bogota	-4:56:16 -	LMT	1884 Mar 13
+			-4:56:16 -	BMT	1914 Nov 23 # Bogotá Mean Time
 			-5:00	CO	CO%sT	# Colombia Time
 # Malpelo, Providencia, San Andres
 # no information; probably like America/Bogota
 
-# Curacao
+# Curaçao
+
+# Milne gives 4:35:46.9 for Curaçao mean time; round to nearest.
 #
 # From Paul Eggert (2006-03-22):
 # Shanks & Pottenger say that The Bottom and Philipsburg have been at
 # -4:00 since standard time was introduced on 1912-03-02; and that
 # Kralendijk and Rincon used Kralendijk Mean Time (-4:33:08) from
 # 1912-02-02 to 1965-01-01.  The former is dubious, since S&P also say
-# Saba Island has been like Curacao.
+# Saba Island has been like Curaçao.
 # This all predates our 1970 cutoff, though.
 #
-# By July 2007 Curacao and St Maarten are planned to become
+# By July 2007 Curaçao and St Maarten are planned to become
 # associated states within the Netherlands, much like Aruba;
 # Bonaire, Saba and St Eustatius would become directly part of the
 # Netherlands as Kingdom Islands.  This won't affect their time zones
 # though, as far as we know.
 #
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Curacao	-4:35:44 -	LMT	1912 Feb 12	# Willemstad
+Zone	America/Curacao	-4:35:47 -	LMT	1912 Feb 12 # Willemstad
 			-4:30	-	ANT	1965 # Netherlands Antilles Time
 			-4:00	-	AST
 
+# From Arthur David Olson (2011-06-15):
+# use links for places with new iso3166 codes.
+# The name "Lower Prince's Quarter" is both longer than fourteen characters
+# and contains an apostrophe; use "Lower_Princes" below.
+
+Link	America/Curacao	America/Lower_Princes	# Sint Maarten
+Link	America/Curacao	America/Kralendijk	# Caribbean Netherlands
+
 # Ecuador
 #
+# Milne says the Central and South American Telegraph Company used -5:24:15.
+#
 # From Paul Eggert (2007-03-04):
 # Apparently Ecuador had a failed experiment with DST in 1992.
 #  (2007-02-27) and
@@ -1276,10 +1351,10 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Guayaquil	-5:19:20 -	LMT	1890
 			-5:14:00 -	QMT	1931 # Quito Mean Time
-			-5:00	-	ECT	     # Ecuador Time
+			-5:00	-	ECT	# Ecuador Time
 Zone Pacific/Galapagos	-5:58:24 -	LMT	1931 # Puerto Baquerizo Moreno
 			-5:00	-	ECT	1986
-			-6:00	-	GALT	     # Galapagos Time
+			-6:00	-	GALT	# Galápagos Time
 
 # Falklands
 
@@ -1288,7 +1363,7 @@
 # the IATA gives 1996-09-08.  Go with Shanks & Pottenger.
 
 # From Falkland Islands Government Office, London (2001-01-22)
-# via Jesper Norgaard:
+# via Jesper Nørgaard:
 # ... the clocks revert back to Local Mean Time at 2 am on Sunday 15
 # April 2001 and advance one hour to summer time at 2 am on Sunday 2
 # September.  It is anticipated that the clocks will revert back at 2
@@ -1332,6 +1407,37 @@
 # For now, we'll just record the time in Stanley, since we have no
 # better info.
 
+# From Steffen Thorsen (2011-04-01):
+# The Falkland Islands will not turn back clocks this winter, but stay on
+# daylight saving time.
+#
+# One source:
+# http://www.falklandnews.com/public/story.cfm?get=5914&source=3
+#
+# We have gotten this confirmed by a clerk of the legislative assembly:
+# Normally the clocks revert to Local Mean Time (UTC/GMT -4 hours) on the
+# third Sunday of April at 0200hrs and advance to Summer Time (UTC/GMT -3
+# hours) on the first Sunday of September at 0200hrs.
+#
+# IMPORTANT NOTE: During 2011, on a trial basis, the Falkland Islands
+# will not revert to local mean time, but clocks will remain on Summer
+# time (UTC/GMT - 3 hours) throughout the whole of 2011.  Any long term
+# change to local time following the trial period will be notified.
+#
+# From Andrew Newman (2012-02-24)
+# A letter from Justin McPhee, Chief Executive,
+# Cable & Wireless Falkland Islands (dated 2012-02-22)
+# states...
+#   The current Atlantic/Stanley entry under South America expects the
+#   clocks to go back to standard Falklands Time (FKT) on the 15th April.
+#   The database entry states that in 2011 Stanley was staying on fixed
+#   summer time on a trial basis only.  FIG need to contact IANA and/or
+#   the maintainers of the database to inform them we're adopting
+#   the same policy this year and suggest recommendations for future years.
+#
+# For now we will assume permanent summer time for the Falklands
+# until advised differently (to apply for 2012 and beyond, after the 2011
+# experiment was apparently successful.)
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Falk	1937	1938	-	Sep	lastSun	0:00	1:00	S
 Rule	Falk	1938	1942	-	Mar	Sun>=19	0:00	0	-
@@ -1343,14 +1449,15 @@
 Rule	Falk	1984	only	-	Sep	16	0:00	1:00	S
 Rule	Falk	1985	2000	-	Sep	Sun>=9	0:00	1:00	S
 Rule	Falk	1986	2000	-	Apr	Sun>=16	0:00	0	-
-Rule	Falk	2001	max	-	Apr	Sun>=15	2:00	0	-
-Rule	Falk	2001	max	-	Sep	Sun>=1	2:00	1:00	S
+Rule	Falk	2001	2010	-	Apr	Sun>=15	2:00	0	-
+Rule	Falk	2001	2010	-	Sep	Sun>=1	2:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Atlantic/Stanley	-3:51:24 -	LMT	1890
-			-3:51:24 -	SMT	1912 Mar 12  # Stanley Mean Time
-			-4:00	Falk	FK%sT	1983 May     # Falkland Is Time
+			-3:51:24 -	SMT	1912 Mar 12 # Stanley Mean Time
+			-4:00	Falk	FK%sT	1983 May    # Falkland Is Time
 			-3:00	Falk	FK%sT	1985 Sep 15
-			-4:00	Falk	FK%sT
+			-4:00	Falk	FK%sT	2010 Sep  5  2:00
+			-3:00	-	FKST
 
 # French Guiana
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -1360,7 +1467,7 @@
 
 # Guyana
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Guyana	-3:52:40 -	LMT	1915 Mar	# Georgetown
+Zone	America/Guyana	-3:52:40 -	LMT	1915 Mar    # Georgetown
 			-3:45	-	GBGT	1966 May 26 # Br Guiana Time
 			-3:45	-	GYT	1975 Jul 31 # Guyana Time
 			-3:00	-	GYT	1991
@@ -1368,10 +1475,16 @@
 			-4:00	-	GYT
 
 # Paraguay
+#
 # From Paul Eggert (2006-03-22):
-# Shanks & Pottenger say that spring transitions are from 01:00 -> 02:00,
-# and autumn transitions are from 00:00 -> 23:00.  Go with pre-1999
+# Shanks & Pottenger say that spring transitions are 01:00 -> 02:00,
+# and autumn transitions are 00:00 -> 23:00.  Go with pre-1999
 # editions of Shanks, and with the IATA, who say transitions occur at 00:00.
+#
+# From Waldemar Villamayor-Venialbo (2013-09-20):
+# No time of the day is established for the adjustment, so people normally
+# adjust their clocks at 0 hour of the given dates.
+#
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Para	1975	1988	-	Oct	 1	0:00	1:00	S
 Rule	Para	1975	1978	-	Mar	 1	0:00	0	-
@@ -1391,9 +1504,8 @@
 # (10-01).
 #
 # Translated by Gwillim Law (2001-02-27) from
-# 
-# Noticias, a daily paper in Asuncion, Paraguay (2000-10-01)
-# :
+# Noticias, a daily paper in Asunción, Paraguay (2000-10-01):
+# http://www.diarionoticias.com.py/011000/nacional/naciona1.htm
 # Starting at 0:00 today, the clock will be set forward 60 minutes, in
 # fulfillment of Decree No. 7,273 of the Executive Power....  The time change
 # system has been operating for several years.  Formerly there was a separate
@@ -1414,21 +1526,18 @@
 Rule	Para	2002	2004	-	Apr	Sun>=1	0:00	0	-
 Rule	Para	2002	2003	-	Sep	Sun>=1	0:00	1:00	S
 #
-# From Jesper Norgaard Welen (2005-01-02):
+# From Jesper Nørgaard Welen (2005-01-02):
 # There are several sources that claim that Paraguay made
 # a timezone rule change in autumn 2004.
 # From Steffen Thorsen (2005-01-05):
 # Decree 1,867 (2004-03-05)
-# From Carlos Raul Perasso via Jesper Norgaard Welen (2006-10-13)
-# 
+# From Carlos Raúl Perasso via Jesper Nørgaard Welen (2006-10-13)
+# http://www.presidencia.gov.py/decretos/D1867.pdf
 Rule	Para	2004	2009	-	Oct	Sun>=15	0:00	1:00	S
 Rule	Para	2005	2009	-	Mar	Sun>=8	0:00	0	-
-# From Carlos Raul Perasso (2010-02-18):
-# By decree number 3958 issued yesterday (
-# 
+# From Carlos Raúl Perasso (2010-02-18):
+# By decree number 3958 issued yesterday
 # http://www.presidencia.gov.py/v1/wp-content/uploads/2010/02/decreto3958.pdf
-# 
-# )
 # Paraguay changes its DST schedule, postponing the March rule to April and
 # modifying the October date. The decree reads:
 # ...
@@ -1438,19 +1547,31 @@
 # forward 60 minutes, in all the territory of the Paraguayan Republic.
 # ...
 Rule	Para	2010	max	-	Oct	Sun>=1	0:00	1:00	S
-Rule	Para	2010	max	-	Apr	Sun>=8	0:00	0	-
+Rule	Para	2010	2012	-	Apr	Sun>=8	0:00	0	-
+#
+# From Steffen Thorsen (2013-03-07):
+# Paraguay will end DST on 2013-03-24 00:00....
+# http://www.ande.gov.py/interna.php?id=1075
+#
+# From Carlos Raúl Perasso (2013-03-15):
+# The change in Paraguay is now final.  Decree number 10780
+# http://www.presidencia.gov.py/uploads/pdf/presidencia-3b86ff4b691c79d4f5927ca964922ec74772ce857c02ca054a52a37b49afc7fb.pdf
+# From Carlos Raúl Perasso (2014-02-28):
+# Decree 1264 can be found at:
+# http://www.presidencia.gov.py/archivos/documentos/DECRETO1264_ey9r8zai.pdf
+Rule	Para	2013	max	-	Mar	Sun>=22	0:00	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Asuncion	-3:50:40 -	LMT	1890
-			-3:50:40 -	AMT	1931 Oct 10 # Asuncion Mean Time
-			-4:00	-	PYT	1972 Oct # Paraguay Time
+			-3:50:40 -	AMT	1931 Oct 10 # Asunción Mean Time
+			-4:00	-	PYT	1972 Oct    # Paraguay Time
 			-3:00	-	PYT	1974 Apr
 			-4:00	Para	PY%sT
 
 # Peru
 #
-# 
-# From Evelyn C. Leeper via Mark Brader (2003-10-26):
+# From Evelyn C. Leeper via Mark Brader (2003-10-26)
+# :
 # When we were in Peru in 1985-1986, they apparently switched over
 # sometime between December 29 and January 3 while we were on the Amazon.
 #
@@ -1476,7 +1597,7 @@
 
 # South Georgia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Atlantic/South_Georgia -2:26:08 -	LMT	1890		# Grytviken
+Zone Atlantic/South_Georgia -2:26:08 -	LMT	1890 # Grytviken
 			-2:00	-	GST	# South Georgia Time
 
 # South Sandwich Is
@@ -1486,9 +1607,9 @@
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Paramaribo	-3:40:40 -	LMT	1911
 			-3:40:52 -	PMT	1935     # Paramaribo Mean Time
-			-3:40:36 -	PMT	1945 Oct # The capital moved?
+			-3:40:36 -	PMT	1945 Oct    # The capital moved?
 			-3:30	-	NEGT	1975 Nov 20 # Dutch Guiana Time
-			-3:30	-	SRT	1984 Oct # Suriname Time
+			-3:30	-	SRT	1984 Oct    # Suriname Time
 			-3:00	-	SRT
 
 # Trinidad and Tobago
@@ -1496,6 +1617,20 @@
 Zone America/Port_of_Spain -4:06:04 -	LMT	1912 Mar 2
 			-4:00	-	AST
 
+# These all agree with Trinidad and Tobago since 1970.
+Link America/Port_of_Spain America/Anguilla
+Link America/Port_of_Spain America/Dominica
+Link America/Port_of_Spain America/Grenada
+Link America/Port_of_Spain America/Guadeloupe
+Link America/Port_of_Spain America/Marigot	# St Martin (French part)
+Link America/Port_of_Spain America/Montserrat
+Link America/Port_of_Spain America/St_Barthelemy # St Barthélemy
+Link America/Port_of_Spain America/St_Kitts	# St Kitts & Nevis
+Link America/Port_of_Spain America/St_Lucia
+Link America/Port_of_Spain America/St_Thomas	# Virgin Islands (US)
+Link America/Port_of_Spain America/St_Vincent
+Link America/Port_of_Spain America/Tortola	# Virgin Islands (UK)
+
 # Uruguay
 # From Paul Eggert (1993-11-18):
 # Uruguay wins the prize for the strangest peacetime manipulation of the rules.
@@ -1513,7 +1648,7 @@
 # Whitman gives 1937 Oct 3; go with Shanks & Pottenger.
 Rule	Uruguay	1937	1940	-	Oct	lastSun	 0:00	0:30	HS
 # Whitman gives 1941 Oct 24 - 1942 Mar 27, 1942 Dec 14 - 1943 Apr 13,
-# and 1943 Apr 13 ``to present time''; go with Shanks & Pottenger.
+# and 1943 Apr 13 "to present time"; go with Shanks & Pottenger.
 Rule	Uruguay	1941	only	-	Aug	 1	 0:00	0:30	HS
 Rule	Uruguay	1942	only	-	Jan	 1	 0:00	0	-
 Rule	Uruguay	1942	only	-	Dec	14	 0:00	1:00	S
@@ -1548,7 +1683,7 @@
 Rule	Uruguay	1992	only	-	Oct	18	 0:00	1:00	S
 Rule	Uruguay	1993	only	-	Feb	28	 0:00	0	-
 # From Eduardo Cota (2004-09-20):
-# The uruguayan government has decreed a change in the local time....
+# The Uruguayan government has decreed a change in the local time....
 # http://www.presidencia.gub.uy/decretos/2004091502.htm
 Rule	Uruguay	2004	only	-	Sep	19	 0:00	1:00	S
 # From Steffen Thorsen (2005-03-11):
@@ -1562,14 +1697,14 @@
 # 02:00 local time, official time in Uruguay will be at GMT -2.
 Rule	Uruguay	2005	only	-	Oct	 9	 2:00	1:00	S
 Rule	Uruguay	2006	only	-	Mar	12	 2:00	0	-
-# From Jesper Norgaard Welen (2006-09-06):
+# From Jesper Nørgaard Welen (2006-09-06):
 # http://www.presidencia.gub.uy/_web/decretos/2006/09/CM%20210_08%2006%202006_00001.PDF
 Rule	Uruguay	2006	max	-	Oct	Sun>=1	 2:00	1:00	S
 Rule	Uruguay	2007	max	-	Mar	Sun>=8	 2:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Montevideo	-3:44:44 -	LMT	1898 Jun 28
-			-3:44:44 -	MMT	1920 May  1	# Montevideo MT
-			-3:30	Uruguay	UY%sT	1942 Dec 14	# Uruguay Time
+			-3:44:44 -	MMT	1920 May  1 # Montevideo MT
+			-3:30	Uruguay	UY%sT	1942 Dec 14 # Uruguay Time
 			-3:00	Uruguay	UY%sT
 
 # Venezuela
@@ -1577,14 +1712,14 @@
 # From John Stainforth (2007-11-28):
 # ... the change for Venezuela originally expected for 2007-12-31 has
 # been brought forward to 2007-12-09.  The official announcement was
-# published today in the "Gaceta Oficial de la Republica Bolivariana
-# de Venezuela, numero 38.819" (official document for all laws or
+# published today in the "Gaceta Oficial de la República Bolivariana
+# de Venezuela, número 38.819" (official document for all laws or
 # resolution publication)
 # http://www.globovision.com/news.php?nid=72208
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Caracas	-4:27:44 -	LMT	1890
 			-4:27:40 -	CMT	1912 Feb 12 # Caracas Mean Time?
-			-4:30	-	VET	1965	     # Venezuela Time
-			-4:00	-	VET	2007 Dec  9 03:00
+			-4:30	-	VET	1965        # Venezuela Time
+			-4:00	-	VET	2007 Dec  9  3:00
 			-4:30	-	VET
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/systemv openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/systemv
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/systemv	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/systemv	2015-01-20 02:20:42.000000000 +0000
@@ -1,27 +1,26 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/VERSION openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/VERSION
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/VERSION	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/VERSION	2015-01-20 02:20:42.000000000 +0000
@@ -1,24 +1,24 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-tzdata2010i
+tzdata2014j
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/zone.tab openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/zone.tab
--- openjdk-6-6b33-1.13.5/jdk/make/sun/javazic/tzdata/zone.tab	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/javazic/tzdata/zone.tab	2015-01-20 02:20:42.000000000 +0000
@@ -1,49 +1,47 @@
 #
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#  
+#
 # This code is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License version 2 only, as
 # published by the Free Software Foundation.  Oracle designates this
 # particular file as subject to the "Classpath" exception as provided
 # by Oracle in the LICENSE file that accompanied this code.
-#  
+#
 # This code is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # version 2 for more details (a copy is included in the LICENSE file that
 # accompanied this code).
-#  
+#
 # You should have received a copy of the GNU General Public License version
 # 2 along with this work; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#  
+#
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
+# tz zone descriptions (deprecated version)
+#
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 #
-# TZ zone descriptions
+# From Paul Eggert (2014-07-31):
+# This file is intended as a backward-compatibility aid for older programs.
+# New programs should use zone1970.tab.  This file is like zone1970.tab (see
+# zone1970.tab's comments), but with the following additional restrictions:
 #
-# From Paul Eggert (1996-08-05):
+# 1.  This file contains only ASCII characters.
+# 2.  The first data column contains exactly one country code.
 #
-# This file contains a table with the following columns:
-# 1.  ISO 3166 2-character country code.  See the file `iso3166.tab'.
-# 2.  Latitude and longitude of the zone's principal location
-#     in ISO 6709 sign-degrees-minutes-seconds format,
-#     either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
-#     first latitude (+ is north), then longitude (+ is east).
-# 3.  Zone name used in value of TZ environment variable.
-# 4.  Comments; present if and only if the country has multiple rows.
-#
-# Columns are separated by a single tab.
-# The table is sorted first by country, then an order within the country that
-# (1) makes some geographical sense, and
-# (2) puts the most populous zones first, where that does not contradict (1).
+# Because of (2), each row stands for an area that is the intersection
+# of a region identified by a country code and of a zone where civil
+# clocks have agreed since 1970; this is a narrower definition than
+# that of zone1970.tab.
 #
-# Lines beginning with `#' are comments.
+# This table is intended as an aid for users, to help them select time
+# zone data entries appropriate for their practical needs.  It is not
+# intended to take or endorse any position on legal or territorial claims.
 #
 #country-
 #code	coordinates	TZ			comments
@@ -54,19 +52,17 @@
 AI	+1812-06304	America/Anguilla
 AL	+4120+01950	Europe/Tirane
 AM	+4011+04430	Asia/Yerevan
-AN	+1211-06900	America/Curacao
 AO	-0848+01314	Africa/Luanda
-AQ	-7750+16636	Antarctica/McMurdo	McMurdo Station, Ross Island
-AQ	-9000+00000	Antarctica/South_Pole	Amundsen-Scott Station, South Pole
+AQ	-7750+16636	Antarctica/McMurdo	McMurdo, South Pole, Scott (New Zealand time)
 AQ	-6734-06808	Antarctica/Rothera	Rothera Station, Adelaide Island
 AQ	-6448-06406	Antarctica/Palmer	Palmer Station, Anvers Island
 AQ	-6736+06253	Antarctica/Mawson	Mawson Station, Holme Bay
 AQ	-6835+07758	Antarctica/Davis	Davis Station, Vestfold Hills
 AQ	-6617+11031	Antarctica/Casey	Casey Station, Bailey Peninsula
-AQ	-7824+10654	Antarctica/Vostok	Vostok Station, S Magnetic Pole
-AQ	-6640+14001	Antarctica/DumontDUrville	Dumont-d'Urville Station, Terre Adelie
+AQ	-7824+10654	Antarctica/Vostok	Vostok Station, Lake Vostok
+AQ	-6640+14001	Antarctica/DumontDUrville	Dumont-d'Urville Station, Adelie Land
 AQ	-690022+0393524	Antarctica/Syowa	Syowa Station, E Ongul I
-AQ	-5430+15857	Antarctica/Macquarie	Macquarie Island Station, Macquarie Island
+AQ	-720041+0023206	Antarctica/Troll	Troll Station, Queen Maud Land
 AR	-3436-05827	America/Argentina/Buenos_Aires	Buenos Aires (BA, CF)
 AR	-3124-06411	America/Argentina/Cordoba	most locations (CB, CC, CN, ER, FM, MN, SE, SF)
 AR	-2447-06525	America/Argentina/Salta	(SA, LP, NQ, RN)
@@ -82,6 +78,7 @@
 AS	-1416-17042	Pacific/Pago_Pago
 AT	+4813+01620	Europe/Vienna
 AU	-3133+15905	Australia/Lord_Howe	Lord Howe Island
+AU	-5430+15857	Antarctica/Macquarie	Macquarie Island
 AU	-4253+14719	Australia/Hobart	Tasmania - most locations
 AU	-3956+14352	Australia/Currie	Tasmania - King Island
 AU	-3749+14458	Australia/Melbourne	Victoria
@@ -109,6 +106,7 @@
 BM	+3217-06446	Atlantic/Bermuda
 BN	+0456+11455	Asia/Brunei
 BO	-1630-06809	America/La_Paz
+BQ	+120903-0681636	America/Kralendijk
 BR	-0351-03225	America/Noronha	Atlantic islands
 BR	-0127-04829	America/Belem	Amapa, E Para
 BR	-0343-03830	America/Fortaleza	NE Brazil (MA, PI, CE, RN, PB)
@@ -136,13 +134,12 @@
 CA	+4606-06447	America/Moncton	Atlantic Time - New Brunswick
 CA	+5320-06025	America/Goose_Bay	Atlantic Time - Labrador - most locations
 CA	+5125-05707	America/Blanc-Sablon	Atlantic Standard Time - Quebec - Lower North Shore
-CA	+4531-07334	America/Montreal	Eastern Time - Quebec - most locations
-CA	+4339-07923	America/Toronto	Eastern Time - Ontario - most locations
+CA	+4339-07923	America/Toronto	Eastern Time - Ontario & Quebec - most locations
 CA	+4901-08816	America/Nipigon	Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973
 CA	+4823-08915	America/Thunder_Bay	Eastern Time - Thunder Bay, Ontario
 CA	+6344-06828	America/Iqaluit	Eastern Time - east Nunavut - most locations
 CA	+6608-06544	America/Pangnirtung	Eastern Time - Pangnirtung, Nunavut
-CA	+744144-0944945	America/Resolute	Eastern Standard Time - Resolute, Nunavut
+CA	+744144-0944945	America/Resolute	Central Time - Resolute, Nunavut
 CA	+484531-0913718	America/Atikokan	Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
 CA	+624900-0920459	America/Rankin_Inlet	Central Time - central Nunavut
 CA	+4953-09709	America/Winnipeg	Central Time - Manitoba & west Ontario
@@ -153,6 +150,7 @@
 CA	+690650-1050310	America/Cambridge_Bay	Mountain Time - west Nunavut
 CA	+6227-11421	America/Yellowknife	Mountain Time - central Northwest Territories
 CA	+682059-1334300	America/Inuvik	Mountain Time - west Northwest Territories
+CA	+4906-11631	America/Creston	Mountain Standard Time - Creston, British Columbia
 CA	+5946-12014	America/Dawson_Creek	Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia
 CA	+4916-12307	America/Vancouver	Pacific Time - west British Columbia
 CA	+6043-13503	America/Whitehorse	Pacific Time - south Yukon
@@ -166,21 +164,20 @@
 CI	+0519-00402	Africa/Abidjan
 CK	-2114-15946	Pacific/Rarotonga
 CL	-3327-07040	America/Santiago	most locations
-CL	-2709-10926	Pacific/Easter	Easter Island & Sala y Gomez
+CL	-2709-10926	Pacific/Easter	Easter Island
 CM	+0403+00942	Africa/Douala
-CN	+3114+12128	Asia/Shanghai	east China - Beijing, Guangdong, Shanghai, etc.
-CN	+4545+12641	Asia/Harbin	Heilongjiang (except Mohe), Jilin
-CN	+2934+10635	Asia/Chongqing	central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.
-CN	+4348+08735	Asia/Urumqi	most of Tibet & Xinjiang
-CN	+3929+07559	Asia/Kashgar	west Tibet & Xinjiang
+CN	+3114+12128	Asia/Shanghai	Beijing Time
+CN	+4348+08735	Asia/Urumqi	Xinjiang Time
 CO	+0436-07405	America/Bogota
 CR	+0956-08405	America/Costa_Rica
 CU	+2308-08222	America/Havana
 CV	+1455-02331	Atlantic/Cape_Verde
+CW	+1211-06900	America/Curacao
 CX	-1025+10543	Indian/Christmas
 CY	+3510+03322	Asia/Nicosia
 CZ	+5005+01426	Europe/Prague
-DE	+5230+01322	Europe/Berlin
+DE	+5230+01322	Europe/Berlin	most locations
+DE	+4742+00841	Europe/Busingen	Busingen
 DJ	+1136+04309	Africa/Djibouti
 DK	+5540+01235	Europe/Copenhagen
 DM	+1518-06124	America/Dominica
@@ -199,8 +196,8 @@
 FI	+6010+02458	Europe/Helsinki
 FJ	-1808+17825	Pacific/Fiji
 FK	-5142-05751	Atlantic/Stanley
-FM	+0725+15147	Pacific/Truk	Truk (Chuuk) and Yap
-FM	+0658+15813	Pacific/Ponape	Ponape (Pohnpei)
+FM	+0725+15147	Pacific/Chuuk	Chuuk (Truk) and Yap
+FM	+0658+15813	Pacific/Pohnpei	Pohnpei (Ponape)
 FM	+0519+16259	Pacific/Kosrae	Kosrae
 FO	+6201-00646	Atlantic/Faroe
 FR	+4852+00220	Europe/Paris
@@ -233,10 +230,10 @@
 HU	+4730+01905	Europe/Budapest
 ID	-0610+10648	Asia/Jakarta	Java & Sumatra
 ID	-0002+10920	Asia/Pontianak	west & central Borneo
-ID	-0507+11924	Asia/Makassar	east & south Borneo, Celebes, Bali, Nusa Tengarra, west Timor
-ID	-0232+14042	Asia/Jayapura	Irian Jaya & the Moluccas
+ID	-0507+11924	Asia/Makassar	east & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor
+ID	-0232+14042	Asia/Jayapura	west New Guinea (Irian Jaya) & Malukus (Moluccas)
 IE	+5320-00615	Europe/Dublin
-IL	+3146+03514	Asia/Jerusalem
+IL	+314650+0351326	Asia/Jerusalem
 IM	+5409-00428	Europe/Isle_of_Man
 IN	+2232+08822	Asia/Kolkata
 IO	-0720+07225	Indian/Chagos
@@ -245,7 +242,7 @@
 IS	+6409-02151	Atlantic/Reykjavik
 IT	+4154+01229	Europe/Rome
 JE	+4912-00207	Europe/Jersey
-JM	+1800-07648	America/Jamaica
+JM	+175805-0764736	America/Jamaica
 JO	+3157+03556	Asia/Amman
 JP	+353916+1394441	Asia/Tokyo
 KE	-0117+03649	Africa/Nairobi
@@ -310,6 +307,7 @@
 MX	+2904-11058	America/Hermosillo	Mountain Standard Time - Sonora
 MX	+3232-11701	America/Tijuana	US Pacific Time - Baja California near US border
 MX	+3018-11452	America/Santa_Isabel	Mexican Pacific Time - Baja California away from US border
+MX	+2048-10515	America/Bahia_Banderas	Mexican Central Time - Bahia de Banderas
 MY	+0310+10142	Asia/Kuala_Lumpur	peninsular Malaysia
 MY	+0133+11020	Asia/Kuching	Sabah & Sarawak
 MZ	-2558+03235	Africa/Maputo
@@ -332,14 +330,16 @@
 PF	-1732-14934	Pacific/Tahiti	Society Islands
 PF	-0900-13930	Pacific/Marquesas	Marquesas Islands
 PF	-2308-13457	Pacific/Gambier	Gambier Islands
-PG	-0930+14710	Pacific/Port_Moresby
+PG	-0930+14710	Pacific/Port_Moresby	most locations
+PG	-0613+15534	Pacific/Bougainville	Bougainville
 PH	+1435+12100	Asia/Manila
 PK	+2452+06703	Asia/Karachi
 PL	+5215+02100	Europe/Warsaw
 PM	+4703-05620	America/Miquelon
 PN	-2504-13005	Pacific/Pitcairn
 PR	+182806-0660622	America/Puerto_Rico
-PS	+3130+03428	Asia/Gaza
+PS	+3130+03428	Asia/Gaza	Gaza Strip
+PS	+313200+0350542	Asia/Hebron	West Bank
 PT	+3843-00908	Europe/Lisbon	mainland
 PT	+3238-01654	Atlantic/Madeira	Madeira Islands
 PT	+3744-02540	Atlantic/Azores	Azores
@@ -350,21 +350,26 @@
 RO	+4426+02606	Europe/Bucharest
 RS	+4450+02030	Europe/Belgrade
 RU	+5443+02030	Europe/Kaliningrad	Moscow-01 - Kaliningrad
-RU	+5545+03735	Europe/Moscow	Moscow+00 - west Russia
+RU	+554521+0373704	Europe/Moscow	Moscow+00 - west Russia
+RU	+4457+03406	Europe/Simferopol	Moscow+00 - Crimea
 RU	+4844+04425	Europe/Volgograd	Moscow+00 - Caspian Sea
-RU	+5312+05009	Europe/Samara	Moscow - Samara, Udmurtia
+RU	+5312+05009	Europe/Samara	Moscow+00 (Moscow+01 after 2014-10-26) - Samara, Udmurtia
 RU	+5651+06036	Asia/Yekaterinburg	Moscow+02 - Urals
 RU	+5500+07324	Asia/Omsk	Moscow+03 - west Siberia
 RU	+5502+08255	Asia/Novosibirsk	Moscow+03 - Novosibirsk
-RU	+5345+08707	Asia/Novokuznetsk	Moscow+03 - Novokuznetsk
+RU	+5345+08707	Asia/Novokuznetsk	Moscow+03 (Moscow+04 after 2014-10-26) - Kemerovo
 RU	+5601+09250	Asia/Krasnoyarsk	Moscow+04 - Yenisei River
 RU	+5216+10420	Asia/Irkutsk	Moscow+05 - Lake Baikal
+RU	+5203+11328	Asia/Chita	Moscow+06 (Moscow+05 after 2014-10-26) - Zabaykalsky
 RU	+6200+12940	Asia/Yakutsk	Moscow+06 - Lena River
+RU	+623923+1353314	Asia/Khandyga	Moscow+06 - Tomponsky, Ust-Maysky
 RU	+4310+13156	Asia/Vladivostok	Moscow+07 - Amur River
 RU	+4658+14242	Asia/Sakhalin	Moscow+07 - Sakhalin Island
-RU	+5934+15048	Asia/Magadan	Moscow+08 - Magadan
-RU	+5301+15839	Asia/Kamchatka	Moscow+08 - Kamchatka
-RU	+6445+17729	Asia/Anadyr	Moscow+08 - Bering Sea
+RU	+643337+1431336	Asia/Ust-Nera	Moscow+07 - Oymyakonsky
+RU	+5934+15048	Asia/Magadan	Moscow+08 (Moscow+07 after 2014-10-26) - Magadan
+RU	+6728+15343	Asia/Srednekolymsk	Moscow+08 - E Sakha, N Kuril Is
+RU	+5301+15839	Asia/Kamchatka	Moscow+08 (Moscow+09 after 2014-10-26) - Kamchatka
+RU	+6445+17729	Asia/Anadyr	Moscow+08 (Moscow+09 after 2014-10-26) - Bering Sea
 RW	-0157+03004	Africa/Kigali
 SA	+2438+04643	Asia/Riyadh
 SB	-0932+16012	Pacific/Guadalcanal
@@ -381,8 +386,10 @@
 SN	+1440-01726	Africa/Dakar
 SO	+0204+04522	Africa/Mogadishu
 SR	+0550-05510	America/Paramaribo
+SS	+0451+03136	Africa/Juba
 ST	+0020+00644	Africa/Sao_Tome
 SV	+1342-08912	America/El_Salvador
+SX	+180305-0630250	America/Lower_Princes
 SY	+3330+03618	Asia/Damascus
 SZ	-2618+03106	Africa/Mbabane
 TC	+2128-07108	America/Grand_Turk
@@ -404,7 +411,6 @@
 UA	+5026+03031	Europe/Kiev	most locations
 UA	+4837+02218	Europe/Uzhgorod	Ruthenia
 UA	+4750+03510	Europe/Zaporozhye	Zaporozh'ye, E Lugansk / Zaporizhia, E Luhansk
-UA	+4457+03406	Europe/Simferopol	central Crimea
 UG	+0019+03225	Africa/Kampala
 UM	+1645-16931	Pacific/Johnston	Johnston Atoll
 UM	+2813-17722	Pacific/Midway	Midway Islands
@@ -425,13 +431,15 @@
 US	+450628-0873651	America/Menominee	Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties
 US	+470659-1011757	America/North_Dakota/Center	Central Time - North Dakota - Oliver County
 US	+465042-1012439	America/North_Dakota/New_Salem	Central Time - North Dakota - Morton County (except Mandan area)
+US	+471551-1014640	America/North_Dakota/Beulah	Central Time - North Dakota - Mercer County
 US	+394421-1045903	America/Denver	Mountain Time
 US	+433649-1161209	America/Boise	Mountain Time - south Idaho & east Oregon
-US	+364708-1084111	America/Shiprock	Mountain Time - Navajo
-US	+332654-1120424	America/Phoenix	Mountain Standard Time - Arizona
+US	+332654-1120424	America/Phoenix	Mountain Standard Time - Arizona (except Navajo)
 US	+340308-1181434	America/Los_Angeles	Pacific Time
+US	+550737-1313435	America/Metlakatla	Pacific Standard Time - Annette Island, Alaska
 US	+611305-1495401	America/Anchorage	Alaska Time
 US	+581807-1342511	America/Juneau	Alaska Time - Alaska panhandle
+US	+571035-1351807	America/Sitka	Alaska Time - southeast Alaska panhandle
 US	+593249-1394338	America/Yakutat	Alaska Time - Alaska panhandle neck
 US	+643004-1652423	America/Nome	Alaska Time - west Alaska
 US	+515248-1763929	America/Adak	Aleutian Islands
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/net/FILES_java.gmk openjdk-6-6b34-1.13.6/jdk/make/sun/net/FILES_java.gmk
--- openjdk-6-6b33-1.13.5/jdk/make/sun/net/FILES_java.gmk	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/net/FILES_java.gmk	2015-01-20 02:20:42.000000000 +0000
@@ -67,6 +67,9 @@
 	sun/net/www/protocol/file/Handler.java \
 	sun/net/www/protocol/file/FileURLConnection.java \
 	sun/net/www/http/HttpClient.java \
+	sun/net/www/http/HttpCapture.java \
+	sun/net/www/http/HttpCaptureInputStream.java \
+	sun/net/www/http/HttpCaptureOutputStream.java \
 	sun/net/www/http/PosterOutputStream.java \
 	sun/net/www/http/ChunkedInputStream.java \
 	sun/net/www/http/ChunkedOutputStream.java \
@@ -76,15 +79,18 @@
 	sun/net/www/http/Hurryable.java \
 	sun/net/www/protocol/http/Handler.java \
 	sun/net/www/protocol/http/HttpURLConnection.java \
+	sun/net/www/protocol/http/HttpLogFormatter.java \
 	sun/net/www/protocol/http/HttpAuthenticator.java \
 	sun/net/www/protocol/http/AuthenticationHeader.java \
 	sun/net/www/protocol/http/AuthenticationInfo.java \
 	sun/net/www/protocol/http/AuthCache.java \
 	sun/net/www/protocol/http/AuthCacheImpl.java \
 	sun/net/www/protocol/http/AuthCacheValue.java \
+	sun/net/www/protocol/http/AuthScheme.java \
 	sun/net/www/protocol/http/BasicAuthentication.java \
 	sun/net/www/protocol/http/DigestAuthentication.java \
 	sun/net/www/protocol/http/NTLMAuthentication.java \
+	sun/net/www/protocol/http/NTLMAuthenticationProxy.java \
 	sun/net/www/protocol/http/NegotiateAuthentication.java \
 	sun/net/www/protocol/http/NegotiatorImpl.java \
 	sun/net/www/protocol/http/NegotiateCallbackHandler.java \
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/security/mscapi/Makefile openjdk-6-6b34-1.13.6/jdk/make/sun/security/mscapi/Makefile
--- openjdk-6-6b33-1.13.5/jdk/make/sun/security/mscapi/Makefile	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/security/mscapi/Makefile	2015-01-20 02:17:18.000000000 +0000
@@ -59,31 +59,31 @@
 #
 # Main Targets (JDK/OPENJDK):
 #
-#     all/clobber/clean		The usual, plus the native libraries.
-#				    If OpenJDK, installs sunmscapi.jar.
-#				    If JDK, installs prebuilt
-#				    sunmscapi.jar.
-#
-#     jar			Builds/installs sunmscapi.jar
-#				    If OpenJDK, does not sign.
-#				    If JDK, tries to sign.
+#     all/clobber/clean        The usual, plus the native libraries.
+#                                  If OpenJDK, installs sunmscapi.jar.
+#                                  If JDK, installs prebuilt
+#                                      sunmscapi.jar.
+#
+#     jar                      Builds/installs sunmscapi.jar
+#                                  If OpenJDK, does not sign.
+#                                  If JDK, tries to sign.
 #
 # Other lesser-used Targets (JDK/OPENJDK):
 #
-#     build-jar			Builds sunmscapi.jar
-#				    (does not sign/install)
+#     build-jar                Builds sunmscapi.jar
+#                                  (does not sign/install)
 #
-#     install-jar		Alias for "jar" above.
+#     install-jar              Alias for "jar" above.
 #
 # Other targets (JDK only):
 #
-#     sign			Alias for sign-jar
-#	  sign-jar		Builds/signs sunmscapi.jar (no install)
+#     sign                     Alias for sign-jar
+#          sign-jar            Builds/signs sunmscapi.jar (no install)
 #
-#     release			Builds all targets in preparation
-#				for workspace integration.
+#     release                  Builds all targets in preparation
+#                              for workspace integration.
 #
-#     install-prebuilt		Installs the pre-built jar files
+#     install-prebuilt         Installs the pre-built jar files
 #
 # This makefile was written to support parallel target execution.
 #
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/sun/security/pkcs11/Makefile openjdk-6-6b34-1.13.6/jdk/make/sun/security/pkcs11/Makefile
--- openjdk-6-6b33-1.13.5/jdk/make/sun/security/pkcs11/Makefile	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/sun/security/pkcs11/Makefile	2015-01-20 02:17:18.000000000 +0000
@@ -59,31 +59,31 @@
 #
 # Main Targets (JDK/OPENJDK):
 #
-#     all/clobber/clean		The usual, plus the native libraries.
-#				    If OpenJDK, installs sunpkcs11.jar.
-#				    If JDK, installs prebuilt
-#				    sunpkcs11.jar.
-#
-#     jar			Builds/installs sunpkcs11.jar
-#				    If OpenJDK, does not sign.
-#				    If JDK, tries to sign.
+#     all/clobber/clean        The usual, plus the native libraries.
+#                                  If OpenJDK, installs sunpkcs11.jar.
+#                                  If JDK, installs prebuilt
+#                                      sunpkcs11.jar.
+#
+#     jar                      Builds/installs sunpkcs11.jar
+#                                  If OpenJDK, does not sign.
+#                                  If JDK, tries to sign.
 #
 # Other lesser-used Targets (JDK/OPENJDK):
 #
-#     build-jar			Builds sunpkcs11.jar
-#				    (does not sign/install)
+#     build-jar                Builds sunpkcs11.jar
+#                                  (does not sign/install)
 #
-#     install-jar		Alias for "jar" above.
+#     install-jar              Alias for "jar" above.
 #
 # Other targets (JDK only):
 #
-#     sign			Alias for sign-jar
-#	  sign-jar		Builds/signs sunpkcs11.jar (no install)
+#     sign                     Alias for sign-jar
+#          sign-jar            Builds/signs sunpkcs11.jar (no install)
 #
-#     release			Builds all targets in preparation
-#				for workspace integration.
+#     release                  Builds all targets in preparation
+#                              for workspace integration.
 #
-#     install-prebuilt		Installs the pre-built jar files
+#     install-prebuilt         Installs the pre-built jar files
 #
 # This makefile was written to support parallel target execution.
 #
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/tools/src/build/tools/generatecurrencydata/GenerateCurrencyData.java openjdk-6-6b34-1.13.6/jdk/make/tools/src/build/tools/generatecurrencydata/GenerateCurrencyData.java
--- openjdk-6-6b33-1.13.5/jdk/make/tools/src/build/tools/generatecurrencydata/GenerateCurrencyData.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/tools/src/build/tools/generatecurrencydata/GenerateCurrencyData.java	2015-01-20 02:17:19.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -120,7 +120,7 @@
     private static int[] specialCaseOldCurrenciesNumericCode = new int[maxSpecialCases];
     private static int[] specialCaseNewCurrenciesNumericCode = new int[maxSpecialCases];
 
-    private static final int maxOtherCurrencies = 65;
+    private static final int maxOtherCurrencies = 70;
     private static int otherCurrenciesCount = 0;
     private static StringBuffer otherCurrencies = new StringBuffer();
     private static int[] otherCurrenciesDefaultFractionDigits = new int[maxOtherCurrencies];
diff -Nru openjdk-6-6b33-1.13.5/jdk/make/tools/src/build/tools/javazic/Rule.java openjdk-6-6b34-1.13.6/jdk/make/tools/src/build/tools/javazic/Rule.java
--- openjdk-6-6b33-1.13.5/jdk/make/tools/src/build/tools/javazic/Rule.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/make/tools/src/build/tools/javazic/Rule.java	2015-01-20 02:20:42.000000000 +0000
@@ -119,7 +119,7 @@
                                                 r1.getDay(), r1.getTime().getTime());
                     long t2 = Time.getLocalTime(y, r2.getMonth(),
                                                 r2.getDay(), r2.getTime().getTime());
-                    return (int)(t1 - t2);
+                    return (t1 > t2) ? 1 : (t1 < t2) ? -1 : 0;
                 }
                 public boolean equals(Object o) {
                     return this == o;
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties	1970-01-01 00:00:00.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties	2015-01-20 02:20:42.000000000 +0000
@@ -0,0 +1,146 @@
+#
+# This properties file is used to create a PropertyResourceBundle
+# It contains Locale specific strings used be the Accessibility package.
+#
+# When this file is read in, the strings are put into the 
+# defaults table.  This is an implementation detail of the current
+# workings of Accessibility.  DO NOT DEPEND ON THIS.  
+# This may change in future versions of Accessibility as we improve 
+# localization support.
+#
+# @author  Lynn Monsanto
+
+#
+# accessible roles
+#
+alert=alerta
+awtcomponent=componente AWT
+checkbox=caixa de sele\u00e7\u00e3o
+colorchooser=seletor de cores
+columnheader=cabe\u00e7alho da coluna
+combobox=caixa de combina\u00e7\u00e3o
+canvas=tela
+desktopicon=\u00edcone da \u00e1rea de trabalho
+desktoppane=painel da \u00e1rea de trabalho
+dialog=caixa de di\u00e1logo
+directorypane=painel do diret\u00f3rio
+glasspane=painel transparente
+filechooser=seletor de arquivos
+filler=preenchimento
+frame=quadro
+internalframe=quadro interno
+label=r\u00f3tulo
+layeredpane=painel em camadas
+list=lista
+listitem=item da lista
+menubar=barra de menus
+menu=menu
+menuitem=item do menu
+optionpane=painel de op\u00e7\u00f5es
+pagetab=aba da p\u00e1gina
+pagetablist=lista de abas da p\u00e1gina
+panel=painel
+passwordtext=texto da senha
+popupmenu=menu pop-up
+progressbar=barra de progresso
+pushbutton=bot\u00e3o de a\u00e7\u00e3o
+radiobutton=bot\u00e3o de op\u00e7\u00e3o
+rootpane=painel base
+rowheader=cabe\u00e7alho da linha
+scrollbar=barra de rolagem
+scrollpane=painel de rolagem
+separator=separador
+slider=controle deslizante
+splitpane=painel dividido
+swingcomponent=componente swing
+table=tabela
+text=texto
+tree=\u00e1rvore
+togglebutton=bot\u00e3o de altern\u00e2ncia
+toolbar=barra de ferramentas
+tooltip=dica de ferramenta
+unknown=desconhecido
+viewport=janela de visualiza\u00e7\u00e3o
+window=janela
+#
+# accessible relations
+#
+labelFor=r\u00f3tulo de
+labeledBy=rotulado por
+memberOf=membro de 
+controlledBy=controlledBy
+controllerFor=controllerFor
+#
+# accessible states
+#
+active=ativo
+armed=armado
+busy=ocupado
+checked=selecionado
+collapsed=recolhido
+editable=edit\u00e1vel
+expandable=expans\u00edvel
+expanded=expandido
+enabled=habilitado
+focusable=focaliz\u00e1vel
+focused=focalizado
+iconified=iconizado
+modal=modal
+multiline=v\u00e1rias linhas
+multiselectable=m\u00faltipla escolha
+opaque=opaco
+pressed=pressionado
+resizable=redimension\u00e1vel
+selectable=selecion\u00e1vel
+selected=selecionado
+showing=exibindo
+singleline=linha \u00fanica
+transient=transit\u00f3rio
+visible=vis\u00edvel
+vertical=vertical
+horizontal=horizontal
+#
+# accessible actions
+#
+toggle expandir=alternar expandir
+
+# new relations, roles and states for J2SE 1.5.0
+
+# 
+# accessible relations
+#
+flowsTo=fluxos para
+flowsFrom=fluxos de
+subwindowOf=subjanela de
+parentWindowOf=janela pai de
+embeds=integra
+embeddedBy=integrado por
+childNodeOf=n\u00f3 filho de
+
+#
+# accessible roles
+#
+header=cabe\u00e7alho
+footer=rodap\u00e9
+paragraph=par\u00e1grafo
+ruler=r\u00e9gua
+editbar=barra de edi\u00e7\u00e3o
+progressMonitor=monitor de progresso
+
+#
+# accessible states
+#
+managesDescendants=gerencia descendentes
+indeterminate=indeterminado
+truncated=truncado
+
+# new for J2SE 1.6.0
+
+#
+# accessible roles
+#
+htmlcontainer=cont\u00eainer HTML
+
+#
+# END OF MATERIAL TO LOCALIZE
+#
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/beans/WeakCache.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/beans/WeakCache.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/beans/WeakCache.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/beans/WeakCache.java	2015-01-20 02:20:42.000000000 +0000
@@ -1,12 +1,12 @@
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Sun designates this
+ * published by the Free Software Foundation.  Oracle designates this
  * particular file as subject to the "Classpath" exception as provided
- * by Sun in the LICENSE file that accompanied this code.
+ * by Oracle in the LICENSE file that accompanied this code.
  *
  * This code is distributed in the hope that it will be useful, but WITHOUT
  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
@@ -18,9 +18,9 @@
  * 2 along with this work; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
  */
 package com.sun.beans;
 
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/AESCipher.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/AESCipher.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/AESCipher.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/AESCipher.java	2015-01-20 02:17:28.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -56,12 +56,8 @@
     /**
      * Creates an instance of AES cipher with default ECB mode and
      * PKCS5Padding.
-     *
-     * @exception SecurityException if this constructor fails to verify
-     * its own integrity
      */
     public AESCipher() {
-        SunJCE.ensureIntegrity(getClass());
         core = new CipherCore(new AESCrypt(), AESConstants.AES_BLOCK_SIZE);
     }
 
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/AESKeyGenerator.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/AESKeyGenerator.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/AESKeyGenerator.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/AESKeyGenerator.java	2015-01-20 02:17:28.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,16 +48,9 @@
     private int keySize = 16; // default keysize (in number of bytes)
 
     /**
-     * Verify the SunJCE provider in the constructor.
-     *
-     * @exception SecurityException if fails to verify
-     * its own integrity
+     * Empty constructor.
      */
     public AESKeyGenerator() {
-        if (!SunJCE.verifySelfIntegrity(this.getClass())) {
-            throw new SecurityException("The SunJCE provider may have " +
-                                        "been tampered.");
-        }
     }
 
     /**
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/AESWrapCipher.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/AESWrapCipher.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/AESWrapCipher.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/AESWrapCipher.java	2015-01-20 02:17:28.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -65,12 +65,8 @@
     /**
      * Creates an instance of AES KeyWrap cipher with default
      * mode, i.e. "ECB" and padding scheme, i.e. "NoPadding".
-     *
-     * @exception SecurityException if this constructor fails to verify
-     * its own integrity
      */
     public AESWrapCipher() {
-        SunJCE.ensureIntegrity(getClass());
         cipher = new AESCrypt();
     }
 
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/ARCFOURCipher.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/ARCFOURCipher.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/ARCFOURCipher.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/ARCFOURCipher.java	2015-01-20 02:17:28.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -62,7 +62,6 @@
 
     // called by the JCE framework
     public ARCFOURCipher() {
-        SunJCE.ensureIntegrity(getClass());
         S = new int[256];
     }
 
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/BlowfishCipher.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/BlowfishCipher.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/BlowfishCipher.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/BlowfishCipher.java	2015-01-20 02:17:28.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -60,12 +60,8 @@
     /**
      * Creates an instance of Blowfish cipher with default ECB mode and
      * PKCS5Padding.
-     *
-     * @exception SecurityException if this constructor fails to verify
-     * its own integrity
      */
     public BlowfishCipher() {
-        SunJCE.ensureIntegrity(getClass());
         core = new CipherCore(new BlowfishCrypt(),
                               BlowfishConstants.BLOWFISH_BLOCK_SIZE);
     }
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/BlowfishKeyGenerator.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/BlowfishKeyGenerator.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/BlowfishKeyGenerator.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/BlowfishKeyGenerator.java	2015-01-20 02:17:28.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -46,16 +46,9 @@
     private int keysize = 16; // default keysize (in number of bytes)
 
     /**
-     * Verify the SunJCE provider in the constructor.
-     *
-     * @exception SecurityException if fails to verify
-     * its own integrity
+     * Empty constructor
      */
     public BlowfishKeyGenerator() {
-        if (!SunJCE.verifySelfIntegrity(this.getClass())) {
-            throw new SecurityException("The SunJCE provider may have " +
-                                        "been tampered.");
-        }
     }
 
     /**
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DESCipher.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DESCipher.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DESCipher.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DESCipher.java	2015-01-20 02:17:28.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -56,12 +56,8 @@
     /**
      * Creates an instance of DES cipher with default ECB mode and
      * PKCS5Padding.
-     *
-     * @exception SecurityException if this constructor fails to verify
-     * its own integrity
      */
     public DESCipher() {
-        SunJCE.ensureIntegrity(getClass());
         core = new CipherCore(new DESCrypt(), DESConstants.DES_BLOCK_SIZE);
     }
 
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DESedeCipher.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DESedeCipher.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DESedeCipher.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DESedeCipher.java	2015-01-20 02:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -53,12 +53,8 @@
     /**
      * Creates an instance of DESede cipher with default ECB mode and
      * PKCS5Padding.
-     *
-     * @exception SecurityException if this constructor fails to verify
-     * its own integrity
      */
     public DESedeCipher() {
-        SunJCE.ensureIntegrity(getClass());
         core = new CipherCore(new DESedeCrypt(), DESConstants.DES_BLOCK_SIZE);
     }
 
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DESedeKeyFactory.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DESedeKeyFactory.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DESedeKeyFactory.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DESedeKeyFactory.java	2015-01-20 02:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -42,16 +42,9 @@
 public final class DESedeKeyFactory extends SecretKeyFactorySpi {
 
     /**
-     * Verify the SunJCE provider in the constructor.
-     *
-     * @exception SecurityException if fails to verify
-     * its own integrity
+     * Empty constructor
      */
     public DESedeKeyFactory() {
-        if (!SunJCE.verifySelfIntegrity(this.getClass())) {
-            throw new SecurityException("The SunJCE provider may have been " +
-                                        "tampered.");
-        }
     }
 
     /**
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DESedeKeyGenerator.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DESedeKeyGenerator.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DESedeKeyGenerator.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DESedeKeyGenerator.java	2015-01-20 02:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,16 +47,9 @@
     private int keysize = 168;
 
     /**
-     * Verify the SunJCE provider in the constructor.
-     *
-     * @exception SecurityException if fails to verify
-     * its own integrity
+     * Empty constructor
      */
     public DESedeKeyGenerator() {
-        if (!SunJCE.verifySelfIntegrity(this.getClass())) {
-            throw new SecurityException("The SunJCE provider may have been " +
-                                        "tampered.");
-        }
     }
 
     /**
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DESedeWrapCipher.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DESedeWrapCipher.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DESedeWrapCipher.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DESedeWrapCipher.java	2015-01-20 02:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -74,12 +74,8 @@
     /**
      * Creates an instance of CMS DESede KeyWrap cipher with default
      * mode, i.e. "CBC" and padding scheme, i.e. "NoPadding".
-     *
-     * @exception SecurityException if this constructor fails to verify
-     * its own integrity.
      */
     public DESedeWrapCipher() {
-        SunJCE.ensureIntegrity(getClass());
         cipher = new CipherBlockChaining(new DESedeCrypt());
     }
 
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DESKeyFactory.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DESKeyFactory.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DESKeyFactory.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DESKeyFactory.java	2015-01-20 02:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -42,17 +42,11 @@
 public final class DESKeyFactory extends SecretKeyFactorySpi {
 
     /**
-     * Verify the SunJCE provider in the constructor.
-     *
-     * @exception SecurityException if fails to verify
-     * its own integrity
+     * Empty constructor
      */
     public DESKeyFactory() {
-        if (!SunJCE.verifySelfIntegrity(this.getClass())) {
-            throw new SecurityException("The SunJCE provider may have " +
-                                        "been tampered.");
-        }
     }
+
     /**
      * Generates a SecretKey object from the provided key
      * specification (key material).
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DESKeyGenerator.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DESKeyGenerator.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DESKeyGenerator.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DESKeyGenerator.java	2015-01-20 02:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -46,16 +46,9 @@
     private SecureRandom random = null;
 
     /**
-     * Verify the SunJCE provider in the constructor.
-     *
-     * @exception SecurityException if fails to verify
-     * its own integrity
+     * Empty constructor
      */
     public DESKeyGenerator() {
-        if (!SunJCE.verifySelfIntegrity(this.getClass())) {
-            throw new SecurityException("The SunJCE provider may have " +
-                                        "been tampered.");
-        }
     }
 
     /**
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DHKeyAgreement.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DHKeyAgreement.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DHKeyAgreement.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DHKeyAgreement.java	2015-01-20 02:17:29.000000000 +0000
@@ -59,16 +59,9 @@
     private BigInteger y = BigInteger.ZERO;
 
     /**
-     * Verify the SunJCE provider in the constructor.
-     *
-     * @exception SecurityException if fails to verify
-     * its own integrity
+     * Empty constructor
      */
     public DHKeyAgreement() {
-        if (!SunJCE.verifySelfIntegrity(this.getClass())) {
-            throw new SecurityException("The SunJCE provider may have been " +
-                                        "tampered.");
-        }
     }
 
     /**
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DHKeyFactory.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DHKeyFactory.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/DHKeyFactory.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/DHKeyFactory.java	2015-01-20 02:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,16 +49,9 @@
 public final class DHKeyFactory extends KeyFactorySpi {
 
     /**
-     * Verify the SunJCE provider in the constructor.
-     *
-     * @exception SecurityException if fails to verify
-     * its own integrity
+     * Empty constructor
      */
     public DHKeyFactory() {
-        if (!SunJCE.verifySelfIntegrity(this.getClass())) {
-            throw new SecurityException("The SunJCE provider may have " +
-                                        "been tampered.");
-        }
     }
 
     /**
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/HmacCore.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/HmacCore.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/HmacCore.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/HmacCore.java	2015-01-20 02:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -241,7 +241,6 @@
     public static final class HmacSHA256 extends MacSpi implements Cloneable {
         private final HmacCore core;
         public HmacSHA256() throws NoSuchAlgorithmException {
-            SunJCE.ensureIntegrity(getClass());
             core = new HmacCore("SHA-256", 64);
         }
         private HmacSHA256(HmacSHA256 base) throws CloneNotSupportedException {
@@ -278,7 +277,6 @@
     public static final class HmacSHA384 extends MacSpi implements Cloneable {
         private final HmacCore core;
         public HmacSHA384() throws NoSuchAlgorithmException {
-            SunJCE.ensureIntegrity(getClass());
             core = new HmacCore("SHA-384", 128);
         }
         private HmacSHA384(HmacSHA384 base) throws CloneNotSupportedException {
@@ -315,7 +313,6 @@
     public static final class HmacSHA512 extends MacSpi implements Cloneable {
         private final HmacCore core;
         public HmacSHA512() throws NoSuchAlgorithmException {
-            SunJCE.ensureIntegrity(getClass());
             core = new HmacCore("SHA-512", 128);
         }
         private HmacSHA512(HmacSHA512 base) throws CloneNotSupportedException {
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5.java	2015-01-20 02:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -44,16 +44,8 @@
 
     /**
      * Standard constructor, creates a new HmacMD5 instance.
-     * Verify the SunJCE provider in the constructor.
-     *
-     * @exception SecurityException if fails to verify
-     * its own integrity
      */
     public HmacMD5() throws NoSuchAlgorithmException {
-        if (!SunJCE.verifySelfIntegrity(this.getClass())) {
-            throw new SecurityException("The SunJCE provider may have " +
-                                        "been tampered.");
-        }
         hmac = new HmacCore(MessageDigest.getInstance("MD5"),
                             MD5_BLOCK_LENGTH);
     }
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5KeyGenerator.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5KeyGenerator.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5KeyGenerator.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5KeyGenerator.java	2015-01-20 02:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -46,16 +46,9 @@
     private int keysize = 64; // default keysize (in number of bytes)
 
     /**
-     * Verify the SunJCE provider in the constructor.
-     *
-     * @exception SecurityException if fails to verify
-     * its own integrity
+     * Empty constructor
      */
     public HmacMD5KeyGenerator() {
-        if (!SunJCE.verifySelfIntegrity(this.getClass())) {
-            throw new SecurityException("The SunJCE provider may have " +
-                                        "been tampered.");
-        }
     }
 
     /**
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/HmacPKCS12PBESHA1.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/HmacPKCS12PBESHA1.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/HmacPKCS12PBESHA1.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/HmacPKCS12PBESHA1.java	2015-01-20 02:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,13 +48,8 @@
 
     /**
      * Standard constructor, creates a new HmacSHA1 instance.
-     * Verify the SunJCE provider in the constructor.
-     *
-     * @exception SecurityException if fails to verify
-     * its own integrity
      */
     public HmacPKCS12PBESHA1() throws NoSuchAlgorithmException {
-        SunJCE.ensureIntegrity(this.getClass());
         this.hmac = new HmacCore(MessageDigest.getInstance("SHA1"),
                                  SHA1_BLOCK_LENGTH);
     }
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1.java	2015-01-20 02:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -44,16 +44,8 @@
 
     /**
      * Standard constructor, creates a new HmacSHA1 instance.
-     * Verify the SunJCE provider in the constructor.
-     *
-     * @exception SecurityException if fails to verify
-     * its own integrity
      */
     public HmacSHA1() throws NoSuchAlgorithmException {
-        if (!SunJCE.verifySelfIntegrity(this.getClass())) {
-            throw new SecurityException("The SunJCE provider may have " +
-                                        "been tampered.");
-        }
         this.hmac = new HmacCore(MessageDigest.getInstance("SHA1"),
                                  SHA1_BLOCK_LENGTH);
     }
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1KeyGenerator.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1KeyGenerator.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1KeyGenerator.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1KeyGenerator.java	2015-01-20 02:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -46,16 +46,9 @@
     private int keysize = 64; // default keysize (in number of bytes)
 
     /**
-     * Verify the SunJCE provider in the constructor.
-     *
-     * @exception SecurityException if fails to verify
-     * its own integrity
+     * Empty constructor
      */
     public HmacSHA1KeyGenerator() {
-        if (!SunJCE.verifySelfIntegrity(this.getClass())) {
-            throw new SecurityException("The SunJCE provider may have " +
-                                        "been tampered.");
-        }
     }
 
     /**
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/JarVerifier.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/JarVerifier.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/JarVerifier.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/JarVerifier.java	1970-01-01 00:00:00.000000000 +0000
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.crypto.provider;
-
-// NOTE: this class is duplicated amongst SunJCE, SunPKCS11, and SunMSCAPI.
-// All files should be kept in sync.
-
-import java.io.*;
-import java.util.*;
-import java.util.jar.*;
-import java.net.URL;
-import java.net.JarURLConnection;
-import java.net.MalformedURLException;
-
-import java.security.*;
-import java.security.cert.*;
-import java.security.cert.Certificate;
-
-/**
- * This class verifies JAR files (and any supporting JAR files), and
- * determines whether they may be used in this implementation.
- *
- * The JCE in OpenJDK has an open cryptographic interface, meaning it
- * does not restrict which providers can be used.  Compliance with
- * United States export controls and with local law governing the
- * import/export of products incorporating the JCE in the OpenJDK is
- * the responsibility of the licensee.
- *
- * @since 1.7
- */
-final class JarVerifier {
-
-    private static final boolean debug = false;
-
-    /**
-     * Verify the JAR file is signed by an entity which has a certificate
-     * issued by a trusted CA.
-     *
-     * Note: this is a temporary method and will change soon to use the
-     * exception chaining mechanism, which can provide more details
-     * as to why the verification failed.
-     *
-     * @param c the class to be verified.
-     * @return true if verification is successful.
-     */
-    static boolean verify(final Class c) {
-        return true;
-    }
-}
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/KeyGeneratorCore.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/KeyGeneratorCore.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/KeyGeneratorCore.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/KeyGeneratorCore.java	2015-01-20 02:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -109,7 +109,6 @@
     public static final class HmacSHA256KG extends KeyGeneratorSpi {
         private final KeyGeneratorCore core;
         public HmacSHA256KG() {
-            SunJCE.ensureIntegrity(getClass());
             core = new KeyGeneratorCore("HmacSHA256", 256);
         }
         protected void engineInit(SecureRandom random) {
@@ -131,7 +130,6 @@
     public static final class HmacSHA384KG extends KeyGeneratorSpi {
         private final KeyGeneratorCore core;
         public HmacSHA384KG() {
-            SunJCE.ensureIntegrity(getClass());
             core = new KeyGeneratorCore("HmacSHA384", 384);
         }
         protected void engineInit(SecureRandom random) {
@@ -153,7 +151,6 @@
     public static final class HmacSHA512KG extends KeyGeneratorSpi {
         private final KeyGeneratorCore core;
         public HmacSHA512KG() {
-            SunJCE.ensureIntegrity(getClass());
             core = new KeyGeneratorCore("HmacSHA512", 512);
         }
         protected void engineInit(SecureRandom random) {
@@ -175,7 +172,6 @@
     public static final class RC2KeyGenerator extends KeyGeneratorSpi {
         private final KeyGeneratorCore core;
         public RC2KeyGenerator() {
-            SunJCE.ensureIntegrity(getClass());
             core = new KeyGeneratorCore("RC2", 128);
         }
         protected void engineInit(SecureRandom random) {
@@ -201,7 +197,6 @@
     public static final class ARCFOURKeyGenerator extends KeyGeneratorSpi {
         private final KeyGeneratorCore core;
         public ARCFOURKeyGenerator() {
-            SunJCE.ensureIntegrity(getClass());
             core = new KeyGeneratorCore("ARCFOUR", 128);
         }
         protected void engineInit(SecureRandom random) {
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/PBEKeyFactory.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/PBEKeyFactory.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/PBEKeyFactory.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/PBEKeyFactory.java	2015-01-20 02:17:30.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,16 +49,9 @@
     private static HashSet validTypes;
 
     /**
-     * Verify the SunJCE provider in the constructor.
-     *
-     * @exception SecurityException if fails to verify
-     * its own integrity
+     * Simple constructor
      */
     private PBEKeyFactory(String keytype) {
-        if (!SunJCE.verifySelfIntegrity(this.getClass())) {
-            throw new SecurityException("The SunJCE provider may have " +
-                                        "been tampered.");
-        }
         type = keytype;
     }
 
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/PBEWithMD5AndDESCipher.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/PBEWithMD5AndDESCipher.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/PBEWithMD5AndDESCipher.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/PBEWithMD5AndDESCipher.java	2015-01-20 02:17:30.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -55,16 +55,9 @@
      * unavailable
      * @exception NoSuchPaddingException if the required padding mechanism
      * (PKCS5Padding) is unavailable
-     *
-     * @exception SecurityException if this constructor fails to verify
-     * its own integrity
      */
     public PBEWithMD5AndDESCipher()
         throws NoSuchAlgorithmException, NoSuchPaddingException {
-        if (!SunJCE.verifySelfIntegrity(this.getClass())) {
-            throw new SecurityException("The SunJCE provider may have " +
-                                        "been tampered.");
-        }
         core = new PBECipherCore("DES");
     }
 
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/PBEWithMD5AndTripleDESCipher.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/PBEWithMD5AndTripleDESCipher.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/PBEWithMD5AndTripleDESCipher.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/PBEWithMD5AndTripleDESCipher.java	2015-01-20 02:17:30.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -61,23 +61,14 @@
      * Creates an instance of this cipher, and initializes its mode (CBC) and
      * padding (PKCS5).
      *
-     * Verify the SunJCE provider in the constructor.
-     *
      * @exception NoSuchAlgorithmException if the required cipher mode (CBC) is
      * unavailable
      * @exception NoSuchPaddingException if the required padding mechanism
      * (PKCS5Padding) is unavailable
-     * @exception SecurityException if fails to verify
-     * its own integrity
      */
     public PBEWithMD5AndTripleDESCipher()
         throws NoSuchAlgorithmException, NoSuchPaddingException
     {
-        if (!SunJCE.verifySelfIntegrity(this.getClass())) {
-            throw new SecurityException("The SunJCE provider may have " +
-                                        "been tampered.");
-        }
-
         // set the encapsulated cipher to do triple DES
         core = new PBECipherCore("DESede");
     }
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/PBKDF2HmacSHA1Factory.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/PBKDF2HmacSHA1Factory.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/PBKDF2HmacSHA1Factory.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/PBKDF2HmacSHA1Factory.java	2015-01-20 02:17:30.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -45,16 +45,9 @@
 public final class PBKDF2HmacSHA1Factory extends SecretKeyFactorySpi {
 
     /**
-     * Verify the SunJCE provider in the constructor.
-     *
-     * @exception SecurityException if fails to verify
-     * its own integrity
+     * Empty constructor
      */
     public PBKDF2HmacSHA1Factory() {
-        if (!SunJCE.verifySelfIntegrity(this.getClass())) {
-            throw new SecurityException("The SunJCE provider may have " +
-                                        "been tampered.");
-        }
     }
 
     /**
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/PKCS12PBECipherCore.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/PKCS12PBECipherCore.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/PKCS12PBECipherCore.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/PKCS12PBECipherCore.java	2015-01-20 02:17:30.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -370,7 +370,6 @@
     public static final class PBEWithSHA1AndDESede extends CipherSpi {
         private final PKCS12PBECipherCore core;
         public PBEWithSHA1AndDESede() throws NoSuchAlgorithmException {
-            SunJCE.ensureIntegrity(this.getClass());
             core = new PKCS12PBECipherCore("DESede", 24);
         }
         protected byte[] engineDoFinal(byte[] in, int inOff, int inLen)
@@ -446,7 +445,6 @@
     public static final class PBEWithSHA1AndRC2_40 extends CipherSpi {
         private final PKCS12PBECipherCore core;
         public PBEWithSHA1AndRC2_40() throws NoSuchAlgorithmException {
-            SunJCE.ensureIntegrity(this.getClass());
             core = new PKCS12PBECipherCore("RC2", 5);
         }
         protected byte[] engineDoFinal(byte[] in, int inOff, int inLen)
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/RC2Cipher.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/RC2Cipher.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/RC2Cipher.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/RC2Cipher.java	2015-01-20 02:17:30.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -45,7 +45,6 @@
     private final RC2Crypt embeddedCipher;
 
     public RC2Cipher() {
-        SunJCE.ensureIntegrity(getClass());
         embeddedCipher = new RC2Crypt();
         core = new CipherCore(embeddedCipher, 8);
     }
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/RSACipher.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/RSACipher.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/RSACipher.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/RSACipher.java	2015-01-20 02:17:30.000000000 +0000
@@ -116,7 +116,6 @@
     private SecureRandom random;
 
     public RSACipher() {
-        SunJCE.ensureIntegrity(getClass());
         paddingType = PAD_PKCS1;
     }
 
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/SslMacCore.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/SslMacCore.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/SslMacCore.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/SslMacCore.java	2015-01-20 02:17:30.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -226,9 +226,6 @@
 
         static final byte[] md5Pad1 = genPad((byte)0x36, 48);
         static final byte[] md5Pad2 = genPad((byte)0x5c, 48);
-        static {
-            SunJCE.ensureIntegrity(SslMacMD5.class);
-        }
     }
 
     // nested static class for the SslMacMD5 implementation
@@ -262,9 +259,6 @@
 
         static final byte[] shaPad1 = genPad((byte)0x36, 40);
         static final byte[] shaPad2 = genPad((byte)0x5c, 40);
-        static {
-            SunJCE.ensureIntegrity(SslMacSHA1.class);
-        }
     }
 
 }
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java	2015-01-20 02:17:30.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -93,10 +93,6 @@
 
     static final SecureRandom RANDOM = new SecureRandom();
 
-    // After the SunJCE passed self-integrity checking,
-    // verifiedSelfIntegrity will be set to true.
-    private static boolean verifiedSelfIntegrity = false;
-
     public SunJCE() {
         /* We are the "SunJCE" provider */
         super("SunJCE", 1.7d, info);
@@ -441,21 +437,4 @@
             }
         });
     }
-
-    // set to true once self verification is complete
-    private static volatile boolean integrityVerified;
-
-    static void ensureIntegrity(Class c) {
-        if (verifySelfIntegrity(c) == false) {
-            throw new SecurityException("The SunJCE provider may have " +
-                                        "been tampered.");
-        }
-    }
-
-    static final boolean verifySelfIntegrity(Class c) {
-        if (verifiedSelfIntegrity) {
-            return true;
-        }
-        return (integrityVerified = JarVerifier.verify(c));
-    }
 }
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/TlsKeyMaterialGenerator.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/TlsKeyMaterialGenerator.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/TlsKeyMaterialGenerator.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/TlsKeyMaterialGenerator.java	2015-01-20 02:17:30.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -52,7 +52,6 @@
     private int protocolVersion;
 
     public TlsKeyMaterialGenerator() {
-        SunJCE.ensureIntegrity(getClass());
     }
 
     protected void engineInit(SecureRandom random) {
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/TlsMasterSecretGenerator.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/TlsMasterSecretGenerator.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/TlsMasterSecretGenerator.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/TlsMasterSecretGenerator.java	2015-01-20 02:17:30.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -51,7 +51,6 @@
     private int protocolVersion;
 
     public TlsMasterSecretGenerator() {
-        SunJCE.ensureIntegrity(getClass());
     }
 
     protected void engineInit(SecureRandom random) {
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/TlsPrfGenerator.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/TlsPrfGenerator.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/TlsPrfGenerator.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/TlsPrfGenerator.java	2015-01-20 02:17:30.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -109,7 +109,6 @@
     private TlsPrfParameterSpec spec;
 
     public TlsPrfGenerator() {
-        SunJCE.ensureIntegrity(getClass());
     }
 
     protected void engineInit(SecureRandom random) {
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/TlsRsaPremasterSecretGenerator.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/TlsRsaPremasterSecretGenerator.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/crypto/provider/TlsRsaPremasterSecretGenerator.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/crypto/provider/TlsRsaPremasterSecretGenerator.java	2015-01-20 02:17:30.000000000 +0000
@@ -48,7 +48,6 @@
     private SecureRandom random;
 
     public TlsRsaPremasterSecretGenerator() {
-        SunJCE.ensureIntegrity(getClass());
     }
 
     protected void engineInit(SecureRandom random) {
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/resources/gtk_pt_BR.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/resources/gtk_pt_BR.properties
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/resources/gtk_pt_BR.properties	1970-01-01 00:00:00.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/resources/gtk_pt_BR.properties	2015-01-20 02:20:42.000000000 +0000
@@ -0,0 +1,81 @@
+# Refer to the note in basic.properties for a description as to what
+# the mnemonics correspond to and how to calculate them.
+
+
+
+# GTK specific properties
+
+# GTK color chooser properties:
+GTKColorChooserPanel.nameText=Seletor de cores do GTK
+# mnemonic as a VK_ constant
+GTKColorChooserPanel.mnemonic=71
+# Can also define GTKColorChooserPanel.dispalyedMnemonicIndex if you
+# want an index other than would normally be underlined by
+# GTKColorChooserPanel.mnemonic to be underlined. This is only useful
+# if GTKColorChooserPanel.nameText defines the mnemonic character more
+# than once and you want a character other than the first underlined.
+
+# Text and mnemonics for the spinner. You can also defined a different
+# index for the mnemonic via xxxMnemonicIndex, for example
+# GTKColorChooserPanel.hueMnemonicIndex=1 would indicate the second
+# character of GTKColorChooserPanel.hueText should be underlined to
+# represent the mnemonic.
+GTKColorChooserPanel.hueText=Matiz:
+GTKColorChooserPanel.hueMnemonic=72
+
+GTKColorChooserPanel.redText=Vermelho:
+GTKColorChooserPanel.redMnemonic=69
+
+GTKColorChooserPanel.saturationText=Satura\u00e7\u00e3o:
+GTKColorChooserPanel.saturationMnemonic=83
+
+GTKColorChooserPanel.greenText=Verde:
+GTKColorChooserPanel.greenMnemonic=71
+
+GTKColorChooserPanel.valueText=Valor:
+GTKColorChooserPanel.valueMnemonic=86
+
+GTKColorChooserPanel.blueText=Azul:
+GTKColorChooserPanel.blueMnemonic=66
+
+GTKColorChooserPanel.colorNameText=Nome da cor:
+GTKColorChooserPanel.colorNameMnemonic=78
+
+
+
+############ FILE CHOOSER STRINGS #############
+
+FileChooser.acceptAllFileFilterText=Todos os arquivos
+FileChooser.newFolderButtonText=Nova pasta
+FileChooser.newFolderButtonMnemonic=78
+FileChooser.newFolderDialogText=Nome da pasta:
+FileChooser.deleteFileButtonText=Excluir arquivo
+FileChooser.deleteFileButtonMnemonic=76
+FileChooser.renameFileButtonText=Renomear arquivo
+FileChooser.renameFileButtonMnemonic=82
+FileChooser.cancelButtonText=Cancelar
+FileChooser.cancelButtonMnemonic=67
+FileChooser.saveButtonText=OK
+FileChooser.saveButtonMnemonic=79
+FileChooser.openButtonText=OK
+FileChooser.openButtonMnemonic=79
+FileChooser.saveDialogTitleText=Salvar
+FileChooser.openDialogTitleText=Abrir
+FileChooser.pathLabelText=Sele\u00e7\u00e3o:
+FileChooser.filterLabelText=Filtro:
+FileChooser.pathLabelMnemonic=83
+FileChooser.foldersLabelText=Pastas
+FileChooser.foldersLabelMnemonic=68
+FileChooser.filesLabelText=Arquivos
+FileChooser.filesLabelMnemonic=70
+
+FileChooser.cancelButtonToolTipText=Anular caixa de di\u00e1logo do seletor de arquivos.
+FileChooser.saveButtonToolTipText=Salvar arquivo selecionado.
+FileChooser.openButtonToolTipText=Abrir arquivo selecionado.
+
+FileChooser.renameFileDialogText=Renomear arquivo "{0}" por
+FileChooser.renameFileErrorTitle=Erro 
+FileChooser.renameFileErrorText=Erro ao renomear o arquivo "{0}" por "{1}"
+
+OptionPane.okButtonMnemonic=79
+OptionPane.cancelButtonMnemonic=67
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_pt_BR.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_pt_BR.properties
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_pt_BR.properties	1970-01-01 00:00:00.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_pt_BR.properties	2015-01-20 02:20:42.000000000 +0000
@@ -0,0 +1,39 @@
+# This properties file is used to create a PropertyResourceBundle
+# It contains Locale specific strings used be the Motif Look and Feel.
+# Currently, the following components need this for support:
+#
+#    FileChooser
+#
+# When this file is read in, the strings are put into the 
+# defaults table.  This is an implementation detail of the current
+# workings of Swing.  DO NOT DEPEND ON THIS.  
+# This may change in future versions of Swing as we improve localization 
+# support.
+#
+# Refer to the note in basic.properties for a description as to what
+# the mnemonics correspond to and how to calculate them.
+#
+# @author Steve Wilson
+
+
+############ FILE CHOOSER STRINGS #############
+
+FileChooser.acceptAllFileFilterText=*
+FileChooser.cancelButtonText=Cancelar
+FileChooser.saveButtonText=Salvar
+FileChooser.openButtonText=OK
+FileChooser.saveDialogTitleText=Salvar
+FileChooser.openDialogTitleText=Abrir
+FileChooser.updateButtonText=Atualizar
+FileChooser.helpButtonText=Ajuda
+FileChooser.pathLabelText=Inserir caminho ou nome da pasta:
+FileChooser.filterLabelText=Filtro
+FileChooser.foldersLabelText=Pastas
+FileChooser.filesLabelText=Arquivos
+FileChooser.enterFileNameLabelText=Inserir nome de arquivo:
+
+FileChooser.cancelButtonToolTipText=Anular caixa de di\u00e1logo do seletor de arquivos.
+FileChooser.saveButtonToolTipText=Salvar arquivo selecionado.
+FileChooser.openButtonToolTipText=Abrir arquivo selecionado.
+FileChooser.updateButtonToolTipText=Atualizar lista de diret\u00f3rios.
+FileChooser.helpButtonToolTipText=Ajuda do FileChooser.
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_pt_BR.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_pt_BR.properties
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_pt_BR.properties	1970-01-01 00:00:00.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_pt_BR.properties	2015-01-20 02:20:42.000000000 +0000
@@ -0,0 +1,44 @@
+# This properties file is used to create a PropertyResourceBundle
+# It contains Locale specific strings used be the Windows Look and Feel.
+# Currently, the following components need this for support:
+#
+#    FileChooser
+#
+# When this file is read in, the strings are put into the 
+# defaults table.  This is an implementation detail of the current
+# workings of Swing.  DO NOT DEPEND ON THIS.  
+# This may change in future versions of Swing as we improve localization 
+# support.
+#
+# Refer to the note in basic.properties for a description as to what
+# the mnemonics correspond to and how to calculate them.
+#
+# @author Steve Wilson
+
+
+############ FILE CHOOSER STRINGS #############
+
+FileChooser.lookInLabelText=Consultar em:
+FileChooser.saveInLabelText=Salvar em:
+FileChooser.fileNameLabelText=Nome de arquivo:
+FileChooser.filesOfTypeLabelText=Arquivos de tipo:
+FileChooser.upFolderToolTipText=Um n\u00edvel acima
+FileChooser.upFolderAccessibleName=Acima
+FileChooser.homeFolderToolTipText=In\u00edcio
+FileChooser.homeFolderAccessibleName=In\u00edcio
+FileChooser.newFolderToolTipText=Criar nova pasta
+FileChooser.newFolderAccessibleName=Nova pasta
+FileChooser.newFolderActionLabelText=Nova pasta
+FileChooser.listViewButtonToolTipText=Lista
+FileChooser.listViewButtonAccessibleName=Lista
+FileChooser.listViewActionLabelText=Lista
+FileChooser.detailsViewButtonToolTipText=Detalhes
+FileChooser.detailsViewButtonAccessibleName=Detalhes
+FileChooser.detailsViewActionLabelText=Detalhes
+FileChooser.refreshActionLabelText=Atualizar
+FileChooser.viewMenuLabelText=Exibir
+FileChooser.fileNameHeaderText=Nome
+FileChooser.fileSizeHeaderText=Tamanho
+FileChooser.fileTypeHeaderText=Tipo
+FileChooser.fileDateHeaderText=Modificado
+FileChooser.fileAttrHeaderText=Atributos
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java	2015-01-20 02:20:42.000000000 +0000
@@ -1165,16 +1165,9 @@
 
             directories.clear();
 
-            File[] baseFolders;
-            if (useShellFolder) {
-                baseFolders = AccessController.doPrivileged(new PrivilegedAction() {
-                    public File[] run() {
-                        return (File[]) ShellFolder.get("fileChooserComboBoxFolders");
-                    }
-                });
-            } else {
-                baseFolders = fsv.getRoots();
-            }
+            File[] baseFolders = (useShellFolder)
+                    ? (File[]) ShellFolder.get("fileChooserComboBoxFolders")
+                    : fsv.getRoots();
             directories.addAll(Arrays.asList(baseFolders));
 
             // Get the canonical (full) path. This has the side
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/jndi/ldap/BerDecoder.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/jndi/ldap/BerDecoder.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/jndi/ldap/BerDecoder.java	2014-10-08 15:35:09.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/jndi/ldap/BerDecoder.java	2015-01-20 02:20:42.000000000 +0000
@@ -95,6 +95,9 @@
             for( int i = 0; i < lengthbyte; i++) {
                 retval = (retval << 8) + (buf[offset++] & 0xff);
             }
+            if (retval < 0) {
+                throw new DecodeException("Invalid length bytes");
+            }
             return retval;
         } else {
             return lengthbyte;
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_pt_BR.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_pt_BR.properties
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_pt_BR.properties	1970-01-01 00:00:00.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_pt_BR.properties	2015-01-20 02:20:42.000000000 +0000
@@ -0,0 +1,170 @@
+#
+# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.  Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# CacheRowSetImpl exceptions
+cachedrowsetimpl.populate = Objeto ResultSet inv\u00e1lido fornecido para preencher o m\u00e9todo
+cachedrowsetimpl.invalidp = Fornecedor de persist\u00eancias inv\u00e1lido gerado
+cachedrowsetimpl.nullhash = N\u00e3o \u00e9 poss\u00edvel instanciar a inst\u00e2ncia CachedRowSetImpl. Hashtable nulo fornecido ao construtor
+cachedrowsetimpl.invalidop = Opera\u00e7\u00e3o inv\u00e1lida durante a inser\u00e7\u00e3o de linha
+cachedrowsetimpl.accfailed = acceptChanges falho
+cachedrowsetimpl.invalidcp = Posi\u00e7\u00e3o inv\u00e1lida do cursor
+cachedrowsetimpl.illegalop = Opera\u00e7\u00e3o ilegal em linha n\u00e3o inserida
+cachedrowsetimpl.clonefail = Clone falho: {0}
+cachedrowsetimpl.invalidcol = \u00cdndice de coluna inv\u00e1lido
+cachedrowsetimpl.invalcolnm = Nome de coluna inv\u00e1lido
+cachedrowsetimpl.boolfail = getBoolen falhou no valor ( {0} ) na coluna {1}
+cachedrowsetimpl.bytefail = getByte falhou no valor ( {0} ) na coluna {1}
+cachedrowsetimpl.shortfail = getShort falhou no valor ( {0} ) na coluna {1}
+cachedrowsetimpl.intfail = getInt falhou no valor ( {0} ) na coluna {1}
+cachedrowsetimpl.longfail = getLong falhou no valor ( {0} ) na coluna {1}
+cachedrowsetimpl.floatfail = getFloat falhou no valor ( {0} ) na coluna {1}
+cachedrowsetimpl.doublefail = getDouble falhou no valor ( {0} ) na coluna {1}
+cachedrowsetimpl.dtypemismt = Tipo de dados incompat\u00edvel 
+cachedrowsetimpl.datefail = getDate falhou no valor ( {0} ) na coluna {1} sem convers\u00e3o dispon\u00edvel
+cachedrowsetimpl.timefail = getTime falhou no valor ( {0} ) na coluna {1} sem convers\u00e3o dispon\u00edvel
+cachedrowsetimpl.posupdate = Atualiza\u00e7\u00f5es posicionadas n\u00e3o suportadas
+cachedrowsetimpl.unableins = N\u00e3o \u00e9 poss\u00edvel instanciar: {0}
+cachedrowsetimpl.beforefirst = beforeFirst : posi\u00e7\u00e3o inv\u00e1lida do cursor
+cachedrowsetimpl.first = First : opera\u00e7\u00e3o inv\u00e1lida do cursor
+cachedrowsetimpl.last = last : TYPE_FORWARD_ONLY
+cachedrowsetimpl.absolute = absolute : posi\u00e7\u00e3o inv\u00e1lida do cursor
+cachedrowsetimpl.relative = relative : posi\u00e7\u00e3o inv\u00e1lida do cursor
+cachedrowsetimpl.asciistream = leitura falha do fluxo ascii
+cachedrowsetimpl.binstream = leitura falha em fluxo bin\u00e1rio
+cachedrowsetimpl.failedins = Falha ao inserir linha
+cachedrowsetimpl.updateins = updateRow chamado durante a inser\u00e7\u00e3o de linha
+cachedrowsetimpl.movetoins = moveToInsertRow : CONCUR_READ_ONLY
+cachedrowsetimpl.movetoins1 = moveToInsertRow : sem metadados
+cachedrowsetimpl.movetoins2 = moveToInsertRow : n\u00famero de colunas inv\u00e1lido
+cachedrowsetimpl.tablename = O nome da tabela n\u00e3o pode ser nulo
+cachedrowsetimpl.keycols = Colunas de chaves inv\u00e1lidas
+cachedrowsetimpl.invalidcol = \u00cdndice de coluna inv\u00e1lido
+cachedrowsetimpl.opnotsupp = Opera\u00e7\u00e3o n\u00e3o suportada pelo banco de dados
+cachedrowsetimpl.matchcols = As colunas correspondentes n\u00e3o s\u00e3o iguais \u00e0s colunas definidas
+cachedrowsetimpl.setmatchcols = Definir colunas correspondentes antes de obt\u00ea-las
+cachedrowsetimpl.matchcols1 = As colunas correspondentes devem ser maior do que 0
+cachedrowsetimpl.matchcols2 = As colunas correspondentes devem ser sequ\u00eancias vazias ou nulas
+cachedrowsetimpl.unsetmatch = As colunas n\u00e3o definidas n\u00e3o s\u00e3o iguais \u00e0s colunas definidas
+cachedrowsetimpl.unsetmatch1 = Usar o nome da coluna como argumento para unsetMatchColumn
+cachedrowsetimpl.unsetmatch2 = Usar o ID da coluna como argumento para unsetMatchColumn
+cachedrowsetimpl.numrows = O n\u00famero de linhas \u00e9 menor do que zero ou menor do que o tamanho obtido
+cachedrowsetimpl.startpos = A posi\u00e7\u00e3o de in\u00edcio n\u00e3o pode ser negativa
+cachedrowsetimpl.nextpage = Preencher dados antes de chamar 
+cachedrowsetimpl.pagesize = O tamanho da p\u00e1gina n\u00e3o pode ser menor do que zero
+cachedrowsetimpl.pagesize1 = O tamanho da p\u00e1gina n\u00e3o pode ser maior do que maxRows
+cachedrowsetimpl.fwdonly = ResultSet \u00e9 somente para frente
+cachedrowsetimpl.type = O tipo \u00e9 : {0}
+cachedrowsetimpl.opnotysupp = Opera\u00e7\u00e3o ainda n\u00e3o suportada
+cachedrowsetimpl.featnotsupp = Recurso n\u00e3o suportado
+
+# WebRowSetImpl exceptions
+webrowsetimpl.nullhash = N\u00e3o \u00e9 poss\u00edvel instanciar a inst\u00e2ncia WebRowSetImpl. Hashtable nulo fornecido ao construtor
+webrowsetimpl.invalidwr = Gravador inv\u00e1lido
+webrowsetimpl.invalidrd = Leitor inv\u00e1lido
+
+#FilteredRowSetImpl exceptions
+filteredrowsetimpl.relative = relative : opera\u00e7\u00e3o inv\u00e1lida do cursor 
+filteredrowsetimpl.absolute = absolute : opera\u00e7\u00e3o inv\u00e1lida do cursor
+filteredrowsetimpl.notallowed = Este valor n\u00e3o \u00e9 permitido no filtro
+
+#JoinRowSetImpl exceptions
+joinrowsetimpl.notinstance = N\u00e3o \u00e9 uma inst\u00e2ncia do conjunto de linhas
+joinrowsetimpl.matchnotset = Coluna correspondente n\u00e3o definida para jun\u00e7\u00e3o
+joinrowsetimpl.numnotequal = N\u00famero de elementos no conjunto de linhas diferente da coluna correspondente
+joinrowsetimpl.notdefined = N\u00e3o \u00e9 um tipo definido de jun\u00e7\u00e3o
+joinrowsetimpl.notsupported = Este tipo de jun\u00e7\u00e3o n\u00e3o \u00e9 suportada
+joinrowsetimpl.initerror = Erro de inicializa\u00e7\u00e3o do JoinRowSet
+joinrowsetimpl.genericerr = Erro inicial de joinrowset gen\u00e9rico
+joinrowsetimpl.emptyrowset = O conjunto de linha vazio n\u00e3o pode ser adicionado a este JoinRowSet
+
+#JdbcRowSetImpl exceptions
+jdbcrowsetimpl.invalstate = Estado inv\u00e1lido
+jdbcrowsetimpl.connect = N\u00e3o \u00e9 poss\u00edvel conectar JdbcRowSet (connect) a JNDI
+jdbcrowsetimpl.paramtype = N\u00e3o \u00e9 poss\u00edvel deduzir o tipo de par\u00e2metro
+jdbcrowsetimpl.matchcols = As colunas correspondentes n\u00e3o s\u00e3o iguais \u00e0s colunas definidas
+jdbcrowsetimpl.setmatchcols = Definir as colunas correspondentes antes de obt\u00ea-las
+jdbcrowsetimpl.matchcols1 = As colunas correspondentes devem ser maior do que 0
+jdbcrowsetimpl.matchcols2 = As colunas correspondentes n\u00e3o podem ser sequ\u00eancias vazias ou nulas
+jdbcrowsetimpl.unsetmatch = As colunas n\u00e3o definidas n\u00e3o s\u00e3o iguais \u00e0s colunas definidas
+jdbcrowsetimpl.usecolname = Usar o nome da coluna como argumento para unsetMatchColumn
+jdbcrowsetimpl.usecolid = Usar o ID da coluna como argumento para unsetMatchColumn
+jdbcrowsetimpl.resnotupd = ResultSet n\u00e3o \u00e9 atualiz\u00e1vel
+jdbcrowsetimpl.opnotysupp = Opera\u00e7\u00e3o ainda n\u00e3o suportada
+jdbcrowsetimpl.featnotsupp = Recurso n\u00e3o suportado
+
+#CachedRowSetReader exceptions
+crsreader.connect = (JNDI) N\u00e3o \u00e9 poss\u00edvel conectar
+crsreader.paramtype = N\u00e3o \u00e9 poss\u00edvel deduzir o tipo de par\u00e2metro
+crsreader.connecterr = Erro interno no RowSetReader: sem conex\u00e3o ou comando
+crsreader.datedetected = Data detectada
+crsreader.caldetected = Calend\u00e1rio detectado
+
+#CachedRowSetWriter exceptions
+crswriter.connect = N\u00e3o \u00e9 poss\u00edvel obter a conex\u00e3o
+crswriter.tname = writeData n\u00e3o pode determinar o nome da tabela
+crswriter.params1 = Valor de params1 : {0} 
+crswriter.params2 = Valor de params2 : {0} 
+crswriter.conflictsno =  conflitos durante a sincroniza\u00e7\u00e3o 
+
+#InsertRow exceptions
+insertrow.novalue = Nenhum valor foi inserido
+
+#SyncResolverImpl exceptions
+syncrsimpl.indexval = Valor de \u00edndice fora do intervalo  
+syncrsimpl.noconflict = Est\u00e1 coluna n\u00e3o est\u00e1 em conflito
+syncrsimpl.syncnotpos = A sincroniza\u00e7\u00e3o n\u00e3o \u00e9 poss\u00edvel
+syncrsimpl.valtores = O valor a ser decidido pode estar no banco de dados ou no conjunto de linhas armazenado em cache
+
+#WebRowSetXmlReader exception
+wrsxmlreader.invalidcp = Fim de RowSet atingido. Posi\u00e7\u00e3o inv\u00e1lida do cursor
+wrsxmlreader.readxml = readXML : {0}
+wrsxmlreader.parseerr = ** Analisando erro : {0} , linha : {1} , uri : {2}
+
+#WebRowSetXmlWriter exceptions
+wrsxmlwriter.ioex = IOException : {0}
+wrsxmlwriter.sqlex = SQLException : {0}
+wrsxmlwriter.failedwrite = Falha ao gravar valor
+wsrxmlwriter.notproper = N\u00e3o \u00e9 um tipo adequado
+
+#XmlReaderContentHandler exceptions
+xmlrch.errmap = Erro ao definir mapa : {0}
+xmlrch.errmetadata = Erro ao definir metadados : {0}
+xmlrch.errinsert = Erro ao inserir valores : {0}
+xmlrch.errconstr = Erro ao construir linha : {0}
+xmlrch.errdel = Erro ao excluir linha : {0}
+xmlrch.errinsert = Erro ao construir linha de inser\u00e7\u00e3o : {0}
+xmlrch.errinsdel = Erro ao construir linha insdel : {0}
+xmlrch.errupdate = Erro ao construir linha de atualiza\u00e7\u00e3o : {0}
+xmlrch.errupdrow = Erro ao atualizar linha : {0}
+xmlrch.chars = caracteres :
+xmlrch.badvalue = Valor incorreto ; propriedade n\u00e3o anul\u00e1vel
+xmlrch.badvalue1 = Valor incorreto ; metadado n\u00e3o anul\u00e1vel
+xmlrch.warning =  ** Aviso : {0} , linha : {1} , uri : {2}
+
+#RIOptimisticProvider Exceptions
+riop.locking = O bloqueio de classifica\u00e7\u00e3o n\u00e3o \u00e9 suportado
+
+#RIXMLProvider exceptions
+rixml.unsupp = N\u00e3o suportado com RIXMLProvider
diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java
--- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java	2014-10-08 15:35:08.000000000 +0000
+++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java	2015-01-20 02:20:42.000000000 +0000
@@ -86,6 +86,8 @@
  * the principal name from the configuration is used. In the
  * case where the principal property is not set and the principal
  * entry also does not exist, the user is prompted for the name.
+ * When this property of entry is set, and useTicketCache
+ * is set to true, only TGT belonging to this principal is used.
  *
  * 

The following is a list of configuration options supported * for Krb5LoginModule: @@ -101,18 +103,19 @@ * to false if you do not want this module to use the ticket cache. * (Default is False). * This module will - * search for the tickect + * search for the ticket * cache in the following locations: - * For Windows 2000, it will use Local Security Authority (LSA) API - * to get the TGT. On Solaris and Linux + * On Solaris and Linux * it will look for the ticket cache in /tmp/krb5cc_uid * where the uid is numeric user * identifier. If the ticket cache is - * not available in either of the above locations, or if we are on a - * different Windows platform, it will look for the cache as + * not available in the above location, or if we are on a + * Windows platform, it will look for the cache as * {user.home}{file.separator}krb5cc_{user.name}. * You can override the ticket cache location by using - * ticketCache + * ticketCache. + * For Windows, if a ticket cannot be retrieved from the file ticket cache, + * it will use Local Security Authority (LSA) API to get the TGT. *

*

ticketCache:
*
Set this to the name of the ticket @@ -129,20 +132,20 @@ *
doNotPrompt:
*
Set this to true if you do not want to be * prompted for the password - * if credentials can - * not be obtained from the cache or keytab.(Default is false) - * If set to true authentication will fail if credentials can - * not be obtained from the cache or keytab.
+ * if credentials can not be obtained from the cache, the keytab, + * or through shared state.(Default is false) + * If set to true, credential must be obtained through cache, keytab, + * or shared state. Otherwise, authentication will fail. *

*

useKeyTab:
*
Set this to true if you * want the module to get the principal's key from the * the keytab.(default value is False) - * If keyatb + * If keytab * is not set then * the module will locate the keytab from the - * Kerberos configuration file.
- * If it is not specifed in the Kerberos configuration file + * Kerberos configuration file. + * If it is not specified in the Kerberos configuration file * then it will look for the file * {user.home}{file.separator}krb5.keytab. *

@@ -210,20 +213,34 @@ * exist for the username and password in the shared * state, or if authentication fails. * - * clearPass if, true, this LoginModule clears the - * username and password stored in the module's shared - * state after both phases of authentication - * (login and commit) have completed. + * clearPass if, true, this LoginModule clears the + * username and password stored in the module's shared + * state after both phases of authentication + * (login and commit) have completed. *

+ *

If the principal system property or key is already provided, the value of + * "javax.security.auth.login.name" in the shared state is ignored. + *

When multiple mechanisms to retrieve a ticket or key is provided, the + * preference order looks like this: + *

    + *
  1. ticket cache + *
  2. keytab + *
  3. shared state + *
  4. user prompt + *
+ *

Note that if any step fails, it will fallback to the next step. + * There's only one exception, it the shared state step fails and + * useFirstPass=true, no user prompt is made. *

Examples of some configuration values for Krb5LoginModule in * JAAS config file and the results are: *

    *

    doNotPrompt=true; *

- *

This is an illegal combination since useTicketCache - * is not set and the user can not be prompted for the password. + *

This is an illegal combination since none of useTicketCache, + * useKeyTab, useFirstPass and tryFirstPass + * is set and the user can not be prompted for the password. *

    - *

    ticketCache = < filename >; + *

    ticketCache = <filename>; *

*

This is an illegal combination since useTicketCache * is not set to true and the ticketCache is set. A configuration error @@ -240,9 +257,9 @@ * *

This is an illegal combination since storeKey is set to * true but the key can not be obtained either by prompting the user or from - * the keytab.A configuration error will occur. + * the keytab, or from the shared state. A configuration error will occur. *

    - *

    keyTab = < filename > doNotPrompt=true ; + *

    keyTab = <filename> doNotPrompt=true ; *

*

This is an illegal combination since useKeyTab is not set to true and * the keyTab is set. A configuration error will occur. @@ -260,7 +277,7 @@ * with the principal and TGT. If the TGT is not available, * do not prompt the user, instead fail the authentication. *

    - *

    principal=< name >useTicketCache = true + *

    principal=<name>useTicketCache = true * doNotPrompt=true; *

*

Get the TGT from the default cache for the principal and populate the @@ -269,9 +286,9 @@ * authentication will fail. *

    *

    useTicketCache = true - * ticketCache=< file name >useKeyTab = true - * keyTab=< keytab filename > - * principal = < principal name > + * ticketCache=<file name>useKeyTab = true + * keyTab=<keytab filename> + * principal = <principal name> * doNotPrompt=true; *

*

Search the cache for the principal's TGT. If it is not available @@ -281,7 +298,7 @@ * If the key is not available or valid then authentication will fail. *

    *

    useTicketCache = true - * ticketCache=< file name > + * ticketCache=<file name> *

*

The TGT will be obtained from the cache specified. * The Kerberos principal name used will be the principal name in @@ -292,8 +309,8 @@ * The Subject will be populated with the TGT. *

    *

    useKeyTab = true - * keyTab=< keytab filename > - * principal= < principal name > + * keyTab=<keytab filename> + * principal= <principal name> * storeKey=true; *

*

The key for the principal will be retrieved from the keytab. @@ -303,7 +320,7 @@ * password entered. *

    *

    useKeyTab = true - * keyTab=< keytabname > + * keyTab=<keytabname> * storeKey=true * doNotPrompt=true; *

@@ -316,21 +333,23 @@ * Subject's private credentials set. Otherwise the authentication will * fail. *
    - *

    useKeyTab = true - * keyTab=< file name > storeKey=true - * principal= < principal name > + *

    * useTicketCache=true - * ticketCache=< file name >; + * ticketCache=<file name>; + * useKeyTab = true + * keyTab=<file name> storeKey=true + * principal= <principal name> *

- *

The principal's key will be retrieved from the keytab and added - * to the Subject's private credentials. If the key - * is not available, the - * user will be prompted for the password; the key derived from the password - * will be added to the Subject's private credentials set. The - * client's TGT will be retrieved from the ticket cache and added to the + *

+ * The client's TGT will be retrieved from the ticket cache and added to the * Subject's private credentials. If the TGT is not available - * in the ticket cache, it will be obtained using the authentication + * in the ticket cache, or the TGT's client name does not match the principal + * name, Java will use a secret key to obtain the TGT using the authentication * exchange and added to the Subject's private credentials. + * This secret key will be first retrieved from the keytab. If the key + * is not available, the user will be prompted for the password. In either + * case, the key derived from the password will be added to the + * Subject's private credentials set. *

    *

    isInitiator = false *

@@ -856,11 +875,13 @@ } private void validateConfiguration() throws LoginException { - if (doNotPrompt && !useTicketCache && !useKeyTab) + if (doNotPrompt && !useTicketCache && !useKeyTab + && !tryFirstPass && !useFirstPass) throw new LoginException ("Configuration Error" + " - either doNotPrompt should be " - + " false or useTicketCache/useKeyTab " + + " false or at least one of useTicketCache, " + + " useKeyTab, tryFirstPass and useFirstPass" + " should be true"); if (ticketCacheName != null && !useTicketCache) throw new LoginException @@ -872,11 +893,12 @@ throw new LoginException ("Configuration Error - useKeyTab should be set to true " + "to use the keytab" + keyTabName); - if (storeKey && doNotPrompt && !useKeyTab) + if (storeKey && doNotPrompt && !useKeyTab + && !tryFirstPass && !useFirstPass) throw new LoginException - ("Configuration Error - either doNotPrompt " - + "should be set to false or " - + "useKeyTab must be set to true for storeKey option"); + ("Configuration Error - either doNotPrompt should be set to " + + " false or at least one of tryFirstPass, useFirstPass " + + "or useKeyTab must be set to true for storeKey option"); if (renewTGT && !useTicketCache) throw new LoginException ("Configuration Error" diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_pt_BR.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_pt_BR.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_pt_BR.properties 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_pt_BR.properties 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,209 @@ +# This properties file is used to create a PropertyResourceBundle +# It contains Locale specific strings used in Swing +# Currently, the following components need this for support: +# +# ColorChooser +# FileChooser +# OptionPane +# +# When this file is read in, the strings are put into the +# defaults table. This is an implementation detail of the current +# workings of Swing. DO NOT DEPEND ON THIS. +# This may change in future versions of Swing as we improve localization +# support. +# +# MNEMONIC NOTE: +# Many of strings in this file are used by widgets that have a +# mnemonic, for example: +# ColorChooser.rgbNameText=RGB +# ColorChooser.rgbMnemonic=71 +# ColorChooser.rgbDisplayedMnemonicIndex=1 +# Indicates that the tab in the ColorChooser for RGB colors will have +# the text 'RGB', further the mnemonic character will be 'g' and that +# a decoration will be provided under the 'G'. This will typically +# look like: RGB +# - +# 71 corresponds to the decimal value of the VK constant defined +# in java/awt/KeyEvent.java. VK_G is defined as: +# +# public static final int VK_G = 0x47; +# +# 0x47 is a hex number and needs to be converted to decimal. +# A simple way to calculate this for a-z is to add 64 to the index of +# the letter in the alphabet. As 'a' is in the 1st letter the mnemonic +# for 'a' is 65, 'b' is 66... +# +# The xxDisplayedMnemonicIndex is used to indicate the index of the +# character that should be underlined in the String, with 0 +# corresponding to the first character in the String. +# +# One important thing to remember is that the mnemonic MUST exist in +# the String, if it does not exist you should add text that makes it +# exist. This will typically take the form 'XXXX (M)' where M is the +# character for the mnemonic. +# +# @author Steve Wilson + +############ FILE CHOOSER STRINGS ############# +FileChooser.fileDescriptionText=Arquivo gen\u00e9rico +FileChooser.directoryDescriptionText=Diret\u00f3rio +FileChooser.newFolderErrorText=Erro ao criar nova pasta +FileChooser.newFolderErrorSeparator= : +FileChooser.acceptAllFileFilterText=Todos os arquivos +FileChooser.cancelButtonText=Cancelar +FileChooser.cancelButtonMnemonic=67 +FileChooser.saveButtonText=Salvar +FileChooser.saveButtonMnemonic=83 +FileChooser.openButtonText=Abrir +FileChooser.openButtonMnemonic=79 +FileChooser.saveDialogTitleText=Salvar +FileChooser.openDialogTitleText=Abrir +FileChooser.updateButtonText=Atualizar +FileChooser.updateButtonMnemonic=85 +FileChooser.helpButtonText=Ajuda +FileChooser.helpButtonMnemonic=72 +FileChooser.directoryOpenButtonText=Abrir +FileChooser.directoryOpenButtonMnemonic=79 + +# File Size Units +FileChooser.fileSizeKiloBytes={0} KB +FileChooser.fileSizeMegaBytes={0} MB +FileChooser.fileSizeGigaBytes={0} GB + +# These strings are platform dependent not look and feel dependent. +FileChooser.win32.newFolder=Nova pasta +FileChooser.win32.newFolder.subsequent=Nova pasta ({0}) +FileChooser.other.newFolder=NewFolder +FileChooser.other.newFolder.subsequent=NewFolder.{0} + + +## file chooser tooltips ### +FileChooser.cancelButtonToolTipText=Anular caixa de di\u00e1logo do seletor de arquivos +FileChooser.saveButtonToolTipText=Salvar arquivo selecionado +FileChooser.openButtonToolTipText=Abrir arquivo selecionado +FileChooser.updateButtonToolTipText=Atualizar lista de diret\u00f3rios +FileChooser.helpButtonToolTipText=Ajuda do FileChooser +FileChooser.directoryOpenButtonToolTipText=Abrir diret\u00f3rio selecionado + +############ COLOR CHOOSER STRINGS ############# +ColorChooser.previewText=Visualizar +ColorChooser.okText=OK +ColorChooser.cancelText=Cancelar +ColorChooser.resetText=Redefinir +# VK_XXX constant for 'ColorChooser.resetText' button to make mnemonic +ColorChooser.resetMnemonic=82 +ColorChooser.sampleText=Texto de amostra Texto de amostra +ColorChooser.swatchesNameText=Amostras +ColorChooser.swatchesMnemonic=83 +ColorChooser.swatchesDisplayedMnemonicIndex=0 +ColorChooser.swatchesRecentText=Recente: +ColorChooser.hsbNameText=HSB +# Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX +# constant, and an index into the text to render the mnemonic as. The +# mnemonic is xxxMnemonic and the index of the character to underline is +# xxxDisplayedMnemonicIndex. +ColorChooser.hsbMnemonic=72 +ColorChooser.hsbDisplayedMnemonicIndex=0 +ColorChooser.hsbHueText=H +ColorChooser.hsbSaturationText=S +ColorChooser.hsbBrightnessText=B +ColorChooser.hsbRedText=R +ColorChooser.hsbGreenText=G +ColorChooser.hsbBlueText=B +ColorChooser.rgbNameText=RGB +ColorChooser.rgbMnemonic=71 +ColorChooser.rgbDisplayedMnemonicIndex=1 +ColorChooser.rgbRedText=Vermelho +ColorChooser.rgbRedMnemonic=68 +ColorChooser.rgbGreenText=Verde +ColorChooser.rgbGreenMnemonic=78 +ColorChooser.rgbBlueText=Azul +ColorChooser.rgbBlueMnemonic=66 + +############ OPTION PANE STRINGS ############# +# Mnemonic keys correspond to KeyEvent.VK_XXX constant +# We only define mnemonics for YES/NO, but for completeness you can +# define mnemonics for any of the buttons. +OptionPane.yesButtonText=Sim +OptionPane.yesButtonMnemonic=89 +OptionPane.noButtonText=N\u00e3o +OptionPane.noButtonMnemonic=78 +OptionPane.okButtonText=OK +OptionPane.okButtonMnemonic=0 +OptionPane.cancelButtonText=Cancelar +OptionPane.cancelButtonMnemonic=0 +OptionPane.titleText=Selecionar uma op\u00e7\u00e3o +# Title for the dialog for the showInputDialog methods. Only used if +# the developer uses one of the variants that doesn't take a title. +OptionPane.inputDialogTitle=Entrada +# Title for the dialog for the showMessageDialog methods. Only used if +# the developer uses one of the variants that doesn't take a title. +OptionPane.messageDialogTitle=Mensagem + +############ Printing Dialog Strings ############ +PrintingDialog.titleProgressText=Impress\u00e3o +PrintingDialog.titleAbortingText=Impress\u00e3o (Anulando) + +PrintingDialog.contentInitialText=Impress\u00e3o em andamento... + +# The following string will be formatted by a MessageFormat +# and {0} will be replaced by page number being printed +PrintingDialog.contentProgressText=P\u00e1gina imprimida {0}... + +PrintingDialog.contentAbortingText=Anulando impress\u00e3o... + +PrintingDialog.abortButtonText=Anular +PrintingDialog.abortButtonMnemonic=65 +PrintingDialog.abortButtonDisplayedMnemonicIndex=0 +PrintingDialog.abortButtonToolTipText=Anular impress\u00e3o + +############ Internal Frame Strings ############ +InternalFrame.iconButtonToolTip=Minimizar +InternalFrame.maxButtonToolTip=Maximizar +InternalFrame.restoreButtonToolTip=Restaurar +InternalFrame.closeButtonToolTip=Fechar + +############ Internal Frame Title Pane Strings ############ +InternalFrameTitlePane.restoreButtonText=Restaurar +InternalFrameTitlePane.moveButtonText=Mover +InternalFrameTitlePane.sizeButtonText=Tamanho +InternalFrameTitlePane.minimizeButtonText=Minimizar +InternalFrameTitlePane.maximizeButtonText=Maximizar +InternalFrameTitlePane.closeButtonText=Fechar + +############ Text strings ############# +# Used for html forms +FormView.submitButtonText=Enviar consulta +FormView.resetButtonText=Redefinir +FormView.browseFileButtonText=Explorar... + +############ Abstract Document Strings ############ +AbstractDocument.styleChangeText=altera\u00e7\u00e3o de estilo +AbstractDocument.additionText=adi\u00e7\u00e3o +AbstractDocument.deletionText=exclus\u00e3o +AbstractDocument.undoText=Desfazer +AbstractDocument.redoText=Refazer + +############ Abstract Button Strings ############ +AbstractButton.clickText=clicar + +############ Abstract Undoable Edit Strings ############ +AbstractUndoableEdit.undoText=Desfazer +AbstractUndoableEdit.redoText=Refazer + +############ Combo Box Strings ############ +ComboBox.togglePopupText=togglePopup + +############ Progress Monitor Strings ############ +ProgressMonitor.progressText=Progresso... + +############ Split Pane Strings ############ +SplitPane.leftButtonText=bot\u00e3o esquerdo +SplitPane.rightButtonText=bot\u00e3o direito +# Used for Isindex +IsindexView.prompt=Trata-se de um \u00edndice pesquis\u00e1vel. Insira as palavras-chave de pesquisa: + +############ InternalFrameTitlePane Strings ############ +InternalFrameTitlePane.iconifyButtonAccessibleName=Iconificar +InternalFrameTitlePane.maximizeButtonAccessibleName=Maximizar +InternalFrameTitlePane.closeButtonAccessibleName=Fechar diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/swing/internal/plaf/metal/resources/metal_pt_BR.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/swing/internal/plaf/metal/resources/metal_pt_BR.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/swing/internal/plaf/metal/resources/metal_pt_BR.properties 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/swing/internal/plaf/metal/resources/metal_pt_BR.properties 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,55 @@ +# This properties file is used to create a PropertyResourceBundle +# It contains Locale specific strings used be the Metal Look and Feel. +# Currently, the following components need this for support: +# +# FileChooser +# +# When this file is read in, the strings are put into the +# defaults table. This is an implementation detail of the current +# workings of Swing. DO NOT DEPEND ON THIS. +# This may change in future versions of Swing as we improve localization +# support. +# +# Refer to the note in basic.properties for a description as to what +# the mnemonics correspond to and how to calculate them. +# +# @author Steve Wilson + + +############ FILE CHOOSER STRINGS ############# + +FileChooser.lookInLabelText=Consultar em: +FileChooser.saveInLabelText=Salvar em: +FileChooser.fileNameLabelText=Nome de arquivo: +FileChooser.filesOfTypeLabelText=Arquivos de tipo: +FileChooser.upFolderToolTipText=Um n\u00edvel acima +FileChooser.upFolderAccessibleName=Acima +FileChooser.homeFolderToolTipText=In\u00edcio +FileChooser.homeFolderAccessibleName=In\u00edcio +FileChooser.newFolderToolTipText=Criar nova pasta +FileChooser.newFolderAccessibleName=Nova pasta +FileChooser.newFolderActionLabelText=Nova pasta +FileChooser.listViewButtonToolTipText=Lista +FileChooser.listViewButtonAccessibleName=Lista +FileChooser.listViewActionLabelText=Lista +FileChooser.detailsViewButtonToolTipText=Detalhes +FileChooser.detailsViewButtonAccessibleName=Detalhes +FileChooser.detailsViewActionLabelText=Detalhes +FileChooser.refreshActionLabelText=Atualizar +FileChooser.viewMenuLabelText=Exibir +FileChooser.fileNameHeaderText=Nome +FileChooser.fileSizeHeaderText=Tamanho +FileChooser.fileTypeHeaderText=Tipo +FileChooser.fileDateHeaderText=Modificado +FileChooser.fileAttrHeaderText=Atributos + +############ Used by MetalTitlePane if rendering window decorations############ +# All mnemonics are KeyEvent.VK_XXX as integers +MetalTitlePane.restoreTitle=Restaurar +MetalTitlePane.restoreMnemonic=82 +MetalTitlePane.iconifyTitle=Minimizar +MetalTitlePane.iconifyMnemonic=69 +MetalTitlePane.maximizeTitle=Maximizar +MetalTitlePane.maximizeMnemonic=88 +MetalTitlePane.closeTitle=Fechar +MetalTitlePane.closeMnemonic=67 diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/swing/internal/plaf/synth/resources/synth_pt_BR.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/swing/internal/plaf/synth/resources/synth_pt_BR.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/com/sun/swing/internal/plaf/synth/resources/synth_pt_BR.properties 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/com/sun/swing/internal/plaf/synth/resources/synth_pt_BR.properties 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,41 @@ +# This properties file is used to create a PropertyResourceBundle +# It contains Locale specific strings used be the Synth Look and Feel. +# Currently, the following components need this for support: +# +# FileChooser +# +# When this file is read in, the strings are put into the +# defaults table. This is an implementation detail of the current +# workings of Swing. DO NOT DEPEND ON THIS. +# This may change in future versions of Swing as we improve localization +# support. +# +# @author Steve Wilson + + +############ FILE CHOOSER STRINGS ############# + +FileChooser.lookInLabelText=Consultar em: +FileChooser.saveInLabelText=Salvar em: +FileChooser.fileNameLabelText=Nome de arquivo: +FileChooser.filesOfTypeLabelText=Arquivos de tipo: +FileChooser.upFolderToolTipText=Um n\u00edvel acima +FileChooser.upFolderAccessibleName=Acima +FileChooser.homeFolderToolTipText=In\u00edcio +FileChooser.homeFolderAccessibleName=In\u00edcio +FileChooser.newFolderToolTipText=Criar nova pasta +FileChooser.newFolderAccessibleName=Nova pasta +FileChooser.newFolderActionLabelText=Nova pasta +FileChooser.listViewButtonToolTipText=Lista +FileChooser.listViewButtonAccessibleName=Lista +FileChooser.listViewActionLabelText=Lista +FileChooser.detailsViewButtonToolTipText=Detalhes +FileChooser.detailsViewButtonAccessibleName=Detalhes +FileChooser.detailsViewActionLabelText=Detalhes +FileChooser.refreshActionLabelText=Atualizar +FileChooser.viewMenuLabelText=Exibir +FileChooser.fileNameHeaderText=Nome +FileChooser.fileSizeHeaderText=Tamanho +FileChooser.fileTypeHeaderText=Tipo +FileChooser.fileDateHeaderText=Modificado +FileChooser.fileAttrHeaderText=Atributos diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/awt/event/InputMethodEvent.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/awt/event/InputMethodEvent.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/awt/event/InputMethodEvent.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/awt/event/InputMethodEvent.java 2015-01-20 02:20:42.000000000 +0000 @@ -25,6 +25,10 @@ package java.awt.event; +import sun.awt.AWTAccessor; +import sun.awt.AppContext; +import sun.awt.SunToolkit; + import java.awt.AWTEvent; import java.awt.Component; import java.awt.EventQueue; @@ -217,8 +221,10 @@ public InputMethodEvent(Component source, int id, AttributedCharacterIterator text, int committedCharacterCount, TextHitInfo caret, TextHitInfo visiblePosition) { - this(source, id, EventQueue.getMostRecentEventTime(), text, - committedCharacterCount, caret, visiblePosition); + this(source, id, + getMostRecentEventTimeForSource(source), + text, committedCharacterCount, + caret, visiblePosition); } /** @@ -258,8 +264,9 @@ */ public InputMethodEvent(Component source, int id, TextHitInfo caret, TextHitInfo visiblePosition) { - this(source, id, EventQueue.getMostRecentEventTime(), null, - 0, caret, visiblePosition); + this(source, id, + getMostRecentEventTimeForSource(source), + null, 0, caret, visiblePosition); } /** @@ -410,7 +417,26 @@ private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException { s.defaultReadObject(); if (when == 0) { + // Can't use getMostRecentEventTimeForSource because source is always null during deserialization when = EventQueue.getMostRecentEventTime(); } } + + /** + * Get the most recent event time in the {@code EventQueue} which the {@code source} + * belongs to. + * + * @param source the source of the event + * @exception IllegalArgumentException if source is null. + * @return most recent event time in the {@code EventQueue} + */ + private static long getMostRecentEventTimeForSource(Object source) { + if (source == null) { + // throw the IllegalArgumentException to conform to EventObject spec + throw new IllegalArgumentException("null source"); + } + AppContext appContext = SunToolkit.targetToAppContext(source); + EventQueue eventQueue = SunToolkit.getSystemEventQueueImplPP(appContext); + return AWTAccessor.getEventQueueAccessor().getMostRecentEventTime(eventQueue); + } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/awt/EventQueue.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/awt/EventQueue.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/awt/EventQueue.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/awt/EventQueue.java 2015-01-20 02:20:42.000000000 +0000 @@ -182,6 +182,11 @@ { EventQueue.invokeAndWait(source, r); } + + @Override + public long getMostRecentEventTime(EventQueue eventQueue) { + return eventQueue.getMostRecentEventTimeImpl(); + } }); } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/lang/Class.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/lang/Class.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/lang/Class.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/lang/Class.java 2015-01-20 02:17:40.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -275,7 +275,7 @@ } /** Called after security check for system loader access checks have been made. */ - private static native Class forName0(String name, boolean initialize, + private static native Class forName0(String name, boolean initialize, ClassLoader loader, Class caller) throws ClassNotFoundException; @@ -346,15 +346,15 @@ ); } try { - Class[] empty = {}; + Class[] empty = {}; final Constructor c = getConstructor0(empty, Member.DECLARED); // Disable accessibility checks on the constructor // since we have to do the security check here anyway // (the stack depth is wrong for the Constructor's // security check to work) - java.security.AccessController.doPrivileged - (new java.security.PrivilegedAction() { - public Object run() { + java.security.AccessController.doPrivileged( + new java.security.PrivilegedAction() { + public Void run() { c.setAccessible(true); return null; } @@ -384,7 +384,7 @@ } } private volatile transient Constructor cachedConstructor; - private volatile transient Class newInstanceCallerCache; + private volatile transient Class newInstanceCallerCache; /** @@ -642,7 +642,7 @@ if (getGenericSignature() != null) return (TypeVariable>[])getGenericInfo().getTypeParameters(); else - return (TypeVariable>[])new TypeVariable[0]; + return (TypeVariable>[])new TypeVariable[0]; } @@ -906,7 +906,7 @@ MethodRepository typeInfo = MethodRepository.make(enclosingInfo.getDescriptor(), getFactory()); - Class returnType = toClass(typeInfo.getReturnType()); + Class returnType = toClass(typeInfo.getReturnType()); Type [] parameterTypes = typeInfo.getParameterTypes(); Class[] parameterClasses = new Class[parameterTypes.length]; @@ -1010,12 +1010,12 @@ } - private static Class toClass(Type o) { + private static Class toClass(Type o) { if (o instanceof GenericArrayType) return Array.newInstance(toClass(((GenericArrayType)o).getGenericComponentType()), 0) .getClass(); - return (Class)o; + return (Class)o; } /** @@ -1345,13 +1345,13 @@ // out anything other than public members and (2) public member access // has already been ok'd by the SecurityManager. - Class[] result = (Class[]) java.security.AccessController.doPrivileged - (new java.security.PrivilegedAction() { - public Object run() { - java.util.List list = new java.util.ArrayList(); - Class currentClass = Class.this; + return java.security.AccessController.doPrivileged( + new java.security.PrivilegedAction[]>() { + public Class[] run() { + List> list = new ArrayList>(); + Class currentClass = Class.this; while (currentClass != null) { - Class[] members = currentClass.getDeclaredClasses(); + Class[] members = currentClass.getDeclaredClasses(); for (int i = 0; i < members.length; i++) { if (Modifier.isPublic(members[i].getModifiers())) { list.add(members[i]); @@ -1359,12 +1359,9 @@ } currentClass = currentClass.getSuperclass(); } - Class[] empty = {}; - return list.toArray(empty); + return list.toArray(new Class[0]); } }); - - return result; } @@ -2288,7 +2285,7 @@ return name; } if (!name.startsWith("/")) { - Class c = this; + Class c = this; while (c.isArray()) { c = c.getComponentType(); } @@ -2305,44 +2302,111 @@ } /** + * Atomic operations support. + */ + private static class Atomic { + // initialize Unsafe machinery here, since we need to call Class.class instance method + // and have to avoid calling it in the static initializer of the Class class... + private static final Unsafe unsafe = Unsafe.getUnsafe(); + // offset of Class.reflectionData instance field + private static final long reflectionDataOffset; + // offset of Class.annotationType instance field + private static final long annotationTypeOffset; + + static { + Field[] fields = Class.class.getDeclaredFields0(false); // bypass caches + reflectionDataOffset = objectFieldOffset(fields, "reflectionData"); + annotationTypeOffset = objectFieldOffset(fields, "annotationType"); + } + + private static long objectFieldOffset(Field[] fields, String fieldName) { + Field field = searchFields(fields, fieldName); + if (field == null) { + throw new Error("No " + fieldName + " field found in java.lang.Class"); + } + return unsafe.objectFieldOffset(field); + } + + static boolean casReflectionData(Class clazz, + SoftReference> oldData, + SoftReference> newData) { + return unsafe.compareAndSwapObject(clazz, reflectionDataOffset, oldData, newData); + } + + static boolean casAnnotationType(Class clazz, + AnnotationType oldType, + AnnotationType newType) { + return unsafe.compareAndSwapObject(clazz, annotationTypeOffset, oldType, newType); + } + } + + /** * Reflection support. */ // Caches for certain reflective results private static boolean useCaches = true; - private volatile transient SoftReference declaredFields; - private volatile transient SoftReference publicFields; - private volatile transient SoftReference declaredMethods; - private volatile transient SoftReference publicMethods; - private volatile transient SoftReference declaredConstructors; - private volatile transient SoftReference publicConstructors; - // Intermediate results for getFields and getMethods - private volatile transient SoftReference declaredPublicFields; - private volatile transient SoftReference declaredPublicMethods; + + // reflection data that might get invalidated when JVM TI RedefineClasses() is called + static class ReflectionData { + volatile Field[] declaredFields; + volatile Field[] publicFields; + volatile Method[] declaredMethods; + volatile Method[] publicMethods; + volatile Constructor[] declaredConstructors; + volatile Constructor[] publicConstructors; + // Intermediate results for getFields and getMethods + volatile Field[] declaredPublicFields; + volatile Method[] declaredPublicMethods; + // Value of classRedefinedCount when we created this ReflectionData instance + final int redefinedCount; + + ReflectionData(int redefinedCount) { + this.redefinedCount = redefinedCount; + } + } + + private volatile transient SoftReference> reflectionData; // Incremented by the VM on each call to JVM TI RedefineClasses() // that redefines this class or a superclass. private volatile transient int classRedefinedCount = 0; - // Value of classRedefinedCount when we last cleared the cached values - // that are sensitive to class redefinition. - private volatile transient int lastRedefinedCount = 0; - - // Clears cached values that might possibly have been obsoleted by - // a class redefinition. - private void clearCachesOnClassRedefinition() { - if (lastRedefinedCount != classRedefinedCount) { - declaredFields = publicFields = declaredPublicFields = null; - declaredMethods = publicMethods = declaredPublicMethods = null; - declaredConstructors = publicConstructors = null; - annotations = declaredAnnotations = null; - - // Use of "volatile" (and synchronization by caller in the case - // of annotations) ensures that no thread sees the update to - // lastRedefinedCount before seeing the caches cleared. - // We do not guard against brief windows during which multiple - // threads might redundantly work to fill an empty cache. - lastRedefinedCount = classRedefinedCount; + // Lazily create and cache ReflectionData + private ReflectionData reflectionData() { + SoftReference> reflectionData = this.reflectionData; + int classRedefinedCount = this.classRedefinedCount; + ReflectionData rd; + if (useCaches && + reflectionData != null && + (rd = reflectionData.get()) != null && + rd.redefinedCount == classRedefinedCount) { + return rd; + } + // else no SoftReference or cleared SoftReference or stale ReflectionData + // -> create and replace new instance + return newReflectionData(reflectionData, classRedefinedCount); + } + + private ReflectionData newReflectionData(SoftReference> oldReflectionData, + int classRedefinedCount) { + if (!useCaches) return null; + + while (true) { + ReflectionData rd = new ReflectionData(classRedefinedCount); + // try to CAS it... + if (Atomic.casReflectionData(this, oldReflectionData, + new SoftReference>(rd))) { + return rd; + } + // else retry + oldReflectionData = this.reflectionData; + classRedefinedCount = this.classRedefinedCount; + if (oldReflectionData != null && + (rd = oldReflectionData.get()) != null && + rd.redefinedCount == classRedefinedCount) { + return rd; + } } } @@ -2370,7 +2434,7 @@ } // Annotations handling - private native byte[] getRawAnnotations(); + native byte[] getRawAnnotations(); native ConstantPool getConstantPool(); @@ -2385,27 +2449,19 @@ // via ReflectionFactory.copyField. private Field[] privateGetDeclaredFields(boolean publicOnly) { checkInitted(); - Field[] res = null; - if (useCaches) { - clearCachesOnClassRedefinition(); - if (publicOnly) { - if (declaredPublicFields != null) { - res = (Field[]) declaredPublicFields.get(); - } - } else { - if (declaredFields != null) { - res = (Field[]) declaredFields.get(); - } - } + Field[] res; + ReflectionData rd = reflectionData(); + if (rd != null) { + res = publicOnly ? rd.declaredPublicFields : rd.declaredFields; if (res != null) return res; } // No cached value available; request value from VM res = Reflection.filterFields(this, getDeclaredFields0(publicOnly)); - if (useCaches) { + if (rd != null) { if (publicOnly) { - declaredPublicFields = new SoftReference(res); + rd.declaredPublicFields = res; } else { - declaredFields = new SoftReference(res); + rd.declaredFields = res; } } return res; @@ -2414,22 +2470,20 @@ // Returns an array of "root" fields. These Field objects must NOT // be propagated to the outside world, but must instead be copied // via ReflectionFactory.copyField. - private Field[] privateGetPublicFields(Set traversedInterfaces) { + private Field[] privateGetPublicFields(Set> traversedInterfaces) { checkInitted(); - Field[] res = null; - if (useCaches) { - clearCachesOnClassRedefinition(); - if (publicFields != null) { - res = (Field[]) publicFields.get(); - } + Field[] res; + ReflectionData rd = reflectionData(); + if (rd != null) { + res = rd.publicFields; if (res != null) return res; } // No cached value available; compute value recursively. // Traverse in correct order for getField(). - List fields = new ArrayList(); + List fields = new ArrayList(); if (traversedInterfaces == null) { - traversedInterfaces = new HashSet(); + traversedInterfaces = new HashSet>(); } // Local fields @@ -2437,9 +2491,7 @@ addAll(fields, tmp); // Direct superinterfaces, recursively - Class[] interfaces = getInterfaces(); - for (int i = 0; i < interfaces.length; i++) { - Class c = interfaces[i]; + for (Class c : getInterfaces()) { if (!traversedInterfaces.contains(c)) { traversedInterfaces.add(c); addAll(fields, c.privateGetPublicFields(traversedInterfaces)); @@ -2448,7 +2500,7 @@ // Direct superclass, recursively if (!isInterface()) { - Class c = getSuperclass(); + Class c = getSuperclass(); if (c != null) { addAll(fields, c.privateGetPublicFields(traversedInterfaces)); } @@ -2456,13 +2508,13 @@ res = new Field[fields.size()]; fields.toArray(res); - if (useCaches) { - publicFields = new SoftReference(res); + if (rd != null) { + rd.publicFields = res; } return res; } - private static void addAll(Collection c, Field[] o) { + private static void addAll(Collection c, Field[] o) { for (int i = 0; i < o.length; i++) { c.add(o[i]); } @@ -2478,20 +2530,12 @@ // Returns an array of "root" constructors. These Constructor // objects must NOT be propagated to the outside world, but must // instead be copied via ReflectionFactory.copyConstructor. - private Constructor[] privateGetDeclaredConstructors(boolean publicOnly) { + private Constructor[] privateGetDeclaredConstructors(boolean publicOnly) { checkInitted(); - Constructor[] res = null; - if (useCaches) { - clearCachesOnClassRedefinition(); - if (publicOnly) { - if (publicConstructors != null) { - res = (Constructor[]) publicConstructors.get(); - } - } else { - if (declaredConstructors != null) { - res = (Constructor[]) declaredConstructors.get(); - } - } + Constructor[] res; + ReflectionData rd = reflectionData(); + if (rd != null) { + res = publicOnly ? rd.publicConstructors : rd.declaredConstructors; if (res != null) return res; } // No cached value available; request value from VM @@ -2500,11 +2544,11 @@ } else { res = getDeclaredConstructors0(publicOnly); } - if (useCaches) { + if (rd != null) { if (publicOnly) { - publicConstructors = new SoftReference(res); + rd.publicConstructors = res; } else { - declaredConstructors = new SoftReference(res); + rd.declaredConstructors = res; } } return res; @@ -2521,27 +2565,19 @@ // via ReflectionFactory.copyMethod. private Method[] privateGetDeclaredMethods(boolean publicOnly) { checkInitted(); - Method[] res = null; - if (useCaches) { - clearCachesOnClassRedefinition(); - if (publicOnly) { - if (declaredPublicMethods != null) { - res = (Method[]) declaredPublicMethods.get(); - } - } else { - if (declaredMethods != null) { - res = (Method[]) declaredMethods.get(); - } - } + Method[] res; + ReflectionData rd = reflectionData(); + if (rd != null) { + res = publicOnly ? rd.declaredPublicMethods : rd.declaredMethods; if (res != null) return res; } // No cached value available; request value from VM res = Reflection.filterMethods(this, getDeclaredMethods0(publicOnly)); - if (useCaches) { + if (rd != null) { if (publicOnly) { - declaredPublicMethods = new SoftReference(res); + rd.declaredPublicMethods = res; } else { - declaredMethods = new SoftReference(res); + rd.declaredMethods = res; } } return res; @@ -2643,12 +2679,10 @@ // via ReflectionFactory.copyMethod. private Method[] privateGetPublicMethods() { checkInitted(); - Method[] res = null; - if (useCaches) { - clearCachesOnClassRedefinition(); - if (publicMethods != null) { - res = (Method[]) publicMethods.get(); - } + Method[] res; + ReflectionData rd = reflectionData(); + if (rd != null) { + res = rd.publicMethods; if (res != null) return res; } @@ -2664,12 +2698,12 @@ // out concrete implementations inherited from superclasses at // the end. MethodArray inheritedMethods = new MethodArray(); - Class[] interfaces = getInterfaces(); + Class[] interfaces = getInterfaces(); for (int i = 0; i < interfaces.length; i++) { inheritedMethods.addAll(interfaces[i].privateGetPublicMethods()); } if (!isInterface()) { - Class c = getSuperclass(); + Class c = getSuperclass(); if (c != null) { MethodArray supers = new MethodArray(); supers.addAll(c.privateGetPublicMethods()); @@ -2696,8 +2730,8 @@ methods.addAllIfNotPresent(inheritedMethods); methods.compactAndTrim(); res = methods.getArray(); - if (useCaches) { - publicMethods = new SoftReference(res); + if (rd != null) { + rd.publicMethods = res; } return res; } @@ -2707,7 +2741,7 @@ // Helpers for fetchers of one field, method, or constructor // - private Field searchFields(Field[] fields, String name) { + private static Field searchFields(Field[] fields, String name) { String internedName = name.intern(); for (int i = 0; i < fields.length; i++) { if (fields[i].getName() == internedName) { @@ -2725,22 +2759,22 @@ // of Field objects which have to be created for the common // case where the field being requested is declared in the // class which is being queried. - Field res = null; + Field res; // Search declared public fields if ((res = searchFields(privateGetDeclaredFields(true), name)) != null) { return res; } // Direct superinterfaces, recursively - Class[] interfaces = getInterfaces(); + Class[] interfaces = getInterfaces(); for (int i = 0; i < interfaces.length; i++) { - Class c = interfaces[i]; + Class c = interfaces[i]; if ((res = c.getField0(name)) != null) { return res; } } // Direct superclass, recursively if (!isInterface()) { - Class c = getSuperclass(); + Class c = getSuperclass(); if (c != null) { if ((res = c.getField0(name)) != null) { return res; @@ -2752,7 +2786,7 @@ private static Method searchMethods(Method[] methods, String name, - Class[] parameterTypes) + Class[] parameterTypes) { Method res = null; String internedName = name.intern(); @@ -2769,7 +2803,7 @@ } - private Method getMethod0(String name, Class[] parameterTypes) { + private Method getMethod0(String name, Class[] parameterTypes) { // Note: the intent is that the search algorithm this routine // uses be equivalent to the ordering imposed by // privateGetPublicMethods(). It fetches only the declared @@ -2777,7 +2811,7 @@ // number of Method objects which have to be created for the // common case where the method being requested is declared in // the class which is being queried. - Method res = null; + Method res; // Search declared public methods if ((res = searchMethods(privateGetDeclaredMethods(true), name, @@ -2786,7 +2820,7 @@ } // Search superclass's methods if (!isInterface()) { - Class c = getSuperclass(); + Class c = getSuperclass(); if (c != null) { if ((res = c.getMethod0(name, parameterTypes)) != null) { return res; @@ -2794,9 +2828,9 @@ } } // Search superinterfaces' methods - Class[] interfaces = getInterfaces(); + Class[] interfaces = getInterfaces(); for (int i = 0; i < interfaces.length; i++) { - Class c = interfaces[i]; + Class c = interfaces[i]; if ((res = c.getMethod0(name, parameterTypes)) != null) { return res; } @@ -2805,14 +2839,14 @@ return null; } - private Constructor getConstructor0(Class[] parameterTypes, + private Constructor getConstructor0(Class[] parameterTypes, int which) throws NoSuchMethodException { - Constructor[] constructors = privateGetDeclaredConstructors((which == Member.PUBLIC)); - for (int i = 0; i < constructors.length; i++) { + Constructor[] constructors = privateGetDeclaredConstructors((which == Member.PUBLIC)); + for (Constructor constructor : constructors) { if (arrayContentsEq(parameterTypes, - constructors[i].getParameterTypes())) { - return getReflectionFactory().copyConstructor(constructors[i]); + constructor.getParameterTypes())) { + return getReflectionFactory().copyConstructor(constructor); } } throw new NoSuchMethodException(getName() + "." + argumentTypesToString(parameterTypes)); @@ -2862,21 +2896,21 @@ return out; } - private static Constructor[] copyConstructors(Constructor[] arg) { - Constructor[] out = new Constructor[arg.length]; + private static Constructor[] copyConstructors(Constructor[] arg) { + Constructor[] out = arg.clone(); ReflectionFactory fact = getReflectionFactory(); - for (int i = 0; i < arg.length; i++) { - out[i] = fact.copyConstructor(arg[i]); + for (int i = 0; i < out.length; i++) { + out[i] = fact.copyConstructor(out[i]); } return out; } private native Field[] getDeclaredFields0(boolean publicOnly); private native Method[] getDeclaredMethods0(boolean publicOnly); - private native Constructor[] getDeclaredConstructors0(boolean publicOnly); - private native Class[] getDeclaredClasses0(); + private native Constructor[] getDeclaredConstructors0(boolean publicOnly); + private native Class[] getDeclaredClasses0(); - private static String argumentTypesToString(Class[] argTypes) { + private static String argumentTypesToString(Class[] argTypes) { StringBuilder buf = new StringBuilder(); buf.append("("); if (argTypes != null) { @@ -2884,7 +2918,7 @@ if (i > 0) { buf.append(", "); } - Class c = argTypes[i]; + Class c = argTypes[i]; buf.append((c == null) ? "null" : c.getName()); } } @@ -2957,7 +2991,7 @@ } // Retrieves the desired assertion status of this class from the VM - private static native boolean desiredAssertionStatus0(Class clazz); + private static native boolean desiredAssertionStatus0(Class clazz); /** * Returns true if and only if this class was declared as an enum in the @@ -2978,7 +3012,7 @@ // Fetches the factory for reflective objects private static ReflectionFactory getReflectionFactory() { if (reflectionFactory == null) { - reflectionFactory = (ReflectionFactory) + reflectionFactory = java.security.AccessController.doPrivileged (new sun.reflect.ReflectionFactory.GetReflectionFactoryAction()); } @@ -3044,9 +3078,9 @@ if (!isEnum()) return null; try { final Method values = getMethod("values"); - java.security.AccessController.doPrivileged - (new java.security.PrivilegedAction() { - public Object run() { + java.security.AccessController.doPrivileged( + new java.security.PrivilegedAction() { + public Void run() { values.setAccessible(true); return null; } @@ -3078,7 +3112,7 @@ getName() + " is not an enum type"); Map m = new HashMap(2 * universe.length); for (T constant : universe) - m.put(((Enum)constant).name(), constant); + m.put(((Enum)constant).name(), constant); enumConstantDirectory = m; } return enumConstantDirectory; @@ -3178,11 +3212,22 @@ } // Annotations cache - private transient Map annotations; - private transient Map declaredAnnotations; + private transient Map, Annotation> annotations; + private transient Map, Annotation> declaredAnnotations; + // Value of classRedefinedCount when we last cleared the cached annotations and declaredAnnotations fields + private transient int lastAnnotationsRedefinedCount = 0; + + // Clears cached values that might possibly have been obsoleted by + // a class redefinition. + private void clearAnnotationCachesOnClassRedefinition() { + if (lastAnnotationsRedefinedCount != classRedefinedCount) { + annotations = declaredAnnotations = null; + lastAnnotationsRedefinedCount = classRedefinedCount; + } + } private synchronized void initAnnotationsIfNecessary() { - clearCachesOnClassRedefinition(); + clearAnnotationCachesOnClassRedefinition(); if (annotations != null) return; declaredAnnotations = AnnotationParser.parseAnnotations( @@ -3191,10 +3236,10 @@ if (superClass == null) { annotations = declaredAnnotations; } else { - annotations = new HashMap(); + annotations = new HashMap, Annotation>(); superClass.initAnnotationsIfNecessary(); - for (Map.Entry e : superClass.annotations.entrySet()) { - Class annotationClass = e.getKey(); + for (Map.Entry, Annotation> e : superClass.annotations.entrySet()) { + Class annotationClass = e.getKey(); if (AnnotationType.getInstance(annotationClass).isInherited()) annotations.put(annotationClass, e.getValue()); } @@ -3204,10 +3249,11 @@ // Annotation types cache their internal (AnnotationType) form - private AnnotationType annotationType; + @SuppressWarnings("UnusedDeclaration") + private volatile transient AnnotationType annotationType; - void setAnnotationType(AnnotationType type) { - annotationType = type; + boolean casAnnotationType(AnnotationType oldType, AnnotationType newType) { + return Atomic.casAnnotationType(this, oldType, newType); } AnnotationType getAnnotationType() { diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/lang/reflect/Constructor.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/lang/reflect/Constructor.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/lang/reflect/Constructor.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/lang/reflect/Constructor.java 2015-01-20 02:17:40.000000000 +0000 @@ -65,8 +65,8 @@ private Class clazz; private int slot; - private Class[] parameterTypes; - private Class[] exceptionTypes; + private Class[] parameterTypes; + private Class[] exceptionTypes; private int modifiers; // Generics and annotations support private transient String signature; @@ -118,8 +118,8 @@ * package via sun.reflect.LangReflectAccess. */ Constructor(Class declaringClass, - Class[] parameterTypes, - Class[] checkedExceptions, + Class[] parameterTypes, + Class[] checkedExceptions, int modifiers, int slot, String signature, @@ -366,14 +366,14 @@ } sb.append(Field.getTypeName(getDeclaringClass())); sb.append("("); - Class[] params = parameterTypes; // avoid clone + Class[] params = parameterTypes; // avoid clone for (int j = 0; j < params.length; j++) { sb.append(Field.getTypeName(params[j])); if (j < (params.length - 1)) sb.append(","); } sb.append(")"); - Class[] exceptions = exceptionTypes; // avoid clone + Class[] exceptions = exceptionTypes; // avoid clone if (exceptions.length > 0) { sb.append(" throws "); for (int k = 0; k < exceptions.length; k++) { @@ -454,7 +454,7 @@ sb.append(" throws "); for (int k = 0; k < exceptions.length; k++) { sb.append((exceptions[k] instanceof Class)? - ((Class)exceptions[k]).getName(): + ((Class)exceptions[k]).getName(): exceptions[k].toString()); if (k < (exceptions.length - 1)) sb.append(","); @@ -630,9 +630,9 @@ return declaredAnnotations().values().toArray(EMPTY_ANNOTATION_ARRAY); } - private transient Map declaredAnnotations; + private transient Map, Annotation> declaredAnnotations; - private synchronized Map declaredAnnotations() { + private synchronized Map, Annotation> declaredAnnotations() { if (declaredAnnotations == null) { declaredAnnotations = AnnotationParser.parseAnnotations( annotations, sun.misc.SharedSecrets.getJavaLangAccess(). diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/lang/reflect/Field.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/lang/reflect/Field.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/lang/reflect/Field.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/lang/reflect/Field.java 2015-01-20 02:17:40.000000000 +0000 @@ -59,12 +59,12 @@ public final class Field extends AccessibleObject implements Member { - private Class clazz; + private Class clazz; private int slot; // This is guaranteed to be interned by the VM in the 1.4 // reflection implementation private String name; - private Class type; + private Class type; private int modifiers; // Generics and annotations support private transient String signature; @@ -113,9 +113,9 @@ * instantiation of these objects in Java code from the java.lang * package via sun.reflect.LangReflectAccess. */ - Field(Class declaringClass, + Field(Class declaringClass, String name, - Class type, + Class type, int modifiers, int slot, String signature, @@ -1090,10 +1090,10 @@ /* * Utility routine to paper over array type names */ - static String getTypeName(Class type) { + static String getTypeName(Class type) { if (type.isArray()) { try { - Class cl = type; + Class cl = type; int dimensions = 0; while (cl.isArray()) { dimensions++; @@ -1130,9 +1130,9 @@ return declaredAnnotations().values().toArray(EMPTY_ANNOTATION_ARRAY); } - private transient Map declaredAnnotations; + private transient Map, Annotation> declaredAnnotations; - private synchronized Map declaredAnnotations() { + private synchronized Map, Annotation> declaredAnnotations() { if (declaredAnnotations == null) { declaredAnnotations = AnnotationParser.parseAnnotations( annotations, sun.misc.SharedSecrets.getJavaLangAccess(). diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/lang/reflect/Method.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/lang/reflect/Method.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/lang/reflect/Method.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/lang/reflect/Method.java 2015-01-20 02:17:42.000000000 +0000 @@ -62,14 +62,14 @@ public final class Method extends AccessibleObject implements GenericDeclaration, Member { - private Class clazz; + private Class clazz; private int slot; // This is guaranteed to be interned by the VM in the 1.4 // reflection implementation private String name; - private Class returnType; - private Class[] parameterTypes; - private Class[] exceptionTypes; + private Class returnType; + private Class[] parameterTypes; + private Class[] exceptionTypes; private int modifiers; // Generics and annotations support private transient String signature; @@ -121,11 +121,11 @@ * instantiation of these objects in Java code from the java.lang * package via sun.reflect.LangReflectAccess. */ - Method(Class declaringClass, + Method(Class declaringClass, String name, - Class[] parameterTypes, - Class returnType, - Class[] checkedExceptions, + Class[] parameterTypes, + Class returnType, + Class[] checkedExceptions, int modifiers, int slot, String signature, @@ -366,8 +366,8 @@ if (!returnType.equals(other.getReturnType())) return false; /* Avoid unnecessary cloning */ - Class[] params1 = parameterTypes; - Class[] params2 = other.parameterTypes; + Class[] params1 = parameterTypes; + Class[] params2 = other.parameterTypes; if (params1.length == params2.length) { for (int i = 0; i < params1.length; i++) { if (params1[i] != params2[i]) @@ -428,7 +428,7 @@ sb.append(","); } sb.append(")"); - Class[] exceptions = exceptionTypes; // avoid clone + Class[] exceptions = exceptionTypes; // avoid clone if (exceptions.length > 0) { sb.append(" throws "); for (int k = 0; k < exceptions.length; k++) { @@ -723,9 +723,9 @@ return declaredAnnotations().values().toArray(EMPTY_ANNOTATION_ARRAY); } - private transient Map declaredAnnotations; + private transient Map, Annotation> declaredAnnotations; - private synchronized Map declaredAnnotations() { + private synchronized Map, Annotation> declaredAnnotations() { if (declaredAnnotations == null) { declaredAnnotations = AnnotationParser.parseAnnotations( annotations, sun.misc.SharedSecrets.getJavaLangAccess(). @@ -752,7 +752,7 @@ public Object getDefaultValue() { if (annotationDefault == null) return null; - Class memberType = AnnotationType.invocationHandlerReturnType( + Class memberType = AnnotationType.invocationHandlerReturnType( getReturnType()); Object result = AnnotationParser.parseMemberValue( memberType, ByteBuffer.wrap(annotationDefault), diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/lang/System.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/lang/System.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/lang/System.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/lang/System.java 2015-01-20 02:17:40.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1146,12 +1146,15 @@ public sun.reflect.ConstantPool getConstantPool(Class klass) { return klass.getConstantPool(); } - public void setAnnotationType(Class klass, AnnotationType type) { - klass.setAnnotationType(type); + public boolean casAnnotationType(Class klass, AnnotationType oldType, AnnotationType newType) { + return klass.casAnnotationType(oldType, newType); } public AnnotationType getAnnotationType(Class klass) { return klass.getAnnotationType(); } + public byte[] getRawClassAnnotations(Class klass) { + return klass.getRawAnnotations(); + } public > E[] getEnumConstantsShared(Class klass) { return klass.getEnumConstantsShared(); diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/net/MulticastSocket.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/net/MulticastSocket.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/net/MulticastSocket.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/net/MulticastSocket.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -544,7 +544,7 @@ public NetworkInterface getNetworkInterface() throws SocketException { NetworkInterface ni = (NetworkInterface)getImpl().getOption(SocketOptions.IP_MULTICAST_IF2); - if (ni.getIndex() == 0) { + if ((ni.getIndex() == 0) || (ni.getIndex() == -1)) { InetAddress[] addrs = new InetAddress[1]; addrs[0] = InetAddress.anyLocalAddress(); return new NetworkInterface(addrs[0].getHostName(), 0, addrs); diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/util/CurrencyData.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/util/CurrencyData.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/util/CurrencyData.properties 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/util/CurrencyData.properties 2015-01-20 02:17:43.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,10 +26,9 @@ formatVersion=1 # Version of the currency code information in this class. -# It is a serial number that accompanies with each amendment, such as -# 'MAxxx.doc' +# It is a serial number that accompanies with each amendment. -dataVersion=139 +dataVersion=159 # List of all valid ISO 4217 currency codes. # To ensure compatibility, do not remove codes. @@ -37,7 +36,7 @@ all=ADP020-AED784-AFA004-AFN971-ALL008-AMD051-ANG532-AOA973-ARS032-ATS040-AUD036-\ AWG533-AYM945-AZM031-AZN944-BAM977-BBD052-BDT050-BEF056-BGL100-BGN975-BHD048-BIF108-\ BMD060-BND096-BOB068-BOV984-BRL986-BSD044-BTN064-BWP072-BYB112-BYR974-\ - BZD084-CAD124-CDF976-CHF756-CLF990-CLP152-CNY156-COP170-CRC188-CSD891-CUP192-\ + BZD084-CAD124-CDF976-CHF756-CLF990-CLP152-CNY156-COP170-CRC188-CSD891-CUP192-CUC931-\ CVE132-CYP196-CZK203-DEM276-DJF262-DKK208-DOP214-DZD012-EEK233-EGP818-\ ERN232-ESP724-ETB230-EUR978-FIM246-FJD242-FKP238-FRF250-GBP826-GEL981-\ GHC288-GHS936-GIP292-GMD270-GNF324-GRD300-GTQ320-GWP624-GYD328-HKD344-HNL340-\ @@ -49,11 +48,12 @@ NIO558-NLG528-NOK578-NPR524-NZD554-OMR512-PAB590-PEN604-PGK598-PHP608-\ PKR586-PLN985-PTE620-PYG600-QAR634-ROL946-RON946-RSD941-RUB643-RUR810-RWF646-SAR682-\ SBD090-SCR690-SDD736-SDG938-SEK752-SGD702-SHP654-SIT705-SKK703-SLL694-SOS706-\ - SRD968-SRG740-STD678-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TND788-TOP776-\ + SRD968-SRG740-SSP728-STD678-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TMT934-TND788-TOP776-\ TPE626-TRL792-TRY949-TTD780-TWD901-TZS834-UAH980-UGX800-USD840-USN997-USS998-\ UYU858-UZS860-VEB862-VEF937-VND704-VUV548-WST882-XAF950-XAG961-XAU959-XBA955-\ XBB956-XBC957-XBD958-XCD951-XDR960-XFO000-XFU000-XOF952-XPD964-XPF953-\ - XPT962-XTS963-XXX999-YER886-YUM891-ZAR710-ZMK894-ZWD716-ZWN942 + XPT962-XSU994-XTS963-XUA965-XXX999-YER886-YUM891-ZAR710-ZMK894-ZMW967-ZWD716-ZWL932-\ + ZWN942-ZWR935 # Mappings from ISO 3166 country codes to ISO 4217 currency codes. @@ -71,7 +71,7 @@ # # The table is based on the following web sites: # http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/db_en.html -# http://www.bsi-global.com/iso4217currency +# http://www.currency-iso.org/iso_index/iso_tables.htm # http://www.cia.gov/cia/publications/factbook/indexgeo.html # AFGHANISTAN @@ -105,7 +105,7 @@ # AUSTRIA AT=EUR # AZERBAIJAN -AZ=AZM;2005-12-31-20-00-00;AZN +AZ=AZN # BAHAMAS BS=BSD # BAHRAIN @@ -124,6 +124,8 @@ BJ=XOF # BERMUDA BM=BMD +# Bonaire, Sint Eustatius and Saba +BQ=USD # BHUTAN BT=BTN # BOLIVIA @@ -186,8 +188,10 @@ HR=HRK # CUBA CU=CUP +# Cura\u00e7ao +CW=ANG # CYPRUS -CY=CYP +CY=EUR # CZECH REPUBLIC CZ=CZK # DENMARK @@ -210,7 +214,7 @@ # ERITREA ER=ERN # ESTONIA -EE=EEK +EE=EUR # ETHIOPIA ET=ETB # FALKLAND ISLANDS (MALVINAS) @@ -316,7 +320,7 @@ # LAO PEOPLE'S DEMOCRATIC REPUBLIC LA=LAK # LATVIA -LV=LVL +LV=LVL;2013-12-31-22-00-00;EUR # LEBANON LB=LBP # LESOTHO @@ -328,7 +332,7 @@ # LIECHTENSTEIN LI=CHF # LITHUANIA -LT=LTL +LT=LTL;2014-12-31-22-00-00;EUR # LUXEMBOURG LU=EUR # MACAU @@ -346,7 +350,7 @@ # MALI ML=XOF # MALTA -MT=MTL +MT=EUR # MARSHALL ISLANDS MH=USD # MARTINIQUE @@ -374,7 +378,7 @@ # MOROCCO MA=MAD # MOZAMBIQUE -MZ=MZM;2006-06-30-22-00-00;MZN +MZ=MZN # MYANMAR MM=MMK # NAMIBIA @@ -436,17 +440,21 @@ # REUNION RE=EUR # ROMANIA -RO=ROL;2005-06-30-21-00-00;RON +RO=RON # RUSSIAN FEDERATION RU=RUB # RWANDA RW=RWF +# SAINT BARTHELEMY +BL=EUR # SAINT HELENA SH=SHP # SAINT KITTS AND NEVIS KN=XCD # SAINT LUCIA LC=XCD +# SAINT MARTIN +MF=EUR # SAINT PIERRE AND MIQUELON PM=EUR # SAINT VINCENT AND THE GRENADINES @@ -455,6 +463,8 @@ WS=WST # SAN MARINO SM=EUR +# SOUTH SUDAN +SS=SSP # SAO TOME AND PRINCIPE ST=STD # SAUDI ARABIA @@ -472,7 +482,7 @@ # SINGAPORE SG=SGD # SLOVAKIA -SK=SKK +SK=EUR # SLOVENIA SI=EUR # SOLOMON ISLANDS @@ -493,6 +503,8 @@ SR=SRD # SVALBARD AND JAN MAYEN SJ=NOK +# Sint Maarten (Dutch part) +SX=ANG # SWAZILAND SZ=SZL # SWEDEN @@ -522,9 +534,9 @@ # TUNISIA TN=TND # TURKEY -TR=TRL;2004-12-31-22-00-00;TRY +TR=TRY # TURKMENISTAN -TM=TMM +TM=TMT # TURKS AND CAICOS ISLANDS TC=USD # TUVALU @@ -548,7 +560,7 @@ # VANUATU VU=VUV # VENEZUELA -VE=VEB;2008-01-01-04-00-00;VEF +VE=VEF # VIET NAM VN=VND # VIRGIN ISLANDS, BRITISH @@ -562,9 +574,9 @@ # YEMEN YE=YER # ZAMBIA -ZM=ZMK +ZM=ZMW # ZIMBABWE -ZW=ZWD +ZW=ZWL # List of currencies with 0, 1, OR 3 decimals for minor units, or where there @@ -573,10 +585,10 @@ minor0=\ ADP-BEF-BIF-BYB-BYR-CLF-CLP-DJF-ESP-GNF-\ GRD-ISK-ITL-JPY-KMF-KRW-LUF-MGF-PYG-PTE-RWF-\ - TPE-TRL-VUV-XAF-XOF-XPF + TPE-TRL-UGX-VND-VUV-XAF-XOF-XPF minor1= minor3=\ BHD-IQD-JOD-KWD-LYD-OMR-TND minorUndefined=\ XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-\ - XPT-XTS-XXX + XPT-XSU-XTS-XUA-XXX diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/util/LocaleISOData.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/util/LocaleISOData.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/java/util/LocaleISOData.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/java/util/LocaleISOData.java 2015-01-20 02:17:43.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -250,9 +250,11 @@ + "BH" + "BHR" // Bahrain, Kingdom of + "BI" + "BDI" // Burundi, Republic of + "BJ" + "BEN" // Benin, People's Republic of + + "BL" + "BLM" // Saint Barth\u00e9lemy + "BM" + "BMU" // Bermuda + "BN" + "BRN" // Brunei Darussalam + "BO" + "BOL" // Bolivia, Republic of + + "BQ" + "BES" // Bonaire, Sint Eustatius and Saba + "BR" + "BRA" // Brazil, Federative Republic of + "BS" + "BHS" // Bahamas, Commonwealth of the + "BT" + "BTN" // Bhutan, Kingdom of @@ -273,9 +275,10 @@ + "CN" + "CHN" // China, People's Republic of + "CO" + "COL" // Colombia, Republic of + "CR" + "CRI" // Costa Rica, Republic of - + "CS" + "SCG" // Serbia and Montenegro +// + "CS" + "SCG" // Serbia and Montenegro + "CU" + "CUB" // Cuba, Republic of + "CV" + "CPV" // Cape Verde, Republic of + + "CW" + "CUW" // Cura\u00e7ao + "CX" + "CXR" // Christmas Island + "CY" + "CYP" // Cyprus, Republic of + "CZ" + "CZE" // Czech Republic @@ -363,6 +366,7 @@ + "MC" + "MCO" // Monaco, Principality of + "MD" + "MDA" // Moldova, Republic of + "ME" + "MNE" // Montenegro, Republic of + + "MF" + "MAF" // Saint Martin + "MG" + "MDG" // Madagascar, Republic of + "MH" + "MHL" // Marshall Islands + "MK" + "MKD" // Macedonia, the former Yugoslav Republic of @@ -429,8 +433,10 @@ + "SN" + "SEN" // Senegal, Republic of + "SO" + "SOM" // Somalia, Somali Republic + "SR" + "SUR" // Suriname, Republic of + + "SS" + "SSD" // South Sudan + "ST" + "STP" // Sao Tome and Principe, Democratic Republic of + "SV" + "SLV" // El Salvador, Republic of + + "SX" + "SXM" // Sint Maarten (Dutch part) + "SY" + "SYR" // Syrian Arab Republic + "SZ" + "SWZ" // Swaziland, Kingdom of + "TC" + "TCA" // Turks and Caicos Islands diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/javax/crypto/JarVerifier.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/javax/crypto/JarVerifier.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/javax/crypto/JarVerifier.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/javax/crypto/JarVerifier.java 2015-01-20 02:17:13.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,9 +28,7 @@ import java.io.*; import java.net.*; import java.security.*; -import java.util.*; import java.util.jar.*; -import javax.crypto.CryptoPolicyParser.ParsingException; /** * This class verifies JAR files (and any supporting JAR files), and @@ -135,17 +133,6 @@ } /** - * Verify that the provided JarEntry was indeed signed by the - * framework signing certificate. - * - * @param je the URL of the jar entry to be checked. - * @throws Exception if the jar entry was not signed by - * the proper certificate - */ - static void verifyFrameworkSigned(URL je) throws Exception { - } - - /** * Verify that the provided certs include the * framework signing certificate. * diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/javax/crypto/JceSecurity.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/javax/crypto/JceSecurity.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/javax/crypto/JceSecurity.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/javax/crypto/JceSecurity.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,6 @@ package javax.crypto; -import java.lang.ref.*; import java.util.*; import java.util.jar.*; import java.io.*; @@ -217,26 +216,28 @@ private static final Map codeBaseCacheRef = new WeakHashMap(); /* - * Retuns the CodeBase for the given class. + * Returns the CodeBase for the given class. */ static URL getCodeBase(final Class clazz) { - URL url = (URL)codeBaseCacheRef.get(clazz); - if (url == null) { - url = (URL)AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - ProtectionDomain pd = clazz.getProtectionDomain(); - if (pd != null) { - CodeSource cs = pd.getCodeSource(); - if (cs != null) { - return cs.getLocation(); + synchronized (codeBaseCacheRef) { + URL url = (URL)codeBaseCacheRef.get(clazz); + if (url == null) { + url = (URL)AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + ProtectionDomain pd = clazz.getProtectionDomain(); + if (pd != null) { + CodeSource cs = pd.getCodeSource(); + if (cs != null) { + return cs.getLocation(); + } } + return NULL_URL; } - return NULL_URL; - } - }); - codeBaseCacheRef.put(clazz, url); + }); + codeBaseCacheRef.put(clazz, url); + } + return (url == NULL_URL) ? null : url; } - return (url == NULL_URL) ? null : url; } private static void setupJurisdictionPolicies() throws Exception { @@ -256,11 +257,6 @@ ("Cannot locate policy or framework files!"); } - // Enforce the signer restraint, i.e. signer of JCE framework - // jar should also be the signer of the two jurisdiction policy - // jar files. - JarVerifier.verifyFrameworkSigned(jceCipherURL); - // Read jurisdiction policies. CryptoPermissions defaultExport = new CryptoPermissions(); CryptoPermissions exemptExport = new CryptoPermissions(); diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/javax/net/ssl/SSLSocketFactory.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/javax/net/ssl/SSLSocketFactory.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/javax/net/ssl/SSLSocketFactory.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/javax/net/ssl/SSLSocketFactory.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,6 +30,7 @@ import javax.net.SocketFactory; import java.io.IOException; import java.security.*; +import java.util.Locale; import sun.security.action.GetPropertyAction; @@ -50,7 +51,8 @@ static { String s = java.security.AccessController.doPrivileged( - new GetPropertyAction("javax.net.debug", "")).toLowerCase(); + new GetPropertyAction("javax.net.debug", "")).toLowerCase( + Locale.ENGLISH); DEBUG = s.contains("all") || s.contains("ssl"); } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java 2015-01-20 02:20:42.000000000 +0000 @@ -957,16 +957,9 @@ directories.clear(); - File[] baseFolders; - if (useShellFolder) { - baseFolders = AccessController.doPrivileged(new PrivilegedAction() { - public File[] run() { - return (File[]) ShellFolder.get("fileChooserComboBoxFolders"); - } - }); - } else { - baseFolders = fsv.getRoots(); - } + File[] baseFolders = (useShellFolder) + ? (File[]) ShellFolder.get("fileChooserComboBoxFolders") + : fsv.getRoots(); directories.addAll(Arrays.asList(baseFolders)); // Get the canonical (full) path. This has the side diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/org/jcp/xml/dsig/internal/DigesterOutputStream.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/org/jcp/xml/dsig/internal/DigesterOutputStream.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/org/jcp/xml/dsig/internal/DigesterOutputStream.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/org/jcp/xml/dsig/internal/DigesterOutputStream.java 2015-01-20 02:20:42.000000000 +0000 @@ -19,7 +19,7 @@ * */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. */ /* * $Id: DigesterOutputStream.java,v 1.2 2008/07/24 15:20:31 mullan Exp $ diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14N11Method.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14N11Method.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14N11Method.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14N11Method.java 2015-01-20 02:20:42.000000000 +0000 @@ -19,7 +19,7 @@ * */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. */ /* * $Id: DOMCanonicalXMLC14N11Method.java,v 1.2 2008/07/24 15:20:32 mullan Exp $ diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/org/jcp/xml/dsig/internal/SignerOutputStream.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/org/jcp/xml/dsig/internal/SignerOutputStream.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/org/jcp/xml/dsig/internal/SignerOutputStream.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/org/jcp/xml/dsig/internal/SignerOutputStream.java 2015-01-20 02:20:42.000000000 +0000 @@ -19,7 +19,7 @@ * */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. */ /* * $Id: SignerOutputStream.java,v 1.2 2008/07/24 15:20:31 mullan Exp $ diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/applet/resources/MsgAppletViewer_pt_BR.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/applet/resources/MsgAppletViewer_pt_BR.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/applet/resources/MsgAppletViewer_pt_BR.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/applet/resources/MsgAppletViewer_pt_BR.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,201 @@ +/* + * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package sun.applet.resources; + +import java.util.ListResourceBundle; + +public class MsgAppletViewer_pt_BR extends ListResourceBundle { + + public Object[][] getContents() { + return new Object[][] { + {"textframe.button.dismiss", "Rejeitar"}, + {"appletviewer.tool.title", "Visualizador de applet: {0}"}, + {"appletviewer.menu.applet", "Applet"}, + {"appletviewer.menuitem.restart", "Reiniciar"}, + {"appletviewer.menuitem.reload", "Recarregar"}, + {"appletviewer.menuitem.stop", "Parar"}, + {"appletviewer.menuitem.save", "Salvar..."}, + {"appletviewer.menuitem.start", "Iniciar"}, + {"appletviewer.menuitem.clone", "Clonar..."}, + {"appletviewer.menuitem.tag", "Marca..."}, + {"appletviewer.menuitem.info", "Info..."}, + {"appletviewer.menuitem.edit", "Editar"}, + {"appletviewer.menuitem.encoding", "Codifica\u00e7\u00e3o de caracteres"}, + {"appletviewer.menuitem.print", "Imprimir..."}, + {"appletviewer.menuitem.props", "Propriedades..."}, + {"appletviewer.menuitem.close", "Fechar"}, + {"appletviewer.menuitem.quit", "Sair"}, + {"appletviewer.label.hello", "Ol\u00e1..."}, + {"appletviewer.status.start", "iniciando applet..."}, + {"appletviewer.appletsave.filedialogtitle","Serializar applet no arquivo"}, + {"appletviewer.appletsave.err1", "serializando um {0} para {1}"}, + {"appletviewer.appletsave.err2", "em appletSave: {0}"}, + {"appletviewer.applettag", "Marca exibida"}, + {"appletviewer.applettag.textframe", "Marca HTML do applet"}, + {"appletviewer.appletinfo.applet", "-- sem informa\u00e7\u00f5es do applet --"}, + {"appletviewer.appletinfo.param", "-- sem informa\u00e7\u00f5es do par\u00e2metro --"}, + {"appletviewer.appletinfo.textframe", "Informa\u00e7\u00f5es do applet"}, + {"appletviewer.appletprint.fail", "Falha na impress\u00e3o."}, + {"appletviewer.appletprint.finish", "Impress\u00e3o finalizada."}, + {"appletviewer.appletprint.cancel", "Impress\u00e3o cancelada."}, + {"appletviewer.appletencoding", "Codifica\u00e7\u00e3o de caracteres: {0}"}, + {"appletviewer.parse.warning.requiresname", "Aviso: a marca requer nome do atributo."}, + {"appletviewer.parse.warning.paramoutside", "Aviso: marca fora de ... ."}, + {"appletviewer.parse.warning.applet.requirescode", "Aviso: marca requer c\u00f3digo de atributo."}, + {"appletviewer.parse.warning.applet.requiresheight", "Aviso: marca requer atributo de altura."}, + {"appletviewer.parse.warning.applet.requireswidth", "Aviso: marca requer atributo de largura."}, + {"appletviewer.parse.warning.object.requirescode", "Aviso: marca requer c\u00f3digo de atributo."}, + {"appletviewer.parse.warning.object.requiresheight", "Aviso: marca requer atributo de altura."}, + {"appletviewer.parse.warning.object.requireswidth", "Aviso: marca requer atributo de largura."}, + {"appletviewer.parse.warning.embed.requirescode", "Aviso: marca requer c\u00f3digo de atributo."}, + {"appletviewer.parse.warning.embed.requiresheight", "Aviso: marca requer atributo de altura."}, + {"appletviewer.parse.warning.embed.requireswidth", "Aviso: marca requer atributo de largura."}, + {"appletviewer.parse.warning.appnotLongersupported", "Aviso: marca n\u00e3o mais suportada, usar em seu lugar:"}, + {"appletviewer.usage", "Uso: url(s) de do visualizador de applets\n\nem que inclui:\n -debug inicia o visualizador de applet no depurador Java\n -encoding especifica a codifica\u00e7\u00e3o de caracteres usada pelos arquivos HTML\n -J passa o argumento para o int\u00e9rprete de java\n\nA op\u00e7\u00e3o -J n\u00e3o \u00e9 padr\u00e3o e est\u00e1 sujeita a altera\u00e7\u00f5es sem aviso."}, + {"appletviewer.main.err.unsupportedopt", "Op\u00e7\u00e3o n\u00e3o suportada: {0}"}, + {"appletviewer.main.err.unrecognizedarg", "Argumento n\u00e3o reconhecido: {0}"}, + {"appletviewer.main.err.dupoption", "Uso duplicado da op\u00e7\u00e3o: {0}"}, + {"appletviewer.main.err.inputfile", "Nenhum arquivo de entrada especificado."}, + {"appletviewer.main.err.badurl", "URL incorreto: {0} ( {1} )"}, + {"appletviewer.main.err.io", "Exce\u00e7\u00e3o de E/S durante a leitura: {0}"}, + {"appletviewer.main.err.readablefile", "Certifique-se de que {0} seja um arquivo e seja leg\u00edvel."}, + {"appletviewer.main.err.correcturl", "{0} \u00e9 o URL correto?"}, + {"appletviewer.main.prop.store", "Propriedades espec\u00edficas do usu\u00e1rio para AppletViewer"}, + {"appletviewer.main.err.prop.cantread", "N\u00e3o \u00e9 poss\u00edvel ler o arquivo de propriedades do usu\u00e1rio: {0}"}, + {"appletviewer.main.err.prop.cantsave", "N\u00e3o \u00e9 poss\u00edvel salvar o arquivo de propriedades do usu\u00e1rio: {0}"}, + {"appletviewer.main.warn.nosecmgr", "Aviso: desabilitando a seguran\u00e7a."}, + {"appletviewer.main.debug.cantfinddebug", "N\u00e3o \u00e9 poss\u00edvel localizar o depurador!"}, + {"appletviewer.main.debug.cantfindmain", "N\u00e3o \u00e9 poss\u00edvel localizar o m\u00e9todo principal no depurador!"}, + {"appletviewer.main.debug.exceptionindebug", "Exce\u00e7\u00e3o no depurador!"}, + {"appletviewer.main.debug.cantaccess", "N\u00e3o \u00e9 poss\u00edvel acessar o depurador!"}, + {"appletviewer.main.nosecmgr", "Aviso: SecurityManager n\u00e3o instalado!"}, + {"appletviewer.main.warning", "Aviso: nenhum applet foi iniciado. Certifique-se de que a entrada contenha uma marca ."}, + {"appletviewer.main.warn.prop.overwrite", "Aviso: substituindo temporariamente a propriedade do sistema em solicita\u00e7\u00e3o do usu\u00e1rio: chave: {0} valor antigo: {1} valor novo: {2}"}, + {"appletviewer.main.warn.cantreadprops", "Aviso: n\u00e3o \u00e9 poss\u00edvel ler o arquivo de propriedades do AppletViewer: {0} usando padr\u00f5es."}, + {"appletioexception.loadclass.throw.interrupted", "carregamento de classe interrompido: {0}"}, + {"appletioexception.loadclass.throw.notloaded", "classe n\u00e3o carregada: {0}"}, + {"appletclassloader.loadcode.verbose", "Abrindo fluxo para: {0} para obter {1}"}, + {"appletclassloader.filenotfound", "Arquivo n\u00e3o encontrado ao procurar por: {0}"}, + {"appletclassloader.fileformat", "Exce\u00e7\u00e3o de formato de arquivo ao carregar: {0}"}, + {"appletclassloader.fileioexception", "Exce\u00e7\u00e3o de E/S ao carregar: {0}"}, + {"appletclassloader.fileexception", "Exce\u00e7\u00e3o {0} ao carregar: {0}"}, + {"appletclassloader.filedeath", "{0} eliminado ao carregar: {1}"}, + {"appletclassloader.fileerror", "Erro {0} ao carregar: {1}"}, + {"appletclassloader.findclass.verbose.findclass", "{0} encontra classe {1}"}, + {"appletclassloader.findclass.verbose.openstream", "Abrindo fluxo para: {0} para obter {1}"}, + {"appletclassloader.getresource.verbose.forname", "AppletClassLoader.getResource do nome: {0}"}, + {"appletclassloader.getresource.verbose.found", "Recurso encontrado: {0} como um recurso do sistema"}, + {"appletclassloader.getresourceasstream.verbose", "Recurso encontrado: {0} como um recurso do sistema"}, + {"appletpanel.runloader.err", "Par\u00e2metro de c\u00f3digo ou objeto!"}, + {"appletpanel.runloader.exception", "exce\u00e7\u00e3o ao desserializar {0}"}, + {"appletpanel.destroyed", "Applet destru\u00eddo."}, + {"appletpanel.loaded", "Applet carregado."}, + {"appletpanel.started", "Applet iniciado."}, + {"appletpanel.inited", "Applet inicializado."}, + {"appletpanel.stopped", "Applet interrompido."}, + {"appletpanel.disposed", "Applet descartado."}, + {"appletpanel.nocode", "Marca APPLET ausente no par\u00e2metro CODE."}, + {"appletpanel.notfound", "carregar: classe {0} n\u00e3o encontrada."}, + {"appletpanel.nocreate", "carregar: {0} n\u00e3o pode ser instanciado."}, + {"appletpanel.noconstruct", "carregar: {0} n\u00e3o \u00e9 p\u00fablico ou n\u00e3o possui um construtor p\u00fablico."}, + {"appletpanel.death", "eliminado"}, + {"appletpanel.exception", "exce\u00e7\u00e3o: {0}."}, + {"appletpanel.exception2", "exce\u00e7\u00e3o: {0}: {1}."}, + {"appletpanel.error", "erro: {0}."}, + {"appletpanel.error2", "erro: {0}: {1}."}, + {"appletpanel.notloaded", "Inicializar: applet n\u00e3o carregado."}, + {"appletpanel.notinited", "Iniciar: applet n\u00e3o inicializado."}, + {"appletpanel.notstarted", "Parar: applet n\u00e3o iniciado."}, + {"appletpanel.notstopped", "Destruir: applet n\u00e3o interrompido."}, + {"appletpanel.notdestroyed", "Descartar: applet n\u00e3o destru\u00eddo."}, + {"appletpanel.notdisposed", "Carregar: applet n\u00e3o descartado."}, + {"appletpanel.bail", "Interrompido: salvando."}, + {"appletpanel.filenotfound", "Arquivo n\u00e3o encontrado ao procurar por: {0}"}, + {"appletpanel.fileformat", "Exce\u00e7\u00e3o de formato de arquivo ao carregar: {0}"}, + {"appletpanel.fileioexception", "Exce\u00e7\u00e3o de E/S ao carregar: {0}"}, + {"appletpanel.fileexception", "Exce\u00e7\u00e3o {0} ao carregar: {0}"}, + {"appletpanel.filedeath", "{0} eliminado ao carregar: {1}"}, + {"appletpanel.fileerror", "Erro {0} ao carregar: {1}"}, + {"appletpanel.badattribute.exception", "An\u00e1lise de HTML: valor incorreto do atributo de largura/altura"}, + {"appletillegalargumentexception.objectinputstream", "AppletObjectInputStream requer carregador n\u00e3o nulo"}, + {"appletprops.title", "Propriedades do AppletViewer"}, + {"appletprops.label.http.server", "Servidor proxy de http:"}, + {"appletprops.label.http.proxy", "Porta do proxy de http:"}, + {"appletprops.label.network", "Acesso \u00e0 rede:"}, + {"appletprops.choice.network.item.none", "Nenhum"}, + {"appletprops.choice.network.item.applethost", "Host do applet"}, + {"appletprops.choice.network.item.unrestricted", "N\u00e3o registrado"}, + {"appletprops.label.class", "Acesso \u00e0 classe:"}, + {"appletprops.choice.class.item.restricted", "Restrito"}, + {"appletprops.choice.class.item.unrestricted", "N\u00e3o registrado"}, + {"appletprops.label.unsignedapplet", "Permitir applets n\u00e3o assinados:"}, + {"appletprops.choice.unsignedapplet.no", "N\u00e3o"}, + {"appletprops.choice.unsignedapplet.yes", "Sim"}, + {"appletprops.button.apply", "Aplicar"}, + {"appletprops.button.cancel", "Cancelar"}, + {"appletprops.button.reset", "Redefinir"}, + {"appletprops.apply.exception", "Falha ao salvar propriedades: {0}"}, + /* 4066432 */ + {"appletprops.title.invalidproxy", "Entrada inv\u00e1lida"}, + {"appletprops.label.invalidproxy", "A porta do proxy deve ser um valor inteiro positivo."}, + {"appletprops.button.ok", "OK"}, + /* end 4066432 */ + {"appletprops.prop.store", "Propriedades espec\u00edficas do usu\u00e1rio para AppletViewer"}, + {"appletsecurityexception.checkcreateclassloader", "Exce\u00e7\u00e3o de seguran\u00e7a: classloader"}, + {"appletsecurityexception.checkaccess.thread", "Exce\u00e7\u00e3o de seguran\u00e7a: thread"}, + {"appletsecurityexception.checkaccess.threadgroup", "Exce\u00e7\u00e3o de seguran\u00e7a: threadgroup: {0}"}, + {"appletsecurityexception.checkexit", "Exce\u00e7\u00e3o de seguran\u00e7a: exit: {0}"}, + {"appletsecurityexception.checkexec", "Exce\u00e7\u00e3o de seguran\u00e7a: exec: {0}"}, + {"appletsecurityexception.checklink", "Exce\u00e7\u00e3o de seguran\u00e7a: link: {0}"}, + {"appletsecurityexception.checkpropsaccess", "Exce\u00e7\u00e3o de seguran\u00e7a: properties"}, + {"appletsecurityexception.checkpropsaccess.key", "Exce\u00e7\u00e3o de seguran\u00e7a: properties access {0}"}, + {"appletsecurityexception.checkread.exception1", "Exce\u00e7\u00e3o de seguran\u00e7a: {0}, {1}"}, + {"appletsecurityexception.checkread.exception2", "Exce\u00e7\u00e3o de seguran\u00e7a: file.read: {0}"}, + {"appletsecurityexception.checkread", "Exce\u00e7\u00e3o de seguran\u00e7a: file.read: {0} == {1}"}, + {"appletsecurityexception.checkwrite.exception", "Exce\u00e7\u00e3o de seguran\u00e7a: {0}, {1}"}, + {"appletsecurityexception.checkwrite", "Exce\u00e7\u00e3o de seguran\u00e7a: file.write: {0} == {1}"}, + {"appletsecurityexception.checkread.fd", "Exce\u00e7\u00e3o de seguran\u00e7a: fd.read"}, + {"appletsecurityexception.checkwrite.fd", "Exce\u00e7\u00e3o de seguran\u00e7a: fd.write"}, + {"appletsecurityexception.checklisten", "Exce\u00e7\u00e3o de seguran\u00e7a: socket.listen: {0}"}, + {"appletsecurityexception.checkaccept", "Exce\u00e7\u00e3o de seguran\u00e7a: socket.accept: {0} == {1}"}, + {"appletsecurityexception.checkconnect.networknone", "Exce\u00e7\u00e3o de seguran\u00e7a: socket.connect: {0} == {1}"}, + {"appletsecurityexception.checkconnect.networkhost1", "Exce\u00e7\u00e3o de seguran\u00e7a: n\u00e3o foi poss\u00edvel conectar a {0} com a origem de {1}."}, + {"appletsecurityexception.checkconnect.networkhost2", "Exce\u00e7\u00e3o de seguran\u00e7a: n\u00e3o foi poss\u00edvel resolver o IP para o host {0} ou para {1}. "}, + {"appletsecurityexception.checkconnect.networkhost3", "Exce\u00e7\u00e3o de seguran\u00e7a: n\u00e3o foi poss\u00edvel resolver o IP para o host {0}. Consulte a propriedade trustProxy."}, + {"appletsecurityexception.checkconnect", "Exce\u00e7\u00e3o de seguran\u00e7a: connect: {0}->{1}"}, + {"appletsecurityexception.checkpackageaccess", "Exce\u00e7\u00e3o de seguran\u00e7a: n\u00e3o \u00e9 poss\u00edvel acessar o pacote: {0}"}, + {"appletsecurityexception.checkpackagedefinition", "Exce\u00e7\u00e3o de seguran\u00e7a: n\u00e3o \u00e9 poss\u00edvel definir o pacote: {0}"}, + {"appletsecurityexception.cannotsetfactory", "Exce\u00e7\u00e3o de seguran\u00e7a: n\u00e3o \u00e9 poss\u00edvel definir a f\u00e1brica"}, + {"appletsecurityexception.checkmemberaccess", "Exce\u00e7\u00e3o de seguran\u00e7a: verificar acesso de membro"}, + {"appletsecurityexception.checkgetprintjob", "Exce\u00e7\u00e3o de seguran\u00e7a: getPrintJob"}, + {"appletsecurityexception.checksystemclipboardaccess", "Exce\u00e7\u00e3o de seguran\u00e7a: getSystemClipboard"}, + {"appletsecurityexception.checkawteventqueueaccess", "Exce\u00e7\u00e3o de seguran\u00e7a: getEventQueue"}, + {"appletsecurityexception.checksecurityaccess", "Exce\u00e7\u00e3o de seguran\u00e7a: opera\u00e7\u00e3o de seguran\u00e7a: {0}"}, + {"appletsecurityexception.getsecuritycontext.unknown", "tipo desconhecido de carregador de classe. n\u00e3o \u00e9 poss\u00edvel verificar para getContext"}, + {"appletsecurityexception.checkread.unknown", "tipo desconhecido de carregador de classe. n\u00e3o \u00e9 poss\u00edvel verificar para verifica\u00e7\u00e3o de leitura {0}"}, + {"appletsecurityexception.checkconnect.unknown", "tipo desconhecido de carregador de classe. n\u00e3o \u00e9 poss\u00edvel verificar para verifica\u00e7\u00e3o de conex\u00e3o"}, + }; + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/awt/AWTAccessor.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/awt/AWTAccessor.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/awt/AWTAccessor.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/awt/AWTAccessor.java 2015-01-20 02:20:42.000000000 +0000 @@ -287,6 +287,11 @@ */ void invokeAndWait(Object source, Runnable r) throws InterruptedException, InvocationTargetException; + + /** + * Gets most recent event time in the EventQueue + */ + long getMostRecentEventTime(EventQueue eventQueue); } /** diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/awt/image/FileImageSource.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/awt/image/FileImageSource.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/awt/image/FileImageSource.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/awt/image/FileImageSource.java 2015-01-20 02:20:42.000000000 +0000 @@ -48,6 +48,10 @@ } protected ImageDecoder getDecoder() { + if (imagefile == null) { + return null; + } + InputStream is; try { is = new BufferedInputStream(new FileInputStream(imagefile)); diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/awt/resources/awt_pt_BR.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/awt/resources/awt_pt_BR.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/awt/resources/awt_pt_BR.properties 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/awt/resources/awt_pt_BR.properties 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,191 @@ +# +# AWT-specific properties +# + +# Modifier names +AWT.shift=Shift +AWT.control=Ctrl +AWT.alt=Alt +AWT.meta=Meta +AWT.altGraph=Alt Graph + +# Key names +AWT.enter=Enter +AWT.backSpace=Backspace +AWT.tab=Tab +AWT.cancel=Cancelar +AWT.clear=Limpar +AWT.pause=Pausar +AWT.capsLock=Caps Lock +AWT.escape=Escape +AWT.space=Barra de espa\u00e7o +AWT.pgup=P\u00e1gina acima +AWT.pgdn=P\u00e1gina abaixo +AWT.end=Fim +AWT.home=In\u00edcio +AWT.left=Esquerda +AWT.up=Acima +AWT.right=Direita +AWT.down=Abaixo +AWT.begin=Come\u00e7ar +AWT.comma=V\u00edrgula +AWT.period=Ponto final +AWT.slash=Barra +AWT.semicolon=Ponto-e-v\u00edrgula +AWT.equals=Igual +AWT.openBracket=Abrir par\u00eantese +AWT.backSlash=Barra invertida +AWT.closeBracket=Fechar par\u00eantese +AWT.multiply=Teclado num\u00e9rico * +AWT.add=Teclado num\u00e9rico + +AWT.separator=Teclado num\u00e9rico , +AWT.separater=Teclado num\u00e9rico , +AWT.subtract=Teclado num\u00e9rico - +AWT.decimal=Teclado num\u00e9rico . +AWT.divide=Teclado num\u00e9rico / +AWT.delete=Excluir +AWT.numLock=Num Lock +AWT.scrollLock=Scroll Lock +AWT.f1=F1 +AWT.f2=F2 +AWT.f3=F3 +AWT.f4=F4 +AWT.f5=F5 +AWT.f6=F6 +AWT.f7=F7 +AWT.f8=F8 +AWT.f9=F9 +AWT.f10=F10 +AWT.f11=F11 +AWT.f12=F12 +AWT.f13=F13 +AWT.f14=F14 +AWT.f15=F15 +AWT.f16=F16 +AWT.f17=F17 +AWT.f18=F18 +AWT.f19=F19 +AWT.f20=F20 +AWT.f21=F21 +AWT.f22=F22 +AWT.f23=F23 +AWT.f24=F24 +AWT.printScreen=Imprimir tela +AWT.insert=Inserir +AWT.help=Ajuda +AWT.windows=Windows +AWT.context=Menu de contexto +AWT.backQuote=Crase +AWT.quote=Aspas +AWT.deadGrave=Acento grave +AWT.deadAcute=Acento agudo +AWT.deadCircumflex=Acento circunflexo +AWT.deadTilde=Til +AWT.deadMacron=M\u00e1cron +AWT.deadBreve=Braquia +AWT.deadAboveDot=Ponto em cima +AWT.deadDiaeresis=Trema +AWT.deadAboveRing=S\u00edmbolo do grau +AWT.deadDoubleAcute=Acento agudo duplo +AWT.deadCaron=Acento circunflexo invertido +AWT.deadCedilla=Cedilha +AWT.deadOgonek=Ogonek +AWT.deadIota=Iota +AWT.deadVoicedSound=Som sonoro +AWT.deadSemivoicedSound=Som surdo +AWT.ampersand=E comercial +AWT.asterisk=Asterisco +AWT.quoteDbl=Aspas duplas +AWT.Less=Menos +AWT.greater=Maior +AWT.braceLeft=Chave esquerda +AWT.braceRight=Chave direta +AWT.at=Arroba +AWT.colon=V\u00edrgula +AWT.circumflex=Circunflexo +AWT.dollar=D\u00f3lar +AWT.euro=Euro +AWT.exclamationMark=Ponto de exclama\u00e7\u00e3o +AWT.invertedExclamationMark=Ponto de exclama\u00e7\u00e3o invertido +AWT.leftParenthesis=Par\u00eantese esquerdo +AWT.numberSign=Sinal num\u00e9rico +AWT.plus=Mais +AWT.minus=Menos +AWT.rightParenthesis=Par\u00eantese direito +AWT.underscore=Sublinhado +AWT.final=Final +AWT.convert=Converter +AWT.noconvert=N\u00e3o converter +AWT.accept=Aceitar +AWT.modechange=Altera\u00e7\u00e3o de modo +AWT.kana=Kana +AWT.kanji=Kanji +AWT.alphanumeric=Alfanum\u00e9rico +AWT.katakana=Katakana +AWT.hiragana=Hiragana +AWT.fullWidth=Largura total +AWT.halfWidth=Meia largura +AWT.romanCharacters=Caracteres romanos +AWT.allCandidates=Todos os candidatos +AWT.previousCandidate=Candidato anterior +AWT.codeInput=Entrada de c\u00f3digo +AWT.japaneseKatakana=Katakana japon\u00eas +AWT.japaneseHiragana=Hiragana japon\u00eas +AWT.japaneseRoman=Romano japon\u00eas +AWT.kanaLock=Kana Lock +AWT.inputMethodOnOff=M\u00e9todo de entrada ativado/desativado +AWT.again=Novamente +AWT.undo=Desfazer +AWT.copy=Copiar +AWT.paste=Colar +AWT.cut=Recortar +AWT.find=Localizar +AWT.props=Props +AWT.stop=Parar +AWT.compose=Compor + +# Numeric Keypad +AWT.numpad=Teclado num\u00e9rico +AWT.unknown=Desconhecido +AWT.undefined=Indefinido + +# Predefined cursor names +AWT.DefaultCursor=Cursor padr\u00e3o +AWT.CrosshairCursor=Cursor em forma de cruz +AWT.TextCursor=Cursor de texto +AWT.WaitCursor=Cursor em forma de ampulheta +AWT.SWResizeCursor=Cursor de seta que aponta para sudoeste +AWT.SEResizeCursor=Cursor de seta que aponta para sudeste +AWT.NWResizeCursor=Cursor de seta que aponta para noroeste +AWT.NEResizeCursor=Cursor de seta que aponta para nordeste +AWT.NResizeCursor=Cursor de seta que aponta para cima +AWT.SResizeCursor=Cursor de seta que aponta para baixo +AWT.WResizeCursor=Cursor de seta que aponta \u00e0 esquerda +AWT.EResizeCursor=Cursor de seta que aponta \u00e0 direita +AWT.HandCursor=Cursor em forma de m\u00e3o +AWT.MoveCursor=Cursor de movimento +AWT.DefaultDragCursor=Cursor padr\u00e3o de arrastar +AWT.DefaultNoDropCursor=Cursor padr\u00e3o sem arrasto +AWT.DefaultDropCursor=Cursor padr\u00e3o de soltar + +# Input method related strings +AWT.CompositionWindowTitle=Janela de entrada +AWT.InputMethodSelectionMenu=Selecionar m\u00e9todo de entrada +AWT.HostInputMethodDisplayName=M\u00e9todos de entrada do sistema +AWT.InputMethodLanguage.ja=Japon\u00eas +AWT.InputMethodLanguage.ko=Coreano +AWT.InputMethodLanguage.zh=Chin\u00eas +AWT.InputMethodLanguage.zh_CN=Chin\u00eas simplificado +AWT.InputMethodLanguage.zh_TW=Chin\u00eas tradicional +AWT.InputMethodCreationFailed=N\u00e3o foi poss\u00edvel criar {0}. Raz\u00e3o: {1} + +# Property to select between on-the-spot and below-the-spot +# composition with input methods. Valid values: +# "on-the-spot", "below-the-spot". +# May be overridden from command line. +java.awt.im.style=no momento +java.awt.def.delay=30 + +# Warnings +AWT.InconsistentDLLsWarning=As opera\u00e7\u00f5es baseadas em texto podem n\u00e3o funcionar corretamente devido a um conjunto incoerente de bibliotecas de vincula\u00e7\u00e3o din\u00e2mica (DLLs) instalado no seu sistema. Para obter mais informa\u00e7\u00f5es sobre este problema e uma solu\u00e7\u00e3o recomendada, consulte as Notas de vers\u00e3o do Java(TM) 2 SDK, Standard Edition em java.sun.com. + diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/java2d/opengl/OGLSurfaceDataProxy.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/java2d/opengl/OGLSurfaceDataProxy.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/java2d/opengl/OGLSurfaceDataProxy.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/java2d/opengl/OGLSurfaceDataProxy.java 2015-01-20 02:20:42.000000000 +0000 @@ -65,7 +65,11 @@ int w, int h) { if (cachedData == null) { - cachedData = oglgc.createManagedSurface(w, h, transparency); + try { + cachedData = oglgc.createManagedSurface(w, h, transparency); + } catch (OutOfMemoryError er) { + return null; + } } return cachedData; } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/launcher/resources/launcher_pt_BR.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/launcher/resources/launcher_pt_BR.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/launcher/resources/launcher_pt_BR.properties 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/launcher/resources/launcher_pt_BR.properties 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,116 @@ +# +# Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# Translators please note do not translate the options themselves +java.launcher.opt.header = Usage: {0} [-options] class [args...]\n\ +\ (to execute a class)\n or {0} [-options] -jar jarfile [args...]\n\ +\ (to execute a jar file)\n\ +where options include:\n + +java.launcher.opt.datamodel =\ -d{0}\t use a {0}-bit data model if available\n +java.launcher.opt.vmselect =\ {0}\t to select the "{1}" VM\n +java.launcher.opt.hotspot =\ {0}\t is a synonym for the "{1}" VM [deprecated]\n + +java.launcher.ergo.message1 =\ The default VM is {0} +java.launcher.ergo.message2 =\ because you are running on a server-class machine.\n + +# Translators please note do not translate the options themselves +java.launcher.opt.footer =\ -cp \n\ +\ -classpath \n\ +\ A {0} separated list of directories, JAR archives,\n\ +\ and ZIP archives to search for class files.\n\ +\ -D=\n\ +\ set a system property\n\ +\ -verbose[:class|gc|jni]\n\ +\ enable verbose output\n\ +\ -version print product version and exit\n\ +\ -version:\n\ +\ require the specified version to run\n\ +\ -showversion print product version and continue\n\ +\ -jre-restrict-search | -no-jre-restrict-search\n\ +\ include/exclude user private JREs in the version search\n\ +\ -? -help print this help message\n\ +\ -X print help on non-standard options\n\ +\ -ea[:...|:]\n\ +\ -enableassertions[:...|:]\n\ +\ enable assertions with specified granularity\n\ +\ -da[:...|:]\n\ +\ -disableassertions[:...|:]\n\ +\ disable assertions with specified granularity\n\ +\ -esa | -enablesystemassertions\n\ +\ enable system assertions\n\ +\ -dsa | -disablesystemassertions\n\ +\ disable system assertions\n\ +\ -agentlib:[=]\n\ +\ load native agent library , e.g. -agentlib:hprof\n\ +\ see also, -agentlib:jdwp=help and -agentlib:hprof=help\n\ +\ -agentpath:[=]\n\ +\ load native agent library by full pathname\n\ +\ -javaagent:[=]\n\ +\ load Java programming language agent, see java.lang.instrument\n\ +\ -splash:\n\ +\ show splash screen with specified image\n\ +See http://java.sun.com/javase/reference for more details. + +# Translators please note do not translate the options themselves +java.launcher.X.usage=\ +\ -Xmixed mixed mode execution (default)\n\ +\ -Xint interpreted mode execution only\n\ +\ -Xbootclasspath:\n\ +\ set search path for bootstrap classes and resources\n\ +\ -Xbootclasspath/a:\n\ +\ append to end of bootstrap class path\n\ +\ -Xbootclasspath/p:\n\ +\ prepend in front of bootstrap class path\n\ +\ -Xnoclassgc disable class garbage collection\n\ +\ -Xincgc enable incremental garbage collection\n\ +\ -Xloggc: log GC status to a file with time stamps\n\ +\ -Xbatch disable background compilation\n\ +\ -Xms set initial Java heap size\n\ +\ -Xmx set maximum Java heap size\n\ +\ -Xss set java thread stack size\n\ +\ -Xprof output cpu profiling data\n\ +\ -Xfuture enable strictest checks, anticipating future default\n\ +\ -Xrs reduce use of OS signals by Java/VM (see documentation)\n\ +\ -Xcheck:jni perform additional checks for JNI functions\n\ +\ -Xshare:off do not attempt to use shared class data\n\ +\ -Xshare:auto use shared class data if possible (default)\n\ +\ -Xshare:on require using shared class data, otherwise fail.\n\n\ +The -X options are non-standard and subject to change without notice.\n + +java.launcher.cls.error1=\ + Error: Could not find main class {0} +java.launcher.cls.error2=\ + Error: Main method is not {0} in class {1}, please define the main method as:\n\ +\ public static void main(String[] args) +java.launcher.cls.error3=\ + Error: Main method must return a value of type void in class {0}, please \n\ + define the main method as:\n\ +\ public static void main(String[] args) +java.launcher.cls.error4=\ + Error: Main method not found in class {0}, please define the main method as:\n\ +\ public static void main(String[] args) + + diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/management/resources/agent_pt_BR.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/management/resources/agent_pt_BR.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/management/resources/agent_pt_BR.properties 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/management/resources/agent_pt_BR.properties 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,92 @@ +# +# +# Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# Localizations for Level names. For the US locale +# these are the same as the non-localized level name. + +agent.err.error = Erro +agent.err.exception = Exce\u00e7\u00e3o lan\u00e7ada pelo agente +agent.err.warning = Aviso + +agent.err.configfile.notfound = Arquivo de configura\u00e7\u00e3o n\u00e3o encontrado +agent.err.configfile.failed = Falha ao ler o arquivo de configura\u00e7\u00e3o +agent.err.configfile.closed.failed = Falha ao fechar o arquivo de configura\u00e7\u00e3o +agent.err.configfile.access.denied = Acesso negado ao arquivo de configura\u00e7\u00e3o + +agent.err.exportaddress.failed = Falha na exporta\u00e7\u00e3o do endere\u00e7o do conector JMX para o buffer de instrumenta\u00e7\u00e3o + +agent.err.agentclass.notfound = Classe do agente de gerenciamento n\u00e3o encontrada +agent.err.agentclass.failed = Classe do agente de gerenciamento falha +agent.err.premain.notfound = premain(String) n\u00e3o existe na classe do agente +agent.err.agentclass.access.denied = Acesso negado a premain(String) +agent.err.invalid.agentclass = Valor inv\u00e1lido da propriedade com.sun.management.agent.class + +agent.err.invalid.jmxremote.port = N\u00famero inv\u00e1lido de com.sun.management.jmxremote.port + +agent.err.file.not.set = Arquivo n\u00e3o especificado +agent.err.file.not.readable = Arquivo ileg\u00edvel +agent.err.file.read.failed = Falha ao ler o arquivo +agent.err.file.not.found = Arquivo n\u00e3o encontrado +agent.err.file.access.not.restricted = O acesso de leitura do arquivo deve ser limitado + +agent.err.password.file.notset = O arquivo de senha n\u00e3o est\u00e1 especificado, mas com.sun.management.jmxremote.authenticate=true +agent.err.password.file.not.readable = Arquivo de senha ileg\u00edvel +agent.err.password.file.read.failed = Falha ao ler o arquivo de senha +agent.err.password.file.notfound = Arquivo de senha n\u00e3o encontrado +agent.err.password.file.access.notrestricted = O acesso de leitura do arquivo de senha deve ser limitado + +agent.err.access.file.notset = O arquivo de acesso n\u00e3o est\u00e1 especificado, mas com.sun.management.jmxremote.authenticate=true +agent.err.access.file.not.readable = Arquivo de acesso ileg\u00edvel +agent.err.access.file.read.failed = Falha ao ler o arquivo de acesso +agent.err.access.file.notfound = Arquivo de acesso n\u00e3o encontrado + +agent.err.connector.server.io.error = Erro de comunica\u00e7\u00e3o do servidor do conector JMX + +agent.err.invalid.option = Op\u00e7\u00e3o especificada inv\u00e1lida +agent.err.invalid.snmp.port = N\u00famero inv\u00e1lido de com.sun.management.snmp.port +agent.err.invalid.snmp.trap.port = N\u00famero inv\u00e1lido de com.sun.management.snmp.trap +agent.err.unknown.snmp.interface = Interface SNMP desconhecida +agent.err.acl.file.notset = N\u00e3o h\u00e1 nenhum arquivo ACL SNMP especificado, mas com.sun.management.snmp.acl=true +agent.err.acl.file.notfound = Arquivo ACL SNMP n\u00e3o encontrado +agent.err.acl.file.not.readable = Arquivo ACL SNMP ileg\u00edvel +agent.err.acl.file.read.failed = Falha ao ler o arquivo ACL SNMP +agent.err.acl.file.access.notrestricted = O acesso de leitura do arquivo de senha deve ser limitado + +agent.err.snmp.adaptor.start.failed = Falha ao iniciar o adaptador SNMP com endere\u00e7o +agent.err.snmp.mib.init.failed = Falha ao inicializar o MIB SNMP com erro + +jmxremote.ConnectorBootstrap.initialize = Iniciando o servidor do conector JMX: +jmxremote.ConnectorBootstrap.initialize.noAuthentication = Sem autentica\u00e7\u00e3o +jmxremote.ConnectorBootstrap.initialize.ready = Conector JMX pronto em: {0} +jmxremote.ConnectorBootstrap.initialize.password.readonly = O acesso de leitura do arquivo de senha deve ser limitado: {0} +jmxremote.ConnectorBootstrap.initialize.file.readonly = O acesso de leitura do arquivo deve ser limitado: {0} + +jmxremote.AdaptorBootstrap.getTargetList.processing = Processando ACL +jmxremote.AdaptorBootstrap.getTargetList.adding = Adicionando destino: {0} +jmxremote.AdaptorBootstrap.getTargetList.starting = Iniciando o servidor do adaptador: +jmxremote.AdaptorBootstrap.getTargetList.initialize1 = Adaptador pronto. +jmxremote.AdaptorBootstrap.getTargetList.initialize2 = Adaptador SNMP pronto em: {0}:{1} +jmxremote.AdaptorBootstrap.getTargetList.terminate = conclu\u00eddo {0} diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/misc/JavaLangAccess.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/misc/JavaLangAccess.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/misc/JavaLangAccess.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/misc/JavaLangAccess.java 2015-01-20 02:17:24.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,10 +35,10 @@ ConstantPool getConstantPool(Class klass); /** - * Set the AnnotationType instance corresponding to this class. + * Compare-And-Swap the AnnotationType instance corresponding to this class. * (This method only applies to annotation types.) */ - void setAnnotationType(Class klass, AnnotationType annotationType); + boolean casAnnotationType(Class klass, AnnotationType oldType, AnnotationType newType); /** * Get the AnnotationType instance corresponding to this class. @@ -47,6 +47,12 @@ AnnotationType getAnnotationType(Class klass); /** + * Get the array of bytes that is the class-file representation + * of this Class' annotations. + */ + byte[] getRawClassAnnotations(Class klass); + + /** * Returns the elements of an enum class or null if the * Class object does not represent an enum type; * the result is uncloned, cached, and shared by all callers. diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/misc/resources/Messages_pt_BR.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/misc/resources/Messages_pt_BR.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/misc/resources/Messages_pt_BR.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/misc/resources/Messages_pt_BR.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.misc.resources; + +/** + *

This class represents the ResourceBundle + * for sun.misc. + * + * @author Michael Colburn + * @version 1.5, 11/17/05 + */ + +public class Messages_pt_BR extends java.util.ListResourceBundle { + + /** + * Returns the contents of this ResourceBundle. + *

+ * @return the contents of this ResourceBundle. + */ + public Object[][] getContents() { + return contents; + } + + private static final Object[][] contents = { + { "optpkg.versionerror", "ERRO: formato de vers\u00e3o inv\u00e1lido usado no arquivo jar {0}. Verifique a documenta\u00e7\u00e3o para obter o formato de vers\u00e3o suportado." }, + { "optpkg.attributeerror", "ERRO: o atributo de manifesto JAR {0} necess\u00e1rio n\u00e3o est\u00e1 definido no arquivo JAR {1}." }, + { "optpkg.attributeserror", "ERRO: alguns atributos de manifesto JAR necess\u00e1rios n\u00e3o est\u00e3o definidos no arquivo JAR {0}." } + }; + +} \ No newline at end of file diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/ProgressEvent.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/ProgressEvent.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/ProgressEvent.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/ProgressEvent.java 2015-01-20 02:20:42.000000000 +0000 @@ -40,16 +40,16 @@ // method associated with URL private String method; // bytes read - private int progress; + private long progress; // bytes expected - private int expected; + private long expected; // the last thing to happen private ProgressSource.State state; /** * Construct a ProgressEvent object. */ - public ProgressEvent(ProgressSource source, URL url, String method, String contentType, ProgressSource.State state, int progress, int expected) { + public ProgressEvent(ProgressSource source, URL url, String method, String contentType, ProgressSource.State state, long progress, long expected) { super(source); this.url = url; this.method = method; @@ -86,7 +86,7 @@ /** * Return current progress value. */ - public int getProgress() + public long getProgress() { return progress; } @@ -94,7 +94,7 @@ /** * Return expected maximum progress value; -1 if expected is unknown. */ - public int getExpected() { + public long getExpected() { return expected; } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/ProgressSource.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/ProgressSource.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/ProgressSource.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/ProgressSource.java 2015-01-20 02:20:42.000000000 +0000 @@ -42,11 +42,11 @@ // Content type private String contentType; // bytes read - private int progress = 0; + private long progress = 0; // last bytes read - private int lastProgress = 0; + private long lastProgress = 0; //bytes expected - private int expected = -1; + private long expected = -1; // the last thing to happen with this source private State state; // connect flag @@ -66,7 +66,7 @@ /** * Construct progress source object. */ - public ProgressSource(URL url, String method, int expected) { + public ProgressSource(URL url, String method, long expected) { this.url = url; this.method = method; this.contentType = "content/unknown"; @@ -123,14 +123,14 @@ /** * Return current progress. */ - public int getProgress() { + public long getProgress() { return progress; } /** * Return expected maximum progress; -1 if expected is unknown. */ - public int getExpected() { + public long getExpected() { return expected; } @@ -158,7 +158,7 @@ /** * Update progress. */ - public void updateProgress(int latestProgress, int expectedProgress) { + public void updateProgress(long latestProgress, long expectedProgress) { lastProgress = progress; progress = latestProgress; expected = expectedProgress; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/http/ChunkedOutputStream.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/http/ChunkedOutputStream.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/http/ChunkedOutputStream.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/http/ChunkedOutputStream.java 2015-01-20 02:20:42.000000000 +0000 @@ -29,32 +29,58 @@ /** * OutputStream that sends the output to the underlying stream using chunked * encoding as specified in RFC 2068. - * - * @author Alan Bateman */ public class ChunkedOutputStream extends PrintStream { /* Default chunk size (including chunk header) if not specified */ static final int DEFAULT_CHUNK_SIZE = 4096; + private static final byte[] CRLF = {'\r', '\n'}; + private static final int CRLF_SIZE = CRLF.length; + private static final byte[] FOOTER = CRLF; + private static final int FOOTER_SIZE = CRLF_SIZE; + private static final byte[] EMPTY_CHUNK_HEADER = getHeader(0); + private static final int EMPTY_CHUNK_HEADER_SIZE = getHeaderSize(0); /* internal buffer */ private byte buf[]; + /* size of data (excluding footers and headers) already stored in buf */ + private int size; + /* current index in buf (i.e. buf[count] */ private int count; + /* number of bytes to be filled up to complete a data chunk + * currently being built */ + private int spaceInCurrentChunk; /* underlying stream */ private PrintStream out; /* the chunk size we use */ - private int preferredChunkSize; - - /* if the users write buffer is bigger than this size, we - * write direct from the users buffer instead of copying - */ - static final int MAX_BUF_SIZE = 10 * 1024; + private int preferredChunkDataSize; + private int preferedHeaderSize; + private int preferredChunkGrossSize; + /* header for a complete Chunk */ + private byte[] completeHeader; /* return the size of the header for a particular chunk size */ - private int headerSize(int size) { - return 2 + (Integer.toHexString(size)).length(); + private static int getHeaderSize(int size) { + return (Integer.toHexString(size)).length() + CRLF_SIZE; + } + + /* return a header for a particular chunk size */ + private static byte[] getHeader(int size){ + try { + String hexStr = Integer.toHexString(size); + byte[] hexBytes = hexStr.getBytes("US-ASCII"); + byte[] header = new byte[getHeaderSize(size)]; + for (int i=0; i 0) { - int adjusted_size = size - headerSize(size); - if (adjusted_size + headerSize(adjusted_size) < size) { + int adjusted_size = size - getHeaderSize(size) - FOOTER_SIZE; + if (getHeaderSize(adjusted_size+1) < getHeaderSize(size)){ adjusted_size++; } size = adjusted_size; } if (size > 0) { - preferredChunkSize = size; + preferredChunkDataSize = size; } else { - preferredChunkSize = DEFAULT_CHUNK_SIZE - headerSize(DEFAULT_CHUNK_SIZE); + preferredChunkDataSize = DEFAULT_CHUNK_SIZE - + getHeaderSize(DEFAULT_CHUNK_SIZE) - FOOTER_SIZE; } + preferedHeaderSize = getHeaderSize(preferredChunkDataSize); + preferredChunkGrossSize = preferedHeaderSize + preferredChunkDataSize + + FOOTER_SIZE; + completeHeader = getHeader(preferredChunkDataSize); + /* start with an initial buffer */ - buf = new byte[preferredChunkSize + 32]; + buf = new byte[preferredChunkGrossSize]; + reset(); } /* - * If flushAll is true, then all data is flushed in one chunk. - * - * If false and the size of the buffer data exceeds the preferred - * chunk size then chunks are flushed to the output stream. - * If there isn't enough data to make up a complete chunk, - * then the method returns. + * Flush a buffered, completed chunk to an underlying stream. If the data in + * the buffer is insufficient to build up a chunk of "preferredChunkSize" + * then the data do not get flushed unless flushAll is true. If flushAll is + * true then the remaining data builds up a last chunk which size is smaller + * than preferredChunkSize, and then the last chunk gets flushed to + * underlying stream. If flushAll is true and there is no data in a buffer + * at all then an empty chunk (containing a header only) gets flushed to + * underlying stream. */ - private void flush(byte[] buf, boolean flushAll) { - flush (buf, flushAll, 0); - } - - private void flush(byte[] buf, boolean flushAll, int offset) { - int chunkSize; + private void flush(boolean flushAll) { + if (spaceInCurrentChunk == 0) { + /* flush a completed chunk to underlying stream */ + out.write(buf, 0, preferredChunkGrossSize); + out.flush(); + reset(); + } else if (flushAll){ + /* complete the last chunk and flush it to underlying stream */ + if (size > 0){ + /* adjust a header start index in case the header of the last + * chunk is shorter then preferedHeaderSize */ + + int adjustedHeaderStartIndex = preferedHeaderSize - + getHeaderSize(size); + + /* write header */ + System.arraycopy(getHeader(size), 0, buf, + adjustedHeaderStartIndex, getHeaderSize(size)); + + /* write footer */ + buf[count++] = FOOTER[0]; + buf[count++] = FOOTER[1]; - do { - if (count < preferredChunkSize) { - if (!flushAll) { - break; - } - chunkSize = count; + //send the last chunk to underlying stream + out.write(buf, adjustedHeaderStartIndex, count - adjustedHeaderStartIndex); } else { - chunkSize = preferredChunkSize; - } - - byte[] bytes = null; - try { - bytes = (Integer.toHexString(chunkSize)).getBytes("US-ASCII"); - } catch (java.io.UnsupportedEncodingException e) { - //This should never happen. - throw new InternalError(e.getMessage()); + //send an empty chunk (containing just a header) to underlying stream + out.write(EMPTY_CHUNK_HEADER, 0, EMPTY_CHUNK_HEADER_SIZE); } - out.write(bytes, 0, bytes.length); - out.write((byte)'\r'); - out.write((byte)'\n'); - if (chunkSize > 0) { - out.write(buf, offset, chunkSize); - out.write((byte)'\r'); - out.write((byte)'\n'); - } out.flush(); - if (checkError()) { - break; - } - if (chunkSize > 0) { - count -= chunkSize; - offset += chunkSize; - } - } while (count > 0); - - if (!checkError() && count > 0) { - System.arraycopy(buf, offset, this.buf, 0, count); - } + reset(); + } } + @Override public boolean checkError() { return out.checkError(); } - /* - * Check if we have enough data for a chunk and if so flush to the - * underlying output stream. - */ - private void checkFlush() { - if (count >= preferredChunkSize) { - flush(buf, false); - } - } - /* Check that the output stream is still open */ private void ensureOpen() { if (out == null) setError(); } + /* + * Writes data from b[] to an internal buffer and stores the data as data + * chunks of a following format: {Data length in Hex}{CRLF}{data}{CRLF} + * The size of the data is preferredChunkSize. As soon as a completed chunk + * is read from b[] a process of reading from b[] suspends, the chunk gets + * flushed to the underlying stream and then the reading process from b[] + * continues. When there is no more sufficient data in b[] to build up a + * chunk of preferredChunkSize size the data get stored as an incomplete + * chunk of a following format: {space for data length}{CRLF}{data} + * The size of the data is of course smaller than preferredChunkSize. + */ + @Override public synchronized void write(byte b[], int off, int len) { ensureOpen(); if ((off < 0) || (off > b.length) || (len < 0) || @@ -177,72 +206,95 @@ return; } - if (len > MAX_BUF_SIZE) { - /* first finish the current chunk */ - int l = preferredChunkSize - count; - if (l > 0) { - System.arraycopy(b, off, buf, count, l); - count = preferredChunkSize; - flush(buf, false); + /* if b[] contains enough data then one loop cycle creates one complete + * data chunk with a header, body and a footer, and then flushes the + * chunk to the underlying stream. Otherwise, the last loop cycle + * creates incomplete data chunk with empty header and with no footer + * and stores this incomplete chunk in an internal buffer buf[] + */ + int bytesToWrite = len; + int inputIndex = off; /* the index of the byte[] currently being written */ + + do { + /* enough data to complete a chunk */ + if (bytesToWrite >= spaceInCurrentChunk) { + + /* header */ + for (int i=0; i buf.length) { - byte newbuf[] = new byte[Math.max(buf.length << 1, newcount)]; - System.arraycopy(buf, 0, newbuf, 0, count); - buf = newbuf; + /* not enough data to build a chunk */ + else { + /* header */ + /* do not write header if not enough bytes to build a chunk yet */ + + /* data */ + System.arraycopy(b, inputIndex, buf, count, bytesToWrite); + count += bytesToWrite; + size += bytesToWrite; + spaceInCurrentChunk -= bytesToWrite; + bytesToWrite = 0; + + /* footer */ + /* do not write header if not enough bytes to build a chunk yet */ } - System.arraycopy(b, off, buf, count, len); - count = newcount; - checkFlush(); - } + } while (bytesToWrite > 0); } - public synchronized void write(int b) { - ensureOpen(); - int newcount = count + 1; - if (newcount > buf.length) { - byte newbuf[] = new byte[Math.max(buf.length << 1, newcount)]; - System.arraycopy(buf, 0, newbuf, 0, count); - buf = newbuf; - } - buf[count] = (byte)b; - count = newcount; - checkFlush(); + @Override + public synchronized void write(int _b) { + byte b[] = {(byte)_b}; + write(b, 0, 1); } public synchronized void reset() { - count = 0; + count = preferedHeaderSize; + size = 0; + spaceInCurrentChunk = preferredChunkDataSize; } public int size() { - return count; + return size; } + @Override public synchronized void close() { ensureOpen(); /* if we have buffer a chunked send it */ - if (count > 0) { - flush(buf, true); + if (size > 0) { + flush(true); } /* send a zero length chunk */ - flush(buf, true); + flush(true); /* don't close the underlying stream */ out = null; } + @Override public synchronized void flush() { ensureOpen(); - if (count > 0) { - flush(buf, true); + if (size > 0) { + flush(true); } } - } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/http/HttpCaptureInputStream.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/http/HttpCaptureInputStream.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/http/HttpCaptureInputStream.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/http/HttpCaptureInputStream.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.net.www.http; +import java.io.*; + +/** + * A Simple FilterInputStream subclass to capture HTTP traffic. + * Every byte read is also passed to the HttpCapture class. + * + * @author jccollet + */ +public class HttpCaptureInputStream extends FilterInputStream { + private HttpCapture capture = null; + + public HttpCaptureInputStream(InputStream in, HttpCapture cap) { + super(in); + capture = cap; + } + + @Override + public int read() throws IOException { + int i = super.read(); + capture.received(i); + return i; + } + + @Override + public void close() throws IOException { + try { + capture.flush(); + } catch (IOException iOException) { + } + super.close(); + } + + @Override + public int read(byte[] b) throws IOException { + int ret = super.read(b); + for (int i = 0; i < ret; i++) { + capture.received(b[i]); + } + return ret; + } + + @Override + public int read(byte[] b, int off, int len) throws IOException { + int ret = super.read(b, off, len); + for (int i = 0; i < ret; i++) { + capture.received(b[off+i]); + } + return ret; + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/http/HttpCapture.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/http/HttpCapture.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/http/HttpCapture.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/http/HttpCapture.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,243 @@ +/* + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.net.www.http; +import java.io.*; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.logging.Level; +import java.util.logging.Logger; +import sun.net.NetProperties; +import java.util.regex.*; + +/** + * Main class of the HTTP traffic capture tool. + * Captures are triggered by the sun.net.http.captureRules system property. + * If set, it should point to a file containing the capture rules. + * Format for the file is simple: + * - 1 rule per line + * - Lines starting with a # are considered comments and ignored + * - a rule is a pair of a regular expression and file pattern, separated by a comma + * - The regular expression is applied to URLs, if it matches, the traffic for + * that URL will be captured in the associated file. + * - if the file name contains a '%d', then that sequence will be replaced by a + * unique random number for each URL. This allow for multi-threaded captures + * of URLs matching the same pattern. + * - Rules are checked in sequence, in the same order as in the file, until a + * match is found or the end of the list is reached. + * + * Examples of rules: + * www\.sun\.com , sun%d.log + * yahoo\.com\/.*asf , yahoo.log + * + * @author jccollet + */ +public class HttpCapture { + private File file = null; + private boolean incoming = true; + private BufferedWriter out = null; + private static boolean initialized = false; + private static volatile ArrayList patterns = null; + private static volatile ArrayList capFiles = null; + /* Logging is done in an ugly way so that it does not require the presence + * the java.util.logging package. If the Logger class is not available, then + * logging is turned off. This is for helping the modularization effort. + */ + private static Object logger = null; + private static boolean logging = false; + + static { + Class cl; + try { + cl = Class.forName("java.util.logging.Logger"); + } catch (ClassNotFoundException ex) { + cl = null; + } + if (cl != null) { + try { + Method m = cl.getMethod("getLogger", String.class); + logger = m.invoke(null, "sun.net.www.protocol.http.HttpURLConnection"); + logging = true; + } catch (NoSuchMethodException noSuchMethodException) { + } catch (SecurityException securityException) { + } catch (IllegalAccessException illegalAccessException) { + } catch (IllegalArgumentException illegalArgumentException) { + } catch (InvocationTargetException invocationTargetException) { + } + } + } + + public static void fine(String s) { + if (logging) { + ((Logger)logger).fine(s); + } + } + + public static void finer(String s) { + if (logging) { + ((Logger)logger).finer(s); + } + } + + public static void finest(String s) { + if (logging) { + ((Logger)logger).finest(s); + } + } + + public static void severe(String s) { + if (logging) { + ((Logger)logger).finest(s); + } + } + + public static void info(String s) { + if (logging) { + ((Logger)logger).info(s); + } + } + + public static void warning(String s) { + if (logging) { + ((Logger)logger).warning(s); + } + } + + public static boolean isLoggable(String level) { + if (!logging) { + return false; + } + return ((Logger)logger).isLoggable(Level.parse(level)); + } + + private static synchronized void init() { + initialized = true; + String rulesFile = java.security.AccessController.doPrivileged( + new java.security.PrivilegedAction() { + public String run() { + return NetProperties.get("sun.net.http.captureRules"); + } + }); + if (rulesFile != null && !rulesFile.isEmpty()) { + BufferedReader in; + try { + in = new BufferedReader(new FileReader(rulesFile)); + } catch (FileNotFoundException ex) { + return; + } + try { + String line = in.readLine(); + while (line != null) { + line = line.trim(); + if (!line.startsWith("#")) { + // skip line if it's a comment + String[] s = line.split(","); + if (s.length == 2) { + if (patterns == null) { + patterns = new ArrayList(); + capFiles = new ArrayList(); + } + patterns.add(Pattern.compile(s[0].trim())); + capFiles.add(s[1].trim()); + } + } + line = in.readLine(); + } + } catch (IOException ioe) { + + } finally { + try { + in.close(); + } catch (IOException ex) { + } + } + } + } + + private static synchronized boolean isInitialized() { + return initialized; + } + + private HttpCapture(File f, java.net.URL url) { + file = f; + try { + out = new BufferedWriter(new FileWriter(file, true)); + out.write("URL: " + url + "\n"); + } catch (IOException ex) { + Logger.getLogger(HttpCapture.class.getName()).log(Level.SEVERE, null, ex); + } + } + + public synchronized void sent(int c) throws IOException { + if (incoming) { + out.write("\n------>\n"); + incoming = false; + out.flush(); + } + out.write(c); + } + + public synchronized void received(int c) throws IOException { + if (!incoming) { + out.write("\n<------\n"); + incoming = true; + out.flush(); + } + out.write(c); + } + + public synchronized void flush() throws IOException { + out.flush(); + } + + public static HttpCapture getCapture(java.net.URL url) { + if (!isInitialized()) { + init(); + } + if (patterns == null || patterns.isEmpty()) { + return null; + } + String s = url.toString(); + for (int i = 0; i < patterns.size(); i++) { + Pattern p = patterns.get(i); + if (p.matcher(s).find()) { + String f = capFiles.get(i); + File fi; + if (f.indexOf("%d") >= 0) { + java.util.Random rand = new java.util.Random(); + do { + String f2 = f.replace("%d", Integer.toString(rand.nextInt())); + fi = new File(f2); + } while (fi.exists()); + } else { + fi = new File(f); + } + return new HttpCapture(fi, url); + } + } + return null; + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/http/HttpCaptureOutputStream.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/http/HttpCaptureOutputStream.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/http/HttpCaptureOutputStream.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/http/HttpCaptureOutputStream.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.net.www.http; +import java.io.*; + +/** + * A Simple FilterOutputStream subclass to capture HTTP traffic. + * Every byte written is also passed to the HttpCapture class. + * + * @author jccollet + */ +public class HttpCaptureOutputStream extends FilterOutputStream { + private HttpCapture capture = null; + + public HttpCaptureOutputStream(OutputStream out, HttpCapture cap) { + super(out); + capture = cap; + } + + @Override + public void write(int b) throws IOException { + capture.sent(b); + out.write(b); + } + + @Override + public void write(byte[] ba) throws IOException { + for (byte b : ba) { + capture.sent(b); + } + out.write(ba); + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { + for (int i = off; i < len; i++) { + capture.sent(b[i]); + } + out.write(b, off, len); + } + + @Override + public void flush() throws IOException { + try { + capture.flush(); + } catch (IOException iOException) { + } + super.flush(); + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/http/HttpClient.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/http/HttpClient.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/http/HttpClient.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/http/HttpClient.java 2015-01-20 02:20:42.000000000 +0000 @@ -27,18 +27,16 @@ import java.io.*; import java.net.*; -import java.util.*; +import java.util.Locale; +import java.util.Map; import sun.net.NetworkClient; import sun.net.ProgressSource; -import sun.net.ProgressMonitor; import sun.net.www.MessageHeader; import sun.net.www.HeaderParser; import sun.net.www.MeteredStream; import sun.net.www.ParseUtil; import sun.net.www.protocol.http.HttpURLConnection; -import sun.misc.RegexpPool; -import java.security.*; /** * @author Herb Jellinek * @author Dave Brown @@ -60,16 +58,8 @@ // if we've had one io error boolean failedOnce = false; - /** regexp pool of hosts for which we should connect directly, not Proxy - * these are intialized from a property. - */ - private static RegexpPool nonProxyHostsPool = null; - - /** The string source of nonProxyHostsPool - */ - private static String nonProxyHostsSource = null; - /** Response code for CONTINUE */ + private boolean ignoreContinue = true; private static final int HTTP_CONTINUE = 100; /** Default port number for http daemons. REMIND: make these private */ @@ -86,30 +76,6 @@ return -1; } - /* The following three data members are left in for binary */ - /* backwards-compatibility. Unfortunately, HotJava sets them directly */ - /* when it wants to change the settings. The new design has us not */ - /* cache these, so this is unnecessary, but eliminating the data members */ - /* would break HJB 1.1 under JDK 1.2. */ - /* */ - /* These data members are not used, and their values are meaningless. */ - /* REMIND: Take them out for JDK 2.0! */ - /** - * @deprecated - */ - // public static String proxyHost = null; - /** - * @deprecated - */ - // public static int proxyPort = 80; - - /* instance-specific proxy fields override the static fields if set. - * Used by FTP. These are set to the true proxy host/port if - * usingProxy is true. - */ - // private String instProxy = null; - // private int instProxyPort = -1; - /* All proxying (generic as well as instance-specific) may be * disabled through use of this flag */ @@ -152,6 +118,9 @@ /* if set, the client will be reused and must not be put in cache */ public boolean reuse = false; + // Traffic capture tool, if configured. See HttpCapture class for info + private HttpCapture capture = null; + /** * A NOP method kept for backwards binary compatibility * @deprecated -- system properties are no longer cached. @@ -237,6 +206,7 @@ } }); + capture = HttpCapture.getCapture(url); openServer(); } @@ -311,8 +281,10 @@ // KeepAliveTimeout will get reset. We simply close the connection. // This should be fine as it is very rare that a connection // to the same host will not use the same proxy. - ret.inCache = false; - ret.closeServer(); + synchronized(ret) { + ret.inCache = false; + ret.closeServer(); + } ret = null; } } @@ -385,7 +357,7 @@ kac.put(url, null, this); } - protected boolean isInKeepAliveCache() { + protected synchronized boolean isInKeepAliveCache() { return inCache; } @@ -405,11 +377,16 @@ * method parseHTTP(). That's why this method is overidden from the * superclass. */ + @Override public void openServer(String server, int port) throws IOException { serverSocket = doConnect(server, port); try { + OutputStream out = serverSocket.getOutputStream(); + if (capture != null) { + out = new HttpCaptureOutputStream(out, capture); + } serverOutput = new PrintStream( - new BufferedOutputStream(serverSocket.getOutputStream()), + new BufferedOutputStream(out), false, encoding); } catch (UnsupportedEncodingException e) { throw new InternalError(encoding+" encoding not found"); @@ -428,7 +405,7 @@ /* * Returns true if this httpclient is from cache */ - public boolean isCachedConnection() { + public synchronized boolean isCachedConnection() { return cachedHttpClient; } @@ -474,27 +451,6 @@ } /* - * call super.openServer in a privileged block - */ - private synchronized void privilegedSuperOpenServer(final String proxyHost, - final int proxyPort) - throws IOException - { - try { - java.security.AccessController.doPrivileged( - new java.security.PrivilegedExceptionAction() { - public Object run() throws IOException - { - superOpenServer(proxyHost, proxyPort); - return null; - } - }); - } catch (java.security.PrivilegedActionException pae) { - throw (IOException) pae.getException(); - } - } - - /* */ protected synchronized void openServer() throws IOException { @@ -508,8 +464,6 @@ return; } - String urlHost = url.getHost().toLowerCase(); - if (url.getProtocol().equals("http") || url.getProtocol().equals("https") ) { @@ -629,11 +583,17 @@ try { serverInput = serverSocket.getInputStream(); + if (capture != null) { + serverInput = new HttpCaptureInputStream(serverInput, capture); + } serverInput = new BufferedInputStream(serverInput); return (parseHTTPHeader(responses, pi, httpuc)); } catch (SocketTimeoutException stex) { // We don't want to retry the request when the app. sets a timeout - closeServer(); + // but don't close the server if timeout while waiting for 100-continue + if (ignoreContinue) { + closeServer(); + } throw stex; } catch (IOException e) { closeServer(); @@ -658,12 +618,6 @@ } - public int setTimeout (int timeout) throws SocketException { - int old = serverSocket.getSoTimeout (); - serverSocket.setSoTimeout (timeout); - return old; - } - private boolean parseHTTPHeader(MessageHeader responses, ProgressSource pi, HttpURLConnection httpuc) throws IOException { /* If "HTTP/*" is found in the beginning, return true. Let @@ -723,7 +677,7 @@ if (keep == null) { keep = responses.findValue("Connection"); } - if (keep != null && keep.toLowerCase().equals("keep-alive")) { + if (keep != null && keep.toLowerCase(Locale.US).equals("keep-alive")) { /* some servers, notably Apache1.1, send something like: * "Keep-Alive: timeout=15, max=1" which we should respect. */ @@ -791,12 +745,12 @@ code = Integer.parseInt(resp.substring(ind, ind + 3)); } catch (Exception e) {} - if (code == HTTP_CONTINUE) { + if (code == HTTP_CONTINUE && ignoreContinue) { responses.reset(); return parseHTTPHeader(responses, pi, httpuc); } - int cl = -1; + long cl = -1; /* * Set things up to parse the entity body of the reply. @@ -804,10 +758,7 @@ * the HTTP method and response code indicate there will be * no entity body to parse. */ - String te = null; - try { - te = responses.findValue("Transfer-Encoding"); - } catch (Exception e) {} + String te = responses.findValue("Transfer-Encoding"); if (te != null && te.equalsIgnoreCase("chunked")) { serverInput = new ChunkedInputStream(serverInput, this, responses); @@ -831,10 +782,14 @@ * 2. "Not-Modified" or "No-Content" responses - RFC 2616 states that * 204 or 304 response must not include a message body. */ - try { - cl = Integer.parseInt(responses.findValue("content-length")); - } catch (Exception e) {} - + String cls = responses.findValue("content-length"); + if (cls != null) { + try { + cl = Long.parseLong(cls); + } catch (NumberFormatException e) { + cl = -1; + } + } String requestLine = requests.getKey(0); if ((requestLine != null && @@ -872,6 +827,9 @@ if (isKeepingAlive()) { // Wrap KeepAliveStream if keep alive is enabled. + if (HttpCapture.isLoggable("FINEST")) { + HttpCapture.finest("KeepAlive stream used: " + url); + } serverInput = new KeepAliveStream(serverInput, pi, cl, this); failedOnce = false; } @@ -916,6 +874,7 @@ return serverOutput; } + @Override public String toString() { return getClass().getName()+"("+url+")"; } @@ -932,6 +891,7 @@ return cacheRequest; } + @Override protected void finalize() throws Throwable { // This should do nothing. The stream finalizer will // close the fd. @@ -942,8 +902,12 @@ failedOnce = value; } + public void setIgnoreContinue(boolean value) { + ignoreContinue = value; + } /* Use only on connections in error. */ + @Override public void closeServer() { try { keepingAlive = false; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/http/KeepAliveStreamCleaner.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/http/KeepAliveStreamCleaner.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/http/KeepAliveStreamCleaner.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/http/KeepAliveStreamCleaner.java 2015-01-20 02:20:42.000000000 +0000 @@ -104,7 +104,8 @@ HttpClient hc = kace.getHttpClient(); try { if (hc != null && !hc.isInKeepAliveCache()) { - int oldTimeout = hc.setTimeout(TIMEOUT); + int oldTimeout = hc.getReadTimeout(); + hc.setReadTimeout(TIMEOUT); long remainingToRead = (long)kas.remainingToRead(); if (remainingToRead > 0) { long n = 0; @@ -118,7 +119,7 @@ remainingToRead = remainingToRead - n; } if (remainingToRead == 0) { - hc.setTimeout(oldTimeout); + hc.setReadTimeout(oldTimeout); hc.finished(); } else hc.closeServer(); diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/http/KeepAliveStream.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/http/KeepAliveStream.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/http/KeepAliveStream.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/http/KeepAliveStream.java 2015-01-20 02:20:42.000000000 +0000 @@ -57,7 +57,7 @@ /** * Constructor */ - public KeepAliveStream(InputStream is, ProgressSource pi, int expected, HttpClient hc) { + public KeepAliveStream(InputStream is, ProgressSource pi, long expected, HttpClient hc) { super(is, pi, expected); this.hc = hc; } @@ -141,7 +141,8 @@ /* CASE II: fill our internal buffer * Remind: possibly check memory here */ - byte[] buf = new byte[expected - count]; + int size = (int) (expected - count); + byte[] buf = new byte[size]; DataInputStream dis = new DataInputStream(in); dis.readFully(buf); in = new ByteArrayInputStream(buf); @@ -193,7 +194,7 @@ } } - protected int remainingToRead() { + protected long remainingToRead() { return expected - count; } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/MeteredStream.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/MeteredStream.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/MeteredStream.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/MeteredStream.java 2015-01-20 02:20:42.000000000 +0000 @@ -39,13 +39,13 @@ * from subsequest read() 's */ protected boolean closed = false; - protected int expected; - protected int count = 0; - protected int markedCount = 0; + protected long expected; + protected long count = 0; + protected long markedCount = 0; protected int markLimit = -1; protected ProgressSource pi; - public MeteredStream(InputStream is, ProgressSource pi, int expected) + public MeteredStream(InputStream is, ProgressSource pi, long expected) { super(is); @@ -57,7 +57,7 @@ } } - private final void justRead(int n) throws IOException { + private final void justRead(long n) throws IOException { if (n == -1) { /* @@ -148,10 +148,10 @@ } else { // just skip min(n, num_bytes_left) - int min = (n > expected - count) ? expected - count: (int)n; + long min = (n > expected - count) ? expected - count: n; n = in.skip(min); } - justRead((int)n); + justRead(n); return n; } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/AuthCache.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/AuthCache.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/AuthCache.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/AuthCache.java 2015-01-20 02:20:42.000000000 +0000 @@ -25,14 +25,6 @@ package sun.net.www.protocol.http; -import java.io.IOException; -import java.net.URL; -import java.util.Hashtable; -import java.util.LinkedList; -import java.util.ListIterator; -import java.util.Enumeration; -import java.util.HashMap; - /** * @author Michael McMahon * @@ -49,7 +41,7 @@ * A:[B:]C:D:E[:F] Between 4 and 6 fields separated by ":" * where the fields have the following meaning: * A is "s" or "p" for server or proxy authentication respectively - * B is optional and is "D", "B", or "N" for digest, basic or ntlm auth. + * B is optional and is the {@link AuthScheme}, e.g. BASIC, DIGEST, NTLM, etc * C is either "http" or "https" * D is the hostname * E is the port number diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/AuthCacheValue.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/AuthCacheValue.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/AuthCacheValue.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/AuthCacheValue.java 2015-01-20 02:20:42.000000000 +0000 @@ -25,15 +25,8 @@ package sun.net.www.protocol.http; -import java.io.IOException; import java.io.Serializable; -import java.net.*; -import java.util.Hashtable; -import java.util.LinkedList; -import java.util.ListIterator; -import java.util.Enumeration; -import java.util.HashMap; - +import java.net.PasswordAuthentication; /** * AuthCacheValue: interface to minimise exposure to authentication cache @@ -62,8 +55,16 @@ AuthCacheValue() {} + /** + * Proxy or Server + */ abstract Type getAuthType (); + /** + * Authentication scheme + */ + abstract AuthScheme getAuthScheme(); + /** * name of server/proxy */ diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/AuthenticationHeader.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/AuthenticationHeader.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/AuthenticationHeader.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/AuthenticationHeader.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -81,8 +81,7 @@ MessageHeader rsp; // the response to be parsed HeaderParser preferred; String preferred_r; // raw Strings - String host = null; // the hostname for server, - // used in checking the availability of Negotiate + private final HttpCallerInfo hci; // un-schemed, need check static String authPref=null; @@ -112,27 +111,19 @@ /** * parse a set of authentication headers and choose the preferred scheme - * that we support - */ - public AuthenticationHeader (String hdrname, MessageHeader response) { - rsp = response; - this.hdrname = hdrname; - schemes = new HashMap(); - parse(); - } - - /** - * parse a set of authentication headers and choose the preferred scheme * that we support for a given host */ - public AuthenticationHeader (String hdrname, MessageHeader response, String host) { - this.host = host; + public AuthenticationHeader (String hdrname, MessageHeader response, HttpCallerInfo hci) { + this.hci = hci; rsp = response; this.hdrname = hdrname; schemes = new HashMap(); parse(); } + public HttpCallerInfo getHttpCallerInfo() { + return hci; + } /* we build up a map of scheme names mapped to SchemeMapValue objects */ static class SchemeMapValue { SchemeMapValue (HeaderParser h, String r) {raw=r; parser=h;} @@ -181,7 +172,7 @@ if(v == null) { SchemeMapValue tmp = (SchemeMapValue)schemes.get("negotiate"); if(tmp != null) { - if(host == null || !NegotiateAuthentication.isSupported(host, "Negotiate")) { + if(hci == null || !NegotiateAuthentication.isSupported(new HttpCallerInfo(hci, "Negotiate"))) { tmp = null; } v = tmp; @@ -201,7 +192,7 @@ // // The only chance this line get executed is that the server // only suggest the Kerberos scheme. - if(host == null || !NegotiateAuthentication.isSupported(host, "Kerberos")) { + if(hci == null || !NegotiateAuthentication.isSupported(new HttpCallerInfo(hci, "Kerberos"))) { tmp = null; } v = tmp; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/AuthenticationInfo.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/AuthenticationInfo.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/AuthenticationInfo.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/AuthenticationInfo.java 2015-01-20 02:20:42.000000000 +0000 @@ -85,6 +85,11 @@ AuthCacheValue.Type.Server: AuthCacheValue.Type.Proxy; } + + AuthScheme getAuthScheme() { + return authScheme; + } + public String getHost() { return host; } @@ -151,7 +156,7 @@ } //public String toString () { - //return ("{"+type+":"+authType+":"+protocol+":"+host+":"+port+":"+realm+":"+path+"}"); + //return ("{"+type+":"+authScheme+":"+protocol+":"+host+":"+port+":"+realm+":"+path+"}"); //} // REMIND: This cache just grows forever. We should put in a bounded @@ -160,8 +165,8 @@ /** The type (server/proxy) of authentication this is. Used for key lookup */ char type; - /** The authentication type (basic/digest). Also used for key lookup */ - char authType; + /** The authentication scheme (basic/digest). Also used for key lookup */ + AuthScheme authScheme; /** The protocol/scheme (i.e. http or https ). Need to keep the caches * logically separate for the two protocols. This field is only used @@ -183,9 +188,9 @@ String path; /** Use this constructor only for proxy entries */ - AuthenticationInfo(char type, char authType, String host, int port, String realm) { + AuthenticationInfo(char type, AuthScheme authScheme, String host, int port, String realm) { this.type = type; - this.authType = authType; + this.authScheme = authScheme; this.protocol = ""; this.host = host.toLowerCase(); this.port = port; @@ -206,9 +211,9 @@ * Constructor used to limit the authorization to the path within * the URL. Use this constructor for origin server entries. */ - AuthenticationInfo(char type, char authType, URL url, String realm) { + AuthenticationInfo(char type, AuthScheme authScheme, URL url, String realm) { this.type = type; - this.authType = authType; + this.authScheme = authScheme; this.protocol = url.getProtocol().toLowerCase(); this.host = url.getHost().toLowerCase(); this.port = url.getPort(); @@ -264,12 +269,12 @@ * In this case we do not use the path because the protection space * is identified by the host:port:realm only */ - static AuthenticationInfo getServerAuth(URL url, String realm, char atype) { + static AuthenticationInfo getServerAuth(URL url, String realm, AuthScheme scheme) { int port = url.getPort(); if (port == -1) { port = url.getDefaultPort(); } - String key = SERVER_AUTHENTICATION + ":" + atype + ":" + url.getProtocol().toLowerCase() + String key = SERVER_AUTHENTICATION + ":" + scheme + ":" + url.getProtocol().toLowerCase() + ":" + url.getHost().toLowerCase() + ":" + port + ":" + realm; AuthenticationInfo cached = getAuth(key, null); if ((cached == null) && requestIsInProgress (key)) { @@ -308,8 +313,8 @@ * Used in response to a challenge. Note, the protocol field is always * blank for proxies. */ - static AuthenticationInfo getProxyAuth(String host, int port, String realm, char atype) { - String key = PROXY_AUTHENTICATION + ":" + atype + "::" + host.toLowerCase() + static AuthenticationInfo getProxyAuth(String host, int port, String realm, AuthScheme scheme) { + String key = PROXY_AUTHENTICATION + ":" + scheme + "::" + host.toLowerCase() + ":" + port + ":" + realm; AuthenticationInfo cached = (AuthenticationInfo) cache.get(key, null); if ((cached == null) && requestIsInProgress (key)) { @@ -409,7 +414,7 @@ // This must be kept in sync with the getXXXAuth() methods in this // class. if (includeRealm) { - return type + ":" + authType + ":" + protocol + ":" + return type + ":" + authScheme + ":" + protocol + ":" + host + ":" + port + ":" + realm; } else { return type + ":" + protocol + ":" + host + ":" + port; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/AuthScheme.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/AuthScheme.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/AuthScheme.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/AuthScheme.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package sun.net.www.protocol.http; + +/* Authentication schemes supported by the http implementation. New schemes, if + * supported, should be defined here. + */ +public enum AuthScheme { + BASIC, + DIGEST, + NTLM, + NEGOTIATE, + KERBEROS, + UNKNOWN; +} + diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/BasicAuthentication.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/BasicAuthentication.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/BasicAuthentication.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/BasicAuthentication.java 2015-01-20 02:20:42.000000000 +0000 @@ -44,8 +44,6 @@ private static final long serialVersionUID = 100L; - static final char BASIC_AUTH = 'B'; - /** The authentication string for this host, port, and realm. This is a simple BASE64 encoding of "login:password". */ String auth; @@ -56,7 +54,7 @@ public BasicAuthentication(boolean isProxy, String host, int port, String realm, PasswordAuthentication pw) { super(isProxy ? PROXY_AUTHENTICATION : SERVER_AUTHENTICATION, - BASIC_AUTH, host, port, realm); + AuthScheme.BASIC, host, port, realm); String plain = pw.getUserName() + ":"; byte[] nameBytes = null; try { @@ -86,7 +84,7 @@ public BasicAuthentication(boolean isProxy, String host, int port, String realm, String auth) { super(isProxy ? PROXY_AUTHENTICATION : SERVER_AUTHENTICATION, - BASIC_AUTH, host, port, realm); + AuthScheme.BASIC, host, port, realm); this.auth = "Basic " + auth; } @@ -96,7 +94,7 @@ public BasicAuthentication(boolean isProxy, URL url, String realm, PasswordAuthentication pw) { super(isProxy ? PROXY_AUTHENTICATION : SERVER_AUTHENTICATION, - BASIC_AUTH, url, realm); + AuthScheme.BASIC, url, realm); String plain = pw.getUserName() + ":"; byte[] nameBytes = null; try { @@ -126,7 +124,7 @@ public BasicAuthentication(boolean isProxy, URL url, String realm, String auth) { super(isProxy ? PROXY_AUTHENTICATION : SERVER_AUTHENTICATION, - BASIC_AUTH, url, realm); + AuthScheme.BASIC, url, realm); this.auth = "Basic " + auth; } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/DigestAuthentication.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/DigestAuthentication.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/DigestAuthentication.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/DigestAuthentication.java 2015-01-20 02:20:42.000000000 +0000 @@ -37,7 +37,6 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; - /** * DigestAuthentication: Encapsulate an http server authentication using * the "Digest" scheme, as described in RFC2069 and updated in RFC2617 @@ -49,8 +48,6 @@ private static final long serialVersionUID = 100L; - static final char DIGEST_AUTH = 'D'; - private String authMethod; // Authentication parameters defined in RFC2617. @@ -175,7 +172,10 @@ public DigestAuthentication(boolean isProxy, URL url, String realm, String authMethod, PasswordAuthentication pw, Parameters params) { - super(isProxy?PROXY_AUTHENTICATION:SERVER_AUTHENTICATION, DIGEST_AUTH,url, realm); + super(isProxy ? PROXY_AUTHENTICATION : SERVER_AUTHENTICATION, + AuthScheme.DIGEST, + url, + realm); this.authMethod = authMethod; this.pw = pw; this.params = params; @@ -184,7 +184,11 @@ public DigestAuthentication(boolean isProxy, String host, int port, String realm, String authMethod, PasswordAuthentication pw, Parameters params) { - super(isProxy?PROXY_AUTHENTICATION:SERVER_AUTHENTICATION, DIGEST_AUTH,host, port, realm); + super(isProxy ? PROXY_AUTHENTICATION : SERVER_AUTHENTICATION, + AuthScheme.DIGEST, + host, + port, + realm); this.authMethod = authMethod; this.pw = pw; this.params = params; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/HttpCallerInfo.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/HttpCallerInfo.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/HttpCallerInfo.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/HttpCallerInfo.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.net.www.protocol.http; + +import java.net.Authenticator.RequestorType; +import java.net.InetAddress; +import java.net.URL; + +/** + * Used in HTTP/Negotiate, to feed HTTP request info into JGSS as a HttpCaller, + * so that special actions can be taken, including special callback handler, + * special useSubjectCredsOnly value. + * + * This is an immutable class. It can be instantiated in two styles; + * + * 1. Un-schemed: Create at the beginning before the preferred scheme is + * determined. This object can be fed into AuthenticationHeader to check + * for the preference. + * + * 2. Schemed: With the scheme field filled, can be used in JGSS-API calls. + */ +final public class HttpCallerInfo { + // All info that an Authenticator needs. + final public URL url; + final public String host, protocol, prompt, scheme; + final public int port; + final public InetAddress addr; + final public RequestorType authType; + + /** + * Create a schemed object based on an un-schemed one. + */ + public HttpCallerInfo(HttpCallerInfo old, String scheme) { + this.url = old.url; + this.host = old.host; + this.protocol = old.protocol; + this.prompt = old.prompt; + this.port = old.port; + this.addr = old.addr; + this.authType = old.authType; + this.scheme = scheme; + } + + /** + * Constructor an un-schemed object for site access. + */ + public HttpCallerInfo(URL url) { + this.url= url; + prompt = ""; + host = url.getHost(); + + int p = url.getPort(); + if (p == -1) { + port = url.getDefaultPort(); + } else { + port = p; + } + + InetAddress ia; + try { + ia = InetAddress.getByName(url.getHost()); + } catch (Exception e) { + ia = null; + } + addr = ia; + + protocol = url.getProtocol(); + authType = RequestorType.SERVER; + scheme = ""; + } + + /** + * Constructor an un-schemed object for proxy access. + */ + public HttpCallerInfo(URL url, String host, int port) { + this.url= url; + this.host = host; + this.port = port; + prompt = ""; + addr = null; + protocol = url.getProtocol(); + authType = RequestorType.PROXY; + scheme = ""; + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/HttpLogFormatter.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/HttpLogFormatter.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/HttpLogFormatter.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/HttpLogFormatter.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.net.www.protocol.http; + +import java.util.logging.LogRecord; +import java.util.regex.*; + +/** + * A Formatter to make the HTTP logs a bit more palatable to the developer + * looking at them. The idea is to present the HTTP events in such a way that + * commands and headers are easily spotted (i.e. on separate lines). + * @author jccollet + */ +public class HttpLogFormatter extends java.util.logging.SimpleFormatter { + // Pattern for MessageHeader data. Mostly pairs within curly brackets + private static volatile Pattern pattern = null; + // Pattern for Cookies + private static volatile Pattern cpattern = null; + + public HttpLogFormatter() { + if (pattern == null) { + pattern = Pattern.compile("\\{[^\\}]*\\}"); + cpattern = Pattern.compile("[^,\\] ]{2,}"); + } + } + + @Override + public String format(LogRecord record) { + if (!"sun.net.www.http.HttpCapture".equalsIgnoreCase(record.getSourceClassName())) { + // Don't change format for stuff that doesn't concern us + return super.format(record); + } + String src = record.getMessage(); + StringBuilder buf = new StringBuilder("HTTP: "); + if (src.startsWith("sun.net.www.MessageHeader@")) { + // MessageHeader logs are composed of pairs within curly brackets + // Let's extract them to make it more readable. That way we get one + // header pair (name, value) per line. A lot easier to read. + Matcher match = pattern.matcher(src); + while (match.find()) { + int i = match.start(); + int j = match.end(); + String s = src.substring(i + 1, j - 1); + if (s.startsWith("null: ")) { + s = s.substring(6); + } + if (s.endsWith(": null")) { + s = s.substring(0, s.length() - 6); + } + buf.append("\t").append(s).append("\n"); + } + } else if (src.startsWith("Cookies retrieved: {")) { + // This comes from the Cookie handler, let's clean up the format a bit + String s = src.substring(20); + buf.append("Cookies from handler:\n"); + while (s.length() >= 7) { + if (s.startsWith("Cookie=[")) { + String s2 = s.substring(8); + int c = s2.indexOf("Cookie2=["); + if (c > 0) { + s2 = s2.substring(0, c-1); + s = s2.substring(c); + } else { + s = ""; + } + if (s2.length() < 4) { + continue; + } + Matcher m = cpattern.matcher(s2); + while (m.find()) { + int i = m.start(); + int j = m.end(); + if (i >= 0) { + String cookie = s2.substring(i + 1, j > 0 ? j - 1 : s2.length() - 1); + buf.append("\t").append(cookie).append("\n"); + } + } + } + if (s.startsWith("Cookie2=[")) { + String s2 = s.substring(9); + int c = s2.indexOf("Cookie=["); + if (c > 0) { + s2 = s2.substring(0, c-1); + s = s2.substring(c); + } else { + s = ""; + } + Matcher m = cpattern.matcher(s2); + while (m.find()) { + int i = m.start(); + int j = m.end(); + if (i >= 0) { + String cookie = s2.substring(i+1, j > 0 ? j-1 : s2.length() - 1); + buf.append("\t").append(cookie).append("\n"); + } + } + } + } + } else { + // Anything else we let as is. + buf.append(src).append("\n"); + } + return buf.toString(); + } + +} diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java 2015-01-20 02:20:42.000000000 +0000 @@ -25,6 +25,7 @@ package sun.net.www.protocol.http; +import java.lang.reflect.Constructor; import java.net.URL; import java.net.URLConnection; import java.net.ProtocolException; @@ -54,25 +55,23 @@ import java.util.HashSet; import java.util.HashMap; import java.util.Set; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; import sun.net.*; import sun.net.www.*; import sun.net.www.http.HttpClient; import sun.net.www.http.PosterOutputStream; import sun.net.www.http.ChunkedInputStream; import sun.net.www.http.ChunkedOutputStream; +import sun.net.www.http.HttpCapture; import java.text.SimpleDateFormat; import java.util.TimeZone; import java.net.MalformedURLException; import java.nio.ByteBuffer; -import java.nio.channels.ReadableByteChannel; -import java.nio.channels.WritableByteChannel; -import java.nio.channels.Selector; -import java.nio.channels.SelectionKey; -import java.nio.channels.SelectableChannel; -import java.lang.reflect.*; +import static sun.net.www.protocol.http.AuthScheme.BASIC; +import static sun.net.www.protocol.http.AuthScheme.DIGEST; +import static sun.net.www.protocol.http.AuthScheme.NTLM; +import static sun.net.www.protocol.http.AuthScheme.NEGOTIATE; +import static sun.net.www.protocol.http.AuthScheme.KERBEROS; +import static sun.net.www.protocol.http.AuthScheme.UNKNOWN; /** * A class to represent an HTTP connection to a remote object. @@ -81,8 +80,6 @@ public class HttpURLConnection extends java.net.HttpURLConnection { - private static Logger logger = Logger.getLogger("sun.net.www.protocol.http.HttpURLConnection"); - static final String version; public static final String userAgent; @@ -312,9 +309,13 @@ boolean needToCheck = true; private boolean doingNTLM2ndStage = false; /* doing the 2nd stage of an NTLM server authentication */ private boolean doingNTLMp2ndStage = false; /* doing the 2nd stage of an NTLM proxy authentication */ - /* try auth without calling Authenticator */ - private boolean tryTransparentNTLMServer = NTLMAuthentication.supportsTransparentAuth(); - private boolean tryTransparentNTLMProxy = NTLMAuthentication.supportsTransparentAuth(); + + /* try auth without calling Authenticator. Used for transparent NTLM authentication */ + private boolean tryTransparentNTLMServer = true; + private boolean tryTransparentNTLMProxy = true; + private boolean useProxyResponseCode = false; + + /* Used by Windows specific code */ Object authObj; /* Set if the user is manually setting the Authorization or Proxy-Authorization headers */ @@ -364,13 +365,19 @@ final String scheme, final URL url, final RequestorType authType) { - return (PasswordAuthentication) - java.security.AccessController.doPrivileged( - new java.security.PrivilegedAction() { - public Object run() { - return Authenticator.requestPasswordAuthentication( + return java.security.AccessController.doPrivileged( + new java.security.PrivilegedAction() { + public PasswordAuthentication run() { + if (HttpCapture.isLoggable("FINEST")) { + HttpCapture.finest("Requesting Authentication: host =" + host + " url = " + url); + } + PasswordAuthentication pass = Authenticator.requestPasswordAuthentication( host, addr, port, protocol, prompt, scheme, url, authType); + if (HttpCapture.isLoggable("FINEST")) { + HttpCapture.finest("Authentication returned: " + (pass != null ? pass.toString() : "null")); + } + return pass; } }); } @@ -552,8 +559,8 @@ if (!chunked) { if (requests.findValue("Transfer-Encoding") != null) { requests.remove("Transfer-Encoding"); - if (logger.isLoggable(Level.WARNING)) { - logger.warning( + if (HttpCapture.isLoggable("WARNING")) { + HttpCapture.warning( "use streaming mode for chunked encoding"); } } @@ -565,8 +572,8 @@ setRequests=true; } - if(logger.isLoggable(Level.FINEST)) { - logger.fine(requests.toString()); + if (HttpCapture.isLoggable("FINE")) { + HttpCapture.fine(requests.toString()); } http.writeRequests(requests, poster); if (ps.checkError()) { @@ -694,9 +701,9 @@ } }); } - cacheHandler = (ResponseCache)java.security.AccessController.doPrivileged( - new java.security.PrivilegedAction() { - public Object run() { + cacheHandler = java.security.AccessController.doPrivileged( + new java.security.PrivilegedAction() { + public ResponseCache run() { return ResponseCache.getDefault(); } }); @@ -717,7 +724,7 @@ { boolean redir; int redirects = 0; - InputStream in = null; + InputStream in; do { if (c instanceof HttpURLConnection) { @@ -779,8 +786,8 @@ final boolean result[] = {false}; java.security.AccessController.doPrivileged( - new java.security.PrivilegedAction() { - public Object run() { + new java.security.PrivilegedAction() { + public Void run() { try { InetAddress a1 = InetAddress.getByName(h1); InetAddress a2 = InetAddress.getByName(h2); @@ -830,6 +837,10 @@ && !(cachedResponse instanceof SecureCacheResponse)) { cachedResponse = null; } + if (HttpCapture.isLoggable("FINEST")) { + HttpCapture.finest("Cache Request for " + uri + " / " + getRequestMethod()); + HttpCapture.finest("From cache: " + (cachedResponse != null ? cachedResponse.toString() : "null")); + } if (cachedResponse != null) { cachedHeaders = mapToMessageHeader(cachedResponse.getHeaders()); cachedInputStream = cachedResponse.getBody(); @@ -858,17 +869,20 @@ /** * Do we have to use a proxy? */ - ProxySelector sel = (ProxySelector) + ProxySelector sel = java.security.AccessController.doPrivileged( - new java.security.PrivilegedAction() { - public Object run() { + new java.security.PrivilegedAction() { + public ProxySelector run() { return ProxySelector.getDefault(); } }); - Proxy p = null; if (sel != null) { URI uri = sun.net.www.ParseUtil.toURI(url); + if (HttpCapture.isLoggable("FINEST")) { + HttpCapture.finest("ProxySelector Request for " + uri); + } Iterator it = sel.select(uri).iterator(); + Proxy p; while (it.hasNext()) { p = it.next(); try { @@ -881,6 +895,11 @@ http = getNewHttpClient(url, p, connectTimeout, false); http.setReadTimeout(readTimeout); } + if (HttpCapture.isLoggable("FINEST")) { + if (p != null) { + HttpCapture.finest("Proxy used: " + p.toString()); + } + } break; } catch (IOException ioex) { if (p != Proxy.NO_PROXY) { @@ -942,6 +961,56 @@ return HttpClient.New(url, p, connectTimeout, useCache); } + private void expect100Continue() throws IOException { + // Expect: 100-Continue was set, so check the return code for + // Acceptance + int oldTimeout = http.getReadTimeout(); + boolean enforceTimeOut = false; + boolean timedOut = false; + if (oldTimeout <= 0) { + // 5s read timeout in case the server doesn't understand + // Expect: 100-Continue + http.setReadTimeout(5000); + enforceTimeOut = true; + } + + try { + http.parseHTTP(responses, pi, this); + } catch (SocketTimeoutException se) { + if (!enforceTimeOut) { + throw se; + } + timedOut = true; + http.setIgnoreContinue(true); + } + if (!timedOut) { + // Can't use getResponseCode() yet + String resp = responses.getValue(0); + // Parse the response which is of the form: + // HTTP/1.1 417 Expectation Failed + // HTTP/1.1 100 Continue + if (resp != null && resp.startsWith("HTTP/")) { + String[] sa = resp.split("\\s+"); + responseCode = -1; + try { + // Response code is 2nd token on the line + if (sa.length > 1) + responseCode = Integer.parseInt(sa[1]); + } catch (NumberFormatException numberFormatException) { + } + } + if (responseCode != 100) { + throw new ProtocolException("Server rejected operation"); + } + } + if (oldTimeout > 0) { + http.setReadTimeout(oldTimeout); + } + responseCode = -1; + responses.reset(); + // Proceed + } + /* * Allowable input/output sequences: * [interpreted as POST/PUT] @@ -953,6 +1022,7 @@ * - get input, [read input,] get output, [write output] */ + @Override public synchronized OutputStream getOutputStream() throws IOException { try { @@ -978,14 +1048,20 @@ if (!checkReuseConnection()) connect(); - /* REMIND: This exists to fix the HttpsURLConnection subclass. - * Hotjava needs to run on JDK1.1FCS. Do proper fix in subclass - * for 1.2 and remove this. - */ + boolean expectContinue = false; + String expects = requests.findValue("Expect"); + if ("100-Continue".equalsIgnoreCase(expects)) { + http.setIgnoreContinue(false); + expectContinue = true; + } if (streaming() && strOutputStream == null) { writeRequests(); } + + if (expectContinue) { + expect100Continue(); + } ps = (PrintStream)http.getOutputStream(); if (streaming()) { if (strOutputStream == null) { @@ -1006,6 +1082,13 @@ } catch (RuntimeException e) { disconnectInternal(); throw e; + } catch (ProtocolException e) { + // Save the response code which may have been set while enforcing + // the 100-continue. disconnectInternal() forces it to -1 + int i = responseCode; + disconnectInternal(); + responseCode = i; + throw e; } catch (IOException e) { disconnectInternal(); throw e; @@ -1043,30 +1126,31 @@ URI uri = ParseUtil.toURI(url); if (uri != null) { - Map cookies = cookieHandler.get(uri, requests.getHeaders(EXCLUDE_HEADERS)); + if (HttpCapture.isLoggable("FINEST")) { + HttpCapture.finest("CookieHandler request for " + uri); + } + Map> cookies = cookieHandler.get(uri, requests.getHeaders(EXCLUDE_HEADERS)); if (!cookies.isEmpty()) { - Set s = cookies.entrySet(); - Iterator k_itr = s.iterator(); - while (k_itr.hasNext()) { - Map.Entry entry = (Map.Entry)k_itr.next(); - String key = (String)entry.getKey(); + if (HttpCapture.isLoggable("FINEST")) { + HttpCapture.finest("Cookies retrieved: " + cookies.toString()); + } + for (Map.Entry> entry : cookies.entrySet()) { + String key = entry.getKey(); // ignore all entries that don't have "Cookie" // or "Cookie2" as keys if (!"Cookie".equalsIgnoreCase(key) && !"Cookie2".equalsIgnoreCase(key)) { continue; } - List l = (List)entry.getValue(); + List l = entry.getValue(); if (l != null && !l.isEmpty()) { - Iterator v_itr = l.iterator(); StringBuilder cookieValue = new StringBuilder(); - while (v_itr.hasNext()) { - String value = (String)v_itr.next(); - cookieValue.append(value).append(';'); + for (String value : l) { + cookieValue.append(value).append("; "); } - // strip off the ending ;-sign + // strip off the trailing '; ' try { - requests.add(key, cookieValue.substring(0, cookieValue.length() - 1)); + requests.add(key, cookieValue.substring(0, cookieValue.length() - 2)); } catch (StringIndexOutOfBoundsException ignored) { // no-op } @@ -1092,6 +1176,8 @@ } // end of getting cookies } + @Override + @SuppressWarnings("empty-statement") public synchronized InputStream getInputStream() throws IOException { if (!doInput) { @@ -1160,8 +1246,8 @@ writeRequests(); } http.parseHTTP(responses, pi, this); - if(logger.isLoggable(Level.FINEST)) { - logger.fine(responses.toString()); + if (HttpCapture.isLoggable("FINE")) { + HttpCapture.fine(responses.toString()); } inputStream = http.getInputStream(); @@ -1180,7 +1266,9 @@ // altered in similar ways. AuthenticationHeader authhdr = new AuthenticationHeader ( - "Proxy-Authenticate", responses, http.getProxyHostUsed() + "Proxy-Authenticate", responses, + new HttpCallerInfo(url, http.getProxyHostUsed(), + http.getProxyPortUsed()) ); if (!doingNTLMp2ndStage) { @@ -1226,13 +1314,14 @@ } srvHdr = new AuthenticationHeader ( - "WWW-Authenticate", responses, url.getHost().toLowerCase() + "WWW-Authenticate", responses, + new HttpCallerInfo(url) ); String raw = srvHdr.raw(); if (!doingNTLM2ndStage) { if ((serverAuthentication != null)&& - !(serverAuthentication instanceof NTLMAuthentication)) { + serverAuthentication.getAuthScheme() != NTLM) { if (serverAuthentication.isAuthorizationStale (raw)) { /* we can retry with the current credentials */ disconnectInternal(); @@ -1449,10 +1538,10 @@ cls[0] = String.class; final String[] args = new String[1]; args[0] = originalException.getMessage(); - IOException chainedException = (IOException) + IOException chainedException = java.security.AccessController.doPrivileged - (new java.security.PrivilegedExceptionAction() { - public Object run() + (new java.security.PrivilegedExceptionAction() { + public IOException run() throws Exception { Constructor ctr = originalException.getClass().getConstructor(cls); return (IOException)ctr.newInstance((Object[])args); @@ -1465,6 +1554,7 @@ } } + @Override public InputStream getErrorStream() { if (connected && responseCode >= 400) { // Client Error 4xx and Server Error 5xx @@ -1485,8 +1575,8 @@ */ private AuthenticationInfo resetProxyAuthentication(AuthenticationInfo proxyAuthentication, AuthenticationHeader auth) { - if ((proxyAuthentication != null )&& ! (proxyAuthentication instanceof - NTLMAuthentication)) { + if ((proxyAuthentication != null )&& + proxyAuthentication.getAuthScheme() != NTLM) { String raw = auth.raw(); if (proxyAuthentication.isAuthorizationStale (raw)) { /* we can retry with the current credentials */ @@ -1533,13 +1623,20 @@ // so ProgressSource is null. http.parseHTTP(responses, null, this); + /* Log the response to the CONNECT */ + if (HttpCapture.isLoggable("FINE")) { + HttpCapture.fine(responses.toString()); + } + statusLine = responses.getValue(0); StringTokenizer st = new StringTokenizer(statusLine); st.nextToken(); respCode = Integer.parseInt(st.nextToken().trim()); if (respCode == HTTP_PROXY_AUTH) { AuthenticationHeader authhdr = new AuthenticationHeader ( - "Proxy-Authenticate", responses, http.getProxyHostUsed() + "Proxy-Authenticate", responses, + new HttpCallerInfo(url, http.getProxyHostUsed(), + http.getProxyPortUsed()) ); if (!doingNTLMp2ndStage) { proxyAuthentication = @@ -1556,8 +1653,6 @@ reset (); if (!proxyAuthentication.setHeaders(this, authhdr.headerParser(), raw)) { - proxyHost = http.getProxyHostUsed(); - proxyPort = http.getProxyPortUsed(); disconnectInternal(); throw new IOException ("Authentication failure"); } @@ -1627,6 +1722,12 @@ requests.setIfNotSet("Accept", acceptString); setPreemptiveProxyAuthentication(requests); + + /* Log the CONNECT request */ + if (HttpCapture.isLoggable("FINE")) { + HttpCapture.fine(requests.toString()); + } + http.writeRequests(requests, null); // remove CONNECT header requests.set(0, null, null); @@ -1661,35 +1762,38 @@ HeaderParser p = authhdr.headerParser(); String realm = p.findValue("realm"); String scheme = authhdr.scheme(); - char schemeID; + AuthScheme authScheme = UNKNOWN; if ("basic".equalsIgnoreCase(scheme)) { - schemeID = BasicAuthentication.BASIC_AUTH; + authScheme = BASIC; } else if ("digest".equalsIgnoreCase(scheme)) { - schemeID = DigestAuthentication.DIGEST_AUTH; + authScheme = DIGEST; } else if ("ntlm".equalsIgnoreCase(scheme)) { - schemeID = NTLMAuthentication.NTLM_AUTH; + authScheme = NTLM; doingNTLMp2ndStage = true; } else if ("Kerberos".equalsIgnoreCase(scheme)) { - schemeID = NegotiateAuthentication.KERBEROS_AUTH; + authScheme = KERBEROS; doingNTLMp2ndStage = true; } else if ("Negotiate".equalsIgnoreCase(scheme)) { - schemeID = NegotiateAuthentication.NEGOTIATE_AUTH; + authScheme = NEGOTIATE; doingNTLMp2ndStage = true; - } else { - schemeID = 0; } + if (realm == null) realm = ""; - ret = AuthenticationInfo.getProxyAuth(host, port, realm, schemeID); + ret = AuthenticationInfo.getProxyAuth(host, + port, + realm, + authScheme); if (ret == null) { - if (schemeID == BasicAuthentication.BASIC_AUTH) { + switch (authScheme) { + case BASIC: InetAddress addr = null; try { final String finalHost = host; - addr = (InetAddress) + addr = java.security.AccessController.doPrivileged - (new java.security.PrivilegedExceptionAction() { - public Object run() + (new java.security.PrivilegedExceptionAction() { + public InetAddress run() throws java.net.UnknownHostException { return InetAddress.getByName(finalHost); } @@ -1704,9 +1808,9 @@ if (a != null) { ret = new BasicAuthentication(true, host, port, realm, a); } - } else if (schemeID == DigestAuthentication.DIGEST_AUTH) { - PasswordAuthentication a = - privilegedRequestPasswordAuthentication( + break; + case DIGEST: + a = privilegedRequestPasswordAuthentication( host, null, port, url.getProtocol(), realm, scheme, url, RequestorType.PROXY); if (a != null) { @@ -1715,29 +1819,57 @@ ret = new DigestAuthentication(true, host, port, realm, scheme, a, params); } - } else if (schemeID == NTLMAuthentication.NTLM_AUTH) { - PasswordAuthentication a = null; - if (!tryTransparentNTLMProxy) { - a = privilegedRequestPasswordAuthentication( - host, null, port, url.getProtocol(), - "", scheme, url, RequestorType.PROXY); - } - /* If we are not trying transparent authentication then - * we need to have a PasswordAuthentication instance. For - * transparent authentication (Windows only) the username - * and password will be picked up from the current logged - * on users credentials. - */ - if (tryTransparentNTLMProxy || - (!tryTransparentNTLMProxy && a != null)) { - ret = new NTLMAuthentication(true, host, port, a); - } - - tryTransparentNTLMProxy = false; - } else if (schemeID == NegotiateAuthentication.NEGOTIATE_AUTH) { - ret = new NegotiateAuthentication(true, host, port, null, "Negotiate"); - } else if (schemeID == NegotiateAuthentication.KERBEROS_AUTH) { - ret = new NegotiateAuthentication(true, host, port, null, "Kerberos"); + break; + case NTLM: + if (NTLMAuthenticationProxy.proxy.supported) { + /* tryTransparentNTLMProxy will always be true the first + * time around, but verify that the platform supports it + * otherwise don't try. */ + if (tryTransparentNTLMProxy) { + tryTransparentNTLMProxy = + NTLMAuthenticationProxy.proxy.supportsTransparentAuth; + /* If the platform supports transparent authentication + * then normally it's ok to do transparent auth to a proxy + * because we generally trust proxies (chosen by the user) + * But not in the case of 305 response where the server + * chose it. */ + if (tryTransparentNTLMProxy && useProxyResponseCode) { + tryTransparentNTLMProxy = false; + } + } + a = null; + if (tryTransparentNTLMProxy) { + HttpCapture.finest("Trying Transparent NTLM authentication"); + } else { + a = privilegedRequestPasswordAuthentication( + host, null, port, url.getProtocol(), + "", scheme, url, RequestorType.PROXY); + } + /* If we are not trying transparent authentication then + * we need to have a PasswordAuthentication instance. For + * transparent authentication (Windows only) the username + * and password will be picked up from the current logged + * on users credentials. + */ + if (tryTransparentNTLMProxy || + (!tryTransparentNTLMProxy && a != null)) { + ret = NTLMAuthenticationProxy.proxy.create(true, host, port, a); + } + + /* set to false so that we do not try again */ + tryTransparentNTLMProxy = false; + } + break; + case NEGOTIATE: + ret = new NegotiateAuthentication(new HttpCallerInfo(authhdr.getHttpCallerInfo(), "Negotiate")); + break; + case KERBEROS: + ret = new NegotiateAuthentication(new HttpCallerInfo(authhdr.getHttpCallerInfo(), "Kerberos")); + break; + case UNKNOWN: + HttpCapture.finest("Unknown/Unsupported authentication scheme: " + scheme); + default: + throw new AssertionError("should not reach here"); } } // For backwards compatibility, we also try defaultAuth @@ -1761,6 +1893,9 @@ } } } + if (HttpCapture.isLoggable("FINER")) { + HttpCapture.finer("Proxy Authentication for " + authhdr.toString() +" returned " + (ret != null ? ret.toString() : "null")); + } return ret; } @@ -1779,27 +1914,26 @@ HeaderParser p = authhdr.headerParser(); String realm = p.findValue("realm"); String scheme = authhdr.scheme(); - char schemeID; + AuthScheme authScheme = UNKNOWN; if ("basic".equalsIgnoreCase(scheme)) { - schemeID = BasicAuthentication.BASIC_AUTH; + authScheme = BASIC; } else if ("digest".equalsIgnoreCase(scheme)) { - schemeID = DigestAuthentication.DIGEST_AUTH; + authScheme = DIGEST; } else if ("ntlm".equalsIgnoreCase(scheme)) { - schemeID = NTLMAuthentication.NTLM_AUTH; + authScheme = NTLM; doingNTLM2ndStage = true; } else if ("Kerberos".equalsIgnoreCase(scheme)) { - schemeID = NegotiateAuthentication.KERBEROS_AUTH; + authScheme = KERBEROS; doingNTLM2ndStage = true; } else if ("Negotiate".equalsIgnoreCase(scheme)) { - schemeID = NegotiateAuthentication.NEGOTIATE_AUTH; + authScheme = NEGOTIATE; doingNTLM2ndStage = true; - } else { - schemeID = 0; } + domain = p.findValue ("domain"); if (realm == null) realm = ""; - ret = AuthenticationInfo.getServerAuth(url, realm, schemeID); + ret = AuthenticationInfo.getServerAuth(url, realm, authScheme); InetAddress addr = null; if (ret == null) { try { @@ -1814,25 +1948,14 @@ port = url.getDefaultPort(); } if (ret == null) { - if (schemeID == NegotiateAuthentication.KERBEROS_AUTH) { - URL url1; - try { - url1 = new URL (url, "/"); /* truncate the path */ - } catch (Exception e) { - url1 = url; - } - ret = new NegotiateAuthentication(false, url1, null, "Kerberos"); - } - if (schemeID == NegotiateAuthentication.NEGOTIATE_AUTH) { - URL url1; - try { - url1 = new URL (url, "/"); /* truncate the path */ - } catch (Exception e) { - url1 = url; - } - ret = new NegotiateAuthentication(false, url1, null, "Negotiate"); - } - if (schemeID == BasicAuthentication.BASIC_AUTH) { + switch(authScheme) { + case KERBEROS: + ret = new NegotiateAuthentication(new HttpCallerInfo(authhdr.getHttpCallerInfo(), "Kerberos")); + break; + case NEGOTIATE: + ret = new NegotiateAuthentication(new HttpCallerInfo(authhdr.getHttpCallerInfo(), "Negotiate")); + break; + case BASIC: PasswordAuthentication a = privilegedRequestPasswordAuthentication( url.getHost(), addr, port, url.getProtocol(), @@ -1840,45 +1963,60 @@ if (a != null) { ret = new BasicAuthentication(false, url, realm, a); } - } - - if (schemeID == DigestAuthentication.DIGEST_AUTH) { - PasswordAuthentication a = - privilegedRequestPasswordAuthentication( + break; + case DIGEST: + a = privilegedRequestPasswordAuthentication( url.getHost(), addr, port, url.getProtocol(), realm, scheme, url, RequestorType.SERVER); if (a != null) { digestparams = new DigestAuthentication.Parameters(); ret = new DigestAuthentication(false, url, realm, scheme, a, digestparams); } - } + break; + case NTLM: + if (NTLMAuthenticationProxy.proxy.supported) { + URL url1; + try { + url1 = new URL (url, "/"); /* truncate the path */ + } catch (Exception e) { + url1 = url; + } - if (schemeID == NTLMAuthentication.NTLM_AUTH) { - URL url1; - try { - url1 = new URL (url, "/"); /* truncate the path */ - } catch (Exception e) { - url1 = url; - } - PasswordAuthentication a = null; - if (!tryTransparentNTLMServer) { - a = privilegedRequestPasswordAuthentication( - url.getHost(), addr, port, url.getProtocol(), - "", scheme, url, RequestorType.SERVER); - } + /* tryTransparentNTLMServer will always be true the first + * time around, but verify that the platform supports it + * otherwise don't try. */ + if (tryTransparentNTLMServer) { + tryTransparentNTLMServer = + NTLMAuthenticationProxy.proxy.supportsTransparentAuth; + } + a = null; + if (tryTransparentNTLMServer) { + HttpCapture.finest("Trying Transparent NTLM authentication"); + } else { + a = privilegedRequestPasswordAuthentication( + url.getHost(), addr, port, url.getProtocol(), + "", scheme, url, RequestorType.SERVER); + } - /* If we are not trying transparent authentication then - * we need to have a PasswordAuthentication instance. For - * transparent authentication (Windows only) the username - * and password will be picked up from the current logged - * on users credentials. - */ - if (tryTransparentNTLMServer || - (!tryTransparentNTLMServer && a != null)) { - ret = new NTLMAuthentication(false, url1, a); - } + /* If we are not trying transparent authentication then + * we need to have a PasswordAuthentication instance. For + * transparent authentication (Windows only) the username + * and password will be picked up from the current logged + * on users credentials. + */ + if (tryTransparentNTLMServer || + (!tryTransparentNTLMServer && a != null)) { + ret = NTLMAuthenticationProxy.proxy.create(false, url1, a); + } - tryTransparentNTLMServer = false; + /* set to false so that we do not try again */ + tryTransparentNTLMServer = false; + } + break; + case UNKNOWN: + HttpCapture.finest("Unknown/Unsupported authentication scheme: " + scheme); + default: + throw new AssertionError("should not reach here"); } } @@ -1900,6 +2038,9 @@ } } } + if (HttpCapture.isLoggable("FINER")) { + HttpCapture.finer("Server Authentication for " + authhdr.toString() +" returned " + (ret != null ? ret.toString() : "null")); + } return ret; } @@ -1973,6 +2114,9 @@ if (streaming()) { throw new HttpRetryException (RETRY_MSG3, stat, loc); } + if (HttpCapture.isLoggable("FINE")) { + HttpCapture.fine("Redirected from " + url + " to " + locUrl); + } // clear out old response headers!!!! responses = new MessageHeader(); @@ -1997,6 +2141,10 @@ requests.set(0, method + " " + http.getURLFile()+" " + httpVersion, null); connected = true; + // need to remember this in case NTLM proxy authentication gets + // used. We can't use transparent authentication when user + // doesn't know about proxy. + useProxyResponseCode = true; } else { // maintain previous headers, just change the name // of the file we're getting @@ -2077,11 +2225,17 @@ /* raw stream, which will block on read, so only read * the expected number of bytes, probably 0 */ - int cl = 0, n=0; - try { - cl = Integer.parseInt (responses.findValue ("Content-Length")); - } catch (Exception e) {} - for (int i=0; i 0) { @@ -2875,6 +3050,7 @@ } } + @Override public void close() throws IOException { buffer = null; if (is != null) { @@ -2891,6 +3067,7 @@ class EmptyInputStream extends InputStream { + @Override public int available() { return 0; } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/NegotiateAuthentication.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/NegotiateAuthentication.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/NegotiateAuthentication.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/NegotiateAuthentication.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,18 +25,20 @@ package sun.net.www.protocol.http; -import java.util.Arrays; import java.util.HashMap; -import java.util.Map; import sun.net.www.HeaderParser; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.net.URL; -import java.net.PasswordAuthentication; import java.io.IOException; - +import java.net.Authenticator.RequestorType; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import sun.net.www.http.HttpCapture; +import static sun.net.www.protocol.http.AuthScheme.NEGOTIATE; +import static sun.net.www.protocol.http.AuthScheme.KERBEROS; /** * NegotiateAuthentication: @@ -49,10 +51,7 @@ private static final long serialVersionUID = 100L; - private String scheme = null; - - static final char NEGOTIATE_AUTH = 'S'; - static final char KERBEROS_AUTH = 'K'; + final private HttpCallerInfo hci; // These maps are used to manage the GSS availability for diffrent // hosts. The key for both maps is the host name. @@ -66,25 +65,15 @@ private Negotiator negotiator = null; /** - * Constructor used for WWW entries. pw is not used because - * for GSS there is only one single PasswordAuthentication which is - * independant of host/port/... info. - */ - public NegotiateAuthentication(boolean isProxy, URL url, - PasswordAuthentication pw, String scheme) { - super(isProxy?PROXY_AUTHENTICATION:SERVER_AUTHENTICATION, - NEGOTIATE_AUTH, url, ""); - this.scheme = scheme; - } - - /** - * Constructor used for proxy entries + * Constructor used for both WWW and proxy entries. + * @param hci a schemed object. */ - public NegotiateAuthentication(boolean isProxy, String host, int port, - PasswordAuthentication pw, String scheme) { - super(isProxy?PROXY_AUTHENTICATION:SERVER_AUTHENTICATION, - NEGOTIATE_AUTH,host, port, ""); - this.scheme = scheme; + public NegotiateAuthentication(HttpCallerInfo hci) { + super(RequestorType.PROXY==hci.authType ? PROXY_AUTHENTICATION : SERVER_AUTHENTICATION, + hci.scheme.equalsIgnoreCase("Negotiate") ? NEGOTIATE : KERBEROS, + hci.url, + ""); + this.hci = hci; } /** @@ -95,32 +84,29 @@ } /** - * Find out if a hostname supports Negotiate protocol. In order to find - * out yes or no, an initialization of a Negotiator object against - * hostname and scheme is tried. The generated object will be cached - * under the name of hostname at a success try.
+ * Find out if the HttpCallerInfo supports Negotiate protocol. In order to + * find out yes or no, an initialization of a Negotiator object against it + * is tried. The generated object will be cached under the name of ths + * hostname at a success try.
* - * If this method is called for the second time on a hostname, the answer is - * already saved in supported, so no need to try again. + * If this method is called for the second time on an HttpCallerInfo with + * the same hostname, the answer is retrieved from cache. * - * @param hostname hostname to test - * @param scheme scheme to test * @return true if supported */ - synchronized public static boolean isSupported(String hostname, - String scheme) { + synchronized public static boolean isSupported(HttpCallerInfo hci) { if (supported == null) { supported = new HashMap (); cache = new HashMap (); } - + String hostname = hci.host; hostname = hostname.toLowerCase(); if (supported.containsKey(hostname)) { return supported.get(hostname); } try { - Negotiator neg = Negotiator.getSupported(hostname, scheme); + Negotiator neg = Negotiator.getSupported(hci); supported.put(hostname, true); // the only place cache.put is called. here we can make sure // the object is valid and the oneToken inside is not null @@ -179,7 +165,7 @@ if (parts.length > 1) { incoming = new BASE64Decoder().decodeBuffer(parts[1]); } - response = scheme + " " + new B64Encoder().encode( + response = hci.scheme + " " + new B64Encoder().encode( incoming==null?firstToken():nextToken(incoming)); conn.setAuthenticationProperty(getHeaderName(), response); @@ -207,7 +193,7 @@ } if (negotiator == null) { try { - negotiator = Negotiator.getSupported(getHost(), scheme); + negotiator = Negotiator.getSupported(hci); } catch(Exception e) { IOException ioe = new IOException("Cannot initialize Negotiator"); ioe.initCause(e); @@ -255,21 +241,58 @@ * NegotiatorImpl, so that JAAS and JGSS calls can be made */ abstract class Negotiator { - static Negotiator getSupported(String hostname, String scheme) + static Negotiator getSupported(HttpCallerInfo hci) throws Exception { // These lines are equivalent to - // return new NegotiatorImpl(hostname, scheme); + // return new NegotiatorImpl(hci); // The current implementation will make sure NegotiatorImpl is not // directly referenced when compiling, thus smooth the way of building // the J2SE platform where HttpURLConnection is a bootstrap class. + // + // Makes NegotiatorImpl, and the security classes it references, a + // runtime dependency rather than a static one. - Class clazz = Class.forName("sun.net.www.protocol.http.NegotiatorImpl"); - java.lang.reflect.Constructor c = clazz.getConstructor(String.class, String.class); - return (Negotiator) (c.newInstance(hostname, scheme)); + Class clazz; + Constructor c; + try { + clazz = Class.forName("sun.net.www.protocol.http.NegotiatorImpl", true, null); + c = clazz.getConstructor(HttpCallerInfo.class); + } catch (ClassNotFoundException cnfe) { + log(cnfe); + throw cnfe; + } catch (NoSuchMethodException roe) { + // if the class is there then something seriously wrong if + // the constructor is not. + throw new AssertionError(roe); + } + + Exception ex = null; + Negotiator neg = null; + try { + neg = (Negotiator) (c.newInstance(hci)); + } catch (InstantiationException roe) { + ex = roe; + } catch (InvocationTargetException roe) { + ex = roe; + } + if (ex != null) { + log(ex); + Throwable t = ex.getCause(); + if (t != null && t instanceof Exception) + log((Exception)t); + throw ex; + } + return neg; } abstract byte[] firstToken() throws IOException; abstract byte[] nextToken(byte[] in) throws IOException; + + static void log(Exception e) { + if (HttpCapture.isLoggable("FINEST")) { + HttpCapture.finest("NegotiateAuthentication: " + e); + } + } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/NegotiateCallbackHandler.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/NegotiateCallbackHandler.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/NegotiateCallbackHandler.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/NegotiateCallbackHandler.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,12 +36,19 @@ /** * @since 1.6 + * Special callback handler used in JGSS for the HttpCaller. */ public class NegotiateCallbackHandler implements CallbackHandler { private String username; private char[] password; + private final HttpCallerInfo hci; + + public NegotiateCallbackHandler(HttpCallerInfo hci) { + this.hci = hci; + } + public void handle(Callback[] callbacks) throws UnsupportedCallbackException, IOException { for (int i=0; i - *

  • Find out what GSS mechanism to use from http.negotiate.mechanism.oid, - * defaults SPNEGO + *
  • Find out what GSS mechanism to use from the system property + * http.negotiate.mechanism.oid, defaults SPNEGO *
  • Creating the GSSName for the target host, "HTTP/"+hostname *
  • Creating GSSContext *
  • A first call to initSecContext - * @param hostname name of peer server - * @param scheme auth scheme requested, Negotiate ot Kerberos - * @throws GSSException if any JGSS-API call fails */ - private void init(final String hostname, String scheme) throws GSSException { - // "1.2.840.113554.1.2.2" Kerberos - // "1.3.6.1.5.5.2" SPNEGO + private void init(HttpCallerInfo hci) throws GSSException { final Oid oid; - if (scheme.equalsIgnoreCase("Kerberos")) { + if (hci.scheme.equalsIgnoreCase("Kerberos")) { // we can only use Kerberos mech when the scheme is kerberos oid = GSSUtil.GSS_KRB5_MECH_OID; } else { @@ -89,11 +85,14 @@ } GSSManagerImpl manager = new GSSManagerImpl( - GSSUtil.CALLER_HTTP_NEGOTIATE); + new HttpCaller(hci)); - String peerName = "HTTP/" + hostname; + // RFC 4559 4.1 uses uppercase service name "HTTP". + // RFC 4120 6.2.1 demands the host be lowercase + String peerName = "HTTP@" + hci.host.toLowerCase(); - GSSName serverName = manager.createName(peerName, null); + GSSName serverName = manager.createName(peerName, + GSSName.NT_HOSTBASED_SERVICE); context = manager.createContext(serverName, oid, null, @@ -113,16 +112,15 @@ /** * Constructor - * @param hostname name of peer server - * @param scheme auth scheme requested, Negotiate ot Kerberos * @throws java.io.IOException If negotiator cannot be constructed */ - public NegotiatorImpl(String hostname, String scheme) throws IOException { + public NegotiatorImpl(HttpCallerInfo hci) throws IOException { try { - init(hostname, scheme); + init(hci); } catch (GSSException e) { if (DEBUG) { - System.out.println("Negotiate support not initiated, will fallback to other scheme if allowed. Reason:"); + System.out.println("Negotiate support not initiated, will " + + "fallback to other scheme if allowed. Reason:"); e.printStackTrace(); } IOException ioe = new IOException("Negotiate support not initiated"); diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/NTLMAuthenticationProxy.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/NTLMAuthenticationProxy.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/net/www/protocol/http/NTLMAuthenticationProxy.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/net/www/protocol/http/NTLMAuthenticationProxy.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package sun.net.www.protocol.http; + +import java.net.URL; +import java.net.PasswordAuthentication; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import sun.net.www.http.HttpCapture; + +/** + * Proxy class for loading NTLMAuthentication, so as to remove static + * dependancy. + */ +class NTLMAuthenticationProxy { + private static Method supportsTA; + private static final String clazzStr = "sun.net.www.protocol.http.NTLMAuthentication"; + private static final String supportsTAStr = "supportsTransparentAuth"; + + static final NTLMAuthenticationProxy proxy = tryLoadNTLMAuthentication(); + static final boolean supported = proxy != null ? true : false; + static final boolean supportsTransparentAuth = supported ? supportsTransparentAuth(supportsTA) : false; + + private final Constructor threeArgCtr; + private final Constructor fiveArgCtr; + + private NTLMAuthenticationProxy(Constructor threeArgCtr, + Constructor fiveArgCtr) { + this.threeArgCtr = threeArgCtr; + this.fiveArgCtr = fiveArgCtr; + } + + + AuthenticationInfo create(boolean isProxy, + URL url, + PasswordAuthentication pw) { + try { + return threeArgCtr.newInstance(isProxy, url, pw); + } catch (InstantiationException roe) { + log(roe); + } catch (InvocationTargetException roe) { + log(roe); + } catch (IllegalAccessException roe) { + log(roe); + } + + return null; + } + + AuthenticationInfo create(boolean isProxy, + String host, + int port, + PasswordAuthentication pw) { + try { + return fiveArgCtr.newInstance(isProxy, host, port, pw); + } catch (InstantiationException roe) { + log(roe); + } catch (InvocationTargetException roe) { + log(roe); + } catch (IllegalAccessException roe) { + log(roe); + } + + return null; + } + + /* Returns true if the NTLM implementation supports transparent + * authentication (try with the current users credentials before + * prompting for username and password, etc). + */ + private static boolean supportsTransparentAuth(Method method) { + try { + return (Boolean)method.invoke(null); + } catch (InvocationTargetException roe) { + log(roe); + } catch (IllegalAccessException roe) { + log(roe); + } + + return false; + } + + /** + * Loads the NTLM authentiation implementation through reflection. If + * the class is present, then it must have the required constructors and + * method. Otherwise, it is considered an error. + */ + @SuppressWarnings("unchecked") + private static NTLMAuthenticationProxy tryLoadNTLMAuthentication() { + Class cl; + Constructor threeArg, fiveArg; + try { + cl = (Class)Class.forName(clazzStr, true, null); + if (cl != null) { + threeArg = cl.getConstructor(boolean.class, + URL.class, + PasswordAuthentication.class); + fiveArg = cl.getConstructor(boolean.class, + String.class, + int.class, + PasswordAuthentication.class); + supportsTA = cl.getDeclaredMethod(supportsTAStr); + return new NTLMAuthenticationProxy(threeArg, + fiveArg); + } + } catch (ClassNotFoundException cnfe) { + log(cnfe); + } catch (NoSuchMethodException roe) { + throw new AssertionError(roe); + } + + return null; + } + + static void log(Exception e) { + if (HttpCapture.isLoggable("FINEST")) { + HttpCapture.finest("NTLMAuthenticationProxy: " + e); + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/print/resources/serviceui_pt_BR.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/print/resources/serviceui_pt_BR.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/print/resources/serviceui_pt_BR.properties 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/print/resources/serviceui_pt_BR.properties 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,214 @@ +# +# +border.chromaticity=Apar\u00eancia da cor +border.copies=C\u00f3pias +border.jobattributes=Atributos do trabalho +border.media=M\u00eddia +border.orientation=Orienta\u00e7\u00e3o +border.printrange=Intervalo de impress\u00e3o +border.printservice=Servi\u00e7o de impress\u00e3o +border.quality=Qualidade +border.sides=Lados +border.margins=Margens +# +button.cancel=Cancelar +button.ok=OK +button.print=Imprimir +button.properties=Propriedades... +button.properties.mnemonic=R +# +checkbox.collate=Agrupar +checkbox.collate.mnemonic=C +checkbox.jobsheets=P\u00e1gina com cabe\u00e7alho +checkbox.jobsheets.mnemonic=B +checkbox.printtofile=Imprimir em arquivo +checkbox.printtofile.mnemonic=F +# +dialog.printtitle=Imprimir +dialog.pstitle=Configurar p\u00e1gina +dialog.overwrite=Este arquivo j\u00e1 existe. Deseja substituir o arquivo existente? +dialog.owtitle=Imprimir em arquivo +dialog.printtofile=Imprimir em arquivo +dialog.noprintermsg=Nenhum servi\u00e7o de impress\u00e3o encontrado. +dialog.writeerror=N\u00e3o \u00e9 poss\u00edvel gravar no arquivo: +# +label.info=Info: +label.jobname=Nome do trabalho: +label.jobname.mnemonic=J +label.numcopies=N\u00famero de c\u00f3pias: +label.numcopies.mnemonic=O +label.priority=Prioridade: +label.priority.mnemonic=R +label.psname=Nome: +label.psname.mnemonic=N +label.pstype=Tipo: +label.rangeto=Para +label.size=Tamanho: +label.size.mnemonic=Z +label.source=Fonte: +label.source.mnemonic=C +label.status=Status: +label.username=Nome de usu\u00e1rio: +label.username.mnemonic=U +label.millimetres=(mm) +label.inches=(pol) +label.topmargin=superior +label.topmargin.mnemonic=T +label.bottommargin=inferior +label.bottommargin.mnemonic=B +label.leftmargin=esquerda +label.leftmargin.mnemonic=F +label.rightmargin=direita +label.rightmargin.mnemonic=R +# +radiobutton.color=Cor +radiobutton.color.mnemonic=C +radiobutton.draftq=Rascunho +radiobutton.draftq.mnemonic=F +radiobutton.duplex=Duplex +radiobutton.duplex.mnemonic=D +radiobutton.highq=Alto +radiobutton.highq.mnemonic=H +radiobutton.landscape=Paisagem +radiobutton.landscape.mnemonic=L +radiobutton.monochrome=Monocrom\u00e1tico +radiobutton.monochrome.mnemonic=M +radiobutton.normalq=Normal +radiobutton.normalq.mnemonic=N +radiobutton.oneside=Um lado +radiobutton.oneside.mnemonic=O +radiobutton.portrait=Retrato +radiobutton.portrait.mnemonic=P +radiobutton.rangeall=Todas +radiobutton.rangeall.mnemonic=L +radiobutton.rangepages=P\u00e1ginas +radiobutton.rangepages.mnemonic=E +radiobutton.revlandscape=Paisagem invertida +radiobutton.revlandscape.mnemonic=N +radiobutton.revportrait=Retrato invertido +radiobutton.revportrait.mnemonic=I +radiobutton.tumble=Duplex horizontal +radiobutton.tumble.mnemonic=T +# The vkMnemonics correspond with the constants defined in KeyEvent, eg +# 65 = KeyEvent.VK_A +tab.appearance=Apar\u00eancia +tab.appearance.vkMnemonic=65 +tab.general=Geral +tab.general.vkMnemonic=71 +tab.pagesetup=Configurar p\u00e1gina +tab.pagesetup.vkMnemonic=83 +# +error.pagerange=Intervalo de p\u00e1ginas inv\u00e1lido; insira novamente os valores (por exemplo, 1-3,5,7-10) +error.destination=Nome de arquivo inv\u00e1lido; tente novamente +# +# The following keys match the Strings returned by MediaSizeName.toString() +# (in some cases the space character is replaced by '-' and the pound +# character is replaced with 'n') +# +iso-4a0=4A0 (ISO/DIN & JIS) +iso-2a0=2A0 (ISO/DIN & JIS) +iso-a0=A0 (ISO/DIN & JIS) +iso-a1=A1 (ISO/DIN & JIS) +iso-a2=A2 (ISO/DIN & JIS) +iso-a3=A3 (ISO/DIN & JIS) +iso-a4=A4 (ISO/DIN & JIS) +iso-a5=A5 (ISO/DIN & JIS) +iso-a6=A6 (ISO/DIN & JIS) +iso-a7=A7 (ISO/DIN & JIS) +iso-a8=A8 (ISO/DIN & JIS) +iso-a9=A9 (ISO/DIN & JIS) +iso-a10=A10 (ISO/DIN & JIS) +iso-b0=B0 (ISO/DIN) +iso-b1=B1 (ISO/DIN) +iso-b2=B2 (ISO/DIN) +iso-b3=B3 (ISO/DIN) +iso-b4=B4 (ISO/DIN) +iso-b5=B5 (ISO/DIN) +iso-b6=B6 (ISO/DIN) +iso-b7=B7 (ISO/DIN) +iso-b8=B8 (ISO/DIN) +iso-b9=B9 (ISO/DIN) +iso-b10=B10 (ISO/DIN) +jis-b0=B0 (JIS) +jis-b1=B1 (JIS) +jis-b2=B2 (JIS) +jis-b3=B3 (JIS) +jis-b4=B4 (JIS) +jis-b5=B5 (JIS) +jis-b6=B6 (JIS) +jis-b7=B7 (JIS) +jis-b8=B8 (JIS) +jis-b9=B9 (JIS) +jis-b10=B10 (JIS) +iso-c0=C0 (ISO/DIN) +iso-c1=C1 (ISO/DIN) +iso-c2=C2 (ISO/DIN) +iso-c3=C3 (ISO/DIN) +iso-c4=C4 (ISO/DIN) +iso-c5=C5 (ISO/DIN) +iso-c6=C6 (ISO/DIN) +iso-c7=C7 (ISO/DIN) +iso-c8=C8 (ISO/DIN) +iso-c9=C9 (ISO/DIN) +iso-c10=C10 (ISO/DIN) +na-letter=Carta +na-legal=Of\u00edcio +executive=Executivo +ledger=Livro-raz\u00e3o +tabloid=Tabl\u00f3ide +invoice=Fatura +folio=F\u00f3lio +quarto=Quarto +japanese-postcard=Cart\u00e3o-postal (JIS) +oufuko-postcard=Cart\u00e3o-postal (JIS) +a=Engenharia A +b=Engenharia B +c=Engenharia C +d=Engenharia D +e=Engenharia E +iso-designated-long=Longo designado ISO +italian-envelope=Envelope italiano +italy-envelope=Envelope italiano +invite-envelope=Envelope de convite +monarch-envelope=Envelope monarca +personal-envelope=Envelope personalizado +na-number-9-envelope=Envelope n\u00ba 9 +na-number-10-envelope=Envelope n\u00ba 10 +na-number-11-envelope=Envelope n\u00ba 11 +na-number-12-envelope=Envelope n\u00ba 12 +na-number-14-envelope=Envelope n\u00ba 14 +na-6x9-envelope=Envelope 6x9 +na-7x9-envelope=Envelope 6x7 +na-9x11-envelope=Envelope 9x11 +na-9x12-envelope=Envelope 9x12 +na-10x13-envelope=Envelope 10x15 +na-10x14-envelope=Envelope 10x15 +na-10x15-envelope=Envelope 10x15 +na-5x7=Papel 5" x 7" +na-8x10=Papel 8" x 10" +# +# The following keys match the Strings returned by MediaTray.toString() +# +auto-select=Selecionar automaticamente +top=Superior +middle=Meio +bottom=Inferior +envelope=Envelope +manual=Manual +large-capacity=Grande capacidade +main=Principal +side=Lado +# Add the additional standard bins defined by win32 +Manual-Envelope=Envelope manual +Automatic-Feeder=Alimentador autom\u00e1tico +Tractor-Feeder=Alimentador por tracionador +Small-Format=Formato pequeno +Large-Format=Formato grande +Cassette=Cassete +Form-Source=Fonte do formul\u00e1rio +# +# The following keys match the Strings returned by +# PrinterIsAcceptingJobs.toString() +# +accepting-jobs=Aceitando trabalhos +not-accepting-jobs=N\u00e3o aceitando trabalhos diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java 2015-01-20 02:17:40.000000000 +0000 @@ -40,10 +40,10 @@ */ class AnnotationInvocationHandler implements InvocationHandler, Serializable { private static final long serialVersionUID = 6182022883658399397L; - private final Class type; + private final Class type; private final Map memberValues; - AnnotationInvocationHandler(Class type, Map memberValues) { + AnnotationInvocationHandler(Class type, Map memberValues) { Class[] superInterfaces = type.getInterfaces(); if (!type.isAnnotation() || superInterfaces.length != 1 || @@ -55,7 +55,7 @@ public Object invoke(Object proxy, Method method, Object[] args) { String member = method.getName(); - Class[] paramTypes = method.getParameterTypes(); + Class[] paramTypes = method.getParameterTypes(); // Handle Object and Annotation methods if (member.equals("equals") && paramTypes.length == 1 && @@ -92,7 +92,7 @@ * if Cloneable had a public clone method. */ private Object cloneArray(Object array) { - Class type = array.getClass(); + Class type = array.getClass(); if (type == byte[].class) { byte[] byteArray = (byte[])array; @@ -159,7 +159,7 @@ * Translates a member value (in "dynamic proxy return form") into a string */ private static String memberValueToString(Object value) { - Class type = value.getClass(); + Class type = value.getClass(); if (!type.isArray()) // primitive, string, class, enum const, // or annotation return value.toString(); @@ -237,7 +237,7 @@ * two members are identical object references. */ private static boolean memberValueEquals(Object v1, Object v2) { - Class type = v1.getClass(); + Class type = v1.getClass(); // Check for primitive, string, class, enum const, annotation, // or ExceptionProxy @@ -397,7 +397,7 @@ * Computes hashCode of a member value (in "dynamic proxy return form") */ private static int memberValueHashCode(Object value) { - Class type = value.getClass(); + Class type = value.getClass(); if (!type.isArray()) // primitive, string, class, enum const, // or annotation return value.hashCode(); @@ -435,13 +435,13 @@ throw new java.io.InvalidObjectException("Non-annotation type in annotation serial stream"); } - Map memberTypes = annotationType.memberTypes(); + Map> memberTypes = annotationType.memberTypes(); // If there are annotation members without values, that // situation is handled by the invoke method. for (Map.Entry memberValue : memberValues.entrySet()) { String name = memberValue.getKey(); - Class memberType = memberTypes.get(name); + Class memberType = memberTypes.get(name); if (memberType != null) { // i.e. member still exists Object value = memberValue.getValue(); if (!(memberType.isInstance(value) || diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/reflect/annotation/AnnotationParser.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/reflect/annotation/AnnotationParser.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/reflect/annotation/AnnotationParser.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/reflect/annotation/AnnotationParser.java 2015-01-20 02:17:40.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -59,15 +59,15 @@ * @throws AnnotationFormatError if an annotation is found to be * malformed. */ - public static Map parseAnnotations( + public static Map, Annotation> parseAnnotations( byte[] rawAnnotations, ConstantPool constPool, - Class container) { + Class container) { if (rawAnnotations == null) return Collections.emptyMap(); try { - return parseAnnotations2(rawAnnotations, constPool, container); + return parseAnnotations2(rawAnnotations, constPool, container, null); } catch(BufferUnderflowException e) { throw new AnnotationFormatError("Unexpected end of annotations."); } catch(IllegalArgumentException e) { @@ -76,24 +76,53 @@ } } - private static Map parseAnnotations2( + /** + * Like {@link #parseAnnotations(byte[], sun.reflect.ConstantPool, Class)} + * with an additional parameter {@code selectAnnotationClasses} which selects the + * annotation types to parse (other than selected are quickly skipped).

    + * This method is only used to parse select meta annotations in the construction + * phase of {@link AnnotationType} instances to prevent infinite recursion. + * + * @param selectAnnotationClasses an array of annotation types to select when parsing + */ + static Map, Annotation> parseSelectAnnotations( + byte[] rawAnnotations, + ConstantPool constPool, + Class container, + Class ... selectAnnotationClasses) { + if (rawAnnotations == null) + return Collections.emptyMap(); + + try { + return parseAnnotations2(rawAnnotations, constPool, container, selectAnnotationClasses); + } catch(BufferUnderflowException e) { + throw new AnnotationFormatError("Unexpected end of annotations."); + } catch(IllegalArgumentException e) { + // Type mismatch in constant pool + throw new AnnotationFormatError(e); + } + } + + private static Map, Annotation> parseAnnotations2( byte[] rawAnnotations, ConstantPool constPool, - Class container) { - Map result = new LinkedHashMap(); + Class container, + Class[] selectAnnotationClasses) { + Map, Annotation> result = + new LinkedHashMap, Annotation>(); ByteBuffer buf = ByteBuffer.wrap(rawAnnotations); int numAnnotations = buf.getShort() & 0xFFFF; for (int i = 0; i < numAnnotations; i++) { - Annotation a = parseAnnotation(buf, constPool, container, false); + Annotation a = parseAnnotation2(buf, constPool, container, false, selectAnnotationClasses); if (a != null) { - Class klass = a.annotationType(); - AnnotationType type = AnnotationType.getInstance(klass); - if (type.retention() == RetentionPolicy.RUNTIME) - if (result.put(klass, a) != null) + Class klass = a.annotationType(); + if (AnnotationType.getInstance(klass).retention() == RetentionPolicy.RUNTIME && + result.put(klass, a) != null) { throw new AnnotationFormatError( "Duplicate annotation for class: "+klass+": " + a); } } + } return result; } @@ -123,7 +152,7 @@ public static Annotation[][] parseParameterAnnotations( byte[] rawAnnotations, ConstantPool constPool, - Class container) { + Class container) { try { return parseParameterAnnotations2(rawAnnotations, constPool, container); } catch(BufferUnderflowException e) { @@ -138,7 +167,7 @@ private static Annotation[][] parseParameterAnnotations2( byte[] rawAnnotations, ConstantPool constPool, - Class container) { + Class container) { ByteBuffer buf = ByteBuffer.wrap(rawAnnotations); int numParameters = buf.get() & 0xFF; Annotation[][] result = new Annotation[numParameters][]; @@ -188,15 +217,24 @@ */ private static Annotation parseAnnotation(ByteBuffer buf, ConstantPool constPool, - Class container, + Class container, boolean exceptionOnMissingAnnotationClass) { + return parseAnnotation2(buf, constPool, container, exceptionOnMissingAnnotationClass, null); + } + + @SuppressWarnings("unchecked") + private static Annotation parseAnnotation2(ByteBuffer buf, + ConstantPool constPool, + Class container, + boolean exceptionOnMissingAnnotationClass, + Class[] selectAnnotationClasses) { int typeIndex = buf.getShort() & 0xFFFF; - Class annotationClass = null; + Class annotationClass = null; String sig = "[unknown]"; try { try { sig = constPool.getUTF8At(typeIndex); - annotationClass = parseSig(sig, container); + annotationClass = (Class)parseSig(sig, container); } catch (IllegalArgumentException ex) { // support obsolete early jsr175 format class files annotationClass = constPool.getClassAt(typeIndex); @@ -215,6 +253,10 @@ skipAnnotation(buf, false); return null; } + if (selectAnnotationClasses != null && !contains(selectAnnotationClasses, annotationClass)) { + skipAnnotation(buf, false); + return null; + } AnnotationType type = null; try { type = AnnotationType.getInstance(annotationClass); @@ -223,7 +265,7 @@ return null; } - Map memberTypes = type.memberTypes(); + Map> memberTypes = type.memberTypes(); Map memberValues = new LinkedHashMap(type.memberDefaults()); @@ -231,7 +273,7 @@ for (int i = 0; i < numMembers; i++) { int memberNameIndex = buf.getShort() & 0xFFFF; String memberName = constPool.getUTF8At(memberNameIndex); - Class memberType = memberTypes.get(memberName); + Class memberType = memberTypes.get(memberName); if (memberType == null) { // Member is no longer present in annotation type; ignore it @@ -252,7 +294,7 @@ * member -> value map. */ public static Annotation annotationForMap( - Class type, Map memberValues) + Class type, Map memberValues) { return (Annotation) Proxy.newProxyInstance( type.getClassLoader(), new Class[] { type }, @@ -286,14 +328,15 @@ * The member must be of the indicated type. If it is not, this * method returns an AnnotationTypeMismatchExceptionProxy. */ - public static Object parseMemberValue(Class memberType, ByteBuffer buf, + public static Object parseMemberValue(Class memberType, + ByteBuffer buf, ConstantPool constPool, - Class container) { + Class container) { Object result = null; int tag = buf.get(); switch(tag) { case 'e': - return parseEnumValue(memberType, buf, constPool, container); + return parseEnumValue((Class>)memberType, buf, constPool, container); case 'c': result = parseClassValue(buf, constPool, container); break; @@ -361,7 +404,7 @@ */ private static Object parseClassValue(ByteBuffer buf, ConstantPool constPool, - Class container) { + Class container) { int classIndex = buf.getShort() & 0xFFFF; try { try { @@ -379,7 +422,7 @@ } } - private static Class parseSig(String sig, Class container) { + private static Class parseSig(String sig, Class container) { if (sig.equals("V")) return void.class; SignatureParser parser = SignatureParser.make(); TypeSignature typeSig = parser.parseTypeSig(sig); @@ -389,7 +432,7 @@ Type result = reify.getResult(); return toClass(result); } - static Class toClass(Type o) { + static Class toClass(Type o) { if (o instanceof GenericArrayType) return Array.newInstance(toClass(((GenericArrayType)o).getGenericComponentType()), 0) @@ -409,9 +452,9 @@ * u2 const_name_index; * } enum_const_value; */ - private static Object parseEnumValue(Class enumType, ByteBuffer buf, + private static Object parseEnumValue(Class enumType, ByteBuffer buf, ConstantPool constPool, - Class container) { + Class container) { int typeNameIndex = buf.getShort() & 0xFFFF; String typeName = constPool.getUTF8At(typeNameIndex); int constNameIndex = buf.getShort() & 0xFFFF; @@ -449,12 +492,12 @@ * If the array values do not match arrayType, an * AnnotationTypeMismatchExceptionProxy will be returned. */ - private static Object parseArray(Class arrayType, + private static Object parseArray(Class arrayType, ByteBuffer buf, ConstantPool constPool, - Class container) { + Class container) { int length = buf.getShort() & 0xFFFF; // Number of array components - Class componentType = arrayType.getComponentType(); + Class componentType = arrayType.getComponentType(); if (componentType == byte.class) { return parseByteArray(length, buf, constPool); @@ -477,11 +520,11 @@ } else if (componentType == Class.class) { return parseClassArray(length, buf, constPool, container); } else if (componentType.isEnum()) { - return parseEnumArray(length, componentType, buf, + return parseEnumArray(length, (Class)componentType, buf, constPool, container); } else { assert componentType.isAnnotation(); - return parseAnnotationArray(length, componentType, buf, + return parseAnnotationArray(length, (Class )componentType, buf, constPool, container); } } @@ -660,8 +703,8 @@ private static Object parseClassArray(int length, ByteBuffer buf, ConstantPool constPool, - Class container) { - Object[] result = new Class[length]; + Class container) { + Object[] result = new Class[length]; boolean typeMismatch = false; int tag = 0; @@ -677,10 +720,10 @@ return typeMismatch ? exceptionProxy(tag) : result; } - private static Object parseEnumArray(int length, Class enumType, + private static Object parseEnumArray(int length, Class enumType, ByteBuffer buf, ConstantPool constPool, - Class container) { + Class container) { Object[] result = (Object[]) Array.newInstance(enumType, length); boolean typeMismatch = false; int tag = 0; @@ -698,10 +741,10 @@ } private static Object parseAnnotationArray(int length, - Class annotationType, + Class annotationType, ByteBuffer buf, ConstantPool constPool, - Class container) { + Class container) { Object[] result = (Object[]) Array.newInstance(annotationType, length); boolean typeMismatch = false; int tag = 0; @@ -788,4 +831,16 @@ for (int i = 0; i < length; i++) skipMemberValue(buf); } + + /** + * Searches for given {@code element} in given {@code array} by identity. + * Returns {@code true} if found {@code false} if not. + */ + private static boolean contains(Object[] array, Object element) { + for (Object e : array) + if (e == element) + return true; + return false; + } + } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/reflect/annotation/AnnotationType.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/reflect/annotation/AnnotationType.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/reflect/annotation/AnnotationType.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/reflect/annotation/AnnotationType.java 2015-01-20 02:17:40.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,8 @@ package sun.reflect.annotation; +import sun.misc.JavaLangAccess; + import java.lang.annotation.*; import java.lang.reflect.*; import java.util.*; @@ -45,29 +47,28 @@ * types. This matches the return value that must be used for a * dynamic proxy, allowing for a simple isInstance test. */ - private final Map memberTypes = new HashMap(); + private final Map> memberTypes; /** * Member name -> default value mapping. */ - private final Map memberDefaults = - new HashMap(); + private final Map memberDefaults; /** - * Member name -> Method object mapping. This (and its assoicated + * Member name -> Method object mapping. This (and its associated * accessor) are used only to generate AnnotationTypeMismatchExceptions. */ - private final Map members = new HashMap(); + private final Map members; /** * The retention policy for this annotation type. */ - private RetentionPolicy retention = RetentionPolicy.RUNTIME;; + private final RetentionPolicy retention; /** * Whether this annotation type is inherited. */ - private boolean inherited = false; + private final boolean inherited; /** * Returns an AnnotationType instance for the specified annotation type. @@ -75,13 +76,20 @@ * @throw IllegalArgumentException if the specified class object for * does not represent a valid annotation type */ - public static synchronized AnnotationType getInstance( - Class annotationClass) + public static AnnotationType getInstance( + Class annotationClass) { - AnnotationType result = sun.misc.SharedSecrets.getJavaLangAccess(). - getAnnotationType(annotationClass); - if (result == null) - result = new AnnotationType((Class) annotationClass); + JavaLangAccess jla = sun.misc.SharedSecrets.getJavaLangAccess(); + AnnotationType result = jla.getAnnotationType(annotationClass); // volatile read + if (result == null) { + result = new AnnotationType(annotationClass); + // try to CAS the AnnotationType: null -> result + if (!jla.casAnnotationType(annotationClass, null, result)) { + // somebody was quicker -> read its result + result = jla.getAnnotationType(annotationClass); + assert result != null; + } + } return result; } @@ -93,7 +101,7 @@ * @throw IllegalArgumentException if the specified class object for * does not represent a valid annotation type */ - private AnnotationType(final Class annotationClass) { + private AnnotationType(final Class annotationClass) { if (!annotationClass.isAnnotation()) throw new IllegalArgumentException("Not an annotation type"); @@ -105,32 +113,42 @@ } }); + memberTypes = new HashMap>(methods.length+1, 1.0f); + memberDefaults = new HashMap(0); + members = new HashMap(methods.length+1, 1.0f); for (Method method : methods) { if (method.getParameterTypes().length != 0) throw new IllegalArgumentException(method + " has params"); String name = method.getName(); - Class type = method.getReturnType(); + Class type = method.getReturnType(); memberTypes.put(name, invocationHandlerReturnType(type)); members.put(name, method); Object defaultValue = method.getDefaultValue(); if (defaultValue != null) memberDefaults.put(name, defaultValue); - - members.put(name, method); } - sun.misc.SharedSecrets.getJavaLangAccess(). - setAnnotationType(annotationClass, this); - // Initialize retention, & inherited fields. Special treatment // of the corresponding annotation types breaks infinite recursion. if (annotationClass != Retention.class && annotationClass != Inherited.class) { - Retention ret = annotationClass.getAnnotation(Retention.class); + JavaLangAccess jla = sun.misc.SharedSecrets.getJavaLangAccess(); + Map, Annotation> metaAnnotations = + AnnotationParser.parseSelectAnnotations( + jla.getRawClassAnnotations(annotationClass), + jla.getConstantPool(annotationClass), + annotationClass, + Retention.class, Inherited.class + ); + Retention ret = (Retention) metaAnnotations.get(Retention.class); retention = (ret == null ? RetentionPolicy.CLASS : ret.value()); - inherited = annotationClass.isAnnotationPresent(Inherited.class); + inherited = metaAnnotations.containsKey(Inherited.class); + } + else { + retention = RetentionPolicy.RUNTIME; + inherited = false; } } @@ -140,7 +158,7 @@ * the specified type (which is assumed to be a legal member type * for an annotation). */ - public static Class invocationHandlerReturnType(Class type) { + public static Class invocationHandlerReturnType(Class type) { // Translate primitives to wrappers if (type == byte.class) return Byte.class; @@ -167,7 +185,7 @@ * Returns member types for this annotation type * (member name -> type mapping). */ - public Map memberTypes() { + public Map> memberTypes() { return memberTypes; } @@ -205,11 +223,10 @@ * For debugging. */ public String toString() { - StringBuffer s = new StringBuffer("Annotation Type:" + "\n"); - s.append(" Member types: " + memberTypes + "\n"); - s.append(" Member defaults: " + memberDefaults + "\n"); - s.append(" Retention policy: " + retention + "\n"); - s.append(" Inherited: " + inherited); - return s.toString(); + return "Annotation Type:\n" + + " Member types: " + memberTypes + "\n" + + " Member defaults: " + memberDefaults + "\n" + + " Retention policy: " + retention + "\n" + + " Inherited: " + inherited; } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/reflect/ReflectionFactory.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/reflect/ReflectionFactory.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/reflect/ReflectionFactory.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/reflect/ReflectionFactory.java 2015-01-20 02:17:40.000000000 +0000 @@ -84,8 +84,8 @@ * AccessController.doPrivileged. */ public static final class GetReflectionFactoryAction - implements PrivilegedAction { - public Object run() { + implements PrivilegedAction { + public ReflectionFactory run() { return getReflectionFactory(); } } @@ -164,7 +164,7 @@ public ConstructorAccessor newConstructorAccessor(Constructor c) { checkInitted(); - Class declaringClass = c.getDeclaringClass(); + Class declaringClass = c.getDeclaringClass(); if (Modifier.isAbstract(declaringClass.getModifiers())) { return new InstantiationExceptionConstructorAccessorImpl(null); } @@ -203,10 +203,10 @@ // /** Creates a new java.lang.reflect.Field. Access checks as per - java.lang.reflect.AccessibleObject are not overridden. */ - public Field newField(Class declaringClass, + java.lang.reflect.AccessibleObject are not overridden. */ + public Field newField(Class declaringClass, String name, - Class type, + Class type, int modifiers, int slot, String signature, @@ -223,11 +223,11 @@ /** Creates a new java.lang.reflect.Method. Access checks as per java.lang.reflect.AccessibleObject are not overridden. */ - public Method newMethod(Class declaringClass, + public Method newMethod(Class declaringClass, String name, - Class[] parameterTypes, - Class returnType, - Class[] checkedExceptions, + Class[] parameterTypes, + Class returnType, + Class[] checkedExceptions, int modifiers, int slot, String signature, @@ -250,9 +250,9 @@ /** Creates a new java.lang.reflect.Constructor. Access checks as per java.lang.reflect.AccessibleObject are not overridden. */ - public Constructor newConstructor(Class declaringClass, - Class[] parameterTypes, - Class[] checkedExceptions, + public Constructor newConstructor(Class declaringClass, + Class[] parameterTypes, + Class[] checkedExceptions, int modifiers, int slot, String signature, @@ -310,7 +310,7 @@ /** Makes a copy of the passed constructor. The returned constructor is a "child" of the passed one; see the comments in Constructor.java for details. */ - public Constructor copyConstructor(Constructor arg) { + public Constructor copyConstructor(Constructor arg) { return langReflectAccess().copyConstructor(arg); } @@ -321,7 +321,7 @@ // public Constructor newConstructorForSerialization - (Class classToInstantiate, Constructor constructorToCall) + (Class classToInstantiate, Constructor constructorToCall) { // Fast path if (constructorToCall.getDeclaringClass() == classToInstantiate) { @@ -366,8 +366,9 @@ run, before the system properties are set up. */ private static void checkInitted() { if (initted) return; - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { + AccessController.doPrivileged( + new PrivilegedAction() { + public Void run() { // Tests to ensure the system properties table is fully // initialized. This is needed because reflection code is // called very early in the initialization process (before diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/rmi/registry/resources/rmiregistry_pt_BR.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/rmi/registry/resources/rmiregistry_pt_BR.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/rmi/registry/resources/rmiregistry_pt_BR.properties 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/rmi/registry/resources/rmiregistry_pt_BR.properties 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,28 @@ +# +# +# Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +rmiregistry.usage=Uso: {0} \n\nem que inclui:\n -J passa o argumento para o int\u00e9rprete de java +rmiregistry.port.badnumber=o argumento da porta, {0}, n\u00e3o \u00e9 um n\u00famero. diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/rmi/server/resources/rmid_pt_BR.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/rmi/server/resources/rmid_pt_BR.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/rmi/server/resources/rmid_pt_BR.properties 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/rmi/server/resources/rmid_pt_BR.properties 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,96 @@ +# +# +# Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# "rmid", inetd", and "wait" should not be translated. +rmid.syntax.exec.invalid=rmid foi iniciado de inetd com um status inv\u00e1lido (deve estar em espera) + +# "rmid" and "inetd" should not be translated. +rmid.syntax.port.badarg=a porta n\u00e3o pode ser especificada se rmid for iniciado de inetd + +# "port" here refers to a TCP port for the server to listen on. +rmid.syntax.port.badnumber=a porta n\u00e3o \u00e9 um n\u00famero + +# "-port" should not be translated, because it's part of command syntax. +rmid.syntax.port.missing=a op\u00e7\u00e3o -port requer argumento + +# "-log" should not be translated, because it's part of command syntax. +rmid.syntax.log.missing=a op\u00e7\u00e3o -log requer argumento + +# "-log" should not be translated, because it's part of command syntax. +rmid.syntax.log.required=op\u00e7\u00e3o -log necess\u00e1ria + +# {0} = the (string) illegal argument in question +rmid.syntax.illegal.option=op\u00e7\u00e3o ilegal: {0} + +# {0} = the (string) reason text that came with a thrown exception +# "Activation.main" should not be translated, because it's a codepoint +rmid.unexpected.exception=Activation.main: ocorreu uma exce\u00e7\u00e3o: {0} + +# "java.home" should not be translated, because it's a property name +# "ActivatorImpl" should not be translated, because it's a codepoint +rmid.unfound.java.home.property=ActivatorImpl: n\u00e3o \u00e9 poss\u00edvel localizar java.home + +# "rmid" should not be translated +rmid.inherited.channel.info=inicializa\u00e7\u00e3o de rmid com canal legado + +# "Activation.main" should not be translated, because it's a codepoint +rmid.exec.policy.invalid=Activation.main: classe de pol\u00edtica de execu\u00e7\u00e3o inv\u00e1lida + +# "rmid" should not be translated +rmid.exec.policy.exception=rmid: a tentativa de obter a pol\u00edtica de execu\u00e7\u00e3o gera: + +# "rmid" should not be translated +rmid.exec.command=rmid: debugExec: executando "{0}" + +# "rmid" should not be translated +rmid.group.inactive=rmid: grupo de ativa\u00e7\u00e3o inativo: {0} + +# "Activation.main", "sun.rmi.activation.execPolicy", "ExecPermission" and +# "ExecOptionPermission" should not be translated, since they refer to +# class/permission names. +rmid.exec.perms.inadequate=Activation.main: aviso: propriedade do sistema sun.rmi.activation.execPolicy\nn\u00e3o registrada e nenhuma ExecPermission/ExecOptionPermission\nconcedida; as tentativas de ativa\u00e7\u00e3o seguintes podem falhar devido a verifica\u00e7\u00f5es mal sucedidas da permiss\u00e3o\nExecPermission/ExecOptionPermission. Para obter\ndocumenta\u00e7\u00e3o sobre como configurar a seguran\u00e7a rmid, conculte:\n\nhttp://java.sun.com/j2se/1.4/docs/tooldocs/solaris/rmid.html\nhttp://java.sun.com/j2se/1.4/docs/tooldocs/win32/rmid.html\n + +# "rmid", "-port", "-log", "-stop", "-C" and "-J" should not be translated, +# because they are syntax +rmid.usage=Uso: {0} \n\nem que inclui:\n -port especifica a porta que rmid usar\u00e1\n -log especifica o diret\u00f3rio no qual o rmid grava o registro\n -stop para a chamada atual de rmid (para a porta especificada)\n -C passa o argumento para cada processo filho (grupo de ativa\u00e7\u00e3o)\n -J passa o argumento para o int\u00e9rprete de java\n +# This means "The currently running activation daemon has been shut down, +# and is about to exit". +rmid.daemon.shutdown=encerramento do daemon de ativa\u00e7\u00e3o + +# "rmid" should not be translated +rmid.restart.group.warning=\nrmid: (AVISO) reiniciar grupo gera: + +# "rmid" should not be translated +rmid.restart.service.warning=\nrmid: (AVISO) reiniciar servi\u00e7o gera: + +# "rmid" should not be translated +rmid.log.update.warning=\nrmid: (AVISO) registrar atualiza\u00e7\u00e3o gera: + +# "rmid" should not be translated +rmid.log.snapshot.warning=\nrmid: (GRAVE) registrar instant\u00e2neo gera: + +# "rmid" should not be translated +rmid.log.recover.warning=\nrmid: (AVISO) {0}: ignorando registro durante a recupera\u00e7\u00e3o: diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,6 +48,9 @@ import java.rmi.server.UID; import java.security.AccessControlContext; import java.security.AccessController; +import java.security.Permissions; +import java.security.PrivilegedAction; +import java.security.ProtectionDomain; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; @@ -121,6 +124,14 @@ private static final ThreadLocal threadConnectionHandler = new ThreadLocal(); + /** an AccessControlContext with no permissions */ + private static final AccessControlContext NOPERMS_ACC; + static { + Permissions perms = new Permissions(); + ProtectionDomain[] pd = { new ProtectionDomain(null, perms) }; + NOPERMS_ACC = new AccessControlContext(pd); + } + /** endpoints for this transport */ private final LinkedList epList; /** number of objects exported on this transport */ @@ -664,7 +675,13 @@ t.setName("RMI TCP Connection(" + connectionCount.incrementAndGet() + ")-" + remoteHost); - run0(); + AccessController.doPrivileged(new PrivilegedAction() { + @Override + public Void run() { + run0(); + return null; + } + }, NOPERMS_ACC); } finally { t.setName(name); } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/rmi/transport/Transport.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/rmi/transport/Transport.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/rmi/transport/Transport.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/rmi/transport/Transport.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,6 +37,10 @@ import java.rmi.server.RemoteServer; import java.rmi.server.ServerNotActiveException; import java.security.AccessControlContext; +import java.security.AccessController; +import java.security.Permissions; +import java.security.PrivilegedAction; +import java.security.ProtectionDomain; import sun.rmi.runtime.Log; import sun.rmi.server.Dispatcher; import sun.rmi.server.UnicastServerRef; @@ -67,6 +71,15 @@ /** ObjID for DGCImpl */ private static final ObjID dgcID = new ObjID(ObjID.DGC_ID); + /** AccessControlContext for setting context ClassLoader */ + private static final AccessControlContext SETCCL_ACC; + static { + Permissions perms = new Permissions(); + perms.add(new RuntimePermission("setContextClassLoader")); + ProtectionDomain[] pd = { new ProtectionDomain(null, perms) }; + SETCCL_ACC = new AccessControlContext(pd); + } + /** * Returns a Channel that generates connections to the * endpoint ep. A Channel is an object that creates and @@ -116,6 +129,19 @@ protected abstract void checkAcceptPermission(AccessControlContext acc); /** + * Sets the context class loader for the current thread. + */ + private static void setContextClassLoader(final ClassLoader ccl) { + AccessController.doPrivileged(new PrivilegedAction () { + @Override + public Void run() { + Thread.currentThread().setContextClassLoader(ccl); + return null; + } + }, SETCCL_ACC); + } + + /** * Service an incoming remote call. When a message arrives on the * connection indicating the beginning of a remote call, the * threads are required to call the serviceCall method of @@ -163,11 +189,10 @@ target.getAccessControlContext(); ClassLoader ccl = target.getContextClassLoader(); - Thread t = Thread.currentThread(); - ClassLoader savedCcl = t.getContextClassLoader(); + ClassLoader savedCcl = Thread.currentThread().getContextClassLoader(); try { - t.setContextClassLoader(ccl); + setContextClassLoader(ccl); currentTransport.set(this); try { java.security.AccessController.doPrivileged( @@ -182,7 +207,7 @@ throw (IOException) pae.getException(); } } finally { - t.setContextClassLoader(savedCcl); + setContextClassLoader(savedCcl); currentTransport.set(null); } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/internal/spec/TlsKeyMaterialParameterSpec.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/internal/spec/TlsKeyMaterialParameterSpec.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/internal/spec/TlsKeyMaterialParameterSpec.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/internal/spec/TlsKeyMaterialParameterSpec.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -90,8 +90,10 @@ throw new NullPointerException(); } this.masterSecret = masterSecret; - this.majorVersion = TlsMasterSecretParameterSpec.checkVersion(majorVersion); - this.minorVersion = TlsMasterSecretParameterSpec.checkVersion(minorVersion); + this.majorVersion = + TlsMasterSecretParameterSpec.checkVersion(majorVersion); + this.minorVersion = + TlsMasterSecretParameterSpec.checkVersion(minorVersion); this.clientRandom = clientRandom.clone(); this.serverRandom = serverRandom.clone(); this.cipherAlgorithm = cipherAlgorithm; @@ -172,20 +174,36 @@ } /** - * Returns the length in bytes of the expanded encryption key to be generated. + * Returns the length in bytes of the expanded encryption key to be + * generated. Returns zero if the expanded encryption key is not + * supposed to be generated. * - * @return the length in bytes of the expanded encryption key to be generated. + * @return the length in bytes of the expanded encryption key to be + * generated. */ public int getExpandedCipherKeyLength() { + // TLS v1.1 disables the exportable weak cipher suites. + if (majorVersion >= 0x03 && minorVersion >= 0x02) { + return 0; + } return expandedCipherKeyLength; } /** - * Returns the length in bytes of the initialization vector to be generated. + * Returns the length in bytes of the initialization vector to be + * generated. Returns zero if the initialization vector is not + * supposed to be generated. * - * @return the length in bytes of the initialization vector to be generated. + * @return the length in bytes of the initialization vector to be + * generated. */ public int getIvLength() { + // TLS v1.1 or later uses an explicit IV to protect against + // the CBC attacks. + if (majorVersion >= 0x03 && minorVersion >= 0x02) { + return 0; + } + return ivLength; } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/internal/spec/TlsMasterSecretParameterSpec.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/internal/spec/TlsMasterSecretParameterSpec.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/internal/spec/TlsMasterSecretParameterSpec.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/internal/spec/TlsMasterSecretParameterSpec.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -67,7 +67,8 @@ * negative or larger than 255 */ public TlsMasterSecretParameterSpec(SecretKey premasterSecret, - int majorVersion, int minorVersion, byte[] clientRandom, byte[] serverRandom) { + int majorVersion, int minorVersion, + byte[] clientRandom, byte[] serverRandom) { if (premasterSecret == null) { throw new NullPointerException("premasterSecret must not be null"); } @@ -80,7 +81,8 @@ static int checkVersion(int version) { if ((version < 0) || (version > 255)) { - throw new IllegalArgumentException("Version must be between 0 and 255"); + throw new IllegalArgumentException( + "Version must be between 0 and 255"); } return version; } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/GSSCaller.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/GSSCaller.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/GSSCaller.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/GSSCaller.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.security.jgss; + +/** + * Denotes what client is calling the JGSS-API. The object can be sent deep + * into the mechanism level so that special actions can be performed for + * different callers. + */ +public class GSSCaller { + public static final GSSCaller CALLER_UNKNOWN = new GSSCaller(); + public static final GSSCaller CALLER_INITIATE = new GSSCaller(); + public static final GSSCaller CALLER_ACCEPT = new GSSCaller(); + public static final GSSCaller CALLER_SSL_CLIENT = new GSSCaller(); + public static final GSSCaller CALLER_SSL_SERVER = new GSSCaller(); +} + diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/GSSHeader.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/GSSHeader.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/GSSHeader.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/GSSHeader.java 2015-01-20 02:20:42.000000000 +0000 @@ -270,6 +270,9 @@ value <<= 8; value += 0x0ff & in.read(); } + if (value < 0) { + throw new IOException("Invalid length bytes"); + } } return value; } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/GSSManagerImpl.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/GSSManagerImpl.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/GSSManagerImpl.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/GSSManagerImpl.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,8 +27,6 @@ import org.ietf.jgss.*; import sun.security.jgss.spi.*; -import java.io.*; -import java.security.NoSuchProviderException; import java.security.Provider; import java.security.AccessController; import java.security.PrivilegedAction; @@ -63,17 +61,17 @@ private ProviderList list; // Used by java SPNEGO impl to make sure native is disabled - public GSSManagerImpl(int caller, boolean useNative) { + public GSSManagerImpl(GSSCaller caller, boolean useNative) { list = new ProviderList(caller, useNative); } // Used by HTTP/SPNEGO NegotiatorImpl - public GSSManagerImpl(int caller) { + public GSSManagerImpl(GSSCaller caller) { list = new ProviderList(caller, USE_NATIVE); } public GSSManagerImpl() { - list = new ProviderList(GSSUtil.CALLER_UNKNOWN, USE_NATIVE); + list = new ProviderList(GSSCaller.CALLER_UNKNOWN, USE_NATIVE); } public Oid[] getMechs(){ diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/GSSNameImpl.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/GSSNameImpl.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/GSSNameImpl.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/GSSNameImpl.java 2015-01-20 02:20:42.000000000 +0000 @@ -231,6 +231,10 @@ ((0xFF & bytes[pos++]) << 16) | ((0xFF & bytes[pos++]) << 8) | (0xFF & bytes[pos++])); + if (mechPortionLen < 0 || pos > bytes.length - mechPortionLen) { + throw new GSSExceptionImpl(GSSException.BAD_NAME, + "Exported name mech name is corrupted!"); + } byte[] mechPortion = new byte[mechPortionLen]; System.arraycopy(bytes, pos, mechPortion, 0, mechPortionLen); diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/GSSUtil.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/GSSUtil.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/GSSUtil.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/GSSUtil.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -72,13 +72,6 @@ private static final String DEFAULT_HANDLER = "auth.login.defaultCallbackHandler"; - public static final int CALLER_UNKNOWN = -1; - public static final int CALLER_INITIATE = 1; - public static final int CALLER_ACCEPT = 2; - public static final int CALLER_SSL_CLIENT = 3; - public static final int CALLER_SSL_SERVER = 4; - public static final int CALLER_HTTP_NEGOTIATE = 5; - static final boolean DEBUG; static { DEBUG = (AccessController.doPrivileged @@ -240,11 +233,12 @@ * @param mech the mech to be used * @return the authenticated subject */ - public static Subject login(int caller, Oid mech) throws LoginException { + public static Subject login(GSSCaller caller, Oid mech) throws LoginException { CallbackHandler cb = null; - if (caller == GSSUtil.CALLER_HTTP_NEGOTIATE) { - cb = new sun.net.www.protocol.http.NegotiateCallbackHandler(); + if (caller instanceof HttpCaller) { + cb = new sun.net.www.protocol.http.NegotiateCallbackHandler( + ((HttpCaller)caller).info()); } else { String defaultHandler = java.security.Security.getProperty(DEFAULT_HANDLER); @@ -274,12 +268,12 @@ * The application indicates this by explicitly setting the system * property javax.security.auth.useSubjectCredsOnly to false. */ - public static boolean useSubjectCredsOnly(int caller) { + public static boolean useSubjectCredsOnly(GSSCaller caller) { // HTTP/SPNEGO doesn't use the standard JAAS framework. Instead, it // uses the java.net.Authenticator style, therefore always return // false here. - if (caller == CALLER_HTTP_NEGOTIATE) { + if (caller instanceof HttpCaller) { return false; } /* diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/HttpCaller.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/HttpCaller.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/HttpCaller.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/HttpCaller.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.security.jgss; + +import sun.net.www.protocol.http.HttpCallerInfo; + +/** + * A special kind of GSSCaller, which origins from HTTP/Negotiate and contains + * info about what triggers the JGSS calls. + */ +public class HttpCaller extends GSSCaller { + final private HttpCallerInfo hci; + + public HttpCaller(HttpCallerInfo hci) { + this.hci = hci; + } + + public HttpCallerInfo info() { + return hci; + } +} + diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/krb5/InitialToken.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/krb5/InitialToken.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/krb5/InitialToken.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/krb5/InitialToken.java 2015-01-20 02:20:42.000000000 +0000 @@ -35,7 +35,7 @@ import java.security.NoSuchAlgorithmException; import java.util.Arrays; import sun.security.krb5.*; -import sun.security.jgss.GSSUtil; +import sun.security.jgss.HttpCaller; import sun.security.krb5.internal.Krb5; abstract class InitialToken extends Krb5Token { @@ -86,7 +86,7 @@ CHECKSUM_FLAGS_SIZE; if (context.getCredDelegState()) { - if (context.getCaller() == GSSUtil.CALLER_HTTP_NEGOTIATE && + if (context.getCaller() instanceof HttpCaller && !serviceTicket.getFlags()[Krb5.TKT_OPTS_DELEGATE]) { // When the caller is HTTP/SPNEGO and OK-AS-DELEGATE // is not present in the service ticket, delegation diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/krb5/Krb5AcceptCredential.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/krb5/Krb5AcceptCredential.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/krb5/Krb5AcceptCredential.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/krb5/Krb5AcceptCredential.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,11 +26,10 @@ package sun.security.jgss.krb5; import org.ietf.jgss.*; -import sun.security.jgss.GSSUtil; +import sun.security.jgss.GSSCaller; import sun.security.jgss.spi.*; import sun.security.krb5.*; import javax.security.auth.kerberos.*; -import java.io.IOException; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; import java.security.AccessController; @@ -80,7 +79,7 @@ } } - static Krb5AcceptCredential getInstance(final int caller, Krb5NameElement name) + static Krb5AcceptCredential getInstance(final GSSCaller caller, Krb5NameElement name) throws GSSException { final String serverPrinc = (name == null? null: @@ -93,7 +92,7 @@ new PrivilegedExceptionAction() { public KerberosKey[] run() throws Exception { return Krb5Util.getKeys( - caller == GSSUtil.CALLER_UNKNOWN ? GSSUtil.CALLER_ACCEPT: caller, + caller == GSSCaller.CALLER_UNKNOWN ? GSSCaller.CALLER_ACCEPT: caller, serverPrinc, acc); }}); } catch (PrivilegedActionException e) { diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/krb5/Krb5Context.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/krb5/Krb5Context.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/krb5/Krb5Context.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/krb5/Krb5Context.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,6 +28,7 @@ import org.ietf.jgss.*; import sun.misc.HexDumpEncoder; import sun.security.jgss.GSSUtil; +import sun.security.jgss.GSSCaller; import sun.security.jgss.spi.*; import sun.security.jgss.TokenTracker; import sun.security.krb5.*; @@ -37,8 +38,6 @@ import java.security.Provider; import java.security.AccessController; import java.security.AccessControlContext; -import java.security.GeneralSecurityException; -import java.security.PrivilegedAction; import java.security.PrivilegedExceptionAction; import java.security.PrivilegedActionException; import javax.crypto.Cipher; @@ -113,14 +112,14 @@ // stored elsewhere private Credentials serviceCreds; private KrbApReq apReq; - final private int caller; + final private GSSCaller caller; private static final boolean DEBUG = Krb5Util.DEBUG; /** * Constructor for Krb5Context to be called on the context initiator's * side. */ - Krb5Context(int caller, Krb5NameElement peerName, Krb5CredElement myCred, + Krb5Context(GSSCaller caller, Krb5NameElement peerName, Krb5CredElement myCred, int lifetime) throws GSSException { @@ -138,7 +137,7 @@ * Constructor for Krb5Context to be called on the context acceptor's * side. */ - Krb5Context(int caller, Krb5CredElement myCred) + Krb5Context(GSSCaller caller, Krb5CredElement myCred) throws GSSException { this.caller = caller; this.myCred = myCred; @@ -148,7 +147,7 @@ /** * Constructor for Krb5Context to import a previously exported context. */ - public Krb5Context(int caller, byte [] interProcessToken) + public Krb5Context(GSSCaller caller, byte [] interProcessToken) throws GSSException { throw new GSSException(GSSException.UNAVAILABLE, -1, "GSS Import Context not available"); @@ -573,7 +572,7 @@ // SubjectComber.find // instead of Krb5Util.getTicket return Krb5Util.getTicket( - GSSUtil.CALLER_UNKNOWN, + GSSCaller.CALLER_UNKNOWN, // since it's useSubjectCredsOnly here, // don't worry about the null myName.getKrb5PrincipalName().getName(), @@ -1280,7 +1279,7 @@ } } - int getCaller() { + GSSCaller getCaller() { // Currently used by InitialToken only return caller; } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/krb5/Krb5InitCredential.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/krb5/Krb5InitCredential.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/krb5/Krb5InitCredential.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/krb5/Krb5InitCredential.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ package sun.security.jgss.krb5; import org.ietf.jgss.*; -import sun.security.jgss.GSSUtil; +import sun.security.jgss.GSSCaller; import sun.security.jgss.spi.*; import sun.security.krb5.*; import sun.security.krb5.Config; @@ -138,7 +138,7 @@ this.krb5Credentials = delegatedCred; } - static Krb5InitCredential getInstance(int caller, Krb5NameElement name, + static Krb5InitCredential getInstance(GSSCaller caller, Krb5NameElement name, int initLifetime) throws GSSException { @@ -305,7 +305,7 @@ // XXX call to this.destroy() should destroy the locally cached copy // of krb5Credentials and then call super.destroy(). - private static KerberosTicket getTgt(int caller, Krb5NameElement name, + private static KerberosTicket getTgt(GSSCaller caller, Krb5NameElement name, int initLifetime) throws GSSException { @@ -337,8 +337,8 @@ final AccessControlContext acc = AccessController.getContext(); try { - final int realCaller = (caller == GSSUtil.CALLER_UNKNOWN) - ? GSSUtil.CALLER_INITIATE + final GSSCaller realCaller = (caller == GSSCaller.CALLER_UNKNOWN) + ? GSSCaller.CALLER_INITIATE : caller; return AccessController.doPrivileged( new PrivilegedExceptionAction() { diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/krb5/Krb5MechFactory.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/krb5/Krb5MechFactory.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/krb5/Krb5MechFactory.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/krb5/Krb5MechFactory.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,12 +27,10 @@ import org.ietf.jgss.*; import sun.security.jgss.GSSUtil; +import sun.security.jgss.GSSCaller; import sun.security.jgss.spi.*; import javax.security.auth.kerberos.ServicePermission; import java.security.Provider; -import sun.security.util.DerOutputStream; -import sun.security.util.ObjectIdentifier; -import java.io.IOException; import java.util.Vector; /** @@ -62,7 +60,7 @@ GSSName.NT_EXPORT_NAME, NT_GSS_KRB5_PRINCIPAL}; - final private int caller; + final private GSSCaller caller; private static Krb5CredElement getCredFromSubject(GSSNameSpi name, boolean initiate) @@ -88,7 +86,7 @@ return result; } - public Krb5MechFactory(int caller) { + public Krb5MechFactory(GSSCaller caller) { this.caller = caller; } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/krb5/Krb5Util.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/krb5/Krb5Util.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/krb5/Krb5Util.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/krb5/Krb5Util.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,6 +32,7 @@ import javax.security.auth.login.LoginException; import java.security.AccessControlContext; import sun.security.jgss.GSSUtil; +import sun.security.jgss.GSSCaller; import sun.security.krb5.Credentials; import sun.security.krb5.EncryptionKey; @@ -67,7 +68,7 @@ * * NOTE: This method is used by JSSE Kerberos Cipher Suites */ - public static KerberosTicket getTicketFromSubjectAndTgs(int caller, + public static KerberosTicket getTicketFromSubjectAndTgs(GSSCaller caller, String clientPrincipal, String serverPrincipal, String tgsPrincipal, AccessControlContext acc) throws LoginException, KrbException, IOException { @@ -138,7 +139,7 @@ * useSubjectCredsOnly is false, then obtain ticket from * a LoginContext. */ - static KerberosTicket getTicket(int caller, + static KerberosTicket getTicket(GSSCaller caller, String clientPrincipal, String serverPrincipal, AccessControlContext acc) throws LoginException { @@ -168,7 +169,7 @@ * * NOTE: This method is used by JSSE Kerberos Cipher Suites */ - public static Subject getSubject(int caller, + public static Subject getSubject(GSSCaller caller, AccessControlContext acc) throws LoginException { // Try to get the Subject from acc @@ -190,7 +191,7 @@ * * NOTE: This method is used by JSSE Kerberos Cipher Suites */ - public static KerberosKey[] getKeys(int caller, + public static KerberosKey[] getKeys(GSSCaller caller, String serverPrincipal, AccessControlContext acc) throws LoginException { diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/LoginConfigImpl.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/LoginConfigImpl.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/LoginConfigImpl.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/LoginConfigImpl.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,7 +39,7 @@ public class LoginConfigImpl extends Configuration { private final Configuration config; - private final int caller; + private final GSSCaller caller; private final String mechName; private static final sun.security.util.Debug debug = sun.security.util.Debug.getInstance("gssloginconfig", "\t[GSS LoginConfigImpl]"); @@ -50,7 +50,7 @@ * @param caller defined in GSSUtil as CALLER_XXX final fields * @param oid defined in GSSUtil as XXX_MECH_OID final fields */ - public LoginConfigImpl(int caller, Oid mech) { + public LoginConfigImpl(GSSCaller caller, Oid mech) { this.caller = caller; @@ -88,40 +88,31 @@ // entry name is not provided. if ("krb5".equals(mechName)) { - switch (caller) { - case GSSUtil.CALLER_INITIATE: + if (caller == GSSCaller.CALLER_INITIATE) { alts = new String[] { "com.sun.security.jgss.krb5.initiate", "com.sun.security.jgss.initiate", }; - break; - case GSSUtil.CALLER_ACCEPT: + } else if (caller == GSSCaller.CALLER_ACCEPT) { alts = new String[] { "com.sun.security.jgss.krb5.accept", "com.sun.security.jgss.accept", }; - break; - case GSSUtil.CALLER_SSL_CLIENT: + } else if (caller == GSSCaller.CALLER_SSL_CLIENT) { alts = new String[] { "com.sun.security.jgss.krb5.initiate", "com.sun.net.ssl.client", }; - break; - case GSSUtil.CALLER_SSL_SERVER: + } else if (caller == GSSCaller.CALLER_SSL_SERVER) { alts = new String[] { "com.sun.security.jgss.krb5.accept", "com.sun.net.ssl.server", }; - break; - case GSSUtil.CALLER_HTTP_NEGOTIATE: + } else if (caller instanceof HttpCaller) { alts = new String[] { "com.sun.security.jgss.krb5.initiate", }; - break; - case GSSUtil.CALLER_UNKNOWN: - // should never use - throw new AssertionError("caller cannot be unknown"); - default: + } else if (caller == GSSCaller.CALLER_UNKNOWN) { throw new AssertionError("caller not defined"); } } else { @@ -199,8 +190,8 @@ return null; } - private static boolean isServerSide (int caller) { - return GSSUtil.CALLER_ACCEPT == caller || - GSSUtil.CALLER_SSL_SERVER == caller; + private static boolean isServerSide (GSSCaller caller) { + return GSSCaller.CALLER_ACCEPT == caller || + GSSCaller.CALLER_SSL_SERVER == caller; } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/ProviderList.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/ProviderList.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/ProviderList.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/ProviderList.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,8 +28,6 @@ import java.lang.reflect.InvocationTargetException; import org.ietf.jgss.*; import java.security.AccessController; -import java.security.AccessControlContext; -import java.security.PrivilegedAction; import java.security.Provider; import java.security.Security; import java.util.ArrayList; @@ -37,7 +35,6 @@ import java.util.HashMap; import java.util.Enumeration; import java.util.Iterator; -import javax.security.auth.Subject; import sun.security.jgss.spi.*; import sun.security.jgss.wrapper.NativeGSSFactory; import sun.security.jgss.wrapper.SunNativeProvider; @@ -124,9 +121,9 @@ new HashMap(5); private HashSet mechs = new HashSet(5); - final private int caller; + final private GSSCaller caller; - public ProviderList(int caller, boolean useNative) { + public ProviderList(GSSCaller caller, boolean useNative) { this.caller = caller; Provider[] provList; if (useNative) { @@ -274,7 +271,7 @@ private static MechanismFactory getMechFactoryImpl(Provider p, String className, Oid mechOid, - int caller) + GSSCaller caller) throws GSSException { try { @@ -301,7 +298,7 @@ if (baseClass.isAssignableFrom(implClass)) { java.lang.reflect.Constructor c = - implClass.getConstructor(Integer.TYPE); + implClass.getConstructor(GSSCaller.class); MechanismFactory mf = (MechanismFactory) (c.newInstance(caller)); if (mf instanceof NativeGSSFactory) { diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/spnego/SpNegoMechFactory.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/spnego/SpNegoMechFactory.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/spnego/SpNegoMechFactory.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/spnego/SpNegoMechFactory.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -90,7 +90,7 @@ return result; } - public SpNegoMechFactory(int caller) { + public SpNegoMechFactory(GSSCaller caller) { manager = new GSSManagerImpl(caller, false); Oid[] mechs = manager.getMechs(); availableMechs = new Oid[mechs.length-1]; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/wrapper/GSSNameElement.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/wrapper/GSSNameElement.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/wrapper/GSSNameElement.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/wrapper/GSSNameElement.java 2015-01-20 02:20:42.000000000 +0000 @@ -240,6 +240,9 @@ ((0xFF & nameVal[pos++]) << 16) | ((0xFF & nameVal[pos++]) << 8) | (0xFF & nameVal[pos++])); + if (mechPortionLen < 0) { + throw new GSSException(GSSException.BAD_NAME); + } byte[] mechPortion = new byte[mechPortionLen]; System.arraycopy(nameVal, pos, mechPortion, 0, mechPortionLen); return mechPortion; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/wrapper/NativeGSSFactory.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/wrapper/NativeGSSFactory.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/jgss/wrapper/NativeGSSFactory.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/jgss/wrapper/NativeGSSFactory.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,17 +26,11 @@ package sun.security.jgss.wrapper; import java.io.UnsupportedEncodingException; -import java.security.AccessController; -import java.security.AccessControlContext; -import java.security.PrivilegedAction; import java.security.Provider; -import java.util.Set; import java.util.Vector; -import java.util.Iterator; -import javax.security.auth.Subject; -import javax.security.auth.kerberos.*; import org.ietf.jgss.*; import sun.security.jgss.GSSUtil; +import sun.security.jgss.GSSCaller; import sun.security.jgss.GSSExceptionImpl; import sun.security.jgss.spi.*; @@ -49,7 +43,7 @@ public final class NativeGSSFactory implements MechanismFactory { GSSLibStub cStub = null; - private final int caller; + private final GSSCaller caller; private GSSCredElement getCredFromSubject(GSSNameElement name, boolean initiate) @@ -74,7 +68,7 @@ return result; } - public NativeGSSFactory(int caller) { + public NativeGSSFactory(GSSCaller caller) { this.caller = caller; // Have to call setMech(Oid) explicitly before calling other // methods. Otherwise, NPE may be thrown unexpectantly diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/Credentials.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/Credentials.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/Credentials.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/Credentials.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -66,7 +66,9 @@ private static CredentialsCache cache; static boolean alreadyLoaded = false; private static boolean alreadyTried = false; - private static native Credentials acquireDefaultNativeCreds(); + + // Read native ticket with session key type in the given list + private static native Credentials acquireDefaultNativeCreds(int[] eTypes); public Credentials(Ticket new_ticket, PrincipalName new_client, @@ -428,6 +430,8 @@ // It assumes that the GSS call has // the privilege to access the default cache file. + // This method is only called on Windows, the native + // acquireDefaultNativeCreds is also available on this platform. public static synchronized Credentials acquireDefaultCreds() { Credentials result = null; @@ -469,10 +473,11 @@ } if (alreadyLoaded) { // There is some native code - if (DEBUG) - System.out.println(">> Acquire default native Credentials"); - result = acquireDefaultNativeCreds(); - // only TGT with DES key will be returned by native method + if (DEBUG) { + System.out.println(">> Acquire default native Credentials"); + } + result = acquireDefaultNativeCreds( + EType.getDefaults("default_tkt_enctypes")); } } return result; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/APRep.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/APRep.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/APRep.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/APRep.java 2015-01-20 02:20:42.000000000 +0000 @@ -53,81 +53,88 @@ * http://www.ietf.org/rfc/rfc4120.txt. */ public class APRep { - public int pvno; - public int msgType; - public EncryptedData encPart; - - public APRep(EncryptedData new_encPart) { - pvno = Krb5.PVNO; - msgType = Krb5.KRB_AP_REP; - encPart = new_encPart; - } - public APRep(byte[] data) throws Asn1Exception, - KrbApErrException, IOException { - init(new DerValue(data)); - } + public int pvno; + public int msgType; + public EncryptedData encPart; + + public APRep(EncryptedData new_encPart) { + pvno = Krb5.PVNO; + msgType = Krb5.KRB_AP_REP; + encPart = new_encPart; + } + + public APRep(byte[] data) throws Asn1Exception, + KrbApErrException, IOException { + init(new DerValue(data)); + } public APRep(DerValue encoding) throws Asn1Exception, - KrbApErrException, IOException { - init(encoding); - } - - /** - * Initializes an APRep object. - * @param encoding a single DER-encoded value. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - * @exception KrbApErrException if the value read from the DER-encoded data - * stream does not match the pre-defined value. - */ + KrbApErrException, IOException { + init(encoding); + } + + /** + * Initializes an APRep object. + * @param encoding a single DER-encoded value. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + * @exception KrbApErrException if the value read from the DER-encoded data + * stream does not match the pre-defined value. + */ private void init(DerValue encoding) throws Asn1Exception, - KrbApErrException, IOException { + KrbApErrException, IOException { - if (((encoding.getTag() & (byte)(0x1F)) != Krb5.KRB_AP_REP) - || (encoding.isApplication() != true) - || (encoding.isConstructed() != true)) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - DerValue der = encoding.getData().getDerValue(); - if (der.getTag() != DerValue.tag_Sequence) + if (((encoding.getTag() & (byte) (0x1F)) != Krb5.KRB_AP_REP) + || (encoding.isApplication() != true) + || (encoding.isConstructed() != true)) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); - DerValue subDer = der.getData().getDerValue(); - if ((subDer.getTag() & (byte)0x1F) != (byte)0x00) + } + DerValue der = encoding.getData().getDerValue(); + if (der.getTag() != DerValue.tag_Sequence) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + DerValue subDer = der.getData().getDerValue(); + if ((subDer.getTag() & (byte) 0x1F) != (byte) 0x00) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } pvno = subDer.getData().getBigInteger().intValue(); - if (pvno != Krb5.PVNO) - throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION); - subDer = der.getData().getDerValue(); - if ((subDer.getTag() & (byte)0x1F) != (byte)0x01) + if (pvno != Krb5.PVNO) { + throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION); + } + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & (byte) 0x1F) != (byte) 0x01) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); - msgType = subDer.getData().getBigInteger().intValue(); - if (msgType != Krb5.KRB_AP_REP) - throw new KrbApErrException(Krb5.KRB_AP_ERR_MSG_TYPE); - encPart = EncryptedData.parse(der.getData(), (byte)0x02, false); - if (der.getData().available() > 0) + } + msgType = subDer.getData().getBigInteger().intValue(); + if (msgType != Krb5.KRB_AP_REP) { + throw new KrbApErrException(Krb5.KRB_AP_ERR_MSG_TYPE); + } + encPart = EncryptedData.parse(der.getData(), (byte) 0x02, false); + if (der.getData().available() > 0) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); } + } - /** - * Encodes an APRep object. - * @return byte array of encoded APRep object. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - */ - public byte[] asn1Encode() throws Asn1Exception, IOException { + /** + * Encodes an APRep object. + * @return byte array of encoded APRep object. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + */ + public byte[] asn1Encode() throws Asn1Exception, IOException { DerOutputStream bytes = new DerOutputStream(); - DerOutputStream temp = new DerOutputStream(); - temp.putInteger(BigInteger.valueOf(pvno)); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), temp); - temp = new DerOutputStream(); - temp.putInteger(BigInteger.valueOf(msgType)); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), temp); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), encPart.asn1Encode()); - temp = new DerOutputStream(); - temp.write(DerValue.tag_Sequence, bytes); - DerOutputStream aprep = new DerOutputStream(); - aprep.write(DerValue.createTag(DerValue.TAG_APPLICATION, true, (byte)0x0F), temp); - return aprep.toByteArray(); - } - + DerOutputStream temp = new DerOutputStream(); + temp.putInteger(BigInteger.valueOf(pvno)); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x00), temp); + temp = new DerOutputStream(); + temp.putInteger(BigInteger.valueOf(msgType)); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x01), temp); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x02), encPart.asn1Encode()); + temp = new DerOutputStream(); + temp.write(DerValue.tag_Sequence, bytes); + DerOutputStream aprep = new DerOutputStream(); + aprep.write(DerValue.createTag(DerValue.TAG_APPLICATION, true, (byte) 0x0F), temp); + return aprep.toByteArray(); + } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/APReq.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/APReq.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/APReq.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/APReq.java 2015-01-20 02:20:42.000000000 +0000 @@ -53,94 +53,98 @@ * * http://www.ietf.org/rfc/rfc4120.txt. */ - public class APReq { - public int pvno; - public int msgType; - public APOptions apOptions; - public Ticket ticket; - public EncryptedData authenticator; - - public APReq( - APOptions new_apOptions, - Ticket new_ticket, - EncryptedData new_authenticator - ) { - pvno = Krb5.PVNO; - msgType = Krb5.KRB_AP_REQ; - apOptions = new_apOptions; - ticket = new_ticket; - authenticator = new_authenticator; - } - public APReq(byte[] data) throws Asn1Exception,IOException, KrbApErrException, RealmException { + public int pvno; + public int msgType; + public APOptions apOptions; + public Ticket ticket; + public EncryptedData authenticator; + + public APReq( + APOptions new_apOptions, + Ticket new_ticket, + EncryptedData new_authenticator) { + pvno = Krb5.PVNO; + msgType = Krb5.KRB_AP_REQ; + apOptions = new_apOptions; + ticket = new_ticket; + authenticator = new_authenticator; + } + + public APReq(byte[] data) throws Asn1Exception, IOException, KrbApErrException, RealmException { init(new DerValue(data)); - } + } public APReq(DerValue encoding) throws Asn1Exception, IOException, KrbApErrException, RealmException { - init(encoding); - } + init(encoding); + } - /** - * Initializes an APReq object. - * @param encoding a single DER-encoded value. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - * @exception KrbApErrException if the value read from the DER-encoded data stream does not match the pre-defined value. - * @exception RealmException if an error occurs while parsing a Realm object. - */ - private void init(DerValue encoding) throws Asn1Exception, - IOException, KrbApErrException, RealmException { - DerValue der, subDer; - if (((encoding.getTag() & (byte)0x1F) != Krb5.KRB_AP_REQ) - || (encoding.isApplication() != true) - || (encoding.isConstructed() != true)) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - der = encoding.getData().getDerValue(); - if (der.getTag() != DerValue.tag_Sequence) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - subDer = der.getData().getDerValue(); - if ((subDer.getTag() & (byte)0x1F) != (byte)0x00) + /** + * Initializes an APReq object. + * @param encoding a single DER-encoded value. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + * @exception KrbApErrException if the value read from the DER-encoded data stream does not match the pre-defined value. + * @exception RealmException if an error occurs while parsing a Realm object. + */ + private void init(DerValue encoding) throws Asn1Exception, + IOException, KrbApErrException, RealmException { + DerValue der, subDer; + if (((encoding.getTag() & (byte) 0x1F) != Krb5.KRB_AP_REQ) + || (encoding.isApplication() != true) + || (encoding.isConstructed() != true)) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + der = encoding.getData().getDerValue(); + if (der.getTag() != DerValue.tag_Sequence) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & (byte) 0x1F) != (byte) 0x00) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } pvno = subDer.getData().getBigInteger().intValue(); - if (pvno != Krb5.PVNO) - throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION); - subDer = der.getData().getDerValue(); - if ((subDer.getTag() & (byte)0x1F) != (byte)0x01) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - msgType = subDer.getData().getBigInteger().intValue(); - if (msgType != Krb5.KRB_AP_REQ) - throw new KrbApErrException(Krb5.KRB_AP_ERR_MSG_TYPE); - apOptions = APOptions.parse(der.getData(), (byte)0x02, false); - ticket = Ticket.parse(der.getData(), (byte)0x03, false); - authenticator = EncryptedData.parse(der.getData(), (byte)0x04, false); - if (der.getData().available() > 0) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - } - - /** - * Encodes an APReq object. - * @return byte array of encoded APReq object. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - */ - public byte[] asn1Encode() throws Asn1Exception, IOException { - DerOutputStream bytes = new DerOutputStream(); - DerOutputStream temp = new DerOutputStream(); - temp.putInteger(BigInteger.valueOf(pvno)); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), temp); - temp = new DerOutputStream(); - temp.putInteger(BigInteger.valueOf(msgType)); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), temp); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), apOptions.asn1Encode()); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), ticket.asn1Encode()); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x04), authenticator.asn1Encode()); - temp = new DerOutputStream(); - temp.write(DerValue.tag_Sequence, bytes); - DerOutputStream apreq = new DerOutputStream(); - apreq.write(DerValue.createTag(DerValue.TAG_APPLICATION, true, (byte)0x0E), temp); - return apreq.toByteArray(); - + if (pvno != Krb5.PVNO) { + throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION); + } + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & (byte) 0x1F) != (byte) 0x01) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); } + msgType = subDer.getData().getBigInteger().intValue(); + if (msgType != Krb5.KRB_AP_REQ) { + throw new KrbApErrException(Krb5.KRB_AP_ERR_MSG_TYPE); + } + apOptions = APOptions.parse(der.getData(), (byte) 0x02, false); + ticket = Ticket.parse(der.getData(), (byte) 0x03, false); + authenticator = EncryptedData.parse(der.getData(), (byte) 0x04, false); + if (der.getData().available() > 0) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + } + /** + * Encodes an APReq object. + * @return byte array of encoded APReq object. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + */ + public byte[] asn1Encode() throws Asn1Exception, IOException { + DerOutputStream bytes = new DerOutputStream(); + DerOutputStream temp = new DerOutputStream(); + temp.putInteger(BigInteger.valueOf(pvno)); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x00), temp); + temp = new DerOutputStream(); + temp.putInteger(BigInteger.valueOf(msgType)); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x01), temp); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x02), apOptions.asn1Encode()); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x03), ticket.asn1Encode()); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x04), authenticator.asn1Encode()); + temp = new DerOutputStream(); + temp.write(DerValue.tag_Sequence, bytes); + DerOutputStream apreq = new DerOutputStream(); + apreq.write(DerValue.createTag(DerValue.TAG_APPLICATION, true, (byte) 0x0E), temp); + return apreq.toByteArray(); + } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/ASRep.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/ASRep.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/ASRep.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/ASRep.java 2015-01-20 02:20:42.000000000 +0000 @@ -39,30 +39,28 @@ public class ASRep extends KDCRep { - public ASRep( - PAData[] new_pAData, - Realm new_crealm, - PrincipalName new_cname, - Ticket new_ticket, - EncryptedData new_encPart - ) throws IOException { - super(new_pAData, new_crealm, new_cname, new_ticket, - new_encPart, Krb5.KRB_AS_REP); - } - - public ASRep(byte[] data) throws Asn1Exception, - RealmException, KrbApErrException, IOException { - init(new DerValue(data)); - } - - public ASRep(DerValue encoding) throws Asn1Exception, - RealmException, KrbApErrException, IOException { - init(encoding); - } - - private void init(DerValue encoding) throws Asn1Exception, - RealmException, KrbApErrException, IOException { - init(encoding, Krb5.KRB_AS_REP); - } - + public ASRep( + PAData[] new_pAData, + Realm new_crealm, + PrincipalName new_cname, + Ticket new_ticket, + EncryptedData new_encPart) throws IOException { + super(new_pAData, new_crealm, new_cname, new_ticket, + new_encPart, Krb5.KRB_AS_REP); + } + + public ASRep(byte[] data) throws Asn1Exception, + RealmException, KrbApErrException, IOException { + init(new DerValue(data)); + } + + public ASRep(DerValue encoding) throws Asn1Exception, + RealmException, KrbApErrException, IOException { + init(encoding); + } + + private void init(DerValue encoding) throws Asn1Exception, + RealmException, KrbApErrException, IOException { + init(encoding, Krb5.KRB_AS_REP); + } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/ASReq.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/ASReq.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/ASReq.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/ASReq.java 2015-01-20 02:20:42.000000000 +0000 @@ -35,20 +35,19 @@ public class ASReq extends KDCReq { - public ASReq(PAData[] new_pAData, KDCReqBody new_reqBody) throws IOException { - super(new_pAData, new_reqBody, Krb5.KRB_AS_REQ); - } - - public ASReq(byte[] data) throws Asn1Exception, KrbException, IOException { - init(new DerValue(data)); - } + public ASReq(PAData[] new_pAData, KDCReqBody new_reqBody) throws IOException { + super(new_pAData, new_reqBody, Krb5.KRB_AS_REQ); + } + + public ASReq(byte[] data) throws Asn1Exception, KrbException, IOException { + init(new DerValue(data)); + } public ASReq(DerValue encoding) throws Asn1Exception, KrbException, IOException { - init(encoding); - } - - private void init(DerValue encoding) throws Asn1Exception, IOException, KrbException { - super.init(encoding, Krb5.KRB_AS_REQ); - } + init(encoding); + } + private void init(DerValue encoding) throws Asn1Exception, IOException, KrbException { + super.init(encoding, Krb5.KRB_AS_REQ); + } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/Authenticator.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/Authenticator.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/Authenticator.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/Authenticator.java 2015-01-20 02:20:42.000000000 +0000 @@ -34,6 +34,7 @@ import java.util.Vector; import java.io.IOException; import java.math.BigInteger; + /** * Implements the ASN.1 Authenticator type. * @@ -58,6 +59,7 @@ * http://www.ietf.org/rfc/rfc4120.txt. */ public class Authenticator { + public int authenticator_vno; public Realm crealm; public PrincipalName cname; @@ -68,137 +70,145 @@ Integer seqNumber; //optional public AuthorizationData authorizationData; //optional - public Authenticator ( - Realm new_crealm, - PrincipalName new_cname, - Checksum new_cksum, - int new_cusec, - KerberosTime new_ctime, - EncryptionKey new_subKey, - Integer new_seqNumber, - AuthorizationData new_authorizationData - ) { - authenticator_vno = Krb5.AUTHNETICATOR_VNO; - crealm = new_crealm; - cname = new_cname; - cksum = new_cksum; - cusec = new_cusec; - ctime = new_ctime; - subKey = new_subKey; - seqNumber = new_seqNumber; - authorizationData = new_authorizationData; - } - - public Authenticator(byte[] data) - throws Asn1Exception, IOException, KrbApErrException, RealmException { - init(new DerValue(data)); - } - - public Authenticator(DerValue encoding) - throws Asn1Exception,IOException, KrbApErrException, RealmException { - init(encoding); - } - - /** - * Initializes an Authenticator object. - * @param encoding a single DER-encoded value. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - * @exception KrbApErrException if the value read from the DER-encoded data - * stream does not match the pre-defined value. - * @exception RealmException if an error occurs while parsing a Realm object. - */ - private void init(DerValue encoding) - throws Asn1Exception, IOException, KrbApErrException, RealmException { - DerValue der, subDer; - //may not be the correct error code for a tag - //mismatch on an encrypted structure - if (((encoding.getTag() & (byte)0x1F) != (byte)0x02) - || (encoding.isApplication() != true) - || (encoding.isConstructed() != true)) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - der = encoding.getData().getDerValue(); - if (der.getTag() != DerValue.tag_Sequence) + public Authenticator( + Realm new_crealm, + PrincipalName new_cname, + Checksum new_cksum, + int new_cusec, + KerberosTime new_ctime, + EncryptionKey new_subKey, + Integer new_seqNumber, + AuthorizationData new_authorizationData) { + authenticator_vno = Krb5.AUTHNETICATOR_VNO; + crealm = new_crealm; + cname = new_cname; + cksum = new_cksum; + cusec = new_cusec; + ctime = new_ctime; + subKey = new_subKey; + seqNumber = new_seqNumber; + authorizationData = new_authorizationData; + } + + public Authenticator(byte[] data) + throws Asn1Exception, IOException, KrbApErrException, RealmException { + init(new DerValue(data)); + } + + public Authenticator(DerValue encoding) + throws Asn1Exception, IOException, KrbApErrException, RealmException { + init(encoding); + } + + /** + * Initializes an Authenticator object. + * @param encoding a single DER-encoded value. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + * @exception KrbApErrException if the value read from the DER-encoded data + * stream does not match the pre-defined value. + * @exception RealmException if an error occurs while parsing a Realm object. + */ + private void init(DerValue encoding) + throws Asn1Exception, IOException, KrbApErrException, RealmException { + DerValue der, subDer; + //may not be the correct error code for a tag + //mismatch on an encrypted structure + if (((encoding.getTag() & (byte) 0x1F) != (byte) 0x02) + || (encoding.isApplication() != true) + || (encoding.isConstructed() != true)) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); - subDer = der.getData().getDerValue(); - if ((subDer.getTag() & (byte)0x1F) != (byte)0x00) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + der = encoding.getData().getDerValue(); + if (der.getTag() != DerValue.tag_Sequence) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & (byte) 0x1F) != (byte) 0x00) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } authenticator_vno = subDer.getData().getBigInteger().intValue(); - if (authenticator_vno != 5) + if (authenticator_vno != 5) { throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION); - crealm = Realm.parse(der.getData(), (byte)0x01, false); - cname = PrincipalName.parse(der.getData(), (byte)0x02, false); - cksum = Checksum.parse(der.getData(), (byte)0x03, true); + } + crealm = Realm.parse(der.getData(), (byte) 0x01, false); + cname = PrincipalName.parse(der.getData(), (byte) 0x02, false); + cksum = Checksum.parse(der.getData(), (byte) 0x03, true); + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & (byte) 0x1F) == 0x04) { + cusec = subDer.getData().getBigInteger().intValue(); + } else { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + ctime = KerberosTime.parse(der.getData(), (byte) 0x05, false); + if (der.getData().available() > 0) { + subKey = EncryptionKey.parse(der.getData(), (byte) 0x06, true); + } else { + subKey = null; + seqNumber = null; + authorizationData = null; + } + if (der.getData().available() > 0) { + if ((der.getData().peekByte() & 0x1F) == 0x07) { subDer = der.getData().getDerValue(); - if ((subDer.getTag() & (byte)0x1F) == 0x04) { - cusec = subDer.getData().getBigInteger().intValue(); + if ((subDer.getTag() & (byte) 0x1F) == (byte) 0x07) { + seqNumber = new Integer(subDer.getData().getBigInteger().intValue()); } - else throw new Asn1Exception(Krb5.ASN1_BAD_ID); - ctime = KerberosTime.parse(der.getData(), (byte)0x05, false); - if (der.getData().available() > 0) { - subKey = EncryptionKey.parse(der.getData(), (byte)0x06, true); - } - else { - subKey = null; - seqNumber = null; - authorizationData = null; - } - if (der.getData().available() > 0) { - if ((der.getData().peekByte() & 0x1F) == 0x07) { - subDer = der.getData().getDerValue(); - if ((subDer.getTag() & (byte)0x1F) == (byte)0x07) - seqNumber = new Integer(subDer.getData().getBigInteger().intValue()); - } - } - else { - seqNumber = null; - authorizationData = null; - } - if (der.getData().available() > 0) { - authorizationData = AuthorizationData.parse(der.getData(), (byte)0x08, true); - } - else authorizationData = null; - if (der.getData().available() > 0) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - } - - /** - * Encodes an Authenticator object. - * @return byte array of encoded Authenticator object. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - */ - public byte[] asn1Encode() throws Asn1Exception, IOException { - Vector v = new Vector (); - DerOutputStream temp = new DerOutputStream(); - temp.putInteger(BigInteger.valueOf(authenticator_vno)); - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), temp.toByteArray())); - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), crealm.asn1Encode())); - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), cname.asn1Encode())); - if (cksum != null) - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), cksum.asn1Encode())); - temp = new DerOutputStream(); - temp.putInteger(BigInteger.valueOf(cusec)); - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x04), temp.toByteArray())); - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x05), ctime.asn1Encode())); - if (subKey != null) - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x06), subKey.asn1Encode())); - if (seqNumber != null) { - temp = new DerOutputStream(); - // encode as an unsigned integer (UInt32) - temp.putInteger(BigInteger.valueOf(seqNumber.longValue())); - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x07), temp.toByteArray())); - } - if (authorizationData != null) - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x08), authorizationData.asn1Encode())); - DerValue der[] = new DerValue[v.size()]; - v.copyInto(der); - temp = new DerOutputStream(); - temp.putSequence(der); - DerOutputStream out = new DerOutputStream(); - out.write(DerValue.createTag(DerValue.TAG_APPLICATION, true, (byte)0x02), temp); - return out.toByteArray(); + } + } else { + seqNumber = null; + authorizationData = null; + } + if (der.getData().available() > 0) { + authorizationData = AuthorizationData.parse(der.getData(), (byte) 0x08, true); + } else { + authorizationData = null; + } + if (der.getData().available() > 0) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); } + } + + /** + * Encodes an Authenticator object. + * @return byte array of encoded Authenticator object. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + */ + public byte[] asn1Encode() throws Asn1Exception, IOException { + Vector v = new Vector(); + DerOutputStream temp = new DerOutputStream(); + temp.putInteger(BigInteger.valueOf(authenticator_vno)); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x00), temp.toByteArray())); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x01), crealm.asn1Encode())); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x02), cname.asn1Encode())); + if (cksum != null) { + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x03), cksum.asn1Encode())); + } + temp = new DerOutputStream(); + temp.putInteger(BigInteger.valueOf(cusec)); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x04), temp.toByteArray())); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x05), ctime.asn1Encode())); + if (subKey != null) { + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x06), subKey.asn1Encode())); + } + if (seqNumber != null) { + temp = new DerOutputStream(); + // encode as an unsigned integer (UInt32) + temp.putInteger(BigInteger.valueOf(seqNumber.longValue())); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x07), temp.toByteArray())); + } + if (authorizationData != null) { + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x08), authorizationData.asn1Encode())); + } + DerValue der[] = new DerValue[v.size()]; + v.copyInto(der); + temp = new DerOutputStream(); + temp.putSequence(der); + DerOutputStream out = new DerOutputStream(); + out.write(DerValue.createTag(DerValue.TAG_APPLICATION, true, (byte) 0x02), temp); + return out.toByteArray(); + } public final Checksum getChecksum() { return cksum; @@ -211,5 +221,4 @@ public final EncryptionKey getSubKey() { return subKey; } - } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/AuthorizationDataEntry.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/AuthorizationDataEntry.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/AuthorizationDataEntry.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/AuthorizationDataEntry.java 2015-01-20 02:20:42.000000000 +0000 @@ -35,90 +35,90 @@ import sun.security.krb5.internal.ccache.CCacheOutputStream; public class AuthorizationDataEntry implements Cloneable { - public int adType; - public byte[] adData; - private AuthorizationDataEntry() { - } + public int adType; + public byte[] adData; - public AuthorizationDataEntry( - int new_adType, - byte[] new_adData - ) { - adType = new_adType; - adData = new_adData; - } + private AuthorizationDataEntry() { + } + + public AuthorizationDataEntry( + int new_adType, + byte[] new_adData) { + adType = new_adType; + adData = new_adData; + } - public Object clone() { - AuthorizationDataEntry new_authorizationDataEntry = - new AuthorizationDataEntry(); - new_authorizationDataEntry.adType = adType; - if (adData != null) { - new_authorizationDataEntry.adData = new byte[adData.length]; - System.arraycopy(adData, 0, - new_authorizationDataEntry.adData, 0, adData.length); - } - return new_authorizationDataEntry; + public Object clone() { + AuthorizationDataEntry new_authorizationDataEntry = + new AuthorizationDataEntry(); + new_authorizationDataEntry.adType = adType; + if (adData != null) { + new_authorizationDataEntry.adData = new byte[adData.length]; + System.arraycopy(adData, 0, + new_authorizationDataEntry.adData, 0, adData.length); } + return new_authorizationDataEntry; + } - /** - * Constructs an instance of AuthorizationDataEntry. - * @param encoding a single DER-encoded value. - */ - public AuthorizationDataEntry(DerValue encoding) throws Asn1Exception, IOException { - DerValue der; + /** + * Constructs an instance of AuthorizationDataEntry. + * @param encoding a single DER-encoded value. + */ + public AuthorizationDataEntry(DerValue encoding) throws Asn1Exception, IOException { + DerValue der; if (encoding.getTag() != DerValue.tag_Sequence) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); - } - der = encoding.getData().getDerValue(); - if ((der.getTag() & (byte)0x1F) == (byte)0x00) { - adType = der.getData().getBigInteger().intValue(); - } - else - throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } der = encoding.getData().getDerValue(); - if ((der.getTag() & (byte)0x1F) == (byte)0x01) { - adData = der.getData().getOctetString(); - } - else - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - if (encoding.getData().available() > 0) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); + if ((der.getTag() & (byte) 0x1F) == (byte) 0x00) { + adType = der.getData().getBigInteger().intValue(); + } else { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); } + der = encoding.getData().getDerValue(); + if ((der.getTag() & (byte) 0x1F) == (byte) 0x01) { + adData = der.getData().getOctetString(); + } else { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + if (encoding.getData().available() > 0) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + } - /** - * Encodes an AuthorizationDataEntry object. - * @return byte array of encoded AuthorizationDataEntry object. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - */ - public byte[] asn1Encode() throws Asn1Exception, IOException { + /** + * Encodes an AuthorizationDataEntry object. + * @return byte array of encoded AuthorizationDataEntry object. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + */ + public byte[] asn1Encode() throws Asn1Exception, IOException { DerOutputStream bytes = new DerOutputStream(); - DerOutputStream temp = new DerOutputStream(); - temp.putInteger(adType); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), temp); - temp = new DerOutputStream(); - temp.putOctetString(adData); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), temp); - temp = new DerOutputStream(); - temp.write(DerValue.tag_Sequence, bytes); - return temp.toByteArray(); - } + DerOutputStream temp = new DerOutputStream(); + temp.putInteger(adType); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x00), temp); + temp = new DerOutputStream(); + temp.putOctetString(adData); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x01), temp); + temp = new DerOutputStream(); + temp.write(DerValue.tag_Sequence, bytes); + return temp.toByteArray(); + } - /** - * Writes the entry's data fields in FCC format to an output stream. - * - * @param cos a CCacheOutputStream. - * @exception IOException if an I/O exception occurs. - */ - public void writeEntry(CCacheOutputStream cos) throws IOException { - cos.write16(adType); - cos.write32(adData.length); - cos.write(adData, 0, adData.length); - } + /** + * Writes the entry's data fields in FCC format to an output stream. + * + * @param cos a CCacheOutputStream. + * @exception IOException if an I/O exception occurs. + */ + public void writeEntry(CCacheOutputStream cos) throws IOException { + cos.write16(adType); + cos.write32(adData.length); + cos.write(adData, 0, adData.length); + } public String toString() { return ("adType=" + adType + " adData.length=" + adData.length); } - } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/AuthorizationData.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/AuthorizationData.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/AuthorizationData.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/AuthorizationData.java 2015-01-20 02:20:42.000000000 +0000 @@ -52,82 +52,81 @@ * } */ public class AuthorizationData implements Cloneable { - private AuthorizationDataEntry[] entry = null; - private AuthorizationData() { - } + private AuthorizationDataEntry[] entry = null; - public AuthorizationData( - AuthorizationDataEntry[] new_entries - ) throws IOException { - if (new_entries != null) { - entry = new AuthorizationDataEntry[new_entries.length]; - for (int i = 0; i < new_entries.length; i++) { - if (new_entries[i] == null) { - throw new IOException("Cannot create an AuthorizationData"); - } else { - entry[i] = (AuthorizationDataEntry)new_entries[i].clone(); - } - } - } - } + private AuthorizationData() { + } - public AuthorizationData( - AuthorizationDataEntry new_entry - ) { - entry = new AuthorizationDataEntry[1]; - entry[0] = new_entry; - } - - public Object clone() { - AuthorizationData new_authorizationData = - new AuthorizationData(); - if (entry != null) { - new_authorizationData.entry = - new AuthorizationDataEntry[entry.length]; - for (int i = 0; i < entry.length; i++) - new_authorizationData.entry[i] = - (AuthorizationDataEntry)entry[i].clone(); - } - return new_authorizationData; + public AuthorizationData(AuthorizationDataEntry[] new_entries) + throws IOException { + if (new_entries != null) { + entry = new AuthorizationDataEntry[new_entries.length]; + for (int i = 0; i < new_entries.length; i++) { + if (new_entries[i] == null) { + throw new IOException("Cannot create an AuthorizationData"); + } else { + entry[i] = (AuthorizationDataEntry) new_entries[i].clone(); + } + } + } + } + + public AuthorizationData(AuthorizationDataEntry new_entry) { + entry = new AuthorizationDataEntry[1]; + entry[0] = new_entry; + } + + public Object clone() { + AuthorizationData new_authorizationData = + new AuthorizationData(); + if (entry != null) { + new_authorizationData.entry = + new AuthorizationDataEntry[entry.length]; + for (int i = 0; i < entry.length; i++) { + new_authorizationData.entry[i] = + (AuthorizationDataEntry) entry[i].clone(); + } } + return new_authorizationData; + } - /** - * Constructs a new AuthorizationData, instance. - * @param der a single DER-encoded value. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - */ - public AuthorizationData(DerValue der) throws Asn1Exception, IOException { - Vector v = - new Vector (); - if (der.getTag() != DerValue.tag_Sequence) { - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - } - while (der.getData().available() > 0) { - v.addElement(new AuthorizationDataEntry(der.getData().getDerValue())); - } - if (v.size() > 0) { - entry = new AuthorizationDataEntry[v.size()]; - v.copyInto(entry); - } + /** + * Constructs a new AuthorizationData, instance. + * @param der a single DER-encoded value. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + */ + public AuthorizationData(DerValue der) throws Asn1Exception, IOException { + Vector v = + new Vector(); + if (der.getTag() != DerValue.tag_Sequence) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + while (der.getData().available() > 0) { + v.addElement(new AuthorizationDataEntry(der.getData().getDerValue())); + } + if (v.size() > 0) { + entry = new AuthorizationDataEntry[v.size()]; + v.copyInto(entry); } + } - /** - * Encodes an AuthorizationData object. - * @return byte array of encoded AuthorizationData object. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - */ - public byte[] asn1Encode() throws Asn1Exception, IOException { - DerOutputStream bytes = new DerOutputStream(); - DerValue der[] = new DerValue[entry.length]; - for (int i = 0; i < entry.length; i++) { - der[i] = new DerValue(entry[i].asn1Encode()); - } - bytes.putSequence(der); - return bytes.toByteArray(); - } + /** + * Encodes an AuthorizationData object. + * @return byte array of encoded AuthorizationData object. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + */ + public byte[] asn1Encode() throws Asn1Exception, IOException { + DerOutputStream bytes = new DerOutputStream(); + DerValue der[] = new DerValue[entry.length]; + for (int i = 0; i < entry.length; i++) { + der[i] = new DerValue(entry[i].asn1Encode()); + } + bytes.putSequence(der); + return bytes.toByteArray(); + } /** * Parse (unmarshal) an AuthorizationData object from a DER input stream. @@ -142,31 +141,30 @@ * @return an instance of AuthorizationData. * */ - public static AuthorizationData parse(DerInputStream data, byte explicitTag, boolean optional) throws Asn1Exception, IOException{ - if ((optional) && (((byte)data.peekByte() & (byte)0x1F) != explicitTag)) { - return null; - } - DerValue der = data.getDerValue(); - if (explicitTag != (der.getTag() & (byte)0x1F)) { - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - } - else { - DerValue subDer = der.getData().getDerValue(); - return new AuthorizationData(subDer); - } + public static AuthorizationData parse(DerInputStream data, byte explicitTag, boolean optional) throws Asn1Exception, IOException { + if ((optional) && (((byte) data.peekByte() & (byte) 0x1F) != explicitTag)) { + return null; + } + DerValue der = data.getDerValue(); + if (explicitTag != (der.getTag() & (byte) 0x1F)) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } else { + DerValue subDer = der.getData().getDerValue(); + return new AuthorizationData(subDer); } + } - /** - * Writes AuthorizationData data fields to a output stream. - * - * @param cos a CCacheOutputStream to be written to. - * @exception IOException if an I/O exception occurs. - */ - public void writeAuth(CCacheOutputStream cos) throws IOException { - for (int i = 0; i < entry.length; i++) { - entry[i].writeEntry(cos); - } + /** + * Writes AuthorizationData data fields to a output stream. + * + * @param cos a CCacheOutputStream to be written to. + * @exception IOException if an I/O exception occurs. + */ + public void writeAuth(CCacheOutputStream cos) throws IOException { + for (int i = 0; i < entry.length; i++) { + entry[i].writeEntry(cos); } + } public String toString() { String retVal = "AuthorizationData:\n"; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java 2015-01-20 02:20:42.000000000 +0000 @@ -122,7 +122,7 @@ } else { type = read(4); } - length = read(4); + length = readLength4(); String[] result = new String[length + 1]; /* * DCE includes the principal's realm in the count; the new format @@ -131,7 +131,7 @@ if (version == KRB5_FCC_FVNO_1) length--; for (int i = 0; i <= length; i++) { - namelength = read(4); + namelength = readLength4(); if (namelength > MAXNAMELENGTH) { throw new IOException("Invalid name length in principal name."); } @@ -181,7 +181,7 @@ keyType = read(2); if (version == KRB5_FCC_FVNO_3) read(2); /* keytype recorded twice in fvno 3 */ - keyLen = read(4); + keyLen = readLength4(); byte[] bytes = new byte[keyLen]; for (int i = 0; i < keyLen; i++) { bytes[i] = (byte)read(); @@ -207,12 +207,12 @@ HostAddress[] readAddr() throws IOException, KrbApErrException { int numAddrs, addrType, addrLength; - numAddrs = read(4); + numAddrs = readLength4(); if (numAddrs > 0) { HostAddress[] addrs = new HostAddress[numAddrs]; for (int i = 0; i < numAddrs; i++) { addrType = read(2); - addrLength = read(4); + addrLength = readLength4(); if (!(addrLength == 4 || addrLength == 16)) { System.out.println("Incorrect address format."); return null; @@ -229,13 +229,13 @@ AuthorizationDataEntry[] readAuth() throws IOException { int num, adtype, adlength; - num = read(4); + num = readLength4(); if (num > 0) { AuthorizationDataEntry[] auData = new AuthorizationDataEntry[num]; byte[] data = null; for (int i = 0; i < num; i++) { adtype = read(2); - adlength = read(4); + adlength = readLength4(); data = new byte[adlength]; for (int j = 0; j < adlength; j++) { data[j] = (byte)read(); @@ -249,7 +249,7 @@ byte[] readData() throws IOException { int length; - length = read(4); + length = readLength4(); if (length == 0) { return null; } else { diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/ccache/Credentials.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/ccache/Credentials.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/ccache/Credentials.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/ccache/Credentials.java 2015-01-20 02:20:42.000000000 +0000 @@ -33,168 +33,171 @@ import sun.security.krb5.internal.*; public class Credentials { - PrincipalName cname; - Realm crealm; + + PrincipalName cname; + Realm crealm; PrincipalName sname; - Realm srealm; - EncryptionKey key; - KerberosTime authtime; - KerberosTime starttime;//optional - KerberosTime endtime; - KerberosTime renewTill; //optional - HostAddresses caddr; //optional; for proxied tickets only + Realm srealm; + EncryptionKey key; + KerberosTime authtime; + KerberosTime starttime;//optional + KerberosTime endtime; + KerberosTime renewTill; //optional + HostAddresses caddr; //optional; for proxied tickets only AuthorizationData authorizationData; //optional, not being actually used public boolean isEncInSKey; // true if ticket is encrypted in another ticket's skey - TicketFlags flags; + TicketFlags flags; Ticket ticket; - Ticket secondTicket; //optional - private boolean DEBUG = Krb5.DEBUG; + Ticket secondTicket; //optional + private boolean DEBUG = Krb5.DEBUG; - public Credentials( - PrincipalName new_cname, - PrincipalName new_sname, - EncryptionKey new_key, - KerberosTime new_authtime, - KerberosTime new_starttime, - KerberosTime new_endtime, - KerberosTime new_renewTill, - boolean new_isEncInSKey, - TicketFlags new_flags, - HostAddresses new_caddr, - AuthorizationData new_authData, - Ticket new_ticket, - Ticket new_secondTicket) { - cname = (PrincipalName)new_cname.clone(); - if (new_cname.getRealm() != null) - crealm = (Realm)new_cname.getRealm().clone(); - - sname = (PrincipalName)new_sname.clone(); - if (new_sname.getRealm() != null) - srealm = (Realm)new_sname.getRealm().clone(); - - key = (EncryptionKey)new_key.clone(); - - authtime = (KerberosTime)new_authtime.clone(); - starttime = (KerberosTime)new_starttime.clone(); - endtime = (KerberosTime)new_endtime.clone(); - renewTill = (KerberosTime)new_renewTill.clone(); - if (new_caddr != null) - caddr = (HostAddresses)new_caddr.clone(); - if (new_authData != null) { - authorizationData - = (AuthorizationData)new_authData.clone(); - } - - isEncInSKey = new_isEncInSKey; - flags = (TicketFlags)new_flags.clone(); - ticket = (Ticket)(new_ticket.clone()); - if (new_secondTicket != null) - secondTicket = (Ticket)new_secondTicket.clone(); - } - - - - public Credentials( - KDCRep kdcRep, - Ticket new_secondTicket, - AuthorizationData new_authorizationData, - boolean new_isEncInSKey - ) { - if (kdcRep.encKDCRepPart == null) //can't store while encrypted - return; - crealm = (Realm)kdcRep.crealm.clone(); - cname = (PrincipalName)kdcRep.cname.clone(); - ticket = (Ticket)kdcRep.ticket.clone(); - key = (EncryptionKey)kdcRep.encKDCRepPart.key.clone(); - flags = (TicketFlags)kdcRep.encKDCRepPart.flags.clone(); - authtime = (KerberosTime)kdcRep.encKDCRepPart.authtime.clone(); - starttime = (KerberosTime)kdcRep.encKDCRepPart.starttime.clone(); - endtime = (KerberosTime)kdcRep.encKDCRepPart.endtime.clone(); - renewTill = (KerberosTime)kdcRep.encKDCRepPart.renewTill.clone(); - srealm = (Realm)kdcRep.encKDCRepPart.srealm.clone(); - sname = (PrincipalName)kdcRep.encKDCRepPart.sname.clone(); - caddr = (HostAddresses)kdcRep.encKDCRepPart.caddr.clone(); - secondTicket = (Ticket)new_secondTicket.clone(); - authorizationData = - (AuthorizationData)new_authorizationData.clone(); - isEncInSKey = new_isEncInSKey; - } - - public Credentials(KDCRep kdcRep) { - this(kdcRep, null); - } - - public Credentials(KDCRep kdcRep, Ticket new_ticket) { - sname = (PrincipalName)kdcRep.encKDCRepPart.sname.clone(); - srealm = (Realm)kdcRep.encKDCRepPart.srealm.clone(); - try { - sname.setRealm(srealm); - } - catch (RealmException e) { - } - cname = (PrincipalName)kdcRep.cname.clone(); - crealm = (Realm)kdcRep.crealm.clone(); - try { - cname.setRealm(crealm); - } - catch (RealmException e) { - } - key = (EncryptionKey)kdcRep.encKDCRepPart.key.clone(); - authtime = (KerberosTime)kdcRep.encKDCRepPart.authtime.clone(); - if (kdcRep.encKDCRepPart.starttime != null) { - starttime = (KerberosTime)kdcRep.encKDCRepPart.starttime.clone(); - } - else starttime = null; - endtime = (KerberosTime)kdcRep.encKDCRepPart.endtime.clone(); - if (kdcRep.encKDCRepPart.renewTill != null) { - renewTill = (KerberosTime)kdcRep.encKDCRepPart.renewTill.clone(); - } - else renewTill = null; - // if (kdcRep.msgType == Krb5.KRB_AS_REP) { - // isEncInSKey = false; - // secondTicket = null; - // } - flags = kdcRep.encKDCRepPart.flags; - if (kdcRep.encKDCRepPart.caddr != null) - caddr = (HostAddresses)kdcRep.encKDCRepPart.caddr.clone(); - else caddr = null; - ticket = (Ticket)kdcRep.ticket.clone(); - if (new_ticket != null) { - secondTicket = (Ticket)new_ticket.clone(); - isEncInSKey = true; - } else { - secondTicket = null; - isEncInSKey = false; - } - } - - /** - * Checks if this credential is expired - */ - public boolean isValid() { - boolean valid = true; - if (endtime.getTime() < System.currentTimeMillis()) { - valid = false; - } - else if ((starttime.getTime() > System.currentTimeMillis()) - || ((starttime == null) && (authtime.getTime() > System.currentTimeMillis()))) - { - valid = false; - } - return valid; - } - - public PrincipalName getServicePrincipal() throws RealmException{ - if (sname.getRealm() == null) { - sname.setRealm(srealm); - } - return sname; - } - - public sun.security.krb5.Credentials setKrbCreds() { - return new sun.security.krb5.Credentials(ticket, - cname, sname, key, flags, authtime, starttime, endtime, renewTill, caddr); - } + public Credentials( + PrincipalName new_cname, + PrincipalName new_sname, + EncryptionKey new_key, + KerberosTime new_authtime, + KerberosTime new_starttime, + KerberosTime new_endtime, + KerberosTime new_renewTill, + boolean new_isEncInSKey, + TicketFlags new_flags, + HostAddresses new_caddr, + AuthorizationData new_authData, + Ticket new_ticket, + Ticket new_secondTicket) { + cname = (PrincipalName) new_cname.clone(); + if (new_cname.getRealm() != null) { + crealm = (Realm) new_cname.getRealm().clone(); + } + + sname = (PrincipalName) new_sname.clone(); + if (new_sname.getRealm() != null) { + srealm = (Realm) new_sname.getRealm().clone(); + } + + key = (EncryptionKey) new_key.clone(); + + authtime = (KerberosTime) new_authtime.clone(); + starttime = (KerberosTime) new_starttime.clone(); + endtime = (KerberosTime) new_endtime.clone(); + renewTill = (KerberosTime) new_renewTill.clone(); + if (new_caddr != null) { + caddr = (HostAddresses) new_caddr.clone(); + } + if (new_authData != null) { + authorizationData = (AuthorizationData) new_authData.clone(); + } + + isEncInSKey = new_isEncInSKey; + flags = (TicketFlags) new_flags.clone(); + ticket = (Ticket) (new_ticket.clone()); + if (new_secondTicket != null) { + secondTicket = (Ticket) new_secondTicket.clone(); + } + } + + public Credentials( + KDCRep kdcRep, + Ticket new_secondTicket, + AuthorizationData new_authorizationData, + boolean new_isEncInSKey) { + if (kdcRep.encKDCRepPart == null) //can't store while encrypted + { + return; + } + crealm = (Realm) kdcRep.crealm.clone(); + cname = (PrincipalName) kdcRep.cname.clone(); + ticket = (Ticket) kdcRep.ticket.clone(); + key = (EncryptionKey) kdcRep.encKDCRepPart.key.clone(); + flags = (TicketFlags) kdcRep.encKDCRepPart.flags.clone(); + authtime = (KerberosTime) kdcRep.encKDCRepPart.authtime.clone(); + starttime = (KerberosTime) kdcRep.encKDCRepPart.starttime.clone(); + endtime = (KerberosTime) kdcRep.encKDCRepPart.endtime.clone(); + renewTill = (KerberosTime) kdcRep.encKDCRepPart.renewTill.clone(); + srealm = (Realm) kdcRep.encKDCRepPart.srealm.clone(); + sname = (PrincipalName) kdcRep.encKDCRepPart.sname.clone(); + caddr = (HostAddresses) kdcRep.encKDCRepPart.caddr.clone(); + secondTicket = (Ticket) new_secondTicket.clone(); + authorizationData = + (AuthorizationData) new_authorizationData.clone(); + isEncInSKey = new_isEncInSKey; + } + + public Credentials(KDCRep kdcRep) { + this(kdcRep, null); + } + + public Credentials(KDCRep kdcRep, Ticket new_ticket) { + sname = (PrincipalName) kdcRep.encKDCRepPart.sname.clone(); + srealm = (Realm) kdcRep.encKDCRepPart.srealm.clone(); + try { + sname.setRealm(srealm); + } catch (RealmException e) { + } + cname = (PrincipalName) kdcRep.cname.clone(); + crealm = (Realm) kdcRep.crealm.clone(); + try { + cname.setRealm(crealm); + } catch (RealmException e) { + } + key = (EncryptionKey) kdcRep.encKDCRepPart.key.clone(); + authtime = (KerberosTime) kdcRep.encKDCRepPart.authtime.clone(); + if (kdcRep.encKDCRepPart.starttime != null) { + starttime = (KerberosTime) kdcRep.encKDCRepPart.starttime.clone(); + } else { + starttime = null; + } + endtime = (KerberosTime) kdcRep.encKDCRepPart.endtime.clone(); + if (kdcRep.encKDCRepPart.renewTill != null) { + renewTill = (KerberosTime) kdcRep.encKDCRepPart.renewTill.clone(); + } else { + renewTill = null; + } + // if (kdcRep.msgType == Krb5.KRB_AS_REP) { + // isEncInSKey = false; + // secondTicket = null; + // } + flags = kdcRep.encKDCRepPart.flags; + if (kdcRep.encKDCRepPart.caddr != null) { + caddr = (HostAddresses) kdcRep.encKDCRepPart.caddr.clone(); + } else { + caddr = null; + } + ticket = (Ticket) kdcRep.ticket.clone(); + if (new_ticket != null) { + secondTicket = (Ticket) new_ticket.clone(); + isEncInSKey = true; + } else { + secondTicket = null; + isEncInSKey = false; + } + } + + /** + * Checks if this credential is expired + */ + public boolean isValid() { + boolean valid = true; + if (endtime.getTime() < System.currentTimeMillis()) { + valid = false; + } else if ((starttime.getTime() > System.currentTimeMillis()) + || ((starttime == null) && (authtime.getTime() > System.currentTimeMillis()))) { + valid = false; + } + return valid; + } + + public PrincipalName getServicePrincipal() throws RealmException { + if (sname.getRealm() == null) { + sname.setRealm(srealm); + } + return sname; + } + + public sun.security.krb5.Credentials setKrbCreds() { + return new sun.security.krb5.Credentials(ticket, + cname, sname, key, flags, authtime, starttime, endtime, renewTill, caddr); + } public KerberosTime getAuthTime() { return authtime; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java 2015-01-20 02:20:42.000000000 +0000 @@ -154,44 +154,67 @@ throws IOException, KrbException { primaryPrincipal = principal; primaryRealm = principal.getRealm(); - CCacheOutputStream cos = - new CCacheOutputStream(new FileOutputStream(name)); - version = KRB5_FCC_FVNO_3; - cos.writeHeader(primaryPrincipal, version); - cos.close(); + FileOutputStream fos = null; + CCacheOutputStream cos = null; + try { + fos = new FileOutputStream(name); + cos = new CCacheOutputStream(fos); + version = KRB5_FCC_FVNO_3; + cos.writeHeader(primaryPrincipal, version); + } finally { + try { + if (cos != null) + cos.close(); + } finally { + if (fos != null) + fos.close(); + } + } + load(name); } synchronized void load(String name) throws IOException, KrbException { PrincipalName p; - CCacheInputStream cis = - new CCacheInputStream(new FileInputStream(name)); - version = cis.readVersion(); - if (version == KRB5_FCC_FVNO_4) { - tag = cis.readTag(); - } else { - tag = null; - if (version == KRB5_FCC_FVNO_1 || version == KRB5_FCC_FVNO_2) { - cis.setNativeByteOrder(); + FileInputStream fis = null; + CCacheInputStream cis = null; + try { + fis = new FileInputStream(name); + cis = new CCacheInputStream(fis); + version = cis.readVersion(); + if (version == KRB5_FCC_FVNO_4) { + tag = cis.readTag(); + } else { + tag = null; + if (version == KRB5_FCC_FVNO_1 || version == KRB5_FCC_FVNO_2) { + cis.setNativeByteOrder(); + } } - } - p = cis.readPrincipal(version); + p = cis.readPrincipal(version); - if (primaryPrincipal != null) { - if (!(primaryPrincipal.match(p))) { - throw new IOException("Primary principals don't match."); - } - } else - primaryPrincipal = p; - primaryRealm = primaryPrincipal.getRealm(); - credentialsList = new Vector (); - while (cis.available() > 0) { - Credentials cred = cis.readCred(version); - if (cred != null) { - credentialsList.addElement(cred); + if (primaryPrincipal != null) { + if (!(primaryPrincipal.match(p))) { + throw new IOException("Primary principals don't match."); + } + } else + primaryPrincipal = p; + primaryRealm = primaryPrincipal.getRealm(); + credentialsList = new Vector(); + while (cis.available() > 0) { + Credentials cred = cis.readCred(version); + if (cred != null) { + credentialsList.addElement(cred); + } + } + } finally { + try { + if (cis != null) + cis.close(); + } finally { + if (fis != null) + fis.close(); } } - cis.close(); } @@ -250,16 +273,27 @@ * Saves the credentials cache file to the disk. */ public synchronized void save() throws IOException, Asn1Exception { - CCacheOutputStream cos - = new CCacheOutputStream(new FileOutputStream(cacheName)); - cos.writeHeader(primaryPrincipal, version); - Credentials[] tmp = null; - if ((tmp = getCredsList()) != null) { - for (int i = 0; i < tmp.length; i++) { - cos.addCreds(tmp[i]); + FileOutputStream fos = null; + CCacheOutputStream cos = null; + try { + fos = new FileOutputStream(cacheName); + cos = new CCacheOutputStream(fos); + cos.writeHeader(primaryPrincipal, version); + Credentials[] tmp = null; + if ((tmp = getCredsList()) != null) { + for (int i = 0; i < tmp.length; i++) { + cos.addCreds(tmp[i]); + } + } + } finally { + try { + if (cos != null) + cos.close(); + } finally { + if (fos != null) + fos.close(); } } - cos.close(); } boolean match(String[] s1, String[] s2) { diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/EncAPRepPart.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/EncAPRepPart.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/EncAPRepPart.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/EncAPRepPart.java 2015-01-20 02:20:42.000000000 +0000 @@ -54,102 +54,111 @@ * http://www.ietf.org/rfc/rfc4120.txt. */ public class EncAPRepPart { - public KerberosTime ctime; - public int cusec; + + public KerberosTime ctime; + public int cusec; EncryptionKey subKey; //optional Integer seqNumber; //optional - public EncAPRepPart( - KerberosTime new_ctime, - int new_cusec, - EncryptionKey new_subKey, - Integer new_seqNumber - ) { - ctime = new_ctime; - cusec = new_cusec; - subKey = new_subKey; - seqNumber = new_seqNumber; - } - - public EncAPRepPart(byte[] data) - throws Asn1Exception, IOException { - init(new DerValue(data)); - } - - public EncAPRepPart(DerValue encoding) - throws Asn1Exception, IOException { - init(encoding); - } - - /** - * Initializes an EncaPRepPart object. - * @param encoding a single DER-encoded value. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - */ - private void init(DerValue encoding) throws Asn1Exception, IOException { - DerValue der, subDer; - if (((encoding.getTag() & (byte)0x1F) != (byte)0x1B) - || (encoding.isApplication() != true) - || (encoding.isConstructed() != true)) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); + public EncAPRepPart( + KerberosTime new_ctime, + int new_cusec, + EncryptionKey new_subKey, + Integer new_seqNumber) { + ctime = new_ctime; + cusec = new_cusec; + subKey = new_subKey; + seqNumber = new_seqNumber; + } + + public EncAPRepPart(byte[] data) + throws Asn1Exception, IOException { + init(new DerValue(data)); + } + + public EncAPRepPart(DerValue encoding) + throws Asn1Exception, IOException { + init(encoding); + } + + /** + * Initializes an EncaPRepPart object. + * @param encoding a single DER-encoded value. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + */ + private void init(DerValue encoding) throws Asn1Exception, IOException { + DerValue der, subDer; + if (((encoding.getTag() & (byte) 0x1F) != (byte) 0x1B) + || (encoding.isApplication() != true) + || (encoding.isConstructed() != true)) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } der = encoding.getData().getDerValue(); - if (der.getTag() != DerValue.tag_Sequence) + if (der.getTag() != DerValue.tag_Sequence) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); - ctime = KerberosTime.parse(der.getData(), (byte)0x00, true); - subDer = der.getData().getDerValue(); - if ((subDer.getTag() & (byte)0x1F) == (byte)0x01) { - cusec = subDer.getData().getBigInteger().intValue(); - } - else - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - if (der.getData().available() > 0) { - subKey = EncryptionKey.parse(der.getData(), (byte)0x02, true); - } - else { - subKey = null; - seqNumber = null; - } - if (der.getData().available() > 0) { - subDer = der.getData().getDerValue(); - if ((subDer.getTag() & 0x1F) != 0x03) { - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - } - seqNumber = new Integer(subDer.getData().getBigInteger().intValue()); - } - else seqNumber = null; - if (der.getData().available() > 0) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - } - - /** - * Encodes an EncAPRepPart object. - * @return byte array of encoded EncAPRepPart object. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - */ - public byte[] asn1Encode() throws Asn1Exception, IOException{ - Vector v = new Vector (); + } + ctime = KerberosTime.parse(der.getData(), (byte) 0x00, true); + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & (byte) 0x1F) == (byte) 0x01) { + cusec = subDer.getData().getBigInteger().intValue(); + } else { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + if (der.getData().available() > 0) { + subKey = EncryptionKey.parse(der.getData(), (byte) 0x02, true); + } else { + subKey = null; + seqNumber = null; + } + if (der.getData().available() > 0) { + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & 0x1F) != 0x03) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + seqNumber = new Integer(subDer.getData().getBigInteger().intValue()); + } else { + seqNumber = null; + } + if (der.getData().available() > 0) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + } + + /** + * Encodes an EncAPRepPart object. + * @return byte array of encoded EncAPRepPart object. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + */ + public byte[] asn1Encode() throws Asn1Exception, IOException { + Vector v = new Vector(); DerOutputStream temp = new DerOutputStream(); - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), ctime.asn1Encode())); - temp.putInteger(BigInteger.valueOf(cusec)); - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), temp.toByteArray())); - if (subKey != null) - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), subKey.asn1Encode())); - if (seqNumber != null) { - temp = new DerOutputStream(); - // encode as an unsigned integer (UInt32) - temp.putInteger(BigInteger.valueOf(seqNumber.longValue())); - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), temp.toByteArray())); - } - DerValue der[] = new DerValue[v.size()]; - v.copyInto(der); - temp = new DerOutputStream(); - temp.putSequence(der); - DerOutputStream out = new DerOutputStream(); - out.write(DerValue.createTag(DerValue.TAG_APPLICATION, true, (byte)0x1B), temp); - return out.toByteArray(); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x00), ctime.asn1Encode())); + temp.putInteger(BigInteger.valueOf(cusec)); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x01), temp.toByteArray())); + if (subKey != null) { + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x02), subKey.asn1Encode())); + } + if (seqNumber != null) { + temp = new DerOutputStream(); + // encode as an unsigned integer (UInt32) + temp.putInteger(BigInteger.valueOf(seqNumber.longValue())); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x03), temp.toByteArray())); } + DerValue der[] = new DerValue[v.size()]; + v.copyInto(der); + temp = new DerOutputStream(); + temp.putSequence(der); + DerOutputStream out = new DerOutputStream(); + out.write(DerValue.createTag(DerValue.TAG_APPLICATION, + true, (byte) 0x1B), temp); + return out.toByteArray(); + } public final EncryptionKey getSubKey() { return subKey; @@ -158,5 +167,4 @@ public final Integer getSeqNumber() { return seqNumber; } - } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/EncASRepPart.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/EncASRepPart.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/EncASRepPart.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/EncASRepPart.java 2015-01-20 02:20:42.000000000 +0000 @@ -35,57 +35,55 @@ public class EncASRepPart extends EncKDCRepPart { - public EncASRepPart( - EncryptionKey new_key, - LastReq new_lastReq, - int new_nonce, - KerberosTime new_keyExpiration, - TicketFlags new_flags, - KerberosTime new_authtime, - KerberosTime new_starttime, - KerberosTime new_endtime, - KerberosTime new_renewTill, - Realm new_srealm, - PrincipalName new_sname, - HostAddresses new_caddr - ) { - super( - new_key, - new_lastReq, - new_nonce, - new_keyExpiration, - new_flags, - new_authtime, - new_starttime, - new_endtime, - new_renewTill, - new_srealm, - new_sname, - new_caddr, - Krb5.KRB_ENC_AS_REP_PART - //may need to use Krb5.KRB_ENC_TGS_REP_PART to mimic - //behavior of other implementaions, instead of above + public EncASRepPart( + EncryptionKey new_key, + LastReq new_lastReq, + int new_nonce, + KerberosTime new_keyExpiration, + TicketFlags new_flags, + KerberosTime new_authtime, + KerberosTime new_starttime, + KerberosTime new_endtime, + KerberosTime new_renewTill, + Realm new_srealm, + PrincipalName new_sname, + HostAddresses new_caddr) { + super( + new_key, + new_lastReq, + new_nonce, + new_keyExpiration, + new_flags, + new_authtime, + new_starttime, + new_endtime, + new_renewTill, + new_srealm, + new_sname, + new_caddr, + Krb5.KRB_ENC_AS_REP_PART ); - } - - public EncASRepPart(byte[] data) throws Asn1Exception, - IOException, KrbException { - init(new DerValue(data)); - } - - public EncASRepPart(DerValue encoding) throws Asn1Exception, - IOException, KrbException { - init(encoding); - } - - private void init(DerValue encoding) throws Asn1Exception, - IOException, KrbException { - init(encoding, Krb5.KRB_ENC_AS_REP_PART); - } - - public byte[] asn1Encode() throws Asn1Exception, - IOException { - return asn1Encode(Krb5.KRB_ENC_AS_REP_PART); - } - + //may need to use Krb5.KRB_ENC_TGS_REP_PART to mimic + //behavior of other implementaions, instead of above + } + + public EncASRepPart(byte[] data) throws Asn1Exception, + IOException, KrbException { + init(new DerValue(data)); + } + + public EncASRepPart(DerValue encoding) throws Asn1Exception, + IOException, KrbException { + init(encoding); + } + + private void init(DerValue encoding) throws Asn1Exception, + IOException, KrbException { + init(encoding, Krb5.KRB_ENC_AS_REP_PART); + } + + public byte[] asn1Encode() throws Asn1Exception, + IOException { + return asn1Encode(Krb5.KRB_ENC_AS_REP_PART); + } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/EncKDCRepPart.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/EncKDCRepPart.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/EncKDCRepPart.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/EncKDCRepPart.java 2015-01-20 02:20:42.000000000 +0000 @@ -35,6 +35,7 @@ import java.util.Vector; import java.io.IOException; import java.math.BigInteger; + /** * Implements the ASN.1 EncKDCRepPart type. * @@ -62,143 +63,163 @@ * http://www.ietf.org/rfc/rfc4120.txt. */ public class EncKDCRepPart { - public EncryptionKey key; - public LastReq lastReq; - public int nonce; - public KerberosTime keyExpiration; //optional - public TicketFlags flags; - public KerberosTime authtime; - public KerberosTime starttime; //optional - public KerberosTime endtime; - public KerberosTime renewTill; //optional - public Realm srealm; - public PrincipalName sname; - public HostAddresses caddr; //optional - public int msgType; //not included in sequence - - public EncKDCRepPart( - EncryptionKey new_key, - LastReq new_lastReq, - int new_nonce, - KerberosTime new_keyExpiration, - TicketFlags new_flags, - KerberosTime new_authtime, - KerberosTime new_starttime, - KerberosTime new_endtime, - KerberosTime new_renewTill, - Realm new_srealm, - PrincipalName new_sname, - HostAddresses new_caddr, - int new_msgType - ) { - key = new_key; - lastReq = new_lastReq; - nonce = new_nonce; - keyExpiration = new_keyExpiration; - flags = new_flags; - authtime = new_authtime; - starttime = new_starttime; - endtime = new_endtime; - renewTill = new_renewTill; - srealm = new_srealm; - sname = new_sname; - caddr = new_caddr; - msgType = new_msgType; - } - - public EncKDCRepPart() { - } - - public EncKDCRepPart(byte[] data, int rep_type) - throws Asn1Exception, IOException, RealmException{ - init(new DerValue(data), rep_type); - } - - public EncKDCRepPart(DerValue encoding, int rep_type) - throws Asn1Exception, IOException, RealmException - { - init(encoding, rep_type); - } - - /** - * Initializes an EncKDCRepPart object. - * - * @param encoding a single DER-encoded value. - * @param rep_type type of the encrypted reply message. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - * @exception RealmException if an error occurs while decoding an Realm object. - */ - protected void init(DerValue encoding, int rep_type) - throws Asn1Exception, IOException, RealmException - { - DerValue der, subDer; - //implementations return the incorrect tag value, so - //we don't use the above line; instead we use the following - msgType = (encoding.getTag() & (byte)0x1F); + + public EncryptionKey key; + public LastReq lastReq; + public int nonce; + public KerberosTime keyExpiration; //optional + public TicketFlags flags; + public KerberosTime authtime; + public KerberosTime starttime; //optional + public KerberosTime endtime; + public KerberosTime renewTill; //optional + public Realm srealm; + public PrincipalName sname; + public HostAddresses caddr; //optional + public int msgType; //not included in sequence + + public EncKDCRepPart( + EncryptionKey new_key, + LastReq new_lastReq, + int new_nonce, + KerberosTime new_keyExpiration, + TicketFlags new_flags, + KerberosTime new_authtime, + KerberosTime new_starttime, + KerberosTime new_endtime, + KerberosTime new_renewTill, + Realm new_srealm, + PrincipalName new_sname, + HostAddresses new_caddr, + int new_msgType) { + key = new_key; + lastReq = new_lastReq; + nonce = new_nonce; + keyExpiration = new_keyExpiration; + flags = new_flags; + authtime = new_authtime; + starttime = new_starttime; + endtime = new_endtime; + renewTill = new_renewTill; + srealm = new_srealm; + sname = new_sname; + caddr = new_caddr; + msgType = new_msgType; + } + + public EncKDCRepPart() { + } + + public EncKDCRepPart(byte[] data, int rep_type) + throws Asn1Exception, IOException, RealmException { + init(new DerValue(data), rep_type); + } + + public EncKDCRepPart(DerValue encoding, int rep_type) + throws Asn1Exception, IOException, RealmException { + init(encoding, rep_type); + } + + /** + * Initializes an EncKDCRepPart object. + * + * @param encoding a single DER-encoded value. + * @param rep_type type of the encrypted reply message. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + * @exception RealmException if an error occurs while decoding an Realm object. + */ + protected void init(DerValue encoding, int rep_type) + throws Asn1Exception, IOException, RealmException { + DerValue der, subDer; + //implementations return the incorrect tag value, so + //we don't use the above line; instead we use the following + msgType = (encoding.getTag() & (byte) 0x1F); if (msgType != Krb5.KRB_ENC_AS_REP_PART && - msgType != Krb5.KRB_ENC_TGS_REP_PART) + msgType != Krb5.KRB_ENC_TGS_REP_PART) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); - der = encoding.getData().getDerValue(); - if (der.getTag() != DerValue.tag_Sequence) + } + der = encoding.getData().getDerValue(); + if (der.getTag() != DerValue.tag_Sequence) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + key = EncryptionKey.parse(der.getData(), (byte) 0x00, false); + lastReq = LastReq.parse(der.getData(), (byte) 0x01, false); + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & (byte) 0x1F) == (byte) 0x02) { + nonce = subDer.getData().getBigInteger().intValue(); + } else { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + keyExpiration = KerberosTime.parse(der.getData(), (byte) 0x03, true); + flags = TicketFlags.parse(der.getData(), (byte) 0x04, false); + authtime = KerberosTime.parse(der.getData(), (byte) 0x05, false); + starttime = KerberosTime.parse(der.getData(), (byte) 0x06, true); + endtime = KerberosTime.parse(der.getData(), (byte) 0x07, false); + renewTill = KerberosTime.parse(der.getData(), (byte) 0x08, true); + srealm = Realm.parse(der.getData(), (byte) 0x09, false); + sname = PrincipalName.parse(der.getData(), (byte) 0x0A, false); + if (der.getData().available() > 0) { + caddr = HostAddresses.parse(der.getData(), (byte) 0x0B, true); + } + if (der.getData().available() > 0) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); - key = EncryptionKey.parse(der.getData(), (byte)0x00, false); - lastReq = LastReq.parse(der.getData(), (byte)0x01, false); - subDer = der.getData().getDerValue(); - if ((subDer.getTag() & (byte)0x1F) == (byte)0x02) - nonce = subDer.getData().getBigInteger().intValue(); - else throw new Asn1Exception(Krb5.ASN1_BAD_ID); - keyExpiration = KerberosTime.parse(der.getData(), (byte)0x03, true); - flags = TicketFlags.parse(der.getData(), (byte)0x04, false); - authtime = KerberosTime.parse(der.getData(), (byte)0x05, false); - starttime = KerberosTime.parse(der.getData(), (byte)0x06, true); - endtime = KerberosTime.parse(der.getData(), (byte)0x07, false); - renewTill = KerberosTime.parse(der.getData(), (byte)0x08, true); - srealm = Realm.parse(der.getData(), (byte)0x09, false); - sname = PrincipalName.parse(der.getData(), (byte)0x0A, false); - if (der.getData().available() > 0) - caddr = HostAddresses.parse(der.getData(), (byte)0x0B, true); - if (der.getData().available() > 0) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - } - - /** - * Encodes an EncKDCRepPart object. - * @param rep_type type of encrypted reply message. - * @return byte array of encoded EncKDCRepPart object. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - */ - public byte[] asn1Encode(int rep_type) throws Asn1Exception, - IOException { - DerOutputStream temp = new DerOutputStream(); - DerOutputStream bytes = new DerOutputStream(); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), key.asn1Encode()); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), lastReq.asn1Encode()); - temp.putInteger(BigInteger.valueOf(nonce)); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), temp); - - if (keyExpiration != null) - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), keyExpiration.asn1Encode()); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x04), flags.asn1Encode()); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x05), authtime.asn1Encode()); - if (starttime != null) - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x06), starttime.asn1Encode()); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x07), endtime.asn1Encode()); - if (renewTill != null) - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x08), renewTill.asn1Encode()); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x09), srealm.asn1Encode()); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x0A), sname.asn1Encode()); - if (caddr != null) - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x0B), caddr.asn1Encode()); - //should use the rep_type to build the encoding - //but other implementations do not; it is ignored and - //the cached msgType is used instead - temp = new DerOutputStream(); - temp.write(DerValue.tag_Sequence, bytes); - bytes = new DerOutputStream(); - bytes.write(DerValue.createTag(DerValue.TAG_APPLICATION, true, (byte)msgType), temp); - return bytes.toByteArray(); } + } + /** + * Encodes an EncKDCRepPart object. + * @param rep_type type of encrypted reply message. + * @return byte array of encoded EncKDCRepPart object. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + */ + public byte[] asn1Encode(int rep_type) throws Asn1Exception, + IOException { + DerOutputStream temp = new DerOutputStream(); + DerOutputStream bytes = new DerOutputStream(); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x00), key.asn1Encode()); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x01), lastReq.asn1Encode()); + temp.putInteger(BigInteger.valueOf(nonce)); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x02), temp); + + if (keyExpiration != null) { + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x03), keyExpiration.asn1Encode()); + } + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x04), flags.asn1Encode()); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x05), authtime.asn1Encode()); + if (starttime != null) { + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x06), starttime.asn1Encode()); + } + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x07), endtime.asn1Encode()); + if (renewTill != null) { + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x08), renewTill.asn1Encode()); + } + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x09), srealm.asn1Encode()); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x0A), sname.asn1Encode()); + if (caddr != null) { + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x0B), caddr.asn1Encode()); + } + //should use the rep_type to build the encoding + //but other implementations do not; it is ignored and + //the cached msgType is used instead + temp = new DerOutputStream(); + temp.write(DerValue.tag_Sequence, bytes); + bytes = new DerOutputStream(); + bytes.write(DerValue.createTag(DerValue.TAG_APPLICATION, + true, (byte) msgType), temp); + return bytes.toByteArray(); + } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/EncKrbCredPart.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/EncKrbCredPart.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/EncKrbCredPart.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/EncKrbCredPart.java 2015-01-20 02:20:42.000000000 +0000 @@ -35,6 +35,7 @@ import java.util.Vector; import java.io.IOException; import java.math.BigInteger; + /** * Implements the ASN.1 EncKrbCredPart type. * @@ -56,148 +57,158 @@ * http://www.ietf.org/rfc/rfc4120.txt. */ public class EncKrbCredPart { - public KrbCredInfo[] ticketInfo = null; - public KerberosTime timeStamp; //optional - private Integer nonce; //optional - private Integer usec; //optional - private HostAddress sAddress; //optional - private HostAddresses rAddress; //optional - - public EncKrbCredPart( - KrbCredInfo[] new_ticketInfo, - KerberosTime new_timeStamp, - Integer new_usec, - Integer new_nonce, - HostAddress new_sAddress, - HostAddresses new_rAddress - ) throws IOException { - if (new_ticketInfo != null) { - ticketInfo = new KrbCredInfo[new_ticketInfo.length]; - for (int i = 0; i < new_ticketInfo.length; i++) { - if (new_ticketInfo[i] == null) { - throw new IOException("Cannot create a EncKrbCredPart"); - } else { - ticketInfo[i] = (KrbCredInfo)new_ticketInfo[i].clone(); - } - } + public KrbCredInfo[] ticketInfo = null; + public KerberosTime timeStamp; //optional + private Integer nonce; //optional + private Integer usec; //optional + private HostAddress sAddress; //optional + private HostAddresses rAddress; //optional + + public EncKrbCredPart( + KrbCredInfo[] new_ticketInfo, + KerberosTime new_timeStamp, + Integer new_usec, + Integer new_nonce, + HostAddress new_sAddress, + HostAddresses new_rAddress) throws IOException { + if (new_ticketInfo != null) { + ticketInfo = new KrbCredInfo[new_ticketInfo.length]; + for (int i = 0; i < new_ticketInfo.length; i++) { + if (new_ticketInfo[i] == null) { + throw new IOException("Cannot create a EncKrbCredPart"); + } else { + ticketInfo[i] = (KrbCredInfo) new_ticketInfo[i].clone(); } - timeStamp = new_timeStamp; - usec = new_usec; - nonce = new_nonce; - sAddress = new_sAddress; - rAddress = new_rAddress; - } - - public EncKrbCredPart(byte[] data) throws Asn1Exception, - IOException, RealmException { - init(new DerValue(data)); - } - - public EncKrbCredPart(DerValue encoding) throws Asn1Exception, - IOException, RealmException { - init(encoding); - } - - /** - * Initializes an EncKrbCredPart object. - * @param encoding a single DER-encoded value. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - * @exception RealmException if an error occurs while parsing a Realm object. - */ - private void init(DerValue encoding) throws Asn1Exception, - IOException, RealmException { - DerValue der, subDer; - //may not be the correct error code for a tag - //mismatch on an encrypted structure - nonce = null; - timeStamp = null; - usec= null; + } + } + timeStamp = new_timeStamp; + usec = new_usec; + nonce = new_nonce; + sAddress = new_sAddress; + rAddress = new_rAddress; + } + + public EncKrbCredPart(byte[] data) throws Asn1Exception, + IOException, RealmException { + init(new DerValue(data)); + } + + public EncKrbCredPart(DerValue encoding) throws Asn1Exception, + IOException, RealmException { + init(encoding); + } + + /** + * Initializes an EncKrbCredPart object. + * @param encoding a single DER-encoded value. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + * @exception RealmException if an error occurs while parsing a Realm object. + */ + private void init(DerValue encoding) throws Asn1Exception, + IOException, RealmException { + DerValue der, subDer; + //may not be the correct error code for a tag + //mismatch on an encrypted structure + nonce = null; + timeStamp = null; + usec = null; sAddress = null; rAddress = null; - if (((encoding.getTag() & (byte)0x1F) != (byte)0x1D) - || (encoding.isApplication() != true) - || (encoding.isConstructed() != true)) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); + if (((encoding.getTag() & (byte) 0x1F) != (byte) 0x1D) + || (encoding.isApplication() != true) + || (encoding.isConstructed() != true)) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } der = encoding.getData().getDerValue(); - if (der.getTag() != DerValue.tag_Sequence) + if (der.getTag() != DerValue.tag_Sequence) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & (byte) 0x1F) == (byte) 0x00) { + DerValue derValues[] = subDer.getData().getSequence(1); + ticketInfo = new KrbCredInfo[derValues.length]; + for (int i = 0; i < derValues.length; i++) { + ticketInfo[i] = new KrbCredInfo(derValues[i]); + } + } else { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + if (der.getData().available() > 0) { + if (((byte) (der.getData().peekByte()) & (byte) 0x1F) == (byte) 0x01) { subDer = der.getData().getDerValue(); - if ((subDer.getTag() & (byte)0x1F) == (byte)0x00) { - DerValue derValues[] = subDer.getData().getSequence(1); - ticketInfo = new KrbCredInfo[derValues.length]; - for (int i = 0; i < derValues.length; i++) { - ticketInfo[i] = new KrbCredInfo(derValues[i]); - } - } - else - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - if (der.getData().available() > 0) { - if (((byte)(der.getData().peekByte()) & (byte)0x1F) == (byte)0x01) { - subDer = der.getData().getDerValue(); - nonce = new Integer(subDer.getData().getBigInteger().intValue()); - } - } - if (der.getData().available() >0) { - timeStamp = KerberosTime.parse(der.getData(), (byte)0x02, true); - } - if (der.getData().available() >0) { - if (((byte)(der.getData().peekByte()) & (byte)0x1F) == (byte)0x03) { - subDer = der.getData().getDerValue(); - usec = new Integer(subDer.getData().getBigInteger().intValue()); - } - } - if (der.getData().available() >0) { - sAddress = HostAddress.parse(der.getData(), (byte)0x04, true); - } - if (der.getData().available() >0) { - rAddress = HostAddresses.parse(der.getData(), (byte)0x05, true); - } - if (der.getData().available() >0) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); + nonce = new Integer(subDer.getData().getBigInteger().intValue()); + } + } + if (der.getData().available() > 0) { + timeStamp = KerberosTime.parse(der.getData(), (byte) 0x02, true); + } + if (der.getData().available() > 0) { + if (((byte) (der.getData().peekByte()) & (byte) 0x1F) == (byte) 0x03) { + subDer = der.getData().getDerValue(); + usec = new Integer(subDer.getData().getBigInteger().intValue()); + } } + if (der.getData().available() > 0) { + sAddress = HostAddress.parse(der.getData(), (byte) 0x04, true); + } + if (der.getData().available() > 0) { + rAddress = HostAddresses.parse(der.getData(), (byte) 0x05, true); + } + if (der.getData().available() > 0) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + } - /** - * Encodes an EncKrbCredPart object. - * @return byte array of encoded EncKrbCredPart object. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - * - */ - public byte[] asn1Encode() throws Asn1Exception, IOException{ + /** + * Encodes an EncKrbCredPart object. + * @return byte array of encoded EncKrbCredPart object. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + * + */ + public byte[] asn1Encode() throws Asn1Exception, IOException { DerOutputStream bytes = new DerOutputStream(); - DerOutputStream temp = new DerOutputStream(); - DerValue[] tickets = new DerValue[ticketInfo.length]; - for (int i = 0; i < ticketInfo.length; i++) - tickets[i] = new DerValue(ticketInfo[i].asn1Encode()); - temp.putSequence(tickets); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), temp); + DerOutputStream temp = new DerOutputStream(); + DerValue[] tickets = new DerValue[ticketInfo.length]; + for (int i = 0; i < ticketInfo.length; i++) { + tickets[i] = new DerValue(ticketInfo[i].asn1Encode()); + } + temp.putSequence(tickets); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x00), temp); - if (nonce != null) { + if (nonce != null) { temp = new DerOutputStream(); - temp.putInteger(BigInteger.valueOf(nonce.intValue())); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), temp); - } + temp.putInteger(BigInteger.valueOf(nonce.intValue())); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x01), temp); + } if (timeStamp != null) { - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), timeStamp.asn1Encode()); - } - if (usec != null) { - temp = new DerOutputStream(); - temp.putInteger(BigInteger.valueOf(usec.intValue())); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), temp); - } - if (sAddress != null) { - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x04), sAddress.asn1Encode()); - } - if (rAddress != null) { - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x05), rAddress.asn1Encode()); - } - temp = new DerOutputStream(); - temp.write(DerValue.tag_Sequence, bytes); - bytes = new DerOutputStream(); - bytes.write(DerValue.createTag(DerValue.TAG_APPLICATION, true, (byte)0x1D), temp); - return bytes.toByteArray(); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x02), timeStamp.asn1Encode()); + } + if (usec != null) { + temp = new DerOutputStream(); + temp.putInteger(BigInteger.valueOf(usec.intValue())); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x03), temp); + } + if (sAddress != null) { + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x04), sAddress.asn1Encode()); + } + if (rAddress != null) { + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x05), rAddress.asn1Encode()); } + temp = new DerOutputStream(); + temp.write(DerValue.tag_Sequence, bytes); + bytes = new DerOutputStream(); + bytes.write(DerValue.createTag(DerValue.TAG_APPLICATION, + true, (byte) 0x1D), temp); + return bytes.toByteArray(); + } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/EncKrbPrivPart.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/EncKrbPrivPart.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/EncKrbPrivPart.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/EncKrbPrivPart.java 2015-01-20 02:20:42.000000000 +0000 @@ -55,114 +55,119 @@ * * http://www.ietf.org/rfc/rfc4120.txt. */ - public class EncKrbPrivPart { - public byte[] userData = null; - public KerberosTime timestamp; //optional - public Integer usec; //optional - public Integer seqNumber; //optional - public HostAddress sAddress; //optional - public HostAddress rAddress; //optional - - public EncKrbPrivPart( - byte[] new_userData, - KerberosTime new_timestamp, - Integer new_usec, - Integer new_seqNumber, - HostAddress new_sAddress, - HostAddress new_rAddress - ) { - if (new_userData != null) { - userData = new_userData.clone(); - } - timestamp = new_timestamp; - usec = new_usec; - seqNumber = new_seqNumber; - sAddress = new_sAddress; - rAddress = new_rAddress; - } - - public EncKrbPrivPart(byte[] data) throws Asn1Exception, IOException { - init(new DerValue(data)); - } - - public EncKrbPrivPart(DerValue encoding) throws Asn1Exception, IOException { - init(encoding); - } - - /** - * Initializes an EncKrbPrivPart object. - * @param encoding a single DER-encoded value. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - */ - private void init(DerValue encoding) throws Asn1Exception, IOException { + + public byte[] userData = null; + public KerberosTime timestamp; //optional + public Integer usec; //optional + public Integer seqNumber; //optional + public HostAddress sAddress; //optional + public HostAddress rAddress; //optional + + public EncKrbPrivPart( + byte[] new_userData, + KerberosTime new_timestamp, + Integer new_usec, + Integer new_seqNumber, + HostAddress new_sAddress, + HostAddress new_rAddress) { + if (new_userData != null) { + userData = new_userData.clone(); + } + timestamp = new_timestamp; + usec = new_usec; + seqNumber = new_seqNumber; + sAddress = new_sAddress; + rAddress = new_rAddress; + } + + public EncKrbPrivPart(byte[] data) throws Asn1Exception, IOException { + init(new DerValue(data)); + } + + public EncKrbPrivPart(DerValue encoding) throws Asn1Exception, IOException { + init(encoding); + } + + /** + * Initializes an EncKrbPrivPart object. + * @param encoding a single DER-encoded value. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + */ + private void init(DerValue encoding) throws Asn1Exception, IOException { DerValue der, subDer; - if (((encoding.getTag() & (byte)0x1F) != (byte)0x1C) - || (encoding.isApplication() != true) - || (encoding.isConstructed() != true)) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - der = encoding.getData().getDerValue(); - if (der.getTag() != DerValue.tag_Sequence) + if (((encoding.getTag() & (byte) 0x1F) != (byte) 0x1C) + || (encoding.isApplication() != true) + || (encoding.isConstructed() != true)) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + der = encoding.getData().getDerValue(); + if (der.getTag() != DerValue.tag_Sequence) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); - subDer = der.getData().getDerValue(); - if ((subDer.getTag() & (byte)0x1F) == (byte)0x00) { - userData = subDer.getData().getOctetString(); - } - else - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - timestamp = KerberosTime.parse(der.getData(), (byte)0x01, true); - if ((der.getData().peekByte() & 0x1F) == 0x02) { - subDer = der.getData().getDerValue(); - usec = new Integer(subDer.getData().getBigInteger().intValue()); - } - else usec = null; - if ((der.getData().peekByte() & 0x1F) == 0x03 ) { - subDer = der.getData().getDerValue(); - seqNumber = new Integer(subDer.getData().getBigInteger().intValue()); - } - else seqNumber = null; - sAddress = HostAddress.parse(der.getData(), (byte)0x04, false); - if (der.getData().available() > 0) { - rAddress = HostAddress.parse(der.getData(), (byte)0x05, true); - } - if (der.getData().available() > 0) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - } - - /** - * Encodes an EncKrbPrivPart object. - * @return byte array of encoded EncKrbPrivPart object. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - */ - public byte[] asn1Encode() throws Asn1Exception, IOException { + } + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & (byte) 0x1F) == (byte) 0x00) { + userData = subDer.getData().getOctetString(); + } else { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + timestamp = KerberosTime.parse(der.getData(), (byte) 0x01, true); + if ((der.getData().peekByte() & 0x1F) == 0x02) { + subDer = der.getData().getDerValue(); + usec = new Integer(subDer.getData().getBigInteger().intValue()); + } else { + usec = null; + } + if ((der.getData().peekByte() & 0x1F) == 0x03) { + subDer = der.getData().getDerValue(); + seqNumber = new Integer(subDer.getData().getBigInteger().intValue()); + } else { + seqNumber = null; + } + sAddress = HostAddress.parse(der.getData(), (byte) 0x04, false); + if (der.getData().available() > 0) { + rAddress = HostAddress.parse(der.getData(), (byte) 0x05, true); + } + if (der.getData().available() > 0) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + } + + /** + * Encodes an EncKrbPrivPart object. + * @return byte array of encoded EncKrbPrivPart object. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + */ + public byte[] asn1Encode() throws Asn1Exception, IOException { DerOutputStream temp = new DerOutputStream(); DerOutputStream bytes = new DerOutputStream(); - temp.putOctetString(userData); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), temp); - if (timestamp != null) - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), timestamp.asn1Encode()); - if (usec != null) { - temp = new DerOutputStream(); - temp.putInteger(BigInteger.valueOf(usec.intValue())); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), temp); - } - if (seqNumber != null) { - temp = new DerOutputStream(); - // encode as an unsigned integer (UInt32) - temp.putInteger(BigInteger.valueOf(seqNumber.longValue())); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), temp); - } - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x04), sAddress.asn1Encode()); - if (rAddress != null) { - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x05), rAddress.asn1Encode()); - } - temp = new DerOutputStream(); - temp.write(DerValue.tag_Sequence, bytes); - bytes = new DerOutputStream(); - bytes.write(DerValue.createTag(DerValue.TAG_APPLICATION, true, (byte)0x1C), temp); - return bytes.toByteArray(); + temp.putOctetString(userData); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x00), temp); + if (timestamp != null) { + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x01), timestamp.asn1Encode()); + } + if (usec != null) { + temp = new DerOutputStream(); + temp.putInteger(BigInteger.valueOf(usec.intValue())); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x02), temp); + } + if (seqNumber != null) { + temp = new DerOutputStream(); + // encode as an unsigned integer (UInt32) + temp.putInteger(BigInteger.valueOf(seqNumber.longValue())); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x03), temp); + } + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x04), sAddress.asn1Encode()); + if (rAddress != null) { + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x05), rAddress.asn1Encode()); } + temp = new DerOutputStream(); + temp.write(DerValue.tag_Sequence, bytes); + bytes = new DerOutputStream(); + bytes.write(DerValue.createTag(DerValue.TAG_APPLICATION, true, (byte) 0x1C), temp); + return bytes.toByteArray(); + } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/EncTGSRepPart.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/EncTGSRepPart.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/EncTGSRepPart.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/EncTGSRepPart.java 2015-01-20 02:20:42.000000000 +0000 @@ -35,55 +35,52 @@ public class EncTGSRepPart extends EncKDCRepPart { - public EncTGSRepPart( - EncryptionKey new_key, - LastReq new_lastReq, - int new_nonce, - KerberosTime new_keyExpiration, - TicketFlags new_flags, - KerberosTime new_authtime, - KerberosTime new_starttime, - KerberosTime new_endtime, - KerberosTime new_renewTill, - Realm new_srealm, - PrincipalName new_sname, - HostAddresses new_caddr - ) { - super( - new_key, - new_lastReq, - new_nonce, - new_keyExpiration, - new_flags, - new_authtime, - new_starttime, - new_endtime, - new_renewTill, - new_srealm, - new_sname, - new_caddr, - Krb5.KRB_ENC_TGS_REP_PART - ); - } - - public EncTGSRepPart(byte[] data) throws Asn1Exception, - IOException, KrbException { - init(new DerValue(data)); - } - - public EncTGSRepPart(DerValue encoding) throws Asn1Exception, - IOException, KrbException { - init(encoding); - } - - private void init(DerValue encoding) throws Asn1Exception, - IOException, KrbException { - init(encoding, Krb5.KRB_ENC_TGS_REP_PART); - } - - public byte[] asn1Encode() throws Asn1Exception, - IOException { - return asn1Encode(Krb5.KRB_ENC_TGS_REP_PART); - } - + public EncTGSRepPart( + EncryptionKey new_key, + LastReq new_lastReq, + int new_nonce, + KerberosTime new_keyExpiration, + TicketFlags new_flags, + KerberosTime new_authtime, + KerberosTime new_starttime, + KerberosTime new_endtime, + KerberosTime new_renewTill, + Realm new_srealm, + PrincipalName new_sname, + HostAddresses new_caddr) { + super( + new_key, + new_lastReq, + new_nonce, + new_keyExpiration, + new_flags, + new_authtime, + new_starttime, + new_endtime, + new_renewTill, + new_srealm, + new_sname, + new_caddr, + Krb5.KRB_ENC_TGS_REP_PART); + } + + public EncTGSRepPart(byte[] data) throws Asn1Exception, + IOException, KrbException { + init(new DerValue(data)); + } + + public EncTGSRepPart(DerValue encoding) throws Asn1Exception, + IOException, KrbException { + init(encoding); + } + + private void init(DerValue encoding) throws Asn1Exception, + IOException, KrbException { + init(encoding, Krb5.KRB_ENC_TGS_REP_PART); + } + + public byte[] asn1Encode() throws Asn1Exception, + IOException { + return asn1Encode(Krb5.KRB_ENC_TGS_REP_PART); + } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/EncTicketPart.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/EncTicketPart.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/EncTicketPart.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/EncTicketPart.java 2015-01-20 02:20:42.000000000 +0000 @@ -61,69 +61,68 @@ * http://www.ietf.org/rfc/rfc4120.txt. */ public class EncTicketPart { - public TicketFlags flags; - public EncryptionKey key; - public Realm crealm; - public PrincipalName cname; - public TransitedEncoding transited; - public KerberosTime authtime; - public KerberosTime starttime; //optional - public KerberosTime endtime; - public KerberosTime renewTill; //optional - public HostAddresses caddr; //optional - public AuthorizationData authorizationData; //optional - - public EncTicketPart( - TicketFlags new_flags, - EncryptionKey new_key, - Realm new_crealm, - PrincipalName new_cname, - TransitedEncoding new_transited, - KerberosTime new_authtime, - KerberosTime new_starttime, - KerberosTime new_endtime, - KerberosTime new_renewTill, - HostAddresses new_caddr, - AuthorizationData new_authorizationData - ) { - flags = new_flags; - key = new_key; - crealm = new_crealm; - cname = new_cname; - transited = new_transited; - authtime = new_authtime; - starttime = new_starttime; - endtime = new_endtime; - renewTill = new_renewTill; - caddr = new_caddr; - authorizationData = new_authorizationData; - } - - public EncTicketPart(byte[] data) - throws Asn1Exception, KrbException, IOException { - init(new DerValue(data)); - } - - public EncTicketPart(DerValue encoding) - throws Asn1Exception, KrbException, IOException { - init(encoding); - } - - /** - * Initializes an EncTicketPart object. - * @param encoding a single DER-encoded value. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - * @exception RealmException if an error occurs while parsing a Realm object. - */ + public TicketFlags flags; + public EncryptionKey key; + public Realm crealm; + public PrincipalName cname; + public TransitedEncoding transited; + public KerberosTime authtime; + public KerberosTime starttime; //optional + public KerberosTime endtime; + public KerberosTime renewTill; //optional + public HostAddresses caddr; //optional + public AuthorizationData authorizationData; //optional + + public EncTicketPart( + TicketFlags new_flags, + EncryptionKey new_key, + Realm new_crealm, + PrincipalName new_cname, + TransitedEncoding new_transited, + KerberosTime new_authtime, + KerberosTime new_starttime, + KerberosTime new_endtime, + KerberosTime new_renewTill, + HostAddresses new_caddr, + AuthorizationData new_authorizationData) { + flags = new_flags; + key = new_key; + crealm = new_crealm; + cname = new_cname; + transited = new_transited; + authtime = new_authtime; + starttime = new_starttime; + endtime = new_endtime; + renewTill = new_renewTill; + caddr = new_caddr; + authorizationData = new_authorizationData; + } + + public EncTicketPart(byte[] data) + throws Asn1Exception, KrbException, IOException { + init(new DerValue(data)); + } + + public EncTicketPart(DerValue encoding) + throws Asn1Exception, KrbException, IOException { + init(encoding); + } + + /** + * Initializes an EncTicketPart object. + * @param encoding a single DER-encoded value. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + * @exception RealmException if an error occurs while parsing a Realm object. + */ private static String getHexBytes(byte[] bytes, int len) - throws IOException { + throws IOException { StringBuffer sb = new StringBuffer(); for (int i = 0; i < len; i++) { - int b1 = (bytes[i]>>4) & 0x0f; + int b1 = (bytes[i] >> 4) & 0x0f; int b2 = bytes[i] & 0x0f; sb.append(Integer.toHexString(b1)); @@ -133,73 +132,91 @@ return sb.toString(); } - private void init(DerValue encoding) - throws Asn1Exception, IOException, RealmException { - DerValue der, subDer; - - renewTill = null; - caddr = null; - authorizationData = null; - if (((encoding.getTag() & (byte)0x1F) != (byte)0x03) + private void init(DerValue encoding) + throws Asn1Exception, IOException, RealmException { + DerValue der, subDer; + + renewTill = null; + caddr = null; + authorizationData = null; + if (((encoding.getTag() & (byte) 0x1F) != (byte) 0x03) || (encoding.isApplication() != true) - || (encoding.isConstructed() != true)) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - der = encoding.getData().getDerValue(); - if (der.getTag() != DerValue.tag_Sequence) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - flags = TicketFlags.parse(der.getData(), (byte)0x00, false); - key = EncryptionKey.parse(der.getData(), (byte)0x01, false); - crealm = Realm.parse(der.getData(), (byte)0x02, false); - cname = PrincipalName.parse(der.getData(), (byte)0x03, false); - transited = TransitedEncoding.parse(der.getData(), (byte)0x04, false); - authtime = KerberosTime.parse(der.getData(), (byte)0x05, false); - starttime = KerberosTime.parse(der.getData(), (byte)0x06, true); - endtime = KerberosTime.parse(der.getData(), (byte)0x07, false); - if (der.getData().available() > 0) { - renewTill = KerberosTime.parse(der.getData(), (byte)0x08, true); - } - if (der.getData().available() > 0) { - caddr = HostAddresses.parse(der.getData(), (byte)0x09, true); - } - if (der.getData().available() > 0) { - authorizationData = AuthorizationData.parse(der.getData(), (byte)0x0A, true); - } - if (der.getData().available() > 0) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - + || (encoding.isConstructed() != true)) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + der = encoding.getData().getDerValue(); + if (der.getTag() != DerValue.tag_Sequence) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + flags = TicketFlags.parse(der.getData(), (byte) 0x00, false); + key = EncryptionKey.parse(der.getData(), (byte) 0x01, false); + crealm = Realm.parse(der.getData(), (byte) 0x02, false); + cname = PrincipalName.parse(der.getData(), (byte) 0x03, false); + transited = TransitedEncoding.parse(der.getData(), (byte) 0x04, false); + authtime = KerberosTime.parse(der.getData(), (byte) 0x05, false); + starttime = KerberosTime.parse(der.getData(), (byte) 0x06, true); + endtime = KerberosTime.parse(der.getData(), (byte) 0x07, false); + if (der.getData().available() > 0) { + renewTill = KerberosTime.parse(der.getData(), (byte) 0x08, true); + } + if (der.getData().available() > 0) { + caddr = HostAddresses.parse(der.getData(), (byte) 0x09, true); + } + if (der.getData().available() > 0) { + authorizationData = AuthorizationData.parse(der.getData(), (byte) 0x0A, true); + } + if (der.getData().available() > 0) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); } - /** - * Encodes an EncTicketPart object. - * @return byte array of encoded EncTicketPart object. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - */ + } - public byte[] asn1Encode() throws Asn1Exception, IOException { + /** + * Encodes an EncTicketPart object. + * @return byte array of encoded EncTicketPart object. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + */ + public byte[] asn1Encode() throws Asn1Exception, IOException { DerOutputStream bytes = new DerOutputStream(); - DerOutputStream temp = new DerOutputStream(); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), flags.asn1Encode()); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), key.asn1Encode()); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), crealm.asn1Encode()); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), cname.asn1Encode()); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x04), transited.asn1Encode()); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x05), authtime.asn1Encode()); - if (starttime != null) - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x06), starttime.asn1Encode()); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x07), endtime.asn1Encode()); - - if (renewTill != null) - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x08), renewTill.asn1Encode()); - - if (caddr != null) - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x09), caddr.asn1Encode()); - - if (authorizationData != null) - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x0A), authorizationData.asn1Encode()); - temp.write(DerValue.tag_Sequence, bytes); - bytes = new DerOutputStream(); - bytes.write(DerValue.createTag(DerValue.TAG_APPLICATION, true, (byte)0x03), temp); - return bytes.toByteArray(); - } + DerOutputStream temp = new DerOutputStream(); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x00), flags.asn1Encode()); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x01), key.asn1Encode()); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x02), crealm.asn1Encode()); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x03), cname.asn1Encode()); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x04), transited.asn1Encode()); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x05), authtime.asn1Encode()); + if (starttime != null) { + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x06), starttime.asn1Encode()); + } + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x07), endtime.asn1Encode()); + + if (renewTill != null) { + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x08), renewTill.asn1Encode()); + } + + if (caddr != null) { + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x09), caddr.asn1Encode()); + } + + if (authorizationData != null) { + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x0A), authorizationData.asn1Encode()); + } + temp.write(DerValue.tag_Sequence, bytes); + bytes = new DerOutputStream(); + bytes.write(DerValue.createTag(DerValue.TAG_APPLICATION, + true, (byte) 0x03), temp); + return bytes.toByteArray(); + } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/KDCRep.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/KDCRep.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/KDCRep.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/KDCRep.java 2015-01-20 02:20:42.000000000 +0000 @@ -34,6 +34,7 @@ import java.util.Vector; import java.io.IOException; import java.math.BigInteger; + /** * Implements the ASN.1 KDC-REP type. * @@ -58,163 +59,168 @@ * * http://www.ietf.org/rfc/rfc4120.txt. */ - public class KDCRep { - public Realm crealm; - public PrincipalName cname; - public Ticket ticket; - public EncryptedData encPart; - public EncKDCRepPart encKDCRepPart; //not part of ASN.1 encoding - - private int pvno; - private int msgType; - private PAData[] pAData = null; //optional - private boolean DEBUG = Krb5.DEBUG; - - public KDCRep( - PAData[] new_pAData, - Realm new_crealm, - PrincipalName new_cname, - Ticket new_ticket, - EncryptedData new_encPart, - int req_type - ) throws IOException { - pvno = Krb5.PVNO; - msgType = req_type; - if (new_pAData != null) { - pAData = new PAData[new_pAData.length]; - for (int i = 0; i < new_pAData.length; i++) { - if (new_pAData[i] == null) { - throw new IOException("Cannot create a KDCRep"); - } else { - pAData[i] = (PAData)new_pAData[i].clone(); - } - } - } - crealm = new_crealm; - cname = new_cname; - ticket = new_ticket; - encPart = new_encPart; - } - public KDCRep() { - } - - public KDCRep(byte[] data, int req_type) throws Asn1Exception, KrbApErrException, RealmException, IOException { - init(new DerValue(data), req_type); - } - - public KDCRep(DerValue encoding, int req_type) throws Asn1Exception, - RealmException, KrbApErrException, IOException { - init(encoding, req_type); + public Realm crealm; + public PrincipalName cname; + public Ticket ticket; + public EncryptedData encPart; + public EncKDCRepPart encKDCRepPart; //not part of ASN.1 encoding + private int pvno; + private int msgType; + private PAData[] pAData = null; //optional + private boolean DEBUG = Krb5.DEBUG; + + public KDCRep( + PAData[] new_pAData, + Realm new_crealm, + PrincipalName new_cname, + Ticket new_ticket, + EncryptedData new_encPart, + int req_type) throws IOException { + pvno = Krb5.PVNO; + msgType = req_type; + if (new_pAData != null) { + pAData = new PAData[new_pAData.length]; + for (int i = 0; i < new_pAData.length; i++) { + if (new_pAData[i] == null) { + throw new IOException("Cannot create a KDCRep"); + } else { + pAData[i] = (PAData) new_pAData[i].clone(); + } + } } + crealm = new_crealm; + cname = new_cname; + ticket = new_ticket; + encPart = new_encPart; + } + + public KDCRep() { + } + + public KDCRep(byte[] data, int req_type) throws Asn1Exception, + KrbApErrException, RealmException, IOException { + init(new DerValue(data), req_type); + } + + public KDCRep(DerValue encoding, int req_type) throws Asn1Exception, + RealmException, KrbApErrException, IOException { + init(encoding, req_type); + } /* // Not used? Don't know what keyusage to use here %%% - - public void decrypt(EncryptionKey key) throws Asn1Exception, - IOException, KrbException, RealmException { - encKDCRepPart = new EncKDCRepPart(encPart.decrypt(key), - msgType); - } -*/ - - /** - * Initializes an KDCRep object. - * - * @param encoding a single DER-encoded value. - * @param req_type reply message type. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - * @exception RealmException if an error occurs while constructing a Realm object from DER-encoded data. - * @exception KrbApErrException if the value read from the DER-encoded data stream does not match the pre-defined value. - * - */ - protected void init(DerValue encoding, int req_type) + public void decrypt(EncryptionKey key) throws Asn1Exception, + IOException, KrbException, RealmException { + encKDCRepPart = new EncKDCRepPart(encPart.decrypt(key), msgType); + } + */ + /** + * Initializes an KDCRep object. + * + * @param encoding a single DER-encoded value. + * @param req_type reply message type. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + * @exception RealmException if an error occurs while constructing + * a Realm object from DER-encoded data. + * @exception KrbApErrException if the value read from the DER-encoded + * data stream does not match the pre-defined value. + * + */ + protected void init(DerValue encoding, int req_type) throws Asn1Exception, RealmException, IOException, - KrbApErrException { - DerValue der, subDer; - if ((encoding.getTag() & 0x1F) != req_type) { - if (DEBUG) { - System.out.println(">>> KDCRep: init() " + - "encoding tag is " + - encoding.getTag() + - " req type is " + req_type); - } - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - } - der = encoding.getData().getDerValue(); - if (der.getTag() != DerValue.tag_Sequence) { - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - } - subDer = der.getData().getDerValue(); - if ((subDer.getTag() & 0x1F) == 0x00) { - pvno = subDer.getData().getBigInteger().intValue(); - if (pvno != Krb5.PVNO) - throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION); - } else { - throw new Asn1Exception(Krb5.ASN1_BAD_ID); + KrbApErrException { + DerValue der, subDer; + if ((encoding.getTag() & 0x1F) != req_type) { + if (DEBUG) { + System.out.println(">>> KDCRep: init() " + + "encoding tag is " + + encoding.getTag() + + " req type is " + req_type); + } + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + der = encoding.getData().getDerValue(); + if (der.getTag() != DerValue.tag_Sequence) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & 0x1F) == 0x00) { + pvno = subDer.getData().getBigInteger().intValue(); + if (pvno != Krb5.PVNO) { + throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION); + } + } else { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & 0x1F) == 0x01) { + msgType = subDer.getData().getBigInteger().intValue(); + if (msgType != req_type) { + throw new KrbApErrException(Krb5.KRB_AP_ERR_MSG_TYPE); } + } else { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + if ((der.getData().peekByte() & 0x1F) == 0x02) { subDer = der.getData().getDerValue(); - if ((subDer.getTag() & 0x1F) == 0x01) { - msgType = subDer.getData().getBigInteger().intValue(); - if (msgType != req_type) { - throw new KrbApErrException(Krb5.KRB_AP_ERR_MSG_TYPE); - } - } else { - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - } - if ((der.getData().peekByte() & 0x1F) == 0x02) { - subDer = der.getData().getDerValue(); - DerValue[] padata = subDer.getData().getSequence(1); - pAData = new PAData[padata.length]; - for (int i = 0; i < padata.length; i++) { - pAData[i] = new PAData(padata[i]); - } - } else { - pAData = null; - } - crealm = Realm.parse(der.getData(), (byte)0x03, false); - cname = PrincipalName.parse(der.getData(), (byte)0x04, false); - ticket = Ticket.parse(der.getData(), (byte)0x05, false); - encPart = EncryptedData.parse(der.getData(), (byte)0x06, false); - if (der.getData().available() > 0) { - throw new Asn1Exception(Krb5.ASN1_BAD_ID); + DerValue[] padata = subDer.getData().getSequence(1); + pAData = new PAData[padata.length]; + for (int i = 0; i < padata.length; i++) { + pAData[i] = new PAData(padata[i]); + } + } else { + pAData = null; + } + crealm = Realm.parse(der.getData(), (byte) 0x03, false); + cname = PrincipalName.parse(der.getData(), (byte) 0x04, false); + ticket = Ticket.parse(der.getData(), (byte) 0x05, false); + encPart = EncryptedData.parse(der.getData(), (byte) 0x06, false); + if (der.getData().available() > 0) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + } + + /** + * Encodes this object to a byte array. + * @return byte array of encoded APReq object. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + * + */ + public byte[] asn1Encode() throws Asn1Exception, IOException { + + DerOutputStream bytes = new DerOutputStream(); + DerOutputStream temp = new DerOutputStream(); + temp.putInteger(BigInteger.valueOf(pvno)); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x00), temp); + temp = new DerOutputStream(); + temp.putInteger(BigInteger.valueOf(msgType)); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x01), temp); + if (pAData != null && pAData.length > 0) { + DerOutputStream padata_stream = new DerOutputStream(); + for (int i = 0; i < pAData.length; i++) { + padata_stream.write(pAData[i].asn1Encode()); } - } - - - /** - * Encodes this object to a byte array. - * @return byte array of encoded APReq object. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - * - */ - public byte[] asn1Encode() throws Asn1Exception, IOException { - - DerOutputStream bytes = new DerOutputStream(); - DerOutputStream temp = new DerOutputStream(); - temp.putInteger(BigInteger.valueOf(pvno)); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), temp); temp = new DerOutputStream(); - temp.putInteger(BigInteger.valueOf(msgType)); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), temp); - if (pAData != null && pAData.length > 0) { - DerOutputStream padata_stream = new DerOutputStream(); - for (int i = 0; i < pAData.length; i++) { - padata_stream.write(pAData[i].asn1Encode()); - } - temp = new DerOutputStream(); - temp.write(DerValue.tag_SequenceOf, padata_stream); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), temp); - } - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), crealm.asn1Encode()); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x04), cname.asn1Encode()); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x05), ticket.asn1Encode()); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x06), encPart.asn1Encode()); - temp = new DerOutputStream(); - temp.write(DerValue.tag_Sequence, bytes); - return temp.toByteArray(); - } + temp.write(DerValue.tag_SequenceOf, padata_stream); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x02), temp); + } + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x03), crealm.asn1Encode()); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x04), cname.asn1Encode()); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x05), ticket.asn1Encode()); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x06), encPart.asn1Encode()); + temp = new DerOutputStream(); + temp.write(DerValue.tag_Sequence, bytes); + return temp.toByteArray(); + } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/KDCReq.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/KDCReq.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/KDCReq.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/KDCReq.java 2015-01-20 02:20:42.000000000 +0000 @@ -55,155 +55,160 @@ * * http://www.ietf.org/rfc/rfc4120.txt. */ - public class KDCReq { - public KDCReqBody reqBody; - private int pvno; - private int msgType; - private PAData[] pAData = null; //optional - - public KDCReq(PAData[] new_pAData, KDCReqBody new_reqBody, - int req_type) throws IOException { - pvno = Krb5.PVNO; - msgType = req_type; - if (new_pAData != null) { - pAData = new PAData[new_pAData.length]; - for (int i = 0; i < new_pAData.length; i++) { - if (new_pAData[i] == null) { - throw new IOException("Cannot create a KDCRep"); - } else { - pAData[i] = (PAData)new_pAData[i].clone(); - } - } - } - reqBody = new_reqBody; + public KDCReqBody reqBody; + private int pvno; + private int msgType; + private PAData[] pAData = null; //optional + + public KDCReq(PAData[] new_pAData, KDCReqBody new_reqBody, + int req_type) throws IOException { + pvno = Krb5.PVNO; + msgType = req_type; + if (new_pAData != null) { + pAData = new PAData[new_pAData.length]; + for (int i = 0; i < new_pAData.length; i++) { + if (new_pAData[i] == null) { + throw new IOException("Cannot create a KDCRep"); + } else { + pAData[i] = (PAData) new_pAData[i].clone(); + } + } } + reqBody = new_reqBody; + } - public KDCReq() { - } + public KDCReq() { + } - public KDCReq(byte[] data, int req_type) throws Asn1Exception, - IOException, KrbException { + public KDCReq(byte[] data, int req_type) throws Asn1Exception, + IOException, KrbException { init(new DerValue(data), req_type); - } + } /** - * Creates an KDCReq object from a DerValue object and asn1 type. - * - * @param der a DER value of an KDCReq object. - * @param req_type a encoded asn1 type value. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - * @exceptoin KrbErrException - */ + * Creates an KDCReq object from a DerValue object and asn1 type. + * + * @param der a DER value of an KDCReq object. + * @param req_type a encoded asn1 type value. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + * @exceptoin KrbErrException + */ public KDCReq(DerValue der, int req_type) throws Asn1Exception, - IOException, KrbException { - init(der, req_type); - } + IOException, KrbException { + init(der, req_type); + } - /** - * Initializes a KDCReq object from a DerValue. The DER encoding - * must be in the format specified by the KRB_KDC_REQ ASN.1 notation. - * - * @param encoding a DER-encoded KDCReq object. - * @param req_type an int indicating whether it's KRB_AS_REQ or KRB_TGS_REQ type - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - * @exception KrbException if an error occurs while constructing a Realm object, - * or a Krb object from DER-encoded data. - */ + /** + * Initializes a KDCReq object from a DerValue. The DER encoding + * must be in the format specified by the KRB_KDC_REQ ASN.1 notation. + * + * @param encoding a DER-encoded KDCReq object. + * @param req_type an int indicating whether it's KRB_AS_REQ or KRB_TGS_REQ type + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + * @exception KrbException if an error occurs while constructing a Realm object, + * or a Krb object from DER-encoded data. + */ protected void init(DerValue encoding, int req_type) throws Asn1Exception, - IOException, KrbException { - DerValue der, subDer; - BigInteger bint; - if ((encoding.getTag() & 0x1F) != req_type) { - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - } - der = encoding.getData().getDerValue(); - if (der.getTag() != DerValue.tag_Sequence) { + IOException, KrbException { + DerValue der, subDer; + BigInteger bint; + if ((encoding.getTag() & 0x1F) != req_type) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); - } - subDer = der.getData().getDerValue(); - if ((subDer.getTag() & 0x01F) == 0x01) { - bint = subDer.getData().getBigInteger(); - this.pvno = bint.intValue(); - if (this.pvno != Krb5.PVNO) - throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION); - } - else - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - subDer = der.getData().getDerValue(); - if ((subDer.getTag() & 0x01F) == 0x02) { - bint = subDer.getData().getBigInteger(); - this.msgType = bint.intValue(); - if (this.msgType != req_type) - throw new KrbApErrException(Krb5.KRB_AP_ERR_MSG_TYPE); - } - else - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - subDer = der.getData().getDerValue(); - if ((subDer.getTag() & 0x01F) == 0x03) { - DerValue subsubDer = subDer.getData().getDerValue(); - if (subsubDer.getTag() != DerValue.tag_SequenceOf) { - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - } - Vector v = new Vector (); - while (subsubDer.getData().available() > 0) { - v.addElement(new PAData(subsubDer.getData().getDerValue())); - } - if (v.size() > 0) { - pAData = new PAData[v.size()]; - v.copyInto(pAData); - } - } - else pAData = null; - subDer = der.getData().getDerValue(); - if ((subDer.getTag() & 0x01F) == 0x04) { - DerValue subsubDer = subDer.getData().getDerValue(); - reqBody = new KDCReqBody(subsubDer, msgType); - } - else - throw new Asn1Exception(Krb5.ASN1_BAD_ID); } - - /** - * Encodes this object to a byte array. - * - * @return an byte array of encoded data. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - * - */ - public byte[] asn1Encode() throws Asn1Exception, IOException { - DerOutputStream temp, bytes, out; - temp = new DerOutputStream(); - temp.putInteger(BigInteger.valueOf(pvno)); - out = new DerOutputStream(); - out.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), temp); - temp = new DerOutputStream(); - temp.putInteger(BigInteger.valueOf(msgType)); - out.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), temp); - if (pAData != null && pAData.length > 0) { - temp = new DerOutputStream(); - for (int i = 0; i < pAData.length; i++) { - temp.write(pAData[i].asn1Encode()); - } - bytes = new DerOutputStream(); - bytes.write(DerValue.tag_SequenceOf, temp); - out.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), bytes); - } - out.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x04), reqBody.asn1Encode(msgType)); - bytes = new DerOutputStream(); - bytes.write(DerValue.tag_Sequence, out); - out = new DerOutputStream(); - out.write(DerValue.createTag(DerValue.TAG_APPLICATION, true, (byte)msgType), bytes); - return out.toByteArray(); + der = encoding.getData().getDerValue(); + if (der.getTag() != DerValue.tag_Sequence) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); } - - public byte[] asn1EncodeReqBody() throws Asn1Exception, IOException - { - return reqBody.asn1Encode(msgType); + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & 0x01F) == 0x01) { + bint = subDer.getData().getBigInteger(); + this.pvno = bint.intValue(); + if (this.pvno != Krb5.PVNO) { + throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION); + } + } else { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); } + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & 0x01F) == 0x02) { + bint = subDer.getData().getBigInteger(); + this.msgType = bint.intValue(); + if (this.msgType != req_type) { + throw new KrbApErrException(Krb5.KRB_AP_ERR_MSG_TYPE); + } + } else { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & 0x01F) == 0x03) { + DerValue subsubDer = subDer.getData().getDerValue(); + if (subsubDer.getTag() != DerValue.tag_SequenceOf) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + Vector v = new Vector(); + while (subsubDer.getData().available() > 0) { + v.addElement(new PAData(subsubDer.getData().getDerValue())); + } + if (v.size() > 0) { + pAData = new PAData[v.size()]; + v.copyInto(pAData); + } + } else { + pAData = null; + } + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & 0x01F) == 0x04) { + DerValue subsubDer = subDer.getData().getDerValue(); + reqBody = new KDCReqBody(subsubDer, msgType); + } else { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + } + /** + * Encodes this object to a byte array. + * + * @return an byte array of encoded data. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + * + */ + public byte[] asn1Encode() throws Asn1Exception, IOException { + DerOutputStream temp, bytes, out; + temp = new DerOutputStream(); + temp.putInteger(BigInteger.valueOf(pvno)); + out = new DerOutputStream(); + out.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x01), temp); + temp = new DerOutputStream(); + temp.putInteger(BigInteger.valueOf(msgType)); + out.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x02), temp); + if (pAData != null && pAData.length > 0) { + temp = new DerOutputStream(); + for (int i = 0; i < pAData.length; i++) { + temp.write(pAData[i].asn1Encode()); + } + bytes = new DerOutputStream(); + bytes.write(DerValue.tag_SequenceOf, temp); + out.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x03), bytes); + } + out.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x04), reqBody.asn1Encode(msgType)); + bytes = new DerOutputStream(); + bytes.write(DerValue.tag_Sequence, out); + out = new DerOutputStream(); + out.write(DerValue.createTag(DerValue.TAG_APPLICATION, + true, (byte) msgType), bytes); + return out.toByteArray(); + } + + public byte[] asn1EncodeReqBody() throws Asn1Exception, IOException { + return reqBody.asn1Encode(msgType); + } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/KrbCredInfo.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/KrbCredInfo.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/KrbCredInfo.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/KrbCredInfo.java 2015-01-20 02:20:42.000000000 +0000 @@ -110,7 +110,7 @@ * @exception RealmException if an error occurs while parsing a Realm object. */ public KrbCredInfo(DerValue encoding) - throws Asn1Exception, IOException, RealmException{ + throws Asn1Exception, IOException, RealmException{ if (encoding.getTag() != DerValue.tag_Sequence) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); } @@ -159,25 +159,25 @@ Vector v = new Vector (); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), key.asn1Encode())); if (prealm != null) - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), prealm.asn1Encode())); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), prealm.asn1Encode())); if (pname != null) - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), pname.asn1Encode())); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), pname.asn1Encode())); if (flags != null) - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), flags.asn1Encode())); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), flags.asn1Encode())); if (authtime != null) - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x04), authtime.asn1Encode())); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x04), authtime.asn1Encode())); if (starttime != null) - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x05), starttime.asn1Encode())); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x05), starttime.asn1Encode())); if (endtime != null) - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x06), endtime.asn1Encode())); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x06), endtime.asn1Encode())); if (renewTill != null) - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x07), renewTill.asn1Encode())); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x07), renewTill.asn1Encode())); if (srealm != null) - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x08), srealm.asn1Encode())); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x08), srealm.asn1Encode())); if (sname != null) - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x09), sname.asn1Encode())); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x09), sname.asn1Encode())); if (caddr != null) - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x0A), caddr.asn1Encode())); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x0A), caddr.asn1Encode())); DerValue der[] = new DerValue[v.size()]; v.copyInto(der); DerOutputStream out = new DerOutputStream(); diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/KRBCred.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/KRBCred.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/KRBCred.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/KRBCred.java 2015-01-20 02:20:42.000000000 +0000 @@ -55,128 +55,134 @@ * * http://www.ietf.org/rfc/rfc4120.txt. */ - public class KRBCred { - public Ticket[] tickets = null; - public EncryptedData encPart; - - private int pvno; - private int msgType; - public KRBCred(Ticket[] new_tickets, EncryptedData new_encPart) throws IOException { - pvno = Krb5.PVNO; - msgType = Krb5.KRB_CRED; - if (new_tickets != null) { - tickets = new Ticket[new_tickets.length]; - for (int i = 0; i < new_tickets.length; i++) { - if (new_tickets[i] == null) { - throw new IOException("Cannot create a KRBCred"); - } else { - tickets[i] = (Ticket)new_tickets[i].clone(); - } - } + public Ticket[] tickets = null; + public EncryptedData encPart; + private int pvno; + private int msgType; + + public KRBCred(Ticket[] new_tickets, EncryptedData new_encPart) throws IOException { + pvno = Krb5.PVNO; + msgType = Krb5.KRB_CRED; + if (new_tickets != null) { + tickets = new Ticket[new_tickets.length]; + for (int i = 0; i < new_tickets.length; i++) { + if (new_tickets[i] == null) { + throw new IOException("Cannot create a KRBCred"); + } else { + tickets[i] = (Ticket) new_tickets[i].clone(); } - encPart = new_encPart; + } } + encPart = new_encPart; + } - public KRBCred(byte[] data) throws Asn1Exception, - RealmException, KrbApErrException, IOException { - init(new DerValue(data)); - } - - public KRBCred(DerValue encoding) throws Asn1Exception, - RealmException, KrbApErrException, IOException { - init(encoding); - } - - /** - * Initializes an KRBCred object. - * @param encoding a single DER-encoded value. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - * @exception KrbApErrException if the value read from the DER-encoded data - * stream does not match the pre-defined value. - * @exception RealmException if an error occurs while parsing a Realm object. - */ - private void init(DerValue encoding) throws Asn1Exception, - RealmException, KrbApErrException, IOException { - if (((encoding.getTag() & (byte)0x1F) != (byte)0x16) - || (encoding.isApplication() != true) - || (encoding.isConstructed() != true)) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); + public KRBCred(byte[] data) throws Asn1Exception, + RealmException, KrbApErrException, IOException { + init(new DerValue(data)); + } + + public KRBCred(DerValue encoding) throws Asn1Exception, + RealmException, KrbApErrException, IOException { + init(encoding); + } + + /** + * Initializes an KRBCred object. + * @param encoding a single DER-encoded value. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + * @exception KrbApErrException if the value read from the DER-encoded data + * stream does not match the pre-defined value. + * @exception RealmException if an error occurs while parsing a Realm object. + */ + private void init(DerValue encoding) throws Asn1Exception, + RealmException, KrbApErrException, IOException { + if (((encoding.getTag() & (byte) 0x1F) != (byte) 0x16) + || (encoding.isApplication() != true) + || (encoding.isConstructed() != true)) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } DerValue der, subDer; - der = encoding.getData().getDerValue(); - if (der.getTag() != DerValue.tag_Sequence) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - subDer = der.getData().getDerValue(); - if ((subDer.getTag() & 0x1F) == 0x00) { - pvno = subDer.getData().getBigInteger().intValue(); - if (pvno != Krb5.PVNO) { + der = encoding.getData().getDerValue(); + if (der.getTag() != DerValue.tag_Sequence) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & 0x1F) == 0x00) { + pvno = subDer.getData().getBigInteger().intValue(); + if (pvno != Krb5.PVNO) { throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION); - } - } - else - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - subDer = der.getData().getDerValue(); - if ((subDer.getTag() & 0x1F) == 0x01) { - msgType = subDer.getData().getBigInteger().intValue(); - if (msgType != Krb5.KRB_CRED) + } + } else { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + subDer = der.getData().getDerValue(); + if ((subDer.getTag() & 0x1F) == 0x01) { + msgType = subDer.getData().getBigInteger().intValue(); + if (msgType != Krb5.KRB_CRED) { throw new KrbApErrException(Krb5.KRB_AP_ERR_MSG_TYPE); - } - else - throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + } else { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } subDer = der.getData().getDerValue(); - if ((subDer.getTag() & 0x1F) == 0x02) { - DerValue subsubDer = subDer.getData().getDerValue(); + if ((subDer.getTag() & 0x1F) == 0x02) { + DerValue subsubDer = subDer.getData().getDerValue(); if (subsubDer.getTag() != DerValue.tag_SequenceOf) { - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - } - Vector v = new Vector (); + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + Vector v = new Vector(); while (subsubDer.getData().available() > 0) { - v.addElement(new Ticket(subsubDer.getData().getDerValue())); - } + v.addElement(new Ticket(subsubDer.getData().getDerValue())); + } if (v.size() > 0) { - tickets = new Ticket[v.size()]; - v.copyInto(tickets); - } - } - else - throw new Asn1Exception(Krb5.ASN1_BAD_ID); - encPart = EncryptedData.parse(der.getData(), (byte)0x03, false); - - if (der.getData().available() > 0) - throw new Asn1Exception(Krb5.ASN1_BAD_ID); + tickets = new Ticket[v.size()]; + v.copyInto(tickets); + } + } else { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); } + encPart = EncryptedData.parse(der.getData(), (byte) 0x03, false); + if (der.getData().available() > 0) { + throw new Asn1Exception(Krb5.ASN1_BAD_ID); + } + } - /** - * Encodes an KRBCred object. - * @return the data of encoded EncAPRepPart object. - * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. - * @exception IOException if an I/O error occurs while reading encoded data. - */ - public byte[] asn1Encode() throws Asn1Exception, IOException { + /** + * Encodes an KRBCred object. + * @return the data of encoded EncAPRepPart object. + * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. + * @exception IOException if an I/O error occurs while reading encoded data. + */ + public byte[] asn1Encode() throws Asn1Exception, IOException { DerOutputStream temp, bytes, out; temp = new DerOutputStream(); temp.putInteger(BigInteger.valueOf(pvno)); out = new DerOutputStream(); - out.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), temp); - temp = new DerOutputStream(); - temp.putInteger(BigInteger.valueOf(msgType)); - out.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), temp); + out.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x00), temp); temp = new DerOutputStream(); - for (int i = 0; i < tickets.length; i++) { - temp.write(tickets[i].asn1Encode()); - } + temp.putInteger(BigInteger.valueOf(msgType)); + out.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x01), temp); + temp = new DerOutputStream(); + for (int i = 0; i < tickets.length; i++) { + temp.write(tickets[i].asn1Encode()); + } bytes = new DerOutputStream(); bytes.write(DerValue.tag_SequenceOf, temp); - out.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), bytes); - out.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), encPart.asn1Encode()); + out.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x02), bytes); + out.write(DerValue.createTag(DerValue.TAG_CONTEXT, + true, (byte) 0x03), encPart.asn1Encode()); bytes = new DerOutputStream(); bytes.write(DerValue.tag_Sequence, out); - out = new DerOutputStream(); - out.write(DerValue.createTag(DerValue.TAG_APPLICATION, true, (byte)0x16), bytes); - return out.toByteArray(); - } - + out = new DerOutputStream(); + out.write(DerValue.createTag(DerValue.TAG_APPLICATION, + true, (byte) 0x16), bytes); + return out.toByteArray(); + } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/util/KrbDataInputStream.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/util/KrbDataInputStream.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/internal/util/KrbDataInputStream.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/internal/util/KrbDataInputStream.java 2015-01-20 02:20:42.000000000 +0000 @@ -55,15 +55,33 @@ public KrbDataInputStream(InputStream is){ super(is); } + + /** + * Reads a length value which is represented in 4 bytes from + * this input stream. The value must be positive. + * @return the length value represented by this byte array. + * @throws IOException if there are not enough bytes or it represents + * a negative value + */ + final public int readLength4() throws IOException { + int len = read(4); + if (len < 0) { + throw new IOException("Invalid encoding"); + } + return len; + } + /** * Reads up to the specific number of bytes from this input stream. * @param num the number of bytes to be read. * @return the int value of this byte array. - * @exception IOException. + * @throws IOException if there are not enough bytes */ - public int read(int num) throws IOException{ + public int read(int num) throws IOException { byte[] bytes = new byte[num]; - read(bytes, 0, num); + if (read(bytes, 0, num) != num) { + throw new IOException("Premature end of stream reached"); + } int result = 0; for (int i = 0; i < num; i++) { if (bigEndian) { diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/KrbTgsReq.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/KrbTgsReq.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/krb5/KrbTgsReq.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/krb5/KrbTgsReq.java 2015-01-20 02:20:42.000000000 +0000 @@ -74,107 +74,107 @@ null); // EncryptionKey subSessionKey } - // Called by Credentials, KrbCred - KrbTgsReq( - KDCOptions options, - Credentials asCreds, - PrincipalName sname, - KerberosTime from, - KerberosTime till, - KerberosTime rtime, - int[] eTypes, - HostAddresses addresses, - AuthorizationData authorizationData, - Ticket[] additionalTickets, - EncryptionKey subKey) throws KrbException, IOException { - - princName = asCreds.client; - servName = sname; - ctime = new KerberosTime(KerberosTime.NOW); - - - // check if they are valid arguments. The optional fields - // should be consistent with settings in KDCOptions. - if (options.get(KDCOptions.FORWARDABLE) && - (!(asCreds.flags.get(Krb5.TKT_OPTS_FORWARDABLE)))) { - throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); - } - if (options.get(KDCOptions.FORWARDED)) { - if (!(asCreds.flags.get(KDCOptions.FORWARDABLE))) - throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); - } - if (options.get(KDCOptions.PROXIABLE) && - (!(asCreds.flags.get(Krb5.TKT_OPTS_PROXIABLE)))) { - throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); - } - if (options.get(KDCOptions.PROXY)) { - if (!(asCreds.flags.get(KDCOptions.PROXIABLE))) - throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); - } - if (options.get(KDCOptions.ALLOW_POSTDATE) && - (!(asCreds.flags.get(Krb5.TKT_OPTS_MAY_POSTDATE)))) { - throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); - } - if (options.get(KDCOptions.RENEWABLE) && - (!(asCreds.flags.get(Krb5.TKT_OPTS_RENEWABLE)))) { - throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); - } - - if (options.get(KDCOptions.POSTDATED)) { - if (!(asCreds.flags.get(KDCOptions.POSTDATED))) - throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); - } else { - if (from != null) from = null; - } - if (options.get(KDCOptions.RENEWABLE)) { - if (!(asCreds.flags.get(KDCOptions.RENEWABLE))) - throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); - } else { - if (rtime != null) rtime = null; - } - if (options.get(KDCOptions.ENC_TKT_IN_SKEY)) { - if (additionalTickets == null) - throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); - // in TGS_REQ there could be more than one additional - // tickets, but in file-based credential cache, - // there is only one additional ticket field. - secondTicket = additionalTickets[0]; - } else { - if (additionalTickets != null) - additionalTickets = null; - } - - tgsReqMessg = createRequest( - options, - asCreds.ticket, - asCreds.key, - ctime, - princName, - princName.getRealm(), - servName, - from, - till, - rtime, - eTypes, - addresses, - authorizationData, - additionalTickets, - subKey); - obuf = tgsReqMessg.asn1Encode(); - - // XXX We need to revisit this to see if can't move it - // up such that FORWARDED flag set in the options - // is included in the marshaled request. - /* - * If this is based on a forwarded ticket, record that in the - * options, because the returned TgsRep will contain the - * FORWARDED flag set. - */ - if (asCreds.flags.get(KDCOptions.FORWARDED)) - options.set(KDCOptions.FORWARDED, true); - + // Called by Credentials, KrbCred + KrbTgsReq( + KDCOptions options, + Credentials asCreds, + PrincipalName sname, + KerberosTime from, + KerberosTime till, + KerberosTime rtime, + int[] eTypes, + HostAddresses addresses, + AuthorizationData authorizationData, + Ticket[] additionalTickets, + EncryptionKey subKey) throws KrbException, IOException { + + princName = asCreds.client; + servName = sname; + ctime = new KerberosTime(KerberosTime.NOW); + + + // check if they are valid arguments. The optional fields + // should be consistent with settings in KDCOptions. + if (options.get(KDCOptions.FORWARDABLE) && + (!(asCreds.flags.get(Krb5.TKT_OPTS_FORWARDABLE)))) { + throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); + } + if (options.get(KDCOptions.FORWARDED)) { + if (!(asCreds.flags.get(KDCOptions.FORWARDABLE))) + throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); + } + if (options.get(KDCOptions.PROXIABLE) && + (!(asCreds.flags.get(Krb5.TKT_OPTS_PROXIABLE)))) { + throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); + } + if (options.get(KDCOptions.PROXY)) { + if (!(asCreds.flags.get(KDCOptions.PROXIABLE))) + throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); + } + if (options.get(KDCOptions.ALLOW_POSTDATE) && + (!(asCreds.flags.get(Krb5.TKT_OPTS_MAY_POSTDATE)))) { + throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); + } + if (options.get(KDCOptions.RENEWABLE) && + (!(asCreds.flags.get(Krb5.TKT_OPTS_RENEWABLE)))) { + throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); + } + if (options.get(KDCOptions.POSTDATED)) { + if (!(asCreds.flags.get(KDCOptions.POSTDATED))) + throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); + } else { + if (from != null) from = null; } + if (options.get(KDCOptions.RENEWABLE)) { + if (!(asCreds.flags.get(KDCOptions.RENEWABLE))) + throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); + } else { + if (rtime != null) rtime = null; + } + if (options.get(KDCOptions.ENC_TKT_IN_SKEY)) { + if (additionalTickets == null) + throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); + // in TGS_REQ there could be more than one additional + // tickets, but in file-based credential cache, + // there is only one additional ticket field. + secondTicket = additionalTickets[0]; + } else { + if (additionalTickets != null) + additionalTickets = null; + } + + tgsReqMessg = createRequest( + options, + asCreds.ticket, + asCreds.key, + ctime, + princName, + princName.getRealm(), + servName, + from, + till, + rtime, + eTypes, + addresses, + authorizationData, + additionalTickets, + subKey); + obuf = tgsReqMessg.asn1Encode(); + + // XXX We need to revisit this to see if can't move it + // up such that FORWARDED flag set in the options + // is included in the marshaled request. + /* + * If this is based on a forwarded ticket, record that in the + * options, because the returned TgsRep will contain the + * FORWARDED flag set. + */ + if (asCreds.flags.get(KDCOptions.FORWARDED)) + options.set(KDCOptions.FORWARDED, true); + + + } /** * Sends a TGS request to the realm of the target. diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/pkcs11/JarVerifier.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/pkcs11/JarVerifier.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/pkcs11/JarVerifier.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/pkcs11/JarVerifier.java 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.security.pkcs11; - -// NOTE: this class is duplicated amongst SunJCE, SunPKCS11, and SunMSCAPI. -// All files should be kept in sync. - -import java.io.*; -import java.util.*; -import java.util.jar.*; -import java.net.URL; -import java.net.JarURLConnection; -import java.net.MalformedURLException; - -import java.security.*; -import java.security.cert.*; -import java.security.cert.Certificate; - -/** - * This class verifies JAR files (and any supporting JAR files), and - * determines whether they may be used in this implementation. - * - * The JCE in OpenJDK has an open cryptographic interface, meaning it - * does not restrict which providers can be used. Compliance with - * United States export controls and with local law governing the - * import/export of products incorporating the JCE in the OpenJDK is - * the responsibility of the licensee. - * - * @since 1.7 - */ -final class JarVerifier { - - private static final boolean debug = false; - - /** - * Verify the JAR file is signed by an entity which has a certificate - * issued by a trusted CA. - * - * Note: this is a temporary method and will change soon to use the - * exception chaining mechanism, which can provide more details - * as to why the verification failed. - * - * @param c the class to be verified. - * @return true if verification is successful. - */ - static boolean verify(final Class c) { - return true; - } -} diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java 2015-01-20 02:17:44.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -374,24 +374,6 @@ return sb.toString(); } - // set to true once self verification is complete - private static volatile boolean integrityVerified; - - static void verifySelfIntegrity(Class c) { - if (integrityVerified) { - return; - } - doVerifySelfIntegrity(c); - } - - private static synchronized void doVerifySelfIntegrity(Class c) { - integrityVerified = JarVerifier.verify(c); - if (integrityVerified == false) { - throw new ProviderException - ("The SunPKCS11 provider may have been tampered with."); - } - } - public boolean equals(Object obj) { return this == obj; } @@ -878,7 +860,6 @@ if (type == MD) { return new P11Digest(token, algorithm, mechanism); } else if (type == CIP) { - verifySelfIntegrity(getClass()); if (algorithm.startsWith("RSA")) { return new P11RSACipher(token, algorithm, mechanism); } else { @@ -887,12 +868,10 @@ } else if (type == SIG) { return new P11Signature(token, algorithm, mechanism); } else if (type == MAC) { - verifySelfIntegrity(getClass()); return new P11Mac(token, algorithm, mechanism); } else if (type == KPG) { return new P11KeyPairGenerator(token, algorithm, mechanism); } else if (type == KA) { - verifySelfIntegrity(getClass()); if (algorithm.equals("ECDH")) { return new P11ECDHKeyAgreement(token, algorithm, mechanism); } else { @@ -901,11 +880,8 @@ } else if (type == KF) { return token.getKeyFactory(algorithm); } else if (type == SKF) { - verifySelfIntegrity(getClass()); return new P11SecretKeyFactory(token, algorithm); } else if (type == KG) { - verifySelfIntegrity(getClass()); - // reference equality if (algorithm == "SunTlsRsaPremasterSecret") { return new P11TlsRsaPremasterSecretGenerator( diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/AlgorithmChecker.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/AlgorithmChecker.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/AlgorithmChecker.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/AlgorithmChecker.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,95 +25,336 @@ package sun.security.provider.certpath; -import java.util.Set; import java.util.Collection; -import java.util.Locale; +import java.util.Collections; +import java.util.Set; +import java.util.EnumSet; +import java.util.HashSet; +import java.math.BigInteger; +import java.security.PublicKey; +import java.security.KeyFactory; +import java.security.AlgorithmParameters; +import java.security.NoSuchAlgorithmException; +import java.security.GeneralSecurityException; import java.security.cert.Certificate; -import java.security.cert.X509Certificate; import java.security.cert.X509CRL; -import java.security.cert.CertPathValidatorException; +import java.security.cert.X509Certificate; import java.security.cert.PKIXCertPathChecker; - +import java.security.cert.TrustAnchor; +import java.security.cert.CRLException; +import java.security.cert.CertificateException; +import java.security.cert.CertPathValidatorException; +import java.io.IOException; +import java.security.interfaces.*; +import java.security.spec.*; + +import sun.security.util.AlgorithmConstraints; +import sun.security.util.CryptoPrimitive; +import sun.security.util.DisabledAlgorithmConstraints; +import sun.security.x509.X509CertImpl; +import sun.security.x509.X509CRLImpl; import sun.security.x509.AlgorithmId; /** - * AlgorithmChecker is a PKIXCertPathChecker that checks that - * the signature algorithm of the specified certificate is not disabled. + * A PKIXCertPathChecker implementation to check whether a + * specified certificate contains the required algorithm constraints. + *

    + * Certificate fields such as the subject public key, the signature + * algorithm, key usage, extended key usage, etc. need to conform to + * the specified algorithm constraints. * - * @author Xuelei Fan + * @see PKIXCertPathChecker + * @see PKIXParameters */ final public class AlgorithmChecker extends PKIXCertPathChecker { - // the disabled algorithms - private static final String[] disabledAlgorithms = new String[] {"md2"}; - - // singleton instance - static final AlgorithmChecker INSTANCE = new AlgorithmChecker(); + private final AlgorithmConstraints constraints; + private final PublicKey trustedPubKey; + private PublicKey prevPubKey; + + private final static Set SIGNATURE_PRIMITIVE_SET = + EnumSet.of(CryptoPrimitive.SIGNATURE); + + private final static DisabledAlgorithmConstraints + certPathDefaultConstraints = new DisabledAlgorithmConstraints( + DisabledAlgorithmConstraints.PROPERTY_CERTPATH_DISABLED_ALGS); /** - * Default Constructor + * Create a new AlgorithmChecker with the algorithm + * constraints specified in security property + * "jdk.certpath.disabledAlgorithms". + * + * @param anchor the trust anchor selected to validate the target + * certificate */ - private AlgorithmChecker() { - // do nothing + public AlgorithmChecker(TrustAnchor anchor) { + this(anchor, certPathDefaultConstraints); } /** - * Return a AlgorithmChecker instance. + * Create a new AlgorithmChecker with the + * given {@code AlgorithmConstraints}. + *

    + * Note that this constructor will be used to check a certification + * path where the trust anchor is unknown, or a certificate list which may + * contain the trust anchor. This constructor is used by SunJSSE. + * + * @param constraints the algorithm constraints (or null) */ - static AlgorithmChecker getInstance() { - return INSTANCE; + public AlgorithmChecker(AlgorithmConstraints constraints) { + this.prevPubKey = null; + this.trustedPubKey = null; + this.constraints = constraints; } /** - * Initializes the internal state of the checker from parameters - * specified in the constructor. + * Create a new AlgorithmChecker with the + * given TrustAnchor and AlgorithmConstraints. + * + * @param anchor the trust anchor selected to validate the target + * certificate + * @param constraints the algorithm constraints (or null) + * + * @throws IllegalArgumentException if the anchor is null */ + public AlgorithmChecker(TrustAnchor anchor, + AlgorithmConstraints constraints) { + + if (anchor == null) { + throw new IllegalArgumentException( + "The trust anchor cannot be null"); + } + + if (anchor.getTrustedCert() != null) { + this.trustedPubKey = anchor.getTrustedCert().getPublicKey(); + } else { + this.trustedPubKey = anchor.getCAPublicKey(); + } + + this.prevPubKey = trustedPubKey; + this.constraints = constraints; + } + + @Override public void init(boolean forward) throws CertPathValidatorException { - // do nothing + // Note that this class does not support forward mode. + if (!forward) { + if (trustedPubKey != null) { + prevPubKey = trustedPubKey; + } else { + prevPubKey = null; + } + } else { + throw new + CertPathValidatorException("forward checking not supported"); + } } + @Override public boolean isForwardCheckingSupported() { + // Note that as this class does not support forward mode, the method + // will always returns false. return false; } + @Override public Set getSupportedExtensions() { return null; } - /** - * Checks the signature algorithm of the specified certificate. - */ - public void check(Certificate cert, Collection unresolvedCritExts) + @Override + public void check(Certificate cert, + Collection unresolvedCritExts) throws CertPathValidatorException { - check(cert); - } - public static void check(Certificate cert) - throws CertPathValidatorException { - X509Certificate xcert = (X509Certificate)cert; - check(xcert.getSigAlgName()); - } + if (!(cert instanceof X509Certificate) || constraints == null) { + // ignore the check for non-x.509 certificate or null constraints + return; + } + + X509CertImpl x509Cert = null; + try { + x509Cert = X509CertImpl.toImpl((X509Certificate)cert); + } catch (CertificateException ce) { + throw new CertPathValidatorException(ce); + } + + PublicKey currPubKey = x509Cert.getPublicKey(); + String currSigAlg = x509Cert.getSigAlgName(); + + AlgorithmId algorithmId = null; + try { + algorithmId = (AlgorithmId)x509Cert.get(X509CertImpl.SIG_ALG); + } catch (CertificateException ce) { + throw new CertPathValidatorException(ce); + } + + AlgorithmParameters currSigAlgParams = algorithmId.getParameters(); + + // Check the current signature algorithm + if (!constraints.permits( + SIGNATURE_PRIMITIVE_SET, + currSigAlg, currSigAlgParams)) { + throw new CertPathValidatorException( + "Algorithm constraints check failed: " + currSigAlg); + } + + // check the key usage and key size + boolean[] keyUsage = x509Cert.getKeyUsage(); + if (keyUsage != null && keyUsage.length < 9) { + throw new CertPathValidatorException( + "incorrect KeyUsage extension"); + } + + if (keyUsage != null) { + Set primitives = + EnumSet.noneOf(CryptoPrimitive.class); + + if (keyUsage[0] || keyUsage[1] || keyUsage[5] || keyUsage[6]) { + // keyUsage[0]: KeyUsage.digitalSignature + // keyUsage[1]: KeyUsage.nonRepudiation + // keyUsage[5]: KeyUsage.keyCertSign + // keyUsage[6]: KeyUsage.cRLSign + primitives.add(CryptoPrimitive.SIGNATURE); + } + + if (keyUsage[2]) { // KeyUsage.keyEncipherment + primitives.add(CryptoPrimitive.KEY_ENCAPSULATION); + } + + if (keyUsage[3]) { // KeyUsage.dataEncipherment + primitives.add(CryptoPrimitive.PUBLIC_KEY_ENCRYPTION); + } + + if (keyUsage[4]) { // KeyUsage.keyAgreement + primitives.add(CryptoPrimitive.KEY_AGREEMENT); + } + + // KeyUsage.encipherOnly and KeyUsage.decipherOnly are + // undefined in the absence of the keyAgreement bit. + + if (!primitives.isEmpty()) { + if (!constraints.permits(primitives, currPubKey)) { + throw new CertPathValidatorException( + "algorithm constraints check failed"); + } + } + } + + // Check with previous cert for signature algorithm and public key + if (prevPubKey != null) { + if (currSigAlg != null) { + if (!constraints.permits( + SIGNATURE_PRIMITIVE_SET, + currSigAlg, prevPubKey, currSigAlgParams)) { + throw new CertPathValidatorException( + "Algorithm constraints check failed: " + currSigAlg); + } + } + + // Inherit key parameters from previous key + if (currPubKey instanceof DSAPublicKey && + ((DSAPublicKey)currPubKey).getParams() == null) { + // Inherit DSA parameters from previous key + if (!(prevPubKey instanceof DSAPublicKey)) { + throw new CertPathValidatorException("Input key is not " + + "of a appropriate type for inheriting parameters"); + } + + DSAParams params = ((DSAPublicKey)prevPubKey).getParams(); + if (params == null) { + throw new CertPathValidatorException( + "Key parameters missing"); + } + + try { + BigInteger y = ((DSAPublicKey)currPubKey).getY(); + KeyFactory kf = KeyFactory.getInstance("DSA"); + DSAPublicKeySpec ks = new DSAPublicKeySpec(y, + params.getP(), + params.getQ(), + params.getG()); + currPubKey = kf.generatePublic(ks); + } catch (GeneralSecurityException e) { + throw new CertPathValidatorException("Unable to generate " + + "key with inherited parameters: " + e.getMessage(), e); + } + } + } + + // reset the previous public key + prevPubKey = currPubKey; - static void check(AlgorithmId aid) throws CertPathValidatorException { - check(aid.getName()); + // check the extended key usage, ignore the check now + // List extendedKeyUsages = x509Cert.getExtendedKeyUsage(); + + // DO NOT remove any unresolved critical extensions } - static void check(X509CRL crl) throws CertPathValidatorException { - check(crl.getSigAlgName()); + /** + * Try to set the trust anchor of the checker. + *

    + * If there is no trust anchor specified and the checker has not started, + * set the trust anchor. + * + * @param anchor the trust anchor selected to validate the target + * certificate + */ + void trySetTrustAnchor(TrustAnchor anchor) { + // Don't bother if the check has started or trust anchor has already + // specified. + if (prevPubKey == null) { + if (anchor == null) { + throw new IllegalArgumentException( + "The trust anchor cannot be null"); + } + + // Don't bother to change the trustedPubKey. + if (anchor.getTrustedCert() != null) { + prevPubKey = anchor.getTrustedCert().getPublicKey(); + } else { + prevPubKey = anchor.getCAPublicKey(); + } + } } - private static void check(String algName) - throws CertPathValidatorException { + /** + * Check the signature algorithm with the specified public key. + * + * @param key the public key to verify the CRL signature + * @param crl the target CRL + */ + static void check(PublicKey key, X509CRL crl) + throws CertPathValidatorException { - String lowerCaseAlgName = algName.toLowerCase(Locale.ENGLISH); + X509CRLImpl x509CRLImpl = null; + try { + x509CRLImpl = X509CRLImpl.toImpl(crl); + } catch (CRLException ce) { + throw new CertPathValidatorException(ce); + } - for (String disabled : disabledAlgorithms) { - // checking the signature algorithm name - if (lowerCaseAlgName.indexOf(disabled) != -1) { - throw new CertPathValidatorException( - "algorithm check failed: " + algName + " is disabled"); - } + AlgorithmId algorithmId = x509CRLImpl.getSigAlgId(); + check(key, algorithmId); + } + + /** + * Check the signature algorithm with the specified public key. + * + * @param key the public key to verify the CRL signature + * @param crl the target CRL + */ + static void check(PublicKey key, AlgorithmId algorithmId) + throws CertPathValidatorException { + String sigAlgName = algorithmId.getName(); + AlgorithmParameters sigAlgParams = algorithmId.getParameters(); + + if (!certPathDefaultConstraints.permits( + SIGNATURE_PRIMITIVE_SET, sigAlgName, key, sigAlgParams)) { + throw new CertPathValidatorException( + "algorithm check failed: " + sigAlgName + " is disabled"); } } } + diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/DistributionPointFetcher.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/DistributionPointFetcher.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/DistributionPointFetcher.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/DistributionPointFetcher.java 2015-01-20 02:20:42.000000000 +0000 @@ -288,16 +288,6 @@ X500Name certIssuer = (X500Name) certImpl.getIssuerDN(); X500Name crlIssuer = (X500Name) crlImpl.getIssuerDN(); - // check the crl signature algorithm - try { - AlgorithmChecker.check(crl); - } catch (CertPathValidatorException cpve) { - if (debug != null) { - debug.println("CRL signature algorithm check failed: " + cpve); - } - return false; - } - // if crlIssuer is set, verify that it matches the issuer of the // CRL and the CRL contains an IDP extension with the indirectCRL // boolean asserted. Otherwise, verify that the CRL issuer matches the @@ -541,6 +531,16 @@ } } + // check the crl signature algorithm + try { + AlgorithmChecker.check(prevKey, crl); + } catch (CertPathValidatorException cpve) { + if (debug != null) { + debug.println("CRL signature algorithm check failed: " + cpve); + } + return false; + } + // validate the signature on the CRL try { crl.verify(prevKey, provider); diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/ForwardBuilder.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/ForwardBuilder.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/ForwardBuilder.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/ForwardBuilder.java 2015-01-20 02:20:42.000000000 +0000 @@ -682,11 +682,6 @@ /* we don't perform any validation of the trusted cert */ if (!isTrustedCert) { /* - * check that the signature algorithm is not disabled. - */ - AlgorithmChecker.check(cert); - - /* * Check CRITICAL private extensions for user checkers that * support forward checking (forwardCheckers) and remove * ones we know how to check. diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/OCSPChecker.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/OCSPChecker.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/OCSPChecker.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/OCSPChecker.java 2015-01-20 02:20:42.000000000 +0000 @@ -298,27 +298,13 @@ } if (filter != null) { List certStores = pkixParams.getCertStores(); - AlgorithmChecker algChecker = - AlgorithmChecker.getInstance(); for (CertStore certStore : certStores) { try { for (Certificate selected : certStore.getCertificates(filter)) { - try { - // don't bother to trust algorithm disabled - // certificate as responder - algChecker.check(selected); - responderCert = (X509Certificate) selected; seekResponderCert = false; // done break; - } catch (CertPathValidatorException cpve) { - if (DEBUG != null) { - DEBUG.println( - "OCSP responder certificate " + - "algorithm check failed: " + cpve); - } - } } if (!seekResponderCert) { break; @@ -341,6 +327,10 @@ "(set using the OCSP security properties)."); } + // The algorithm constraints of the OCSP trusted responder certificate + // does not need to be checked in this code. The constraints will be + // checked when the responder's certificate is validated. + CertId certId = null; OCSPResponse response = null; try { diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/OCSPResponse.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/OCSPResponse.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/OCSPResponse.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/OCSPResponse.java 2015-01-20 02:20:42.000000000 +0000 @@ -31,6 +31,7 @@ import java.security.cert.CertificateException; import java.security.cert.CertificateParsingException; import java.security.cert.CertPathValidatorException; +import java.security.cert.TrustAnchor; import java.security.cert.X509Certificate; import java.util.Collections; import java.util.Date; @@ -316,9 +317,6 @@ // signatureAlgorithmId AlgorithmId sigAlgId = AlgorithmId.parse(seqTmp[1]); - // check that the signature algorithm is not disabled. - AlgorithmChecker.check(sigAlgId); - // signature byte[] signature = seqTmp[2].getBitString(); X509CertImpl[] x509Certs = null; @@ -356,9 +354,6 @@ } else if (cert.getIssuerX500Principal().equals( responderCert.getSubjectX500Principal())) { - // check the certificate algorithm - AlgorithmChecker.check(cert); - // Check for the OCSPSigning key purpose try { List keyPurposes = cert.getExtendedKeyUsage(); @@ -375,6 +370,13 @@ "OCSP responses", cpe); } + // Check algorithm constraints specified in security property + // "jdk.certpath.disabledAlgorithms". + AlgorithmChecker algChecker = new AlgorithmChecker( + new TrustAnchor(responderCert, null)); + algChecker.init(false); + algChecker.check(cert, Collections.emptySet()); + // verify the signature try { cert.verify(responderCert.getPublicKey()); @@ -390,6 +392,10 @@ // Confirm that the signed response was generated using the public // key from the trusted responder cert if (responderCert != null) { + // Check algorithm constraints specified in security property + // "jdk.certpath.disabledAlgorithms". + AlgorithmChecker.check(responderCert.getPublicKey(), sigAlgId); + if (!verifyResponse(responseDataDer, responderCert, sigAlgId, signature)) { throw new CertPathValidatorException( diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java 2015-01-20 02:20:42.000000000 +0000 @@ -279,7 +279,7 @@ int certPathLen = certList.size(); basicChecker = new BasicChecker(anchor, testDate, sigProvider, false); - AlgorithmChecker algorithmChecker= AlgorithmChecker.getInstance(); + AlgorithmChecker algorithmChecker = new AlgorithmChecker(anchor); KeyChecker keyChecker = new KeyChecker(certPathLen, pkixParam.getTargetCertConstraints()); ConstraintsChecker constraintsChecker = diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/ReverseBuilder.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/ReverseBuilder.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/ReverseBuilder.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/ReverseBuilder.java 2015-01-20 02:20:42.000000000 +0000 @@ -350,9 +350,6 @@ currentState.untrustedChecker.check(cert, Collections.emptySet()); - /* check that the signature algorithm is not disabled. */ - AlgorithmChecker.check(cert); - /* * check for looping - abort a loop if * ((we encounter the same certificate twice) AND @@ -471,9 +468,16 @@ if (unresolvedCritExts == null) { unresolvedCritExts = Collections.emptySet(); } + + /* + * Check that the signature algorithm is not disabled. + */ + currentState.algorithmChecker.check(cert, unresolvedCritExts); + for (PKIXCertPathChecker checker : currentState.userCheckers) { checker.check(cert, unresolvedCritExts); } + /* * Look at the remaining extensions and remove any ones we have * already checked. If there are any left, throw an exception! diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/ReverseState.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/ReverseState.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/ReverseState.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/ReverseState.java 2015-01-20 02:20:42.000000000 +0000 @@ -99,6 +99,9 @@ /* the untrusted certificates checker */ UntrustedChecker untrustedChecker; + /* the algorithm checker */ + AlgorithmChecker algorithmChecker; + /* the trust anchor used to validate the path */ TrustAnchor trustAnchor; @@ -244,6 +247,14 @@ updateState(anchor.getCAPublicKey(), caName); } + // The user specified AlgorithmChecker may not be + // able to set the trust anchor until now. + for (PKIXCertPathChecker checker : userCheckers) { + if (checker instanceof AlgorithmChecker) { + ((AlgorithmChecker)checker).trySetTrustAnchor(anchor); + } + } + init = false; } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/SunCertPathBuilder.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/SunCertPathBuilder.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/provider/certpath/SunCertPathBuilder.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/provider/certpath/SunCertPathBuilder.java 2015-01-20 02:20:42.000000000 +0000 @@ -304,6 +304,7 @@ // init the crl checker currentState.crlChecker = new CrlRevocationChecker(null, buildParams, null, onlyEECert); + currentState.algorithmChecker = new AlgorithmChecker(anchor); currentState.untrustedChecker = new UntrustedChecker(); try { depthFirstSearchReverse(null, currentState, @@ -479,29 +480,41 @@ userCheckers.add(mustCheck, policyChecker); mustCheck++; + // add the algorithm checker + userCheckers.add(mustCheck, + new AlgorithmChecker(builder.trustAnchor)); + mustCheck++; + if (nextState.keyParamsNeeded()) { PublicKey rootKey = cert.getPublicKey(); if (builder.trustAnchor.getTrustedCert() == null) { rootKey = builder.trustAnchor.getCAPublicKey(); if (debug != null) - debug.println("SunCertPathBuilder.depthFirstSearchForward" + - " using buildParams public key: " + - rootKey.toString()); + debug.println( + "SunCertPathBuilder.depthFirstSearchForward " + + "using buildParams public key: " + + rootKey.toString()); } TrustAnchor anchor = new TrustAnchor (cert.getSubjectX500Principal(), rootKey, null); + + // add the basic checker basicChecker = new BasicChecker(anchor, builder.date, buildParams.getSigProvider(), true); userCheckers.add(mustCheck, basicChecker); mustCheck++; + + // add the crl revocation checker if (buildParams.isRevocationEnabled()) { userCheckers.add(mustCheck, new CrlRevocationChecker (anchor, buildParams, null, onlyEECert)); mustCheck++; } } + // Why we don't need BasicChecker and CrlRevocationChecker + // if nextState.keyParamsNeeded() is false? for (int i=0; i= mustCheck && + currChecker instanceof AlgorithmChecker) { + ((AlgorithmChecker)currChecker). + trySetTrustAnchor(builder.trustAnchor); + } } try { diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/smartcardio/CardImpl.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/smartcardio/CardImpl.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/smartcardio/CardImpl.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/smartcardio/CardImpl.java 2015-01-20 03:07:59.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,9 +26,9 @@ package sun.security.smartcardio; import java.nio.ByteBuffer; - +import java.security.AccessController; +import java.security.PrivilegedAction; import javax.smartcardio.*; - import static sun.security.smartcardio.PCSC.*; /** @@ -62,6 +62,19 @@ // thread holding exclusive access to the card, or null private volatile Thread exclusiveThread; + // used for platform specific logic + private static final boolean isWindows; + + static { + final String osName = AccessController.doPrivileged( + new PrivilegedAction() { + public String run() { + return System.getProperty("os.name"); + } + }); + isWindows = osName.startsWith("Windows"); + } + CardImpl(TerminalImpl terminal, String protocol) throws PCSCException { this.terminal = terminal; int sharingMode = SCARD_SHARE_SHARED; @@ -74,7 +87,12 @@ connectProtocol = SCARD_PROTOCOL_T1; } else if (protocol.equalsIgnoreCase("direct")) { // testing - connectProtocol = 0; + + // MSDN states that the preferred protocol can be zero, but doesn't + // specify whether other values are allowed. + // pcsc-lite implementation expects the preferred protocol to be non zero. + connectProtocol = isWindows ? 0 : SCARD_PROTOCOL_RAW; + sharingMode = SCARD_SHARE_DIRECT; } else { throw new IllegalArgumentException("Unsupported protocol " + protocol); @@ -214,7 +232,7 @@ SCardEndTransaction(cardId, SCARD_LEAVE_CARD); } catch (PCSCException e) { handleError(e); - throw new CardException("beginExclusive() failed", e); + throw new CardException("endExclusive() failed", e); } finally { exclusiveThread = null; } @@ -237,6 +255,12 @@ } } + private static final boolean invertReset = + Boolean.parseBoolean( + java.security.AccessController.doPrivileged( + new sun.security.action.GetPropertyAction( + "sun.security.smartcardio.invertCardReset", "true"))); + public void disconnect(boolean reset) throws CardException { if (reset) { checkSecurity("reset"); @@ -245,8 +269,12 @@ return; } checkExclusive(); + // to preserve old behaviour, don't change flag until here + if (invertReset) { + reset = !reset; + } try { - SCardDisconnect(cardId, (reset ? SCARD_LEAVE_CARD : SCARD_RESET_CARD)); + SCardDisconnect(cardId, (reset ? SCARD_RESET_CARD : SCARD_LEAVE_CARD)); } catch (PCSCException e) { throw new CardException("disconnect() failed", e); } finally { diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/CipherBox.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/CipherBox.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/CipherBox.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/CipherBox.java 2015-01-20 02:20:42.000000000 +0000 @@ -28,6 +28,7 @@ import java.io.ByteArrayInputStream; import java.io.IOException; +import java.util.Hashtable; import java.security.*; import javax.crypto.*; @@ -50,6 +51,37 @@ * Individual instances are obtained by calling the static method * newCipherBox(), which should only be invoked by BulkCipher.newCipher(). * + * In RFC 2246, with bock ciphers in CBC mode, the Initialization + * Vector (IV) for the first record is generated with the other keys + * and secrets when the security parameters are set. The IV for + * subsequent records is the last ciphertext block from the previous + * record. + * + * In RFC 4346, the implicit Initialization Vector (IV) is replaced + * with an explicit IV to protect against CBC attacks. RFC 4346 + * recommends two algorithms used to generated the per-record IV. + * The implementation uses the algorithm (2)(b), as described at + * section 6.2.3.2 of RFC 4346. + * + * The usage of IV in CBC block cipher can be illustrated in + * the following diagrams. + * + * (random) + * R P1 IV C1 + * | | | | + * SIV---+ |-----+ |-... |----- |------ + * | | | | | | | | + * +----+ | +----+ | +----+ | +----+ | + * | Ek | | + Ek + | | Dk | | | Dk | | + * +----+ | +----+ | +----+ | +----+ | + * | | | | | | | | + * |----| |----| SIV--+ |----| |-... + * | | | | + * IV C1 R P1 + * (discard) + * + * CBC Encryption CBC Decryption + * * NOTE that any ciphering involved in key exchange (e.g. with RSA) is * handled separately. * @@ -81,6 +113,21 @@ private final boolean isCBCMode; /** + * secure random + */ + private SecureRandom random; + + /** + * Fixed masks of various block size, as the initial decryption IVs + * for TLS 1.1 or later. + * + * For performance, we do not use random IVs. As the initial decryption + * IVs will be discarded by TLS decryption processes, so the fixed masks + * do not hurt cryptographic strength. + */ + private static Hashtable masks; + + /** * NULL cipherbox. Identity operation, no encryption. */ private CipherBox() { @@ -96,15 +143,38 @@ * implementation could be found. */ private CipherBox(ProtocolVersion protocolVersion, BulkCipher bulkCipher, - SecretKey key, IvParameterSpec iv, boolean encrypt) - throws NoSuchAlgorithmException { + SecretKey key, IvParameterSpec iv, SecureRandom random, + boolean encrypt) throws NoSuchAlgorithmException { try { this.protocolVersion = protocolVersion; this.cipher = JsseJce.getCipher(bulkCipher.transformation); int mode = encrypt ? Cipher.ENCRYPT_MODE : Cipher.DECRYPT_MODE; this.isCBCMode = bulkCipher.isCBCMode; - cipher.init(mode, key, iv); - // do not call getBlockSize until after init() + + if (random == null) { + random = JsseJce.getSecureRandom(); + } + this.random = random; + + /* + * RFC 4346 recommends two algorithms used to generated the + * per-record IV. The implementation uses the algorithm (2)(b), + * as described at section 6.2.3.2 of RFC 4346. + * + * As we don't care about the initial IV value for TLS 1.1 or + * later, so if the "iv" parameter is null, we use the default + * value generated by Cipher.init() for encryption, and a fixed + * mask for decryption. + */ + if (iv == null && bulkCipher.ivSize != 0 && + mode == Cipher.DECRYPT_MODE && + protocolVersion.v >= ProtocolVersion.TLS11.v) { + iv = getFixedMask(bulkCipher.ivSize); + } + + cipher.init(mode, key, iv, random); + + // Do not call getBlockSize until after init() // otherwise we would disrupt JCE delayed provider selection blockSize = cipher.getBlockSize(); // some providers implement getBlockSize() incorrectly @@ -126,19 +196,37 @@ * Factory method to obtain a new CipherBox object. */ static CipherBox newCipherBox(ProtocolVersion version, BulkCipher cipher, - SecretKey key, IvParameterSpec iv, boolean encrypt) - throws NoSuchAlgorithmException { + SecretKey key, IvParameterSpec iv, SecureRandom random, + boolean encrypt) throws NoSuchAlgorithmException { if (cipher.allowed == false) { throw new NoSuchAlgorithmException("Unsupported cipher " + cipher); } + if (cipher == B_NULL) { return NULL; } else { - return new CipherBox(version, cipher, key, iv, encrypt); + return new CipherBox(version, cipher, key, iv, random, encrypt); } } /* + * Get a fixed mask, as the initial decryption IVs for TLS 1.1 or later. + */ + private static IvParameterSpec getFixedMask(int ivSize) { + if (masks == null) { + masks = new Hashtable(5); + } + + IvParameterSpec iv = masks.get(ivSize); + if (iv == null) { + iv = new IvParameterSpec(new byte[ivSize]); + masks.put(ivSize, iv); + } + + return iv; + } + + /* * Encrypts a block of data, returning the size of the * resulting block. */ @@ -146,8 +234,26 @@ if (cipher == null) { return len; } + try { if (blockSize != 0) { + // TLSv1.1 needs a IV block + if (protocolVersion.v >= ProtocolVersion.TLS11.v) { + // generate a random number + byte[] prefix = new byte[blockSize]; + random.nextBytes(prefix); + + // move forward the plaintext + System.arraycopy(buf, offset, + buf, offset + prefix.length, len); + + // prefix the plaintext + System.arraycopy(prefix, 0, + buf, offset, prefix.length); + + len += prefix.length; + } + len = addPadding(buf, offset, len, blockSize); } if (debug != null && Debug.isOn("plaintext")) { @@ -196,6 +302,34 @@ int pos = bb.position(); if (blockSize != 0) { + // TLSv1.1 needs a IV block + if (protocolVersion.v >= ProtocolVersion.TLS11.v) { + // generate a random number + byte[] prefix = new byte[blockSize]; + random.nextBytes(prefix); + + // move forward the plaintext + byte[] buf = null; + int limit = bb.limit(); + if (bb.hasArray()) { + buf = bb.array(); + System.arraycopy(buf, pos, + buf, pos + prefix.length, limit - pos); + bb.limit(limit + prefix.length); + } else { + buf = new byte[limit - pos]; + bb.get(buf, 0, limit - pos); + bb.position(pos + prefix.length); + bb.limit(limit + prefix.length); + bb.put(buf); + } + bb.position(pos); + + // prefix the plaintext + bb.put(prefix); + bb.position(pos); + } + // addPadding adjusts pos/limit len = addPadding(bb, blockSize); bb.position(pos); @@ -243,12 +377,26 @@ /* * Decrypts a block of data, returning the size of the * resulting block if padding was required. + * + * For SSLv3 and TLSv1.0, with block ciphers in CBC mode the + * Initialization Vector (IV) for the first record is generated by + * the handshake protocol, the IV for subsequent records is the + * last ciphertext block from the previous record. + * + * From TLSv1.1, the implicit IV is replaced with an explicit IV to + * protect against CBC attacks. + * + * Differentiating between bad_record_mac and decryption_failed alerts + * may permit certain attacks against CBC mode. It is preferable to + * uniformly use the bad_record_mac alert to hide the specific type of + * the error. */ int decrypt(byte[] buf, int offset, int len, int tagLen) throws BadPaddingException { if (cipher == null) { return len; } + try { int newLen = cipher.update(buf, offset, len, buf, offset); if (newLen != len) { @@ -271,6 +419,18 @@ if (blockSize != 0) { newLen = removePadding( buf, offset, newLen, tagLen, blockSize, protocolVersion); + + if (protocolVersion.v >= ProtocolVersion.TLS11.v) { + if (newLen < blockSize) { + throw new BadPaddingException("invalid explicit IV"); + } + + // discards the first cipher block, the IV component. + System.arraycopy(buf, offset + blockSize, + buf, offset, newLen - blockSize); + + newLen -= blockSize; + } } return newLen; } catch (ShortBufferException e) { @@ -285,6 +445,8 @@ * point to the end of the decrypted/depadded data. The initial * limit and new limit may be different, given we may * have stripped off some padding bytes. + * + * @see decrypt(byte[], int, int) */ int decrypt(ByteBuffer bb, int tagLen) throws BadPaddingException { @@ -300,7 +462,6 @@ * Decrypt "in-place". */ int pos = bb.position(); - ByteBuffer dup = bb.duplicate(); int newLen = cipher.update(dup, bb); if (newLen != len) { @@ -329,6 +490,34 @@ bb.position(pos); newLen = removePadding( bb, tagLen, blockSize, protocolVersion); + + if (protocolVersion.v >= ProtocolVersion.TLS11.v) { + if (newLen < blockSize) { + throw new BadPaddingException("invalid explicit IV"); + } + + // discards the first cipher block, the IV component. + byte[] buf = null; + int limit = bb.limit(); + if (bb.hasArray()) { + int arrayOffset = bb.arrayOffset(); + buf = bb.array(); + System.arraycopy(buf, arrayOffset + pos + blockSize, + buf, arrayOffset + pos, limit - pos - blockSize); + bb.limit(limit - blockSize); + } else { + buf = new byte[limit - pos - blockSize]; + bb.position(pos + blockSize); + bb.get(buf); + bb.position(pos); + bb.put(buf); + bb.limit(limit - blockSize); + } + + // reset the position to the end of the decrypted data + limit = bb.limit(); + bb.position(limit); + } } return newLen; } catch (ShortBufferException e) { diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/CipherSuite.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/CipherSuite.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/CipherSuite.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/CipherSuite.java 2015-01-20 02:20:42.000000000 +0000 @@ -30,6 +30,7 @@ import java.security.NoSuchAlgorithmException; import java.security.InvalidKeyException; +import java.security.SecureRandom; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; @@ -112,8 +113,18 @@ // true iff implemented and enabled at compile time final boolean allowed; + // obsoleted since protocol version + final int obsoleted; + + // supported since protocol version + final int supported; + + /** + * Constructor for implemented CipherSuites. + */ private CipherSuite(String name, int id, int priority, - KeyExchange keyExchange, BulkCipher cipher, boolean allowed) { + KeyExchange keyExchange, BulkCipher cipher, + boolean allowed, int obsoleted, int supported) { this.name = name; this.id = id; this.priority = priority; @@ -136,8 +147,13 @@ allowed &= keyExchange.allowed; allowed &= cipher.allowed; this.allowed = allowed; + this.obsoleted = obsoleted; + this.supported = supported; } + /** + * Constructor for unimplemented CipherSuites. + */ private CipherSuite(String name, int id) { this.name = name; this.id = id; @@ -148,6 +164,8 @@ this.cipher = null; this.macAlg = null; this.exportable = false; + this.obsoleted = ProtocolVersion.LIMIT_MAX_VALUE; + this.supported = ProtocolVersion.LIMIT_MIN_VALUE; } /** @@ -197,10 +215,12 @@ if (s == null) { throw new IllegalArgumentException("Name must not be null"); } + CipherSuite c = nameMap.get(s); if ((c == null) || (c.allowed == false)) { throw new IllegalArgumentException("Unsupported ciphersuite " + s); } + return c; } @@ -227,10 +247,17 @@ return nameMap.values(); } + /* + * Use this method when all of the values need to be specified. + * This is primarily used when defining a new ciphersuite for + * TLS 1.2+ that doesn't use the "default" PRF. + */ private static void add(String name, int id, int priority, - KeyExchange keyExchange, BulkCipher cipher, boolean allowed) { + KeyExchange keyExchange, BulkCipher cipher, + boolean allowed, int obsoleted, int supported) { + CipherSuite c = new CipherSuite(name, id, priority, keyExchange, - cipher, allowed); + cipher, allowed, obsoleted, supported); if (idMap.put(id, c) != null) { throw new RuntimeException("Duplicate ciphersuite definition: " + id + ", " + name); @@ -243,6 +270,31 @@ } } + /* + * Use this method when there is no lower protocol limit where this + * suite can be used. + */ + private static void add(String name, int id, int priority, + KeyExchange keyExchange, BulkCipher cipher, + boolean allowed, int obsoleted) { + add(name, id, priority, keyExchange, cipher, allowed, obsoleted, + ProtocolVersion.LIMIT_MIN_VALUE); + } + + /* + * Use this method when there is no upper protocol limit. That is, + * suites which have not been obsoleted. + */ + private static void add(String name, int id, int priority, + KeyExchange keyExchange, BulkCipher cipher, boolean allowed) { + add(name, id, priority, keyExchange, + cipher, allowed, ProtocolVersion.LIMIT_MAX_VALUE); + } + + /* + * Use this method to define an unimplemented suite. This provides + * a number<->name mapping that can be used for debugging. + */ private static void add(String name, int id) { CipherSuite c = new CipherSuite(name, id); if (idMap.put(id, c) != null) { @@ -381,10 +433,11 @@ * * @exception NoSuchAlgorithmException if anything goes wrong */ - CipherBox newCipher(ProtocolVersion version, - SecretKey key, IvParameterSpec iv, + CipherBox newCipher(ProtocolVersion version, SecretKey key, + IvParameterSpec iv, SecureRandom random, boolean encrypt) throws NoSuchAlgorithmException { - return CipherBox.newCipherBox(version, this, key, iv, encrypt); + return CipherBox.newCipherBox(version, this, + key, iv, random, encrypt); } /** @@ -403,6 +456,7 @@ if (this == B_AES_256) { return isAvailable(this); } + // always available return true; } @@ -422,7 +476,8 @@ (new byte[cipher.expandedKeySize], cipher.algorithm); IvParameterSpec iv = new IvParameterSpec(new byte[cipher.ivSize]); - cipher.newCipher(ProtocolVersion.DEFAULT, key, iv, true); + cipher.newCipher(ProtocolVersion.DEFAULT, + key, iv, null, true); b = Boolean.TRUE; } catch (NoSuchAlgorithmException e) { b = Boolean.FALSE; @@ -519,6 +574,239 @@ // N: ciphersuites only allowed if we are not in FIPS mode final boolean N = (SunJSSE.isFIPS() == false); + /* + * TLS Cipher Suite Registry, as of August 2010. + * + * http://www.iana.org/assignments/tls-parameters/tls-parameters.xml + * + * Range Registration Procedures Notes + * 000-191 Standards Action Refers to value of first byte + * 192-254 Specification Required Refers to value of first byte + * 255 Reserved for Private Use Refers to value of first byte + * + * Value Description Reference + * 0x00,0x00 TLS_NULL_WITH_NULL_NULL [RFC5246] + * 0x00,0x01 TLS_RSA_WITH_NULL_MD5 [RFC5246] + * 0x00,0x02 TLS_RSA_WITH_NULL_SHA [RFC5246] + * 0x00,0x03 TLS_RSA_EXPORT_WITH_RC4_40_MD5 [RFC4346] + * 0x00,0x04 TLS_RSA_WITH_RC4_128_MD5 [RFC5246] + * 0x00,0x05 TLS_RSA_WITH_RC4_128_SHA [RFC5246] + * 0x00,0x06 TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 [RFC4346] + * 0x00,0x07 TLS_RSA_WITH_IDEA_CBC_SHA [RFC5469] + * 0x00,0x08 TLS_RSA_EXPORT_WITH_DES40_CBC_SHA [RFC4346] + * 0x00,0x09 TLS_RSA_WITH_DES_CBC_SHA [RFC5469] + * 0x00,0x0A TLS_RSA_WITH_3DES_EDE_CBC_SHA [RFC5246] + * 0x00,0x0B TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA [RFC4346] + * 0x00,0x0C TLS_DH_DSS_WITH_DES_CBC_SHA [RFC5469] + * 0x00,0x0D TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA [RFC5246] + * 0x00,0x0E TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA [RFC4346] + * 0x00,0x0F TLS_DH_RSA_WITH_DES_CBC_SHA [RFC5469] + * 0x00,0x10 TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA [RFC5246] + * 0x00,0x11 TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA [RFC4346] + * 0x00,0x12 TLS_DHE_DSS_WITH_DES_CBC_SHA [RFC5469] + * 0x00,0x13 TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA [RFC5246] + * 0x00,0x14 TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA [RFC4346] + * 0x00,0x15 TLS_DHE_RSA_WITH_DES_CBC_SHA [RFC5469] + * 0x00,0x16 TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA [RFC5246] + * 0x00,0x17 TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 [RFC4346] + * 0x00,0x18 TLS_DH_anon_WITH_RC4_128_MD5 [RFC5246] + * 0x00,0x19 TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA [RFC4346] + * 0x00,0x1A TLS_DH_anon_WITH_DES_CBC_SHA [RFC5469] + * 0x00,0x1B TLS_DH_anon_WITH_3DES_EDE_CBC_SHA [RFC5246] + * 0x00,0x1C-1D Reserved to avoid conflicts with SSLv3 [RFC5246] + * 0x00,0x1E TLS_KRB5_WITH_DES_CBC_SHA [RFC2712] + * 0x00,0x1F TLS_KRB5_WITH_3DES_EDE_CBC_SHA [RFC2712] + * 0x00,0x20 TLS_KRB5_WITH_RC4_128_SHA [RFC2712] + * 0x00,0x21 TLS_KRB5_WITH_IDEA_CBC_SHA [RFC2712] + * 0x00,0x22 TLS_KRB5_WITH_DES_CBC_MD5 [RFC2712] + * 0x00,0x23 TLS_KRB5_WITH_3DES_EDE_CBC_MD5 [RFC2712] + * 0x00,0x24 TLS_KRB5_WITH_RC4_128_MD5 [RFC2712] + * 0x00,0x25 TLS_KRB5_WITH_IDEA_CBC_MD5 [RFC2712] + * 0x00,0x26 TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA [RFC2712] + * 0x00,0x27 TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA [RFC2712] + * 0x00,0x28 TLS_KRB5_EXPORT_WITH_RC4_40_SHA [RFC2712] + * 0x00,0x29 TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5 [RFC2712] + * 0x00,0x2A TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5 [RFC2712] + * 0x00,0x2B TLS_KRB5_EXPORT_WITH_RC4_40_MD5 [RFC2712] + * 0x00,0x2C TLS_PSK_WITH_NULL_SHA [RFC4785] + * 0x00,0x2D TLS_DHE_PSK_WITH_NULL_SHA [RFC4785] + * 0x00,0x2E TLS_RSA_PSK_WITH_NULL_SHA [RFC4785] + * 0x00,0x2F TLS_RSA_WITH_AES_128_CBC_SHA [RFC5246] + * 0x00,0x30 TLS_DH_DSS_WITH_AES_128_CBC_SHA [RFC5246] + * 0x00,0x31 TLS_DH_RSA_WITH_AES_128_CBC_SHA [RFC5246] + * 0x00,0x32 TLS_DHE_DSS_WITH_AES_128_CBC_SHA [RFC5246] + * 0x00,0x33 TLS_DHE_RSA_WITH_AES_128_CBC_SHA [RFC5246] + * 0x00,0x34 TLS_DH_anon_WITH_AES_128_CBC_SHA [RFC5246] + * 0x00,0x35 TLS_RSA_WITH_AES_256_CBC_SHA [RFC5246] + * 0x00,0x36 TLS_DH_DSS_WITH_AES_256_CBC_SHA [RFC5246] + * 0x00,0x37 TLS_DH_RSA_WITH_AES_256_CBC_SHA [RFC5246] + * 0x00,0x38 TLS_DHE_DSS_WITH_AES_256_CBC_SHA [RFC5246] + * 0x00,0x39 TLS_DHE_RSA_WITH_AES_256_CBC_SHA [RFC5246] + * 0x00,0x3A TLS_DH_anon_WITH_AES_256_CBC_SHA [RFC5246] + * 0x00,0x3B TLS_RSA_WITH_NULL_SHA256 [RFC5246] + * 0x00,0x3C TLS_RSA_WITH_AES_128_CBC_SHA256 [RFC5246] + * 0x00,0x3D TLS_RSA_WITH_AES_256_CBC_SHA256 [RFC5246] + * 0x00,0x3E TLS_DH_DSS_WITH_AES_128_CBC_SHA256 [RFC5246] + * 0x00,0x3F TLS_DH_RSA_WITH_AES_128_CBC_SHA256 [RFC5246] + * 0x00,0x40 TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 [RFC5246] + * 0x00,0x41 TLS_RSA_WITH_CAMELLIA_128_CBC_SHA [RFC5932] + * 0x00,0x42 TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA [RFC5932] + * 0x00,0x43 TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA [RFC5932] + * 0x00,0x44 TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA [RFC5932] + * 0x00,0x45 TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA [RFC5932] + * 0x00,0x46 TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA [RFC5932] + * 0x00,0x47-4F Reserved to avoid conflicts with + * deployed implementations [Pasi_Eronen] + * 0x00,0x50-58 Reserved to avoid conflicts [Pasi Eronen] + * 0x00,0x59-5C Reserved to avoid conflicts with + * deployed implementations [Pasi_Eronen] + * 0x00,0x5D-5F Unassigned + * 0x00,0x60-66 Reserved to avoid conflicts with widely + * deployed implementations [Pasi_Eronen] + * 0x00,0x67 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 [RFC5246] + * 0x00,0x68 TLS_DH_DSS_WITH_AES_256_CBC_SHA256 [RFC5246] + * 0x00,0x69 TLS_DH_RSA_WITH_AES_256_CBC_SHA256 [RFC5246] + * 0x00,0x6A TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 [RFC5246] + * 0x00,0x6B TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 [RFC5246] + * 0x00,0x6C TLS_DH_anon_WITH_AES_128_CBC_SHA256 [RFC5246] + * 0x00,0x6D TLS_DH_anon_WITH_AES_256_CBC_SHA256 [RFC5246] + * 0x00,0x6E-83 Unassigned + * 0x00,0x84 TLS_RSA_WITH_CAMELLIA_256_CBC_SHA [RFC5932] + * 0x00,0x85 TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA [RFC5932] + * 0x00,0x86 TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA [RFC5932] + * 0x00,0x87 TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA [RFC5932] + * 0x00,0x88 TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA [RFC5932] + * 0x00,0x89 TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA [RFC5932] + * 0x00,0x8A TLS_PSK_WITH_RC4_128_SHA [RFC4279] + * 0x00,0x8B TLS_PSK_WITH_3DES_EDE_CBC_SHA [RFC4279] + * 0x00,0x8C TLS_PSK_WITH_AES_128_CBC_SHA [RFC4279] + * 0x00,0x8D TLS_PSK_WITH_AES_256_CBC_SHA [RFC4279] + * 0x00,0x8E TLS_DHE_PSK_WITH_RC4_128_SHA [RFC4279] + * 0x00,0x8F TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA [RFC4279] + * 0x00,0x90 TLS_DHE_PSK_WITH_AES_128_CBC_SHA [RFC4279] + * 0x00,0x91 TLS_DHE_PSK_WITH_AES_256_CBC_SHA [RFC4279] + * 0x00,0x92 TLS_RSA_PSK_WITH_RC4_128_SHA [RFC4279] + * 0x00,0x93 TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA [RFC4279] + * 0x00,0x94 TLS_RSA_PSK_WITH_AES_128_CBC_SHA [RFC4279] + * 0x00,0x95 TLS_RSA_PSK_WITH_AES_256_CBC_SHA [RFC4279] + * 0x00,0x96 TLS_RSA_WITH_SEED_CBC_SHA [RFC4162] + * 0x00,0x97 TLS_DH_DSS_WITH_SEED_CBC_SHA [RFC4162] + * 0x00,0x98 TLS_DH_RSA_WITH_SEED_CBC_SHA [RFC4162] + * 0x00,0x99 TLS_DHE_DSS_WITH_SEED_CBC_SHA [RFC4162] + * 0x00,0x9A TLS_DHE_RSA_WITH_SEED_CBC_SHA [RFC4162] + * 0x00,0x9B TLS_DH_anon_WITH_SEED_CBC_SHA [RFC4162] + * 0x00,0x9C TLS_RSA_WITH_AES_128_GCM_SHA256 [RFC5288] + * 0x00,0x9D TLS_RSA_WITH_AES_256_GCM_SHA384 [RFC5288] + * 0x00,0x9E TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 [RFC5288] + * 0x00,0x9F TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 [RFC5288] + * 0x00,0xA0 TLS_DH_RSA_WITH_AES_128_GCM_SHA256 [RFC5288] + * 0x00,0xA1 TLS_DH_RSA_WITH_AES_256_GCM_SHA384 [RFC5288] + * 0x00,0xA2 TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 [RFC5288] + * 0x00,0xA3 TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 [RFC5288] + * 0x00,0xA4 TLS_DH_DSS_WITH_AES_128_GCM_SHA256 [RFC5288] + * 0x00,0xA5 TLS_DH_DSS_WITH_AES_256_GCM_SHA384 [RFC5288] + * 0x00,0xA6 TLS_DH_anon_WITH_AES_128_GCM_SHA256 [RFC5288] + * 0x00,0xA7 TLS_DH_anon_WITH_AES_256_GCM_SHA384 [RFC5288] + * 0x00,0xA8 TLS_PSK_WITH_AES_128_GCM_SHA256 [RFC5487] + * 0x00,0xA9 TLS_PSK_WITH_AES_256_GCM_SHA384 [RFC5487] + * 0x00,0xAA TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 [RFC5487] + * 0x00,0xAB TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 [RFC5487] + * 0x00,0xAC TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 [RFC5487] + * 0x00,0xAD TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 [RFC5487] + * 0x00,0xAE TLS_PSK_WITH_AES_128_CBC_SHA256 [RFC5487] + * 0x00,0xAF TLS_PSK_WITH_AES_256_CBC_SHA384 [RFC5487] + * 0x00,0xB0 TLS_PSK_WITH_NULL_SHA256 [RFC5487] + * 0x00,0xB1 TLS_PSK_WITH_NULL_SHA384 [RFC5487] + * 0x00,0xB2 TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 [RFC5487] + * 0x00,0xB3 TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 [RFC5487] + * 0x00,0xB4 TLS_DHE_PSK_WITH_NULL_SHA256 [RFC5487] + * 0x00,0xB5 TLS_DHE_PSK_WITH_NULL_SHA384 [RFC5487] + * 0x00,0xB6 TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 [RFC5487] + * 0x00,0xB7 TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 [RFC5487] + * 0x00,0xB8 TLS_RSA_PSK_WITH_NULL_SHA256 [RFC5487] + * 0x00,0xB9 TLS_RSA_PSK_WITH_NULL_SHA384 [RFC5487] + * 0x00,0xBA TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 [RFC5932] + * 0x00,0xBB TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 [RFC5932] + * 0x00,0xBC TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 [RFC5932] + * 0x00,0xBD TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 [RFC5932] + * 0x00,0xBE TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 [RFC5932] + * 0x00,0xBF TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256 [RFC5932] + * 0x00,0xC0 TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 [RFC5932] + * 0x00,0xC1 TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 [RFC5932] + * 0x00,0xC2 TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 [RFC5932] + * 0x00,0xC3 TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 [RFC5932] + * 0x00,0xC4 TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 [RFC5932] + * 0x00,0xC5 TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256 [RFC5932] + * 0x00,0xC6-FE Unassigned + * 0x00,0xFF TLS_EMPTY_RENEGOTIATION_INFO_SCSV [RFC5746] + * 0x01-BF,* Unassigned + * 0xC0,0x01 TLS_ECDH_ECDSA_WITH_NULL_SHA [RFC4492] + * 0xC0,0x02 TLS_ECDH_ECDSA_WITH_RC4_128_SHA [RFC4492] + * 0xC0,0x03 TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA [RFC4492] + * 0xC0,0x04 TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA [RFC4492] + * 0xC0,0x05 TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA [RFC4492] + * 0xC0,0x06 TLS_ECDHE_ECDSA_WITH_NULL_SHA [RFC4492] + * 0xC0,0x07 TLS_ECDHE_ECDSA_WITH_RC4_128_SHA [RFC4492] + * 0xC0,0x08 TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA [RFC4492] + * 0xC0,0x09 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA [RFC4492] + * 0xC0,0x0A TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA [RFC4492] + * 0xC0,0x0B TLS_ECDH_RSA_WITH_NULL_SHA [RFC4492] + * 0xC0,0x0C TLS_ECDH_RSA_WITH_RC4_128_SHA [RFC4492] + * 0xC0,0x0D TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA [RFC4492] + * 0xC0,0x0E TLS_ECDH_RSA_WITH_AES_128_CBC_SHA [RFC4492] + * 0xC0,0x0F TLS_ECDH_RSA_WITH_AES_256_CBC_SHA [RFC4492] + * 0xC0,0x10 TLS_ECDHE_RSA_WITH_NULL_SHA [RFC4492] + * 0xC0,0x11 TLS_ECDHE_RSA_WITH_RC4_128_SHA [RFC4492] + * 0xC0,0x12 TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA [RFC4492] + * 0xC0,0x13 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA [RFC4492] + * 0xC0,0x14 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA [RFC4492] + * 0xC0,0x15 TLS_ECDH_anon_WITH_NULL_SHA [RFC4492] + * 0xC0,0x16 TLS_ECDH_anon_WITH_RC4_128_SHA [RFC4492] + * 0xC0,0x17 TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA [RFC4492] + * 0xC0,0x18 TLS_ECDH_anon_WITH_AES_128_CBC_SHA [RFC4492] + * 0xC0,0x19 TLS_ECDH_anon_WITH_AES_256_CBC_SHA [RFC4492] + * 0xC0,0x1A TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA [RFC5054] + * 0xC0,0x1B TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA [RFC5054] + * 0xC0,0x1C TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA [RFC5054] + * 0xC0,0x1D TLS_SRP_SHA_WITH_AES_128_CBC_SHA [RFC5054] + * 0xC0,0x1E TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA [RFC5054] + * 0xC0,0x1F TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA [RFC5054] + * 0xC0,0x20 TLS_SRP_SHA_WITH_AES_256_CBC_SHA [RFC5054] + * 0xC0,0x21 TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA [RFC5054] + * 0xC0,0x22 TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA [RFC5054] + * 0xC0,0x23 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 [RFC5289] + * 0xC0,0x24 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 [RFC5289] + * 0xC0,0x25 TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 [RFC5289] + * 0xC0,0x26 TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 [RFC5289] + * 0xC0,0x27 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 [RFC5289] + * 0xC0,0x28 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 [RFC5289] + * 0xC0,0x29 TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 [RFC5289] + * 0xC0,0x2A TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 [RFC5289] + * 0xC0,0x2B TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 [RFC5289] + * 0xC0,0x2C TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 [RFC5289] + * 0xC0,0x2D TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 [RFC5289] + * 0xC0,0x2E TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 [RFC5289] + * 0xC0,0x2F TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 [RFC5289] + * 0xC0,0x30 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 [RFC5289] + * 0xC0,0x31 TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 [RFC5289] + * 0xC0,0x32 TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 [RFC5289] + * 0xC0,0x33 TLS_ECDHE_PSK_WITH_RC4_128_SHA [RFC5489] + * 0xC0,0x34 TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA [RFC5489] + * 0xC0,0x35 TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA [RFC5489] + * 0xC0,0x36 TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA [RFC5489] + * 0xC0,0x37 TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 [RFC5489] + * 0xC0,0x38 TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 [RFC5489] + * 0xC0,0x39 TLS_ECDHE_PSK_WITH_NULL_SHA [RFC5489] + * 0xC0,0x3A TLS_ECDHE_PSK_WITH_NULL_SHA256 [RFC5489] + * 0xC0,0x3B TLS_ECDHE_PSK_WITH_NULL_SHA384 [RFC5489] + * 0xC0,0x3C-FF Unassigned + * 0xC1-FD,* Unassigned + * 0xFE,0x00-FD Unassigned + * 0xFE,0xFE-FF Reserved to avoid conflicts with widely + * deployed implementations [Pasi_Eronen] + * 0xFF,0x00-FF Reserved for Private Use [RFC5246] + */ + add("SSL_NULL_WITH_NULL_NULL", 0x0000, 1, K_NULL, B_NULL, F); @@ -584,7 +872,6 @@ 0x0016, --p, K_DHE_RSA, B_3DES, T); add("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", 0x0013, --p, K_DHE_DSS, B_3DES, N); - add("SSL_RSA_WITH_DES_CBC_SHA", 0x0009, --p, K_RSA, B_DES, N); add("SSL_DHE_RSA_WITH_DES_CBC_SHA", @@ -592,13 +879,17 @@ add("SSL_DHE_DSS_WITH_DES_CBC_SHA", 0x0012, --p, K_DHE_DSS, B_DES, N); add("SSL_RSA_EXPORT_WITH_RC4_40_MD5", - 0x0003, --p, K_RSA_EXPORT, B_RC4_40, N); + 0x0003, --p, K_RSA_EXPORT, B_RC4_40, N, + ProtocolVersion.TLS11.v); add("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", - 0x0008, --p, K_RSA_EXPORT, B_DES_40, N); + 0x0008, --p, K_RSA_EXPORT, B_DES_40, N, + ProtocolVersion.TLS11.v); add("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", - 0x0014, --p, K_DHE_RSA, B_DES_40, N); + 0x0014, --p, K_DHE_RSA, B_DES_40, N, + ProtocolVersion.TLS11.v); add("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", - 0x0011, --p, K_DHE_DSS, B_DES_40, N); + 0x0011, --p, K_DHE_DSS, B_DES_40, N, + ProtocolVersion.TLS11.v); // Renegotiation protection request Signalling Cipher Suite Value (SCSV) add("TLS_EMPTY_RENEGOTIATION_INFO_SCSV", @@ -644,9 +935,11 @@ 0xC017, --p, K_ECDH_ANON, B_3DES, T); add("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", - 0x0017, --p, K_DH_ANON, B_RC4_40, N); + 0x0017, --p, K_DH_ANON, B_RC4_40, N, + ProtocolVersion.TLS11.v); add("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", - 0x0019, --p, K_DH_ANON, B_DES_40, N); + 0x0019, --p, K_DH_ANON, B_DES_40, N, + ProtocolVersion.TLS11.v); add("TLS_ECDH_anon_WITH_NULL_SHA", 0xC015, --p, K_ECDH_ANON, B_NULL, N); @@ -665,52 +958,212 @@ add("TLS_KRB5_WITH_DES_CBC_MD5", 0x0022, --p, K_KRB5, B_DES, N); add("TLS_KRB5_EXPORT_WITH_RC4_40_SHA", - 0x0028, --p, K_KRB5_EXPORT, B_RC4_40, N); + 0x0028, --p, K_KRB5_EXPORT, B_RC4_40, N, + ProtocolVersion.TLS11.v); add("TLS_KRB5_EXPORT_WITH_RC4_40_MD5", - 0x002b, --p, K_KRB5_EXPORT, B_RC4_40, N); + 0x002b, --p, K_KRB5_EXPORT, B_RC4_40, N, + ProtocolVersion.TLS11.v); add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", - 0x0026, --p, K_KRB5_EXPORT, B_DES_40, N); + 0x0026, --p, K_KRB5_EXPORT, B_DES_40, N, + ProtocolVersion.TLS11.v); add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5", - 0x0029, --p, K_KRB5_EXPORT, B_DES_40, N); + 0x0029, --p, K_KRB5_EXPORT, B_DES_40, N, + ProtocolVersion.TLS11.v); + + /* + * Other values from the TLS Cipher Suite Registry, as of August 2010. + * + * http://www.iana.org/assignments/tls-parameters/tls-parameters.xml + * + * Range Registration Procedures Notes + * 000-191 Standards Action Refers to value of first byte + * 192-254 Specification Required Refers to value of first byte + * 255 Reserved for Private Use Refers to value of first byte + */ // Register the names of a few additional CipherSuites. // Makes them show up as names instead of numbers in // the debug output. // remaining unsupported ciphersuites defined in RFC2246. - add("SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5", 0x0006); - add("SSL_RSA_WITH_IDEA_CBC_SHA", 0x0007); - add("SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA", 0x000b); - add("SSL_DH_DSS_WITH_DES_CBC_SHA", 0x000c); - add("SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA", 0x000d); - add("SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA", 0x000e); - add("SSL_DH_RSA_WITH_DES_CBC_SHA", 0x000f); - add("SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA", 0x0010); + add("SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5", 0x0006); + add("SSL_RSA_WITH_IDEA_CBC_SHA", 0x0007); + add("SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA", 0x000b); + add("SSL_DH_DSS_WITH_DES_CBC_SHA", 0x000c); + add("SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA", 0x000d); + add("SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA", 0x000e); + add("SSL_DH_RSA_WITH_DES_CBC_SHA", 0x000f); + add("SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA", 0x0010); // SSL 3.0 Fortezza ciphersuites - add("SSL_FORTEZZA_DMS_WITH_NULL_SHA", 0x001c); - add("SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA", 0x001d); + add("SSL_FORTEZZA_DMS_WITH_NULL_SHA", 0x001c); + add("SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA", 0x001d); // 1024/56 bit exportable ciphersuites from expired internet draft - add("SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA", 0x0062); - add("SSL_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA", 0x0063); - add("SSL_RSA_EXPORT1024_WITH_RC4_56_SHA", 0x0064); - add("SSL_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA", 0x0065); - add("SSL_DHE_DSS_WITH_RC4_128_SHA", 0x0066); + add("SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA", 0x0062); + add("SSL_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA", 0x0063); + add("SSL_RSA_EXPORT1024_WITH_RC4_56_SHA", 0x0064); + add("SSL_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA", 0x0065); + add("SSL_DHE_DSS_WITH_RC4_128_SHA", 0x0066); // Netscape old and new SSL 3.0 FIPS ciphersuites // see http://www.mozilla.org/projects/security/pki/nss/ssl/fips-ssl-ciphersuites.html - add("NETSCAPE_RSA_FIPS_WITH_3DES_EDE_CBC_SHA", 0xffe0); - add("NETSCAPE_RSA_FIPS_WITH_DES_CBC_SHA", 0xffe1); - add("SSL_RSA_FIPS_WITH_DES_CBC_SHA", 0xfefe); - add("SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA", 0xfeff); + add("NETSCAPE_RSA_FIPS_WITH_3DES_EDE_CBC_SHA", 0xffe0); + add("NETSCAPE_RSA_FIPS_WITH_DES_CBC_SHA", 0xffe1); + add("SSL_RSA_FIPS_WITH_DES_CBC_SHA", 0xfefe); + add("SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA", 0xfeff); // Unsupported Kerberos cipher suites from RFC 2712 - add("TLS_KRB5_WITH_IDEA_CBC_SHA", 0x0021); - add("TLS_KRB5_WITH_IDEA_CBC_MD5", 0x0025); - add("TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA", 0x0027); - add("TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5", 0x002a); - + add("TLS_KRB5_WITH_IDEA_CBC_SHA", 0x0021); + add("TLS_KRB5_WITH_IDEA_CBC_MD5", 0x0025); + add("TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA", 0x0027); + add("TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5", 0x002a); + + // Unsupported cipher suites from RFC 4162 + add("TLS_RSA_WITH_SEED_CBC_SHA", 0x0096); + add("TLS_DH_DSS_WITH_SEED_CBC_SHA", 0x0097); + add("TLS_DH_RSA_WITH_SEED_CBC_SHA", 0x0098); + add("TLS_DHE_DSS_WITH_SEED_CBC_SHA", 0x0099); + add("TLS_DHE_RSA_WITH_SEED_CBC_SHA", 0x009a); + add("TLS_DH_anon_WITH_SEED_CBC_SHA", 0x009b); + + // Unsupported cipher suites from RFC 4279 + add("TLS_PSK_WITH_RC4_128_SHA", 0x008a); + add("TLS_PSK_WITH_3DES_EDE_CBC_SHA", 0x008b); + add("TLS_PSK_WITH_AES_128_CBC_SHA", 0x008c); + add("TLS_PSK_WITH_AES_256_CBC_SHA", 0x008d); + add("TLS_DHE_PSK_WITH_RC4_128_SHA", 0x008e); + add("TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA", 0x008f); + add("TLS_DHE_PSK_WITH_AES_128_CBC_SHA", 0x0090); + add("TLS_DHE_PSK_WITH_AES_256_CBC_SHA", 0x0091); + add("TLS_RSA_PSK_WITH_RC4_128_SHA", 0x0092); + add("TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA", 0x0093); + add("TLS_RSA_PSK_WITH_AES_128_CBC_SHA", 0x0094); + add("TLS_RSA_PSK_WITH_AES_256_CBC_SHA", 0x0095); + + // Unsupported cipher suites from RFC 4785 + add("TLS_PSK_WITH_NULL_SHA", 0x002c); + add("TLS_DHE_PSK_WITH_NULL_SHA", 0x002d); + add("TLS_RSA_PSK_WITH_NULL_SHA", 0x002e); + + // Unsupported cipher suites from RFC 5246 + add("TLS_DH_DSS_WITH_AES_128_CBC_SHA", 0x0030); + add("TLS_DH_RSA_WITH_AES_128_CBC_SHA", 0x0031); + add("TLS_DH_DSS_WITH_AES_256_CBC_SHA", 0x0036); + add("TLS_DH_RSA_WITH_AES_256_CBC_SHA", 0x0037); + add("TLS_RSA_WITH_NULL_SHA256", 0x003b); + add("TLS_RSA_WITH_AES_128_CBC_SHA256", 0x003c); + add("TLS_RSA_WITH_AES_256_CBC_SHA256", 0x003d); + add("TLS_DH_DSS_WITH_AES_128_CBC_SHA256", 0x003e); + add("TLS_DH_RSA_WITH_AES_128_CBC_SHA256", 0x003f); + add("TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", 0x0040); + add("TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", 0x0067); + add("TLS_DH_DSS_WITH_AES_256_CBC_SHA256", 0x0068); + add("TLS_DH_RSA_WITH_AES_256_CBC_SHA256", 0x0069); + add("TLS_DHE_DSS_WITH_AES_256_CBC_SHA256", 0x006a); + add("TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", 0x006b); + add("TLS_DH_anon_WITH_AES_128_CBC_SHA256", 0x006c); + add("TLS_DH_anon_WITH_AES_256_CBC_SHA256", 0x006d); + + // Unsupported cipher suites from RFC 5288 + add("TLS_RSA_WITH_AES_128_GCM_SHA256", 0x009c); + add("TLS_RSA_WITH_AES_256_GCM_SHA384", 0x009d); + add("TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", 0x009e); + add("TLS_DHE_RSA_WITH_AES_256_GCM_SHA384", 0x009f); + add("TLS_DH_RSA_WITH_AES_128_GCM_SHA256", 0x00a0); + add("TLS_DH_RSA_WITH_AES_256_GCM_SHA384", 0x00a1); + add("TLS_DHE_DSS_WITH_AES_128_GCM_SHA256", 0x00a2); + add("TLS_DHE_DSS_WITH_AES_256_GCM_SHA384", 0x00a3); + add("TLS_DH_DSS_WITH_AES_128_GCM_SHA256", 0x00a4); + add("TLS_DH_DSS_WITH_AES_256_GCM_SHA384", 0x00a5); + add("TLS_DH_anon_WITH_AES_128_GCM_SHA256", 0x00a6); + add("TLS_DH_anon_WITH_AES_256_GCM_SHA384", 0x00a7); + + // Unsupported cipher suites from RFC 5487 + add("TLS_PSK_WITH_AES_128_GCM_SHA256", 0x00a8); + add("TLS_PSK_WITH_AES_256_GCM_SHA384", 0x00a9); + add("TLS_DHE_PSK_WITH_AES_128_GCM_SHA256", 0x00aa); + add("TLS_DHE_PSK_WITH_AES_256_GCM_SHA384", 0x00ab); + add("TLS_RSA_PSK_WITH_AES_128_GCM_SHA256", 0x00ac); + add("TLS_RSA_PSK_WITH_AES_256_GCM_SHA384", 0x00ad); + add("TLS_PSK_WITH_AES_128_CBC_SHA256", 0x00ae); + add("TLS_PSK_WITH_AES_256_CBC_SHA384", 0x00af); + add("TLS_PSK_WITH_NULL_SHA256", 0x00b0); + add("TLS_PSK_WITH_NULL_SHA384", 0x00b1); + add("TLS_DHE_PSK_WITH_AES_128_CBC_SHA256", 0x00b2); + add("TLS_DHE_PSK_WITH_AES_256_CBC_SHA384", 0x00b3); + add("TLS_DHE_PSK_WITH_NULL_SHA256", 0x00b4); + add("TLS_DHE_PSK_WITH_NULL_SHA384", 0x00b5); + add("TLS_RSA_PSK_WITH_AES_128_CBC_SHA256", 0x00b6); + add("TLS_RSA_PSK_WITH_AES_256_CBC_SHA384", 0x00b7); + add("TLS_RSA_PSK_WITH_NULL_SHA256", 0x00b8); + add("TLS_RSA_PSK_WITH_NULL_SHA384", 0x00b9); + + // Unsupported cipher suites from RFC 5932 + add("TLS_RSA_WITH_CAMELLIA_128_CBC_SHA", 0x0041); + add("TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA", 0x0042); + add("TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA", 0x0043); + add("TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA", 0x0044); + add("TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA", 0x0045); + add("TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA", 0x0046); + add("TLS_RSA_WITH_CAMELLIA_256_CBC_SHA", 0x0084); + add("TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA", 0x0085); + add("TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA", 0x0086); + add("TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA", 0x0087); + add("TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA", 0x0088); + add("TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA", 0x0089); + add("TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256", 0x00ba); + add("TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256", 0x00bb); + add("TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256", 0x00bc); + add("TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256", 0x00bd); + add("TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", 0x00be); + add("TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256", 0x00bf); + add("TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256", 0x00c0); + add("TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256", 0x00c1); + add("TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256", 0x00c2); + add("TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256", 0x00c3); + add("TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256", 0x00c4); + add("TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256", 0x00c5); + + // Unsupported cipher suites from RFC 5054 + add("TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA", 0xc01a); + add("TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA", 0xc01b); + add("TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA", 0xc01c); + add("TLS_SRP_SHA_WITH_AES_128_CBC_SHA", 0xc01d); + add("TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA", 0xc01e); + add("TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA", 0xc01f); + add("TLS_SRP_SHA_WITH_AES_256_CBC_SHA", 0xc020); + add("TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA", 0xc021); + add("TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA", 0xc022); + + // Unsupported cipher suites from RFC 5289 + add("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", 0xc023); + add("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", 0xc024); + add("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", 0xc025); + add("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384", 0xc026); + add("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", 0xc027); + add("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", 0xc028); + add("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", 0xc029); + add("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384", 0xc02a); + add("TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", 0xc02b); + add("TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", 0xc02c); + add("TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256", 0xc02d); + add("TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384", 0xc02e); + add("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", 0xc02f); + add("TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", 0xc030); + add("TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256", 0xc031); + add("TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384", 0xc032); + + // Unsupported cipher suites from RFC 5489 + add("TLS_ECDHE_PSK_WITH_RC4_128_SHA", 0xc033); + add("TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA", 0xc034); + add("TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA", 0xc035); + add("TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA", 0xc036); + add("TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256", 0xc037); + add("TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384", 0xc038); + add("TLS_ECDHE_PSK_WITH_NULL_SHA", 0xc039); + add("TLS_ECDHE_PSK_WITH_NULL_SHA256", 0xc03a); + add("TLS_ECDHE_PSK_WITH_NULL_SHA384", 0xc03b); } // ciphersuite SSL_NULL_WITH_NULL_NULL diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/CipherSuiteList.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/CipherSuiteList.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/CipherSuiteList.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/CipherSuiteList.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,10 +40,6 @@ */ final class CipherSuiteList { - // lists of supported and default enabled ciphersuites - // created on demand - private static CipherSuiteList supportedSuites, defaultSuites; - private final Collection cipherSuites; private String[] suiteNames; @@ -206,57 +202,8 @@ */ static synchronized void clearAvailableCache() { if (CipherSuite.DYNAMIC_AVAILABILITY) { - supportedSuites = null; - defaultSuites = null; CipherSuite.BulkCipher.clearAvailableCache(); JsseJce.clearEcAvailable(); } } - - /** - * Return the list of all available CipherSuites with a priority of - * minPriority or above. - * Should be called with the Class lock held. - */ - private static CipherSuiteList buildAvailableCache(int minPriority) { - // SortedSet automatically arranges ciphersuites in default - // preference order - Set cipherSuites = new TreeSet(); - Collection allowedCipherSuites = - CipherSuite.allowedCipherSuites(); - for (CipherSuite c : allowedCipherSuites) { - if ((c.allowed == false) || (c.priority < minPriority)) { - continue; - } - - if (c.isAvailable()) { - cipherSuites.add(c); - } - } - - return new CipherSuiteList(cipherSuites); - } - - /** - * Return supported CipherSuites in preference order. - */ - static synchronized CipherSuiteList getSupported() { - if (supportedSuites == null) { - supportedSuites = - buildAvailableCache(CipherSuite.SUPPORTED_SUITES_PRIORITY); - } - return supportedSuites; - } - - /** - * Return default enabled CipherSuites in preference order. - */ - static synchronized CipherSuiteList getDefault() { - if (defaultSuites == null) { - defaultSuites = - buildAvailableCache(CipherSuite.DEFAULT_SUITES_PRIORITY); - } - return defaultSuites; - } - } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/ClientHandshaker.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/ClientHandshaker.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/ClientHandshaker.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/ClientHandshaker.java 2015-01-20 02:20:42.000000000 +0000 @@ -47,13 +47,12 @@ import javax.security.auth.Subject; import javax.security.auth.kerberos.KerberosPrincipal; import sun.security.jgss.krb5.Krb5Util; -import sun.security.jgss.GSSUtil; +import sun.security.jgss.GSSCaller; import com.sun.net.ssl.internal.ssl.X509ExtendedTrustManager; import sun.security.ssl.HandshakeMessage.*; import sun.security.ssl.CipherSuite.*; -import static sun.security.ssl.CipherSuite.*; import static sun.security.ssl.CipherSuite.KeyExchange.*; /** @@ -280,6 +279,13 @@ break; case HandshakeMessage.ht_finished: + // A ChangeCipherSpec record must have been received prior to + // reception of the Finished message (RFC 5246, 7.4.9). + if (!receivedChangeCipherSpec()) { + fatalSE(Alerts.alert_handshake_failure, + "Received Finished message before ChangeCipherSpec"); + } + this.serverFinished(new Finished(protocolVersion, input)); break; @@ -371,9 +377,10 @@ // check if the server selected protocol version is OK for us ProtocolVersion mesgVersion = mesg.protocolVersion; - if (enabledProtocols.contains(mesgVersion) == false) { - throw new SSLHandshakeException - ("Server chose unsupported or disabled protocol: " + mesgVersion); + if (!isNegotiable(mesgVersion)) { + throw new SSLHandshakeException( + "Server chose unsupported or disabled protocol: " + + mesgVersion); } // Set protocolVersion and propagate to SSLSocket and the @@ -495,7 +502,7 @@ new PrivilegedExceptionAction() { public Subject run() throws Exception { return Krb5Util.getSubject( - GSSUtil.CALLER_SSL_CLIENT, + GSSCaller.CALLER_SSL_CLIENT, getAccSE()); }}); } catch (PrivilegedActionException e) { @@ -1024,7 +1031,7 @@ SessionId sessionId = SSLSessionImpl.nullSession.getSessionId(); // a list of cipher suites sent by the client - CipherSuiteList cipherSuites = enabledCipherSuites; + CipherSuiteList cipherSuites = getActiveCipherSuites(); // set the max protocol version this client is supporting. maxProtocolVersion = protocolVersion; @@ -1073,8 +1080,7 @@ session = null; } - if ((session != null) && - (enabledProtocols.contains(sessionVersion) == false)) { + if ((session != null) && !isNegotiable(sessionVersion)) { if (debug != null && Debug.isOn("session")) { System.out.println("%% can't resume, protocol disabled"); } @@ -1104,7 +1110,7 @@ */ if (!enableNewSession) { if (session == null) { - throw new SSLException( + throw new SSLHandshakeException( "Can't reuse existing SSL client session"); } @@ -1121,7 +1127,7 @@ } if (session == null && !enableNewSession) { - throw new SSLException("No existing session to resume"); + throw new SSLHandshakeException("No existing session to resume"); } // exclude SCSV for secure renegotiation @@ -1147,7 +1153,7 @@ } if (!negotiable) { - throw new SSLException("No negotiable cipher suite"); + throw new SSLHandshakeException("No negotiable cipher suite"); } // create the ClientHello message diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/Debug.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/Debug.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/Debug.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/Debug.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ import java.io.PrintStream; import java.security.AccessController; +import java.util.Locale; import sun.security.action.GetPropertyAction; @@ -44,7 +45,7 @@ static { args = java.security.AccessController.doPrivileged( new GetPropertyAction("javax.net.debug", "")); - args = args.toLowerCase(); + args = args.toLowerCase(Locale.ENGLISH); if (args.equals("help")) { Help(); } @@ -114,7 +115,7 @@ return false; } else { int n = 0; - option = option.toLowerCase(); + option = option.toLowerCase(Locale.ENGLISH); if (args.indexOf("all") != -1) { return true; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/DefaultSSLContextImpl.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/DefaultSSLContextImpl.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/DefaultSSLContextImpl.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/DefaultSSLContextImpl.java 1970-01-01 00:00:00.000000000 +0000 @@ -1,193 +0,0 @@ -/* - * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.security.ssl; - -import java.io.*; -import java.util.*; - -import java.security.*; - -import javax.net.ssl.*; - -/** - * "Default" SSLContext as returned by SSLContext.getDefault(). It comes - * initialized with default KeyManagers and TrustManagers created using - * various system properties. - * - * @since 1.6 - */ -public final class DefaultSSLContextImpl extends SSLContextImpl { - - private static final String NONE = "NONE"; - private static final String P11KEYSTORE = "PKCS11"; - private static final Debug debug = Debug.getInstance("ssl"); - - private static volatile SSLContextImpl defaultImpl; - - private static TrustManager[] defaultTrustManagers; - - private static KeyManager[] defaultKeyManagers; - - public DefaultSSLContextImpl() throws Exception { - super(defaultImpl); - try { - super.engineInit(getDefaultKeyManager(), getDefaultTrustManager(), null); - } catch (Exception e) { - if (debug != null && Debug.isOn("defaultctx")) { - System.out.println("default context init failed: " + e); - } - throw e; - } - if (defaultImpl == null) { - defaultImpl = this; - } - } - - protected void engineInit(KeyManager[] km, TrustManager[] tm, - SecureRandom sr) throws KeyManagementException { - throw new KeyManagementException - ("Default SSLContext is initialized automatically"); - } - - static synchronized SSLContextImpl getDefaultImpl() throws Exception { - if (defaultImpl == null) { - new DefaultSSLContextImpl(); - } - return defaultImpl; - } - - private static synchronized TrustManager[] getDefaultTrustManager() throws Exception { - if (defaultTrustManagers != null) { - return defaultTrustManagers; - } - - KeyStore ks = TrustManagerFactoryImpl.getCacertsKeyStore("defaultctx"); - - TrustManagerFactory tmf = TrustManagerFactory.getInstance( - TrustManagerFactory.getDefaultAlgorithm()); - tmf.init(ks); - defaultTrustManagers = tmf.getTrustManagers(); - return defaultTrustManagers; - } - - private static synchronized KeyManager[] getDefaultKeyManager() throws Exception { - if (defaultKeyManagers != null) { - return defaultKeyManagers; - } - - final Map props = new HashMap(); - AccessController.doPrivileged( - new PrivilegedExceptionAction() { - public Object run() throws Exception { - props.put("keyStore", System.getProperty( - "javax.net.ssl.keyStore", "")); - props.put("keyStoreType", System.getProperty( - "javax.net.ssl.keyStoreType", - KeyStore.getDefaultType())); - props.put("keyStoreProvider", System.getProperty( - "javax.net.ssl.keyStoreProvider", "")); - props.put("keyStorePasswd", System.getProperty( - "javax.net.ssl.keyStorePassword", "")); - return null; - } - }); - - final String defaultKeyStore = props.get("keyStore"); - String defaultKeyStoreType = props.get("keyStoreType"); - String defaultKeyStoreProvider = props.get("keyStoreProvider"); - if (debug != null && Debug.isOn("defaultctx")) { - System.out.println("keyStore is : " + defaultKeyStore); - System.out.println("keyStore type is : " + - defaultKeyStoreType); - System.out.println("keyStore provider is : " + - defaultKeyStoreProvider); - } - - if (P11KEYSTORE.equals(defaultKeyStoreType) && - !NONE.equals(defaultKeyStore)) { - throw new IllegalArgumentException("if keyStoreType is " - + P11KEYSTORE + ", then keyStore must be " + NONE); - } - - FileInputStream fs = null; - if (defaultKeyStore.length() != 0 && !NONE.equals(defaultKeyStore)) { - fs = AccessController.doPrivileged( - new PrivilegedExceptionAction() { - public FileInputStream run() throws Exception { - return new FileInputStream(defaultKeyStore); - } - }); - } - - String defaultKeyStorePassword = props.get("keyStorePasswd"); - char[] passwd = null; - if (defaultKeyStorePassword.length() != 0) { - passwd = defaultKeyStorePassword.toCharArray(); - } - - /** - * Try to initialize key store. - */ - KeyStore ks = null; - if ((defaultKeyStoreType.length()) != 0) { - if (debug != null && Debug.isOn("defaultctx")) { - System.out.println("init keystore"); - } - if (defaultKeyStoreProvider.length() == 0) { - ks = KeyStore.getInstance(defaultKeyStoreType); - } else { - ks = KeyStore.getInstance(defaultKeyStoreType, - defaultKeyStoreProvider); - } - - // if defaultKeyStore is NONE, fs will be null - ks.load(fs, passwd); - } - if (fs != null) { - fs.close(); - fs = null; - } - - /* - * Try to initialize key manager. - */ - if (debug != null && Debug.isOn("defaultctx")) { - System.out.println("init keymanager of type " + - KeyManagerFactory.getDefaultAlgorithm()); - } - KeyManagerFactory kmf = KeyManagerFactory.getInstance( - KeyManagerFactory.getDefaultAlgorithm()); - - if (P11KEYSTORE.equals(defaultKeyStoreType)) { - kmf.init(ks, null); // do not pass key passwd if using token - } else { - kmf.init(ks, passwd); - } - - defaultKeyManagers = kmf.getKeyManagers(); - return defaultKeyManagers; - } -} diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/HandshakeMessage.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/HandshakeMessage.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/HandshakeMessage.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/HandshakeMessage.java 2015-01-20 02:20:42.000000000 +0000 @@ -1179,8 +1179,13 @@ s.println(); s.println("Cert Authorities:"); - for (int i = 0; i < authorities.length; i++) - authorities[i].print(s); + if (authorities.length == 0) { + s.println(""); + } else { + for (int i = 0; i < authorities.length; i++) { + authorities[i].print(s); + } + } } } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/Handshaker.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/Handshaker.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/Handshaker.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/Handshaker.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,6 +49,9 @@ import sun.security.ssl.HandshakeMessage.*; import sun.security.ssl.CipherSuite.*; +import sun.security.util.AlgorithmConstraints; +import sun.security.util.CryptoPrimitive; + /** * Handshaker ... processes handshake records from an SSL V3.0 * data stream, handling all the details of the handshake protocol. @@ -64,39 +67,63 @@ ProtocolVersion protocolVersion; // the currently active protocol version during a renegotiation - ProtocolVersion activeProtocolVersion; + ProtocolVersion activeProtocolVersion; // security parameters for secure renegotiation. - boolean secureRenegotiation; - byte[] clientVerifyData; - byte[] serverVerifyData; - - // is it an initial negotiation or a renegotiation? - boolean isInitialHandshake; - - // list of enabled protocols - ProtocolList enabledProtocols; - - private boolean isClient; - - SSLSocketImpl conn = null; - SSLEngineImpl engine = null; - - HandshakeHash handshakeHash; - HandshakeInStream input; - HandshakeOutStream output; - int state; - SSLContextImpl sslContext; - RandomCookie clnt_random, svr_random; - SSLSessionImpl session; + boolean secureRenegotiation; + byte[] clientVerifyData; + byte[] serverVerifyData; + + // Is it an initial negotiation or a renegotiation? + boolean isInitialHandshake; + + // List of enabled protocols + private ProtocolList enabledProtocols; + + // List of enabled CipherSuites + private CipherSuiteList enabledCipherSuites; + + // The cryptographic algorithm constraints + private AlgorithmConstraints algorithmConstraints = null; + + /* + * List of active protocols + * + * Active protocols is a subset of enabled protocols, and will + * contain only those protocols that have vaild cipher suites + * enabled. + */ + private ProtocolList activeProtocols; + + /* + * List of active cipher suites + * + * Active cipher suites is a subset of enabled cipher suites, and will + * contain only those cipher suites available for the active protocols. + */ + private CipherSuiteList activeCipherSuites; + + private boolean isClient; + + SSLSocketImpl conn = null; + SSLEngineImpl engine = null; + + HandshakeHash handshakeHash; + HandshakeInStream input; + HandshakeOutStream output; + int state; + SSLContextImpl sslContext; + RandomCookie clnt_random, svr_random; + SSLSessionImpl session; + + // True if session keys have been calculated and the caller may receive + // and process a ChangeCipherSpec message + private boolean sessKeysCalculated; // Temporary MD5 and SHA message digests. Must always be left // in reset state after use. private MessageDigest md5Tmp, shaTmp; - // list of enabled CipherSuites - CipherSuiteList enabledCipherSuites; - // current CipherSuite. Never null, initially SSL_NULL_WITH_NULL_NULL CipherSuite cipherSuite; @@ -132,7 +159,7 @@ // here instead of using this lock. Consider changing. private Object thrownLock = new Object(); - /* Class and subclass dynamic debugging support */ + // Class and subclass dynamic debugging support static final Debug debug = Debug.getInstance("ssl"); // By default, disable the unsafe legacy session renegotiation @@ -198,6 +225,7 @@ this.serverVerifyData = serverVerifyData; enableNewSession = true; invalidated = false; + sessKeysCalculated = false; setCipherSuite(CipherSuite.C_NULL); @@ -215,8 +243,10 @@ if (conn != null) { conn.getAppInputStream().r.setHandshakeHash(handshakeHash); + algorithmConstraints = new SSLAlgorithmConstraints(conn, true); } else { // engine != null engine.inputRecord.setHandshakeHash(handshakeHash); + algorithmConstraints = new SSLAlgorithmConstraints(engine, true); } @@ -233,7 +263,7 @@ // client's cert verify, those constants are in a convenient // order to drastically simplify state machine checking. // - state = -1; + state = -2; // initialized but not activated } /* @@ -337,6 +367,14 @@ } } + final boolean receivedChangeCipherSpec() { + if (conn != null) { + return conn.receivedChangeCipherSpec(); + } else { + return engine.receivedChangeCipherSpec(); + } + } + /** * Set the active protocol version and propagate it to the SSLSocket * and our handshake streams. Called from ClientHandshaker @@ -345,26 +383,83 @@ void setVersion(ProtocolVersion protocolVersion) { this.protocolVersion = protocolVersion; setVersionSE(protocolVersion); + output.r.setVersion(protocolVersion); } /** * Set the enabled protocols. Called from the constructor or - * SSLSocketImpl.setEnabledProtocols() (if the handshake is not yet - * in progress). + * SSLSocketImpl/SSLEngineImpl.setEnabledProtocols() (if the + * handshake is not yet in progress). */ void setEnabledProtocols(ProtocolList enabledProtocols) { + activeCipherSuites = null; + activeProtocols = null; + this.enabledProtocols = enabledProtocols; + } + + /** + * Set the enabled cipher suites. Called from + * SSLSocketImpl/SSLEngineImpl.setEnabledCipherSuites() (if the + * handshake is not yet in progress). + */ + void setEnabledCipherSuites(CipherSuiteList enabledCipherSuites) { + activeCipherSuites = null; + activeProtocols = null; + this.enabledCipherSuites = enabledCipherSuites; + } + + /** + * Set the algorithm constraints. Called from the constructor or + * SSLSocketImpl/SSLEngineImpl.setAlgorithmConstraints() (if the + * handshake is not yet in progress). + */ + void setAlgorithmConstraints(AlgorithmConstraints algorithmConstraints) { + activeCipherSuites = null; + activeProtocols = null; + + this.algorithmConstraints = + new SSLAlgorithmConstraints(algorithmConstraints); + } + + /** + * Prior to handshaking, activate the handshake and initialize the version, + * input stream and output stream. + */ + void activate(ProtocolVersion helloVersion) throws IOException { + if (activeProtocols == null) { + activeProtocols = getActiveProtocols(); + } + + if (activeProtocols.collection().isEmpty() || + activeProtocols.max.v == ProtocolVersion.NONE.v) { + throw new SSLHandshakeException( + "No appropriate protocol (protocol is disabled or " + + "cipher suites are inappropriate)"); + } + + if (activeCipherSuites == null) { + activeCipherSuites = getActiveCipherSuites(); + } + + if (activeCipherSuites.collection().isEmpty()) { + throw new SSLHandshakeException("No appropriate cipher suite"); + } // temporary protocol version until the actual protocol version // is negotiated in the Hello exchange. This affects the record - // version we sent with the ClientHello. Using max() as the record - // version is not really correct but some implementations fail to - // correctly negotiate TLS otherwise. - protocolVersion = enabledProtocols.max; + // version we sent with the ClientHello. + if (!isInitialHandshake) { + protocolVersion = activeProtocolVersion; + } else { + protocolVersion = activeProtocols.max; + } - ProtocolVersion helloVersion = enabledProtocols.helloVersion; + if (helloVersion == null || helloVersion.v == ProtocolVersion.NONE.v) { + helloVersion = activeProtocols.helloVersion; + } input = new HandshakeInStream(handshakeHash); @@ -372,12 +467,16 @@ output = new HandshakeOutStream(protocolVersion, helloVersion, handshakeHash, conn); conn.getAppInputStream().r.setHelloVersion(helloVersion); + conn.getAppOutputStream().r.setHelloVersion(helloVersion); } else { output = new HandshakeOutStream(protocolVersion, helloVersion, handshakeHash, engine); + engine.inputRecord.setHelloVersion(helloVersion); engine.outputRecord.setHelloVersion(helloVersion); } + // move state to activated + state = -1; } /** @@ -392,20 +491,160 @@ /** * Check if the given ciphersuite is enabled and available. - * (Enabled ciphersuites are always available unless the status has - * changed due to change in JCE providers since it was enabled). * Does not check if the required server certificates are available. */ boolean isNegotiable(CipherSuite s) { - return enabledCipherSuites.contains(s) && s.isNegotiable(); + if (activeCipherSuites == null) { + activeCipherSuites = getActiveCipherSuites(); + } + + return activeCipherSuites.contains(s) && s.isNegotiable(); + } + + /** + * Check if the given protocol version is enabled and available. + */ + boolean isNegotiable(ProtocolVersion protocolVersion) { + if (activeProtocols == null) { + activeProtocols = getActiveProtocols(); + } + + return activeProtocols.contains(protocolVersion); + } + + /** + * Select a protocol version from the list. Called from + * ServerHandshaker to negotiate protocol version. + * + * Return the lower of the protocol version suggested in the + * clien hello and the highest supported by the server. + */ + ProtocolVersion selectProtocolVersion(ProtocolVersion protocolVersion) { + if (activeProtocols == null) { + activeProtocols = getActiveProtocols(); + } + + return activeProtocols.selectProtocolVersion(protocolVersion); + } + + /** + * Get the active cipher suites. + * + * In TLS 1.1, many weak or vulnerable cipher suites were obsoleted, + * such as TLS_RSA_EXPORT_WITH_RC4_40_MD5. The implementation MUST NOT + * negotiate these cipher suites in TLS 1.1 or later mode. + * + * Therefore, when the active protocols only include TLS 1.1 or later, + * the client cannot request to negotiate those obsoleted cipher + * suites, that's, the obsoleted suites should not be included in the + * client hello. So we need to create a subset of the enabled cipher + * suites, the active cipher suites, which does not contain obsoleted + * cipher suites of the minimum active protocol. + * + * Return empty list instead of null if no active cipher suites. + */ + CipherSuiteList getActiveCipherSuites() { + if (activeCipherSuites == null) { + if (activeProtocols == null) { + activeProtocols = getActiveProtocols(); + } + + ArrayList suites = new ArrayList(); + if (!(activeProtocols.collection().isEmpty()) && + activeProtocols.min.v != ProtocolVersion.NONE.v) { + for (CipherSuite suite : enabledCipherSuites.collection()) { + if (suite.obsoleted > activeProtocols.min.v && + suite.supported <= activeProtocols.max.v) { + if (algorithmConstraints.permits( + EnumSet.of(CryptoPrimitive.KEY_AGREEMENT), + suite.name, null)) { + suites.add(suite); + } + } else if (debug != null && Debug.isOn("verbose")) { + if (suite.obsoleted <= activeProtocols.min.v) { + System.out.println( + "Ignoring obsoleted cipher suite: " + suite); + } else { + System.out.println( + "Ignoring unsupported cipher suite: " + suite); + } + } + } + } + activeCipherSuites = new CipherSuiteList(suites); + } + + return activeCipherSuites; + } + + /* + * Get the active protocol versions. + * + * In TLS 1.1, many weak or vulnerable cipher suites were obsoleted, + * such as TLS_RSA_EXPORT_WITH_RC4_40_MD5. The implementation MUST NOT + * negotiate these cipher suites in TLS 1.1 or later mode. + * + * For example, if "TLS_RSA_EXPORT_WITH_RC4_40_MD5" is the + * only enabled cipher suite, the client cannot request TLS 1.1 or + * later, even though TLS 1.1 or later is enabled. We need to create a + * subset of the enabled protocols, called the active protocols, which + * contains protocols appropriate to the list of enabled Ciphersuites. + * + * Return empty list instead of null if no active protocol versions. + */ + ProtocolList getActiveProtocols() { + if (activeProtocols == null) { + ArrayList protocols = + new ArrayList(3); + EnumSet cryptoPrimitives = + EnumSet.of(CryptoPrimitive.KEY_AGREEMENT); + for (ProtocolVersion protocol : enabledProtocols.collection()) { + if (!algorithmConstraints.permits( + cryptoPrimitives, protocol.name, null)) { + if (debug != null && Debug.isOn("verbose")) { + System.out.println( + "Ignoring disabled protocol: " + protocol); + } + + continue; + } + boolean found = false; + for (CipherSuite suite : enabledCipherSuites.collection()) { + if (suite.isAvailable() && suite.obsoleted > protocol.v && + suite.supported <= protocol.v) { + if (algorithmConstraints.permits( + cryptoPrimitives, suite.name, null)) { + protocols.add(protocol); + found = true; + break; + } else if (debug != null && Debug.isOn("verbose")) { + System.out.println( + "Ignoring disabled cipher suite: " + suite + + " for " + protocol); + } + } else if (debug != null && Debug.isOn("verbose")) { + System.out.println( + "Ignoring unsupported cipher suite: " + suite + + " for " + protocol); + } + } + if (!found && (debug != null) && Debug.isOn("handshake")) { + System.out.println( + "No available cipher suite for " + protocol); + } + } + activeProtocols = new ProtocolList(protocols); + } + + return activeProtocols; } /** - * As long as handshaking has not started, we can + * As long as handshaking has not activated, we can * change whether session creations are allowed. * * Callers should do their own checking if handshaking - * has started. + * has activated. */ void setEnableSessionCreation(boolean newSessions) { enableNewSession = newSessions; @@ -419,12 +658,12 @@ CipherBox box; if (isClient) { box = cipher.newCipher(protocolVersion, svrWriteKey, svrWriteIV, - false); + sslContext.getSecureRandom(), false); svrWriteKey = null; svrWriteIV = null; } else { box = cipher.newCipher(protocolVersion, clntWriteKey, clntWriteIV, - false); + sslContext.getSecureRandom(), false); clntWriteKey = null; clntWriteIV = null; } @@ -439,12 +678,12 @@ CipherBox box; if (isClient) { box = cipher.newCipher(protocolVersion, clntWriteKey, clntWriteIV, - true); + sslContext.getSecureRandom(), true); clntWriteKey = null; clntWriteIV = null; } else { box = cipher.newCipher(protocolVersion, svrWriteKey, svrWriteIV, - true); + sslContext.getSecureRandom(), true); svrWriteKey = null; svrWriteIV = null; } @@ -614,13 +853,20 @@ /** + * Returns true iff the handshaker has been activated. + * + * In activated state, the handshaker may not send any messages out. + */ + boolean activated() { + return state >= -1; + } + + /** * Returns true iff the handshaker has sent any messages. - * Server kickstarting is not as neat as it should be; we - * need to create a new handshaker, this method lets us - * know if we should. */ boolean started() { - return state >= 0; + return state >= 0; // 0: HandshakeMessage.ht_hello_request + // 1: HandshakeMessage.ht_hello_request } @@ -633,6 +879,7 @@ if (state >= 0) { return; } + HandshakeMessage m = getKickstartMessage(); if (debug != null && Debug.isOn("handshake")) { @@ -746,6 +993,7 @@ */ private SecretKey calculateMasterSecret(SecretKey preMasterSecret, ProtocolVersion requestedVersion) { + TlsMasterSecretParameterSpec spec = new TlsMasterSecretParameterSpec (preMasterSecret, protocolVersion.major, protocolVersion.minor, clnt_random.random_bytes, svr_random.random_bytes); @@ -804,8 +1052,6 @@ int hashSize = cipherSuite.macAlg.size; boolean is_exportable = cipherSuite.exportable; BulkCipher cipher = cipherSuite.cipher; - int keySize = cipher.keySize; - int ivSize = cipher.ivSize; int expandedKeySize = is_exportable ? cipher.expandedKeySize : 0; TlsKeyMaterialParameterSpec spec = new TlsKeyMaterialParameterSpec @@ -822,6 +1068,8 @@ clntWriteKey = keySpec.getClientCipherKey(); svrWriteKey = keySpec.getServerCipherKey(); + // Return null if IVs are not supposed to be generated. + // e.g. TLS 1.1+. clntWriteIV = keySpec.getClientIv(); svrWriteIV = keySpec.getServerIv(); @@ -831,6 +1079,10 @@ throw new ProviderException(e); } + // Mark a flag that allows outside entities (like SSLSocket/SSLEngine) + // determine if a ChangeCipherSpec message could be processed. + sessKeysCalculated = true; + // // Dump the connection keys as they're generated. // @@ -869,13 +1121,27 @@ System.out.println("Server write IV:"); printHex(dump, svrWriteIV.getIV()); } else { - System.out.println("... no IV used for this cipher"); + if (protocolVersion.v >= ProtocolVersion.TLS11.v) { + System.out.println( + "... no IV derived for this protocol"); + } else { + System.out.println("... no IV used for this cipher"); + } } System.out.flush(); } } } + /** + * Return whether or not the Handshaker has derived session keys for + * this handshake. This is used for determining readiness to process + * an incoming ChangeCipherSpec message. + */ + boolean sessionKeysCalculated() { + return sessKeysCalculated; + } + private static void printHex(HexDumpEncoder dump, byte[] bytes) { if (bytes == null) { System.out.println("(key bytes not available)"); diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/JsseJce.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/JsseJce.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/JsseJce.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/JsseJce.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -220,9 +220,9 @@ // the SunJSSE implementation does the actual crypto using // a NONEwithRSA signature obtained from the cryptoProvider. if (cryptoProvider.getService("Signature", algorithm) == null) { - // Calling Signature.getInstance() and catching the exception - // would be cleaner, but exceptions are a little expensive. - // So we check directly via getService(). + // Calling Signature.getInstance() and catching the + // exception would be cleaner, but exceptions are a little + // expensive. So we check directly via getService(). try { return Signature.getInstance(algorithm, "SunJSSE"); } catch (NoSuchProviderException e) { diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/KerberosClientKeyExchange.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/KerberosClientKeyExchange.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/KerberosClientKeyExchange.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/KerberosClientKeyExchange.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,19 +34,16 @@ import java.security.SecureRandom; import java.net.InetAddress; -import javax.net.ssl.SSLException; import javax.security.auth.kerberos.KerberosTicket; import javax.security.auth.kerberos.KerberosKey; import javax.security.auth.kerberos.KerberosPrincipal; import javax.security.auth.kerberos.ServicePermission; -import sun.security.jgss.GSSUtil; +import sun.security.jgss.GSSCaller; -import sun.security.krb5.Config; import sun.security.krb5.EncryptionKey; import sun.security.krb5.EncryptedData; import sun.security.krb5.PrincipalName; import sun.security.krb5.Realm; -import sun.security.krb5.KrbException; import sun.security.krb5.internal.Ticket; import sun.security.krb5.internal.EncTicketPart; import sun.security.krb5.internal.crypto.KeyUsage; @@ -224,7 +221,7 @@ clientVersion, rand, input, sessionKey); } else { // Generate bogus premaster secret - preMaster = new KerberosPreMasterSecret(protocolVersion, rand); + preMaster = new KerberosPreMasterSecret(clientVersion, rand); } } @@ -310,7 +307,7 @@ new PrivilegedExceptionAction() { public KerberosTicket run() throws Exception { return Krb5Util.getTicketFromSubjectAndTgs( - GSSUtil.CALLER_SSL_CLIENT, + GSSCaller.CALLER_SSL_CLIENT, clientPrincipal, serverPrincipal, tgsPrincipal, acc); }}); diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/KerberosPreMasterSecret.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/KerberosPreMasterSecret.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/KerberosPreMasterSecret.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/KerberosPreMasterSecret.java 2015-01-20 02:20:42.000000000 +0000 @@ -154,13 +154,21 @@ // check if the premaster secret version is ok // the specification says that it must be the maximum version supported // by the client from its ClientHello message. However, many - // implementations send the negotiated version, so accept both + // old implementations send the negotiated version, so accept both + // for SSL v3.0 and TLS v1.0. // NOTE that we may be comparing two unsupported version numbers in // the second case, which is why we cannot use object references // equality in this special case - boolean versionMismatch = (protocolVersion != currentVersion) && - (protocolVersion.v != clientVersion.v); + boolean versionMismatch = (protocolVersion.v != clientVersion.v); + /* + * we never checked the client_version in server side + * for TLS v1.0 and SSL v3.0. For compatibility, we + * maintain this behavior. + */ + if (versionMismatch && (clientVersion.v <= 0x0301)) { + versionMismatch = (protocolVersion.v != currentVersion.v); + } /* * Bogus decrypted ClientKeyExchange? If so, conjure a @@ -181,8 +189,14 @@ Debug.println(System.out, "Invalid secret", preMaster); } } - preMaster = generatePreMaster(generator, currentVersion); - protocolVersion = currentVersion; + + /* + * Randomize the preMaster secret with the + * ClientHello.client_version, as will produce invalid master + * secret to prevent the attacks. + */ + preMaster = generatePreMaster(generator, clientVersion); + protocolVersion = clientVersion; } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/MAC.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/MAC.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/MAC.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/MAC.java 2015-01-20 02:20:42.000000000 +0000 @@ -173,6 +173,42 @@ return compute(type, bb, null, 0, bb.remaining(), isSimulated); } + /** + * Check whether the sequence number is close to wrap + * + * Sequence numbers are of type uint64 and may not exceed 2^64-1. + * Sequence numbers do not wrap. When the sequence number is near + * to wrap, we need to close the connection immediately. + */ + final boolean seqNumOverflow() { + /* + * Conservatively, we don't allow more records to be generated + * when there are only 2^8 sequence numbers left. + */ + return (block != null && mac != null && + block[0] == 0xFF && block[1] == 0xFF && + block[2] == 0xFF && block[3] == 0xFF && + block[4] == 0xFF && block[5] == 0xFF && + block[6] == 0xFF); + } + + /* + * Check whether to renew the sequence number + * + * Sequence numbers are of type uint64 and may not exceed 2^64-1. + * Sequence numbers do not wrap. If a TLS + * implementation would need to wrap a sequence number, it must + * renegotiate instead. + */ + final boolean seqNumIsHuge() { + /* + * Conservatively, we should ask for renegotiation when there are + * only 2^48 sequence numbers left. + */ + return (block != null && mac != null && + block[0] == 0xFF && block[1] == 0xFF); + } + // increment the sequence number in the block array // it is a 64-bit number stored in big-endian format private void incrementSequenceNumber() { diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/ProtocolList.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/ProtocolList.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/ProtocolList.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/ProtocolList.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,9 +37,9 @@ */ final class ProtocolList { - private static final ProtocolList SUPPORTED; + // the sorted protocol version list + private final ArrayList protocols; - private final Collection protocols; private String[] protocolNames; // the minimum and maximum ProtocolVersions in this list @@ -49,30 +49,45 @@ final ProtocolVersion helloVersion; ProtocolList(String[] names) { + this(convert(names)); + } + + ProtocolList(ArrayList versions) { + this.protocols = versions; + + if ((protocols.size() == 1) && + protocols.contains(ProtocolVersion.SSL20Hello)) { + throw new IllegalArgumentException("SSLv2Hello cannot be " + + "enabled unless at least one other supported version " + + "is also enabled."); + } + + if (protocols.size() != 0) { + Collections.sort(protocols); + min = protocols.get(0); + max = protocols.get(protocols.size() - 1); + helloVersion = protocols.get(0); + } else { + min = ProtocolVersion.NONE; + max = ProtocolVersion.NONE; + helloVersion = ProtocolVersion.NONE; + } + } + + private static ArrayList convert(String[] names) { if (names == null) { throw new IllegalArgumentException("Protocols may not be null"); } - protocols = new ArrayList(3); + + ArrayList versions = new ArrayList(3); for (int i = 0; i < names.length; i++ ) { ProtocolVersion version = ProtocolVersion.valueOf(names[i]); - if (protocols.contains(version) == false) { - protocols.add(version); + if (versions.contains(version) == false) { + versions.add(version); } } - if ((protocols.size() == 1) - && protocols.contains(ProtocolVersion.SSL20Hello)) { - throw new IllegalArgumentException("SSLv2Hello" + - "cannot be enabled unless TLSv1 or SSLv3 is also enabled"); - } - min = contains(ProtocolVersion.SSL30) ? ProtocolVersion.SSL30 - : ProtocolVersion.TLS10; - max = contains(ProtocolVersion.TLS10) ? ProtocolVersion.TLS10 - : ProtocolVersion.SSL30; - if (protocols.contains(ProtocolVersion.SSL20Hello)) { - helloVersion = ProtocolVersion.SSL20Hello; - } else { - helloVersion = min; - } + + return versions; } /** @@ -88,6 +103,37 @@ } /** + * Return a reference to the internal Collection of CipherSuites. + * The Collection MUST NOT be modified. + */ + Collection collection() { + return protocols; + } + + /** + * Select a protocol version from the list. + * + * Return the lower of the protocol version of that suggested by + * the protocolVersion and the highest version of this + * protocol list, or null if no protocol version is available. + * + * The method is used by TLS server to negotiated the protocol + * version between client suggested protocol version in the + * client hello and protocol versions supported by the server. + */ + ProtocolVersion selectProtocolVersion(ProtocolVersion protocolVersion) { + ProtocolVersion selectedVersion = null; + for (ProtocolVersion pv : protocols) { + if (pv.v > protocolVersion.v) { + break; // Safe to break here as this.protocols is sorted + } + selectedVersion = pv; + } + + return selectedVersion; + } + + /** * Return an array with the names of the ProtocolVersions in this list. */ synchronized String[] toStringArray() { @@ -104,34 +150,4 @@ public String toString() { return protocols.toString(); } - - /** - * Return the list of default enabled protocols. Currently, this - * is identical to the supported protocols. - */ - static ProtocolList getDefault() { - return SUPPORTED; - } - - /** - * Return the list of supported protocols. - */ - static ProtocolList getSupported() { - return SUPPORTED; - } - - static { - if (SunJSSE.isFIPS()) { - SUPPORTED = new ProtocolList(new String[] { - ProtocolVersion.TLS10.name - }); - } else { - SUPPORTED = new ProtocolList(new String[] { - ProtocolVersion.SSL20Hello.name, - ProtocolVersion.SSL30.name, - ProtocolVersion.TLS10.name, - }); - } - } - } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/ProtocolVersion.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/ProtocolVersion.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/ProtocolVersion.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/ProtocolVersion.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,9 @@ package sun.security.ssl; +import java.util.*; +import sun.security.util.CryptoPrimitive; + /** * Type safe enum for an SSL/TLS protocol version. Instances are obtained * using the static factory methods or by referencing the static members @@ -45,9 +48,15 @@ * @author Andreas Sterbenz * @since 1.4.1 */ -final class ProtocolVersion { +final class ProtocolVersion implements Comparable { + + // The limit of maximum protocol version + final static int LIMIT_MAX_VALUE = 0xFFFF; + + // The limit of minimum protocol version + final static int LIMIT_MIN_VALUE = 0x0000; - // dummy protocol version value for invalid SSLSession + // Dummy protocol version value for invalid SSLSession final static ProtocolVersion NONE = new ProtocolVersion(-1, "NONE"); // If enabled, send/ accept SSLv2 hello messages @@ -61,22 +70,29 @@ final static ProtocolVersion TLS10 = new ProtocolVersion(0x0301, "TLSv1"); // TLS 1.1 - // not supported yet, but added for better readability of the debug trace final static ProtocolVersion TLS11 = new ProtocolVersion(0x0302, "TLSv1.1"); + // TLS 1.2 + final static ProtocolVersion TLS12 = new ProtocolVersion(0x0303, "TLSv1.2"); + private static final boolean FIPS = SunJSSE.isFIPS(); // minimum version we implement (SSL 3.0) final static ProtocolVersion MIN = FIPS ? TLS10 : SSL30; - // maximum version we implement (TLS 1.0) - final static ProtocolVersion MAX = TLS10; + // maximum version we implement (TLS 1.1) + final static ProtocolVersion MAX = TLS11; // ProtocolVersion to use by default (TLS 1.0) final static ProtocolVersion DEFAULT = TLS10; // Default version for hello messages (SSLv2Hello) - final static ProtocolVersion DEFAULT_HELLO = FIPS ? TLS10 : SSL20Hello; + final static ProtocolVersion DEFAULT_HELLO = FIPS ? TLS10 : SSL30; + + // Available protocols + // + // Including all supported protocols except the disabled ones. + final static Set availableProtocols; // version in 16 bit MSB format as it appears in records and // messages, i.e. 0x0301 for TLS 1.0 @@ -88,6 +104,25 @@ // name used in JSSE (e.g. TLSv1 for TLS 1.0) final String name; + // Initialize the available protocols. + static { + Set protocols = new HashSet(5); + + ProtocolVersion[] pvs = new ProtocolVersion[] { + SSL20Hello, SSL30, TLS10, TLS11 }; + EnumSet cryptoPrimitives = + EnumSet.of(CryptoPrimitive.KEY_AGREEMENT); + for (ProtocolVersion p : pvs) { + if (SSLAlgorithmConstraints.DEFAULT_SSL_ONLY.permits( + cryptoPrimitives, p.name, null)) { + protocols.add(p); + } + } + + availableProtocols = + Collections.unmodifiableSet(protocols); + } + // private private ProtocolVersion(int v, String name) { this.v = v; @@ -104,6 +139,8 @@ return TLS10; } else if (v == TLS11.v) { return TLS11; + } else if (v == TLS12.v) { + return TLS12; } else if (v == SSL20Hello.v) { return SSL20Hello; } else { @@ -134,18 +171,20 @@ if (name == null) { throw new IllegalArgumentException("Protocol cannot be null"); } - if (FIPS) { - if (name.equals(TLS10.name)) { - return TLS10; - } else { - throw new IllegalArgumentException - ("Only TLS 1.0 allowed in FIPS mode"); - } + + if (FIPS && (name.equals(SSL30.name) || name.equals(SSL20Hello.name))) { + throw new IllegalArgumentException + ("Only TLS 1.0 or later allowed in FIPS mode"); } + if (name.equals(SSL30.name)) { return SSL30; } else if (name.equals(TLS10.name)) { return TLS10; + } else if (name.equals(TLS11.name)) { + return TLS11; + } else if (name.equals(TLS12.name)) { + return TLS12; } else if (name.equals(SSL20Hello.name)) { return SSL20Hello; } else { @@ -157,4 +196,10 @@ return name; } + /** + * Compares this object with the specified object for order. + */ + public int compareTo(ProtocolVersion protocolVersion) { + return this.v - protocolVersion.v; + } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/Record.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/Record.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/Record.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/Record.java 2015-01-20 02:20:42.000000000 +0000 @@ -47,11 +47,12 @@ static final byte ct_handshake = 22; static final byte ct_application_data = 23; - static final int headerSize = 5; // SSLv3 record header - static final int maxExpansion = 1024; // for bad compression - static final int trailerSize = 20; // SHA1 hash size - static final int maxDataSize = 16384; // 2^14 bytes of data - static final int maxPadding = 256; // block cipher padding + static final int headerSize = 5; // SSLv3 record header + static final int maxExpansion = 1024; // for bad compression + static final int trailerSize = 20; // SHA1 hash size + static final int maxDataSize = 16384; // 2^14 bytes of data + static final int maxPadding = 256; // block cipher padding + static final int maxIVLength = 256; // block length /* * SSL has a maximum record size. It's header, (compressed) data, @@ -59,8 +60,9 @@ * Some compression algorithms have rare cases where they expand the data. * As we don't support compression at this time, leave that out. */ - static final int maxRecordSize = + static final int maxRecordSize = headerSize // header + + maxIVLength // iv + maxDataSize // data + maxPadding // padding + trailerSize; // MAC @@ -90,7 +92,7 @@ * The maximum large record size is defined as maxRecordSize plus 2^14, * this is the amount OpenSSL is using. */ - static final int maxLargeRecordSize = + static final int maxLargeRecordSize = maxRecordSize // Max size with a conforming implemenation + maxDataSize; // extra 2^14 bytes for large data packets. @@ -100,7 +102,11 @@ * They only contain 2 and 1 bytes of data, respectively. * Allocate a smaller array. */ - static final int maxAlertRecordSize = - headerSize + 2 + maxPadding + trailerSize; + static final int maxAlertRecordSize = + headerSize // header + + maxIVLength // iv + + 2 // alert + + maxPadding // padding + + trailerSize; // MAC } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/RSAClientKeyExchange.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/RSAClientKeyExchange.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/RSAClientKeyExchange.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/RSAClientKeyExchange.java 2015-01-20 02:20:42.000000000 +0000 @@ -50,10 +50,6 @@ */ final class RSAClientKeyExchange extends HandshakeMessage { - int messageType() { - return ht_client_key_exchange; - } - /* * The following field values were encrypted with the server's public * key (or temp key from server key exchange msg) and are presented @@ -63,7 +59,6 @@ SecretKey preMaster; private byte[] encrypted; // same size as public modulus - /* * Client randomly creates a pre-master secret and encrypts it * using the server's RSA public key; only the server can decrypt @@ -106,7 +101,6 @@ throw new SSLKeyException("Private key not of type RSA"); } - this.protocolVersion = currentVersion; if (currentVersion.v >= ProtocolVersion.TLS10.v) { encrypted = input.getBytes16(); } else { @@ -140,6 +134,12 @@ } } + @Override + int messageType() { + return ht_client_key_exchange; + } + + @Override int messageLength() { if (protocolVersion.v >= ProtocolVersion.TLS10.v) { return encrypted.length + 2; @@ -148,6 +148,7 @@ } } + @Override void send(HandshakeOutStream s) throws IOException { if (protocolVersion.v >= ProtocolVersion.TLS10.v) { s.putBytes16(encrypted); @@ -156,7 +157,9 @@ } } + @Override void print(PrintStream s) throws IOException { - s.println("*** ClientKeyExchange, RSA PreMasterSecret, " + protocolVersion); + s.println("*** ClientKeyExchange, RSA PreMasterSecret, " + + protocolVersion); } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/ServerHandshaker.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/ServerHandshaker.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/ServerHandshaker.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/ServerHandshaker.java 2015-01-20 02:20:42.000000000 +0000 @@ -43,7 +43,7 @@ import javax.security.auth.kerberos.KerberosPrincipal; import javax.security.auth.kerberos.ServicePermission; import sun.security.jgss.krb5.Krb5Util; -import sun.security.jgss.GSSUtil; +import sun.security.jgss.GSSCaller; import com.sun.net.ssl.internal.ssl.X509ExtendedTrustManager; @@ -242,6 +242,13 @@ break; case HandshakeMessage.ht_finished: + // A ChangeCipherSpec record must have been received prior to + // reception of the Finished message (RFC 5246, 7.4.9). + if (!receivedChangeCipherSpec()) { + fatalSE(Alerts.alert_handshake_failure, + "Received Finished message before ChangeCipherSpec"); + } + this.clientFinished(new Finished(protocolVersion, input)); break; @@ -416,20 +423,14 @@ clientRequestedVersion = mesg.protocolVersion; - // check if clientVersion is recent enough for us - if (clientRequestedVersion.v < enabledProtocols.min.v) { + // select a proper protocol version. + ProtocolVersion selectedVersion = + selectProtocolVersion(clientRequestedVersion); + if (selectedVersion == null || + selectedVersion.v == ProtocolVersion.SSL20Hello.v) { fatalSE(Alerts.alert_handshake_failure, "Client requested protocol " + clientRequestedVersion + - " not enabled or not supported"); - } - - // now we know we have an acceptable version - // use the lower of our max and the client requested version - ProtocolVersion selectedVersion; - if (clientRequestedVersion.v <= enabledProtocols.max.v) { - selectedVersion = clientRequestedVersion; - } else { - selectedVersion = enabledProtocols.max; + " not enabled or not supported"); } setVersion(selectedVersion); @@ -502,7 +503,7 @@ new PrivilegedExceptionAction() { public Subject run() throws Exception { return Krb5Util.getSubject( - GSSUtil.CALLER_SSL_SERVER, + GSSCaller.CALLER_SSL_SERVER, getAccSE()); }}); } catch (PrivilegedActionException e) { @@ -821,8 +822,7 @@ * method should only be called if you really want to use the * CipherSuite. * - * This method is called from chooseCipherSuite() in this class - * and SSLServerSocketImpl.checkEnabledSuites() (as a sanity check). + * This method is called from chooseCipherSuite() in this class. */ boolean trySetCipherSuite(CipherSuite suite) { /* @@ -839,6 +839,11 @@ return false; } + // TLSv1.1 must not negotiate the exportable weak cipher suites. + if (protocolVersion.v >= suite.obsoleted) { + return false; + } + KeyExchange keyExchange = suite.keyExchange; // null out any existing references @@ -1069,9 +1074,10 @@ new PrivilegedExceptionAction() { public KerberosKey[] run() throws Exception { // get kerberos key for the default principal - return Krb5Util.getKeys( - GSSUtil.CALLER_SSL_SERVER, null, acc); - }}); + KerberosKey[] keys = Krb5Util.getKeys( + GSSCaller.CALLER_SSL_SERVER, null, acc); + return keys != null ? keys : new KerberosKey[0]; + }}); // check permission to access and use the secret key of the // Kerberized "host" service @@ -1099,7 +1105,7 @@ return false; } } - return (kerberosKeys != null); + return (kerberosKeys != null && kerberosKeys.length > 0); } catch (PrivilegedActionException e) { // Likely exception here is LoginExceptin if (debug != null && Debug.isOn("handshake")) { diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/SSLAlgorithmConstraints.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/SSLAlgorithmConstraints.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/SSLAlgorithmConstraints.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/SSLAlgorithmConstraints.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,455 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.security.ssl; + +import java.security.AlgorithmParameters; + +import javax.net.ssl.*; + +import java.security.Key; + +import java.util.Set; +import java.util.HashSet; + +import sun.security.util.AlgorithmConstraints; +import sun.security.util.CryptoPrimitive; +import sun.security.util.DisabledAlgorithmConstraints; +import sun.security.ssl.CipherSuite.*; + +/** + * Algorithm constraints for disabled algorithms property + * + * See the "jdk.certpath.disabledAlgorithms" specification in java.security + * for the syntax of the disabled algorithm string. + */ +final class SSLAlgorithmConstraints implements AlgorithmConstraints { + private final static AlgorithmConstraints tlsDisabledAlgConstraints = + new TLSDisabledAlgConstraints(); + private final static AlgorithmConstraints x509DisabledAlgConstraints = + new X509DisabledAlgConstraints(); + private AlgorithmConstraints userAlgConstraints = null; + private AlgorithmConstraints peerAlgConstraints = null; + + private boolean enabledX509DisabledAlgConstraints = true; + + // the default algorithm constraints + final static AlgorithmConstraints DEFAULT = + new SSLAlgorithmConstraints(null); + + // the default SSL only algorithm constraints + final static AlgorithmConstraints DEFAULT_SSL_ONLY = + new SSLAlgorithmConstraints((SSLSocket)null, false); + + SSLAlgorithmConstraints(AlgorithmConstraints algorithmConstraints) { + userAlgConstraints = algorithmConstraints; + } + + SSLAlgorithmConstraints(SSLSocket socket, + boolean withDefaultCertPathConstraints) { + if (!withDefaultCertPathConstraints) { + enabledX509DisabledAlgConstraints = false; + } + } + + SSLAlgorithmConstraints(SSLEngine engine, + boolean withDefaultCertPathConstraints) { + if (!withDefaultCertPathConstraints) { + enabledX509DisabledAlgConstraints = false; + } + } + + SSLAlgorithmConstraints(SSLSocket socket, String[] supportedAlgorithms, + boolean withDefaultCertPathConstraints) { + if (socket != null) { + peerAlgConstraints = + new SupportedSignatureAlgorithmConstraints(supportedAlgorithms); + } + + if (!withDefaultCertPathConstraints) { + enabledX509DisabledAlgConstraints = false; + } + } + + SSLAlgorithmConstraints(SSLEngine engine, String[] supportedAlgorithms, + boolean withDefaultCertPathConstraints) { + if (engine != null) { + peerAlgConstraints = + new SupportedSignatureAlgorithmConstraints(supportedAlgorithms); + } + + if (!withDefaultCertPathConstraints) { + enabledX509DisabledAlgConstraints = false; + } + } + + public boolean permits(Set primitives, + String algorithm, AlgorithmParameters parameters) { + + boolean permitted = true; + + if (peerAlgConstraints != null) { + permitted = peerAlgConstraints.permits( + primitives, algorithm, parameters); + } + + if (permitted && userAlgConstraints != null) { + permitted = userAlgConstraints.permits( + primitives, algorithm, parameters); + } + + if (permitted) { + permitted = tlsDisabledAlgConstraints.permits( + primitives, algorithm, parameters); + } + + if (permitted && enabledX509DisabledAlgConstraints) { + permitted = x509DisabledAlgConstraints.permits( + primitives, algorithm, parameters); + } + + return permitted; + } + + public boolean permits(Set primitives, Key key) { + + boolean permitted = true; + + if (peerAlgConstraints != null) { + permitted = peerAlgConstraints.permits(primitives, key); + } + + if (permitted && userAlgConstraints != null) { + permitted = userAlgConstraints.permits(primitives, key); + } + + if (permitted) { + permitted = tlsDisabledAlgConstraints.permits(primitives, key); + } + + if (permitted && enabledX509DisabledAlgConstraints) { + permitted = x509DisabledAlgConstraints.permits(primitives, key); + } + + return permitted; + } + + public boolean permits(Set primitives, + String algorithm, Key key, AlgorithmParameters parameters) { + + boolean permitted = true; + + if (peerAlgConstraints != null) { + permitted = peerAlgConstraints.permits( + primitives, algorithm, key, parameters); + } + + if (permitted && userAlgConstraints != null) { + permitted = userAlgConstraints.permits( + primitives, algorithm, key, parameters); + } + + if (permitted) { + permitted = tlsDisabledAlgConstraints.permits( + primitives, algorithm, key, parameters); + } + + if (permitted && enabledX509DisabledAlgConstraints) { + permitted = x509DisabledAlgConstraints.permits( + primitives, algorithm, key, parameters); + } + + return permitted; + } + + + static private class SupportedSignatureAlgorithmConstraints + implements AlgorithmConstraints { + // supported signature algorithms + private String[] supportedAlgorithms; + + SupportedSignatureAlgorithmConstraints(String[] supportedAlgorithms) { + if (supportedAlgorithms != null) { + this.supportedAlgorithms = supportedAlgorithms.clone(); + } else { + this.supportedAlgorithms = null; + } + } + + public boolean permits(Set primitives, + String algorithm, AlgorithmParameters parameters) { + + if (algorithm == null || algorithm.length() == 0) { + throw new IllegalArgumentException( + "No algorithm name specified"); + } + + if (primitives == null || primitives.isEmpty()) { + throw new IllegalArgumentException( + "No cryptographic primitive specified"); + } + + if (supportedAlgorithms == null || + supportedAlgorithms.length == 0) { + return false; + } + + // trim the MGF part: withand + int position = algorithm.indexOf("and"); + if (position > 0) { + algorithm = algorithm.substring(0, position); + } + + for (String supportedAlgorithm : supportedAlgorithms) { + if (algorithm.equalsIgnoreCase(supportedAlgorithm)) { + return true; + } + } + + return false; + } + + final public boolean permits(Set primitives, Key key) { + return true; + } + + final public boolean permits(Set primitives, + String algorithm, Key key, AlgorithmParameters parameters) { + + if (algorithm == null || algorithm.length() == 0) { + throw new IllegalArgumentException( + "No algorithm name specified"); + } + + return permits(primitives, algorithm, parameters); + } + } + + static private class BasicDisabledAlgConstraints + extends DisabledAlgorithmConstraints { + BasicDisabledAlgConstraints(String propertyName) { + super(propertyName); + } + + protected Set decomposes(KeyExchange keyExchange, + boolean forCertPathOnly) { + Set components = new HashSet(); + switch (keyExchange) { + case K_NULL: + if (!forCertPathOnly) { + components.add("NULL"); + } + break; + case K_RSA: + components.add("RSA"); + break; + case K_RSA_EXPORT: + components.add("RSA"); + components.add("RSA_EXPORT"); + break; + case K_DH_RSA: + components.add("RSA"); + components.add("DH"); + components.add("DiffieHellman"); + components.add("DH_RSA"); + break; + case K_DH_DSS: + components.add("DSA"); + components.add("DSS"); + components.add("DH"); + components.add("DiffieHellman"); + components.add("DH_DSS"); + break; + case K_DHE_DSS: + components.add("DSA"); + components.add("DSS"); + components.add("DH"); + components.add("DHE"); + components.add("DiffieHellman"); + components.add("DHE_DSS"); + break; + case K_DHE_RSA: + components.add("RSA"); + components.add("DH"); + components.add("DHE"); + components.add("DiffieHellman"); + components.add("DHE_RSA"); + break; + case K_DH_ANON: + if (!forCertPathOnly) { + components.add("ANON"); + components.add("DH"); + components.add("DiffieHellman"); + components.add("DH_ANON"); + } + break; + case K_ECDH_ECDSA: + components.add("ECDH"); + components.add("ECDSA"); + components.add("ECDH_ECDSA"); + break; + case K_ECDH_RSA: + components.add("ECDH"); + components.add("RSA"); + components.add("ECDH_RSA"); + break; + case K_ECDHE_ECDSA: + components.add("ECDHE"); + components.add("ECDSA"); + components.add("ECDHE_ECDSA"); + break; + case K_ECDHE_RSA: + components.add("ECDHE"); + components.add("RSA"); + components.add("ECDHE_RSA"); + break; + case K_ECDH_ANON: + if (!forCertPathOnly) { + components.add("ECDH"); + components.add("ANON"); + components.add("ECDH_ANON"); + } + break; + case K_KRB5: + if (!forCertPathOnly) { + components.add("KRB5"); + } + break; + case K_KRB5_EXPORT: + if (!forCertPathOnly) { + components.add("KRB5_EXPORT"); + } + break; + default: + // ignore + } + + return components; + } + + protected Set decomposes(BulkCipher bulkCipher) { + Set components = new HashSet(); + + if (bulkCipher.transformation != null) { + components.addAll(super.decomposes(bulkCipher.transformation)); + } + + return components; + } + + protected Set decomposes(MacAlg macAlg) { + Set components = new HashSet(); + + if (macAlg == CipherSuite.M_MD5) { + components.add("MD5"); + components.add("HmacMD5"); + } else if (macAlg == CipherSuite.M_SHA) { + components.add("SHA1"); + components.add("SHA-1"); + components.add("HmacSHA1"); + } + + return components; + } + } + + static private class TLSDisabledAlgConstraints + extends BasicDisabledAlgConstraints { + + TLSDisabledAlgConstraints() { + super(DisabledAlgorithmConstraints.PROPERTY_TLS_DISABLED_ALGS); + } + + @Override + protected Set decomposes(String algorithm) { + if (algorithm.startsWith("SSL_") || algorithm.startsWith("TLS_")) { + CipherSuite cipherSuite = null; + try { + cipherSuite = CipherSuite.valueOf(algorithm); + } catch (IllegalArgumentException iae) { + // ignore: unknown or unsupported ciphersuite + } + + if (cipherSuite != null) { + Set components = new HashSet(); + + if(cipherSuite.keyExchange != null) { + components.addAll( + decomposes(cipherSuite.keyExchange, false)); + } + + if (cipherSuite.cipher != null) { + components.addAll(decomposes(cipherSuite.cipher)); + } + + if (cipherSuite.macAlg != null) { + components.addAll(decomposes(cipherSuite.macAlg)); + } + + return components; + } + } + + return super.decomposes(algorithm); + } + } + + static private class X509DisabledAlgConstraints + extends BasicDisabledAlgConstraints { + + X509DisabledAlgConstraints() { + super(DisabledAlgorithmConstraints.PROPERTY_CERTPATH_DISABLED_ALGS); + } + + @Override + protected Set decomposes(String algorithm) { + if (algorithm.startsWith("SSL_") || algorithm.startsWith("TLS_")) { + CipherSuite cipherSuite = null; + try { + cipherSuite = CipherSuite.valueOf(algorithm); + } catch (IllegalArgumentException iae) { + // ignore: unknown or unsupported ciphersuite + } + + if (cipherSuite != null) { + Set components = new HashSet(); + + if(cipherSuite.keyExchange != null) { + components.addAll( + decomposes(cipherSuite.keyExchange, true)); + } + + // Certification path algorithm constraints do not apply + // to cipherSuite.cipher and cipherSuite.macAlg. + + return components; + } + } + + return super.decomposes(algorithm); + } + } +} + diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/SSLContextImpl.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/SSLContextImpl.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/SSLContextImpl.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/SSLContextImpl.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,12 +27,24 @@ import java.net.Socket; +import java.io.*; import java.security.*; import java.security.cert.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.TreeSet; import javax.net.ssl.*; -public class SSLContextImpl extends SSLContextSpi { +import sun.security.util.AlgorithmConstraints; +import sun.security.util.CryptoPrimitive; + +public abstract class SSLContextImpl extends SSLContextSpi { private static final Debug debug = Debug.getInstance("ssl"); @@ -46,20 +58,20 @@ private X509TrustManager trustManager; private SecureRandom secureRandom; - public SSLContextImpl() { - this(null); - } - - SSLContextImpl(SSLContextImpl other) { - if (other == null) { - ephemeralKeyManager = new EphemeralKeyManager(); - clientCache = new SSLSessionContextImpl(); - serverCache = new SSLSessionContextImpl(); - } else { - ephemeralKeyManager = other.ephemeralKeyManager; - clientCache = other.clientCache; - serverCache = other.serverCache; - } + // supported and default protocols + private ProtocolList defaultServerProtocolList; + private ProtocolList defaultClientProtocolList; + private ProtocolList supportedProtocolList; + + // supported and default cipher suites + private CipherSuiteList defaultServerCipherSuiteList; + private CipherSuiteList defaultClientCipherSuiteList; + private CipherSuiteList supportedCipherSuiteList; + + SSLContextImpl() { + ephemeralKeyManager = new EphemeralKeyManager(); + clientCache = new SSLSessionContextImpl(); + serverCache = new SSLSessionContextImpl(); } protected void engineInit(KeyManager[] km, TrustManager[] tm, @@ -127,7 +139,7 @@ throws KeyManagementException { for (int i = 0; kms != null && i < kms.length; i++) { KeyManager km = kms[i]; - if (km instanceof X509KeyManager == false) { + if (!(km instanceof X509KeyManager)) { continue; } if (SunJSSE.isFIPS()) { @@ -165,7 +177,7 @@ throw new IllegalStateException( "SSLContextImpl is not initialized"); } - return new SSLSocketFactoryImpl(this); + return new SSLSocketFactoryImpl(this); } protected SSLServerSocketFactory engineGetServerSocketFactory() { @@ -215,6 +227,528 @@ return ephemeralKeyManager; } + abstract SSLParameters getDefaultServerSSLParams(); + abstract SSLParameters getDefaultClientSSLParams(); + abstract SSLParameters getSupportedSSLParams(); + + // Get suported ProtoclList. + ProtocolList getSuportedProtocolList() { + if (supportedProtocolList == null) { + supportedProtocolList = + new ProtocolList(getSupportedSSLParams().getProtocols()); + } + + return supportedProtocolList; + } + + // Get default ProtoclList. + ProtocolList getDefaultProtocolList(boolean roleIsServer) { + if (roleIsServer) { + if (defaultServerProtocolList == null) { + defaultServerProtocolList = new ProtocolList( + getDefaultServerSSLParams().getProtocols()); + } + + return defaultServerProtocolList; + } else { + if (defaultClientProtocolList == null) { + defaultClientProtocolList = new ProtocolList( + getDefaultClientSSLParams().getProtocols()); + } + + return defaultClientProtocolList; + } + } + + // Get suported CipherSuiteList. + CipherSuiteList getSupportedCipherSuiteList() { + // The maintenance of cipher suites needs to be synchronized. + synchronized (this) { + // Clear cache of available ciphersuites. + clearAvailableCache(); + + if (supportedCipherSuiteList == null) { + supportedCipherSuiteList = getApplicableCipherSuiteList( + getSuportedProtocolList(), false); + } + + return supportedCipherSuiteList; + } + } + + // Get default CipherSuiteList. + CipherSuiteList getDefaultCipherSuiteList(boolean roleIsServer) { + // The maintenance of cipher suites needs to be synchronized. + synchronized (this) { + // Clear cache of available ciphersuites. + clearAvailableCache(); + + if (roleIsServer) { + if (defaultServerCipherSuiteList == null) { + defaultServerCipherSuiteList = getApplicableCipherSuiteList( + getDefaultProtocolList(true), true); + } + + return defaultServerCipherSuiteList; + } else { + if (defaultClientCipherSuiteList == null) { + defaultClientCipherSuiteList = getApplicableCipherSuiteList( + getDefaultProtocolList(false), true); + } + + return defaultClientCipherSuiteList; + } + } + } + + /** + * Return whether a protocol list is the original default enabled + * protocols. See: SSLSocket/SSLEngine.setEnabledProtocols() + */ + boolean isDefaultProtocolList(ProtocolList protocols) { + return (protocols == defaultServerProtocolList) || + (protocols == defaultClientProtocolList); + } + + + /* + * Return the list of all available CipherSuites with a priority of + * minPriority or above. + */ + private CipherSuiteList getApplicableCipherSuiteList( + ProtocolList protocols, boolean onlyEnabled) { + + int minPriority = CipherSuite.SUPPORTED_SUITES_PRIORITY; + if (onlyEnabled) { + minPriority = CipherSuite.DEFAULT_SUITES_PRIORITY; + } + + Collection allowedCipherSuites = + CipherSuite.allowedCipherSuites(); + + TreeSet suites = new TreeSet(); + if (!(protocols.collection().isEmpty()) && + protocols.min.v != ProtocolVersion.NONE.v) { + for (CipherSuite suite : allowedCipherSuites) { + if (!suite.allowed || suite.priority < minPriority) { + continue; + } + + if (suite.isAvailable() && + suite.obsoleted > protocols.min.v && + suite.supported <= protocols.max.v) { + if (SSLAlgorithmConstraints.DEFAULT.permits( + EnumSet.of(CryptoPrimitive.KEY_AGREEMENT), + suite.name, null)) { + suites.add(suite); + } + } else if (debug != null && + Debug.isOn("sslctx") && Debug.isOn("verbose")) { + if (suite.obsoleted <= protocols.min.v) { + System.out.println( + "Ignoring obsoleted cipher suite: " + suite); + } else if (suite.supported > protocols.max.v) { + System.out.println( + "Ignoring unsupported cipher suite: " + suite); + } else { + System.out.println( + "Ignoring unavailable cipher suite: " + suite); + } + } + } + } + + return new CipherSuiteList(suites); + } + + /** + * Clear cache of available ciphersuites. If we support all ciphers + * internally, there is no need to clear the cache and calling this + * method has no effect. + * + * Note that every call to clearAvailableCache() and the maintenance of + * cipher suites need to be synchronized with this instance. + */ + private void clearAvailableCache() { + if (CipherSuite.DYNAMIC_AVAILABILITY) { + supportedCipherSuiteList = null; + defaultServerCipherSuiteList = null; + defaultClientCipherSuiteList = null; + CipherSuite.BulkCipher.clearAvailableCache(); + JsseJce.clearEcAvailable(); + } + } + + static String[] getAvailableProtocols( + ProtocolVersion[] protocolCandidates) { + + List availableProtocols = Collections.emptyList(); + if (protocolCandidates != null && protocolCandidates.length != 0) { + availableProtocols = new ArrayList(protocolCandidates.length); + for (ProtocolVersion p : protocolCandidates) { + if (ProtocolVersion.availableProtocols.contains(p)) { + availableProtocols.add(p.name); + } + } + } + + return availableProtocols.toArray(new String[0]); + } + + /* + * The SSLContext implementation for TLS/SSL algorithm + * + * SSL/TLS protocols specify the forward compatibility and version + * roll-back attack protections, however, a number of SSL/TLS server + * vendors did not implement these aspects properly, and some current + * SSL/TLS servers may refuse to talk to a TLS 1.1 or later client. + * + * Considering above interoperability issues, SunJSSE will not set + * TLS 1.1 and TLS 1.2 as the enabled protocols for client by default. + * + * For SSL/TLS servers, there is no such interoperability issues as + * SSL/TLS clients. In SunJSSE, TLS 1.1 or later version will be the + * enabled protocols for server by default. + * + * We may change the behavior when popular TLS/SSL vendors support TLS + * forward compatibility properly. + * + * SSLv2Hello is no longer necessary. This interoperability option was + * put in place in the late 90's when SSLv3/TLS1.0 were relatively new + * and there were a fair number of SSLv2-only servers deployed. Because + * of the security issues in SSLv2, it is rarely (if ever) used, as + * deployments should now be using SSLv3 and TLSv1. + * + * Considering the issues of SSLv2Hello, we should not enable SSLv2Hello + * by default. Applications still can use it by enabling SSLv2Hello with + * the series of setEnabledProtocols APIs. + */ + + /* + * The conservative SSLContext implementation for TLS, SSL, SSLv3 and + * TLS10 algorithm. + * + * This is a super class of DefaultSSLContext and TLS10Context. + * + * @see SSLContext + */ + private static class ConservativeSSLContext extends SSLContextImpl { + // parameters + private static final SSLParameters defaultServerSSLParams; + private static final SSLParameters defaultClientSSLParams; + private static final SSLParameters supportedSSLParams; + + static { + // supported SSL parameters + supportedSSLParams = new SSLParameters(); + + // candidates for available protocols + ProtocolVersion[] serverCandidates; + ProtocolVersion[] clientCandidates; + + if (SunJSSE.isFIPS()) { + supportedSSLParams.setProtocols(new String[] { + ProtocolVersion.TLS10.name, + ProtocolVersion.TLS11.name, + }); + + serverCandidates = new ProtocolVersion[] { + ProtocolVersion.TLS10, + ProtocolVersion.TLS11 + }; + + clientCandidates = new ProtocolVersion[] { + ProtocolVersion.TLS10 + }; + } else { + supportedSSLParams.setProtocols(new String[] { + ProtocolVersion.SSL20Hello.name, + ProtocolVersion.SSL30.name, + ProtocolVersion.TLS10.name, + ProtocolVersion.TLS11.name, + }); + + serverCandidates = new ProtocolVersion[] { + ProtocolVersion.SSL20Hello, + ProtocolVersion.SSL30, + ProtocolVersion.TLS10, + ProtocolVersion.TLS11 + }; + + clientCandidates = new ProtocolVersion[] { + ProtocolVersion.SSL30, + ProtocolVersion.TLS10 + }; + } + + defaultClientSSLParams = new SSLParameters(); + defaultClientSSLParams.setProtocols( + getAvailableProtocols(clientCandidates)); + + defaultServerSSLParams = new SSLParameters(); + defaultServerSSLParams.setProtocols( + getAvailableProtocols(serverCandidates)); + } + + SSLParameters getDefaultServerSSLParams() { + return defaultServerSSLParams; + } + + SSLParameters getDefaultClientSSLParams() { + return defaultClientSSLParams; + } + + SSLParameters getSupportedSSLParams() { + return supportedSSLParams; + } + } + + /* + * The SSLContext implementation for default algorithm + * + * @see SSLContext + */ + public static final class DefaultSSLContext extends ConservativeSSLContext { + private static final String NONE = "NONE"; + private static final String P11KEYSTORE = "PKCS11"; + + private static volatile SSLContextImpl defaultImpl; + + private static TrustManager[] defaultTrustManagers; + private static KeyManager[] defaultKeyManagers; + + public DefaultSSLContext() throws Exception { + try { + super.engineInit(getDefaultKeyManager(), + getDefaultTrustManager(), null); + } catch (Exception e) { + if (debug != null && Debug.isOn("defaultctx")) { + System.out.println("default context init failed: " + e); + } + throw e; + } + + if (defaultImpl == null) { + defaultImpl = this; + } + } + + protected void engineInit(KeyManager[] km, TrustManager[] tm, + SecureRandom sr) throws KeyManagementException { + throw new KeyManagementException + ("Default SSLContext is initialized automatically"); + } + + static synchronized SSLContextImpl getDefaultImpl() throws Exception { + if (defaultImpl == null) { + new DefaultSSLContext(); + } + return defaultImpl; + } + + private static synchronized TrustManager[] getDefaultTrustManager() + throws Exception { + if (defaultTrustManagers != null) { + return defaultTrustManagers; + } + + KeyStore ks = + TrustManagerFactoryImpl.getCacertsKeyStore("defaultctx"); + + TrustManagerFactory tmf = TrustManagerFactory.getInstance( + TrustManagerFactory.getDefaultAlgorithm()); + tmf.init(ks); + defaultTrustManagers = tmf.getTrustManagers(); + return defaultTrustManagers; + } + + private static synchronized KeyManager[] getDefaultKeyManager() + throws Exception { + if (defaultKeyManagers != null) { + return defaultKeyManagers; + } + + final Map props = new HashMap(); + AccessController.doPrivileged( + new PrivilegedExceptionAction() { + public Object run() throws Exception { + props.put("keyStore", System.getProperty( + "javax.net.ssl.keyStore", "")); + props.put("keyStoreType", System.getProperty( + "javax.net.ssl.keyStoreType", + KeyStore.getDefaultType())); + props.put("keyStoreProvider", System.getProperty( + "javax.net.ssl.keyStoreProvider", "")); + props.put("keyStorePasswd", System.getProperty( + "javax.net.ssl.keyStorePassword", "")); + return null; + } + }); + + final String defaultKeyStore = props.get("keyStore"); + String defaultKeyStoreType = props.get("keyStoreType"); + String defaultKeyStoreProvider = props.get("keyStoreProvider"); + if (debug != null && Debug.isOn("defaultctx")) { + System.out.println("keyStore is : " + defaultKeyStore); + System.out.println("keyStore type is : " + + defaultKeyStoreType); + System.out.println("keyStore provider is : " + + defaultKeyStoreProvider); + } + + if (P11KEYSTORE.equals(defaultKeyStoreType) && + !NONE.equals(defaultKeyStore)) { + throw new IllegalArgumentException("if keyStoreType is " + + P11KEYSTORE + ", then keyStore must be " + NONE); + } + + FileInputStream fs = null; + if (defaultKeyStore.length() != 0 && !NONE.equals(defaultKeyStore)) { + fs = AccessController.doPrivileged( + new PrivilegedExceptionAction() { + public FileInputStream run() throws Exception { + return new FileInputStream(defaultKeyStore); + } + }); + } + + String defaultKeyStorePassword = props.get("keyStorePasswd"); + char[] passwd = null; + if (defaultKeyStorePassword.length() != 0) { + passwd = defaultKeyStorePassword.toCharArray(); + } + + /** + * Try to initialize key store. + */ + KeyStore ks = null; + if ((defaultKeyStoreType.length()) != 0) { + if (debug != null && Debug.isOn("defaultctx")) { + System.out.println("init keystore"); + } + if (defaultKeyStoreProvider.length() == 0) { + ks = KeyStore.getInstance(defaultKeyStoreType); + } else { + ks = KeyStore.getInstance(defaultKeyStoreType, + defaultKeyStoreProvider); + } + + // if defaultKeyStore is NONE, fs will be null + ks.load(fs, passwd); + } + if (fs != null) { + fs.close(); + fs = null; + } + + /* + * Try to initialize key manager. + */ + if (debug != null && Debug.isOn("defaultctx")) { + System.out.println("init keymanager of type " + + KeyManagerFactory.getDefaultAlgorithm()); + } + KeyManagerFactory kmf = KeyManagerFactory.getInstance( + KeyManagerFactory.getDefaultAlgorithm()); + + if (P11KEYSTORE.equals(defaultKeyStoreType)) { + kmf.init(ks, null); // do not pass key passwd if using token + } else { + kmf.init(ks, passwd); + } + + defaultKeyManagers = kmf.getKeyManagers(); + return defaultKeyManagers; + } + } + + /* + * The SSLContext implementation for TLS, SSL, SSLv3 and TLS10 algorithm + * + * @see SSLContext + */ + public static final class TLS10Context extends ConservativeSSLContext { + // use the default constructor and methods + } + + /* + * The SSLContext implementation for TLS11 algorithm + * + * @see SSLContext + */ + public static final class TLS11Context extends SSLContextImpl { + // parameters + private static final SSLParameters defaultServerSSLParams; + private static final SSLParameters defaultClientSSLParams; + private static final SSLParameters supportedSSLParams; + + static { + // supported SSL parameters + supportedSSLParams = new SSLParameters(); + + // candidates for available protocols + ProtocolVersion[] serverCandidates; + ProtocolVersion[] clientCandidates; + + if (SunJSSE.isFIPS()) { + supportedSSLParams.setProtocols(new String[] { + ProtocolVersion.TLS10.name, + ProtocolVersion.TLS11.name, + }); + + serverCandidates = new ProtocolVersion[] { + ProtocolVersion.TLS10, + ProtocolVersion.TLS11, + }; + + clientCandidates = new ProtocolVersion[] { + ProtocolVersion.TLS10, + ProtocolVersion.TLS11 + }; + } else { + supportedSSLParams.setProtocols(new String[] { + ProtocolVersion.SSL20Hello.name, + ProtocolVersion.SSL30.name, + ProtocolVersion.TLS10.name, + ProtocolVersion.TLS11.name, + }); + + serverCandidates = new ProtocolVersion[] { + ProtocolVersion.SSL20Hello, + ProtocolVersion.SSL30, + ProtocolVersion.TLS10, + ProtocolVersion.TLS11, + }; + + clientCandidates = new ProtocolVersion[] { + ProtocolVersion.SSL30, + ProtocolVersion.TLS10, + ProtocolVersion.TLS11 + }; + } + + defaultClientSSLParams = new SSLParameters(); + defaultClientSSLParams.setProtocols( + getAvailableProtocols(clientCandidates)); + + defaultServerSSLParams = new SSLParameters(); + defaultServerSSLParams.setProtocols( + getAvailableProtocols(serverCandidates)); + } + + SSLParameters getDefaultServerSSLParams() { + return defaultServerSSLParams; + } + + SSLParameters getDefaultClientSSLParams() { + return defaultClientSSLParams; + } + + SSLParameters getSupportedSSLParams() { + return supportedSSLParams; + } + } + } // Dummy X509TrustManager implementation, rejects all peer certificates. diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/SSLEngineImpl.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/SSLEngineImpl.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/SSLEngineImpl.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/SSLEngineImpl.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -213,6 +213,11 @@ static final byte clauth_required = 2; /* + * Flag indicating that the engine has received a ChangeCipherSpec message. + */ + private boolean receivedCCS; + + /* * Flag indicating if the next record we receive MUST be a Finished * message. Temporarily set during the handshake to ensure that * a change cipher spec message is followed by a finished message. @@ -240,12 +245,14 @@ * session is changed. */ private byte doClientAuth; - private CipherSuiteList enabledCipherSuites; private boolean enableSessionCreation = true; EngineInputRecord inputRecord; EngineOutputRecord outputRecord; private AccessControlContext acc; + // The cipher suites enabled for use on this connection. + private CipherSuiteList enabledCipherSuites; + // hostname identification algorithm, the hostname identification is // disabled by default. private String identificationAlg = null; @@ -255,11 +262,11 @@ private boolean roleIsServer; /* - * The protocols we support are SSL Version 3.0) and - * TLS (version 3.1). - * In addition we support a pseudo protocol called - * SSLv2Hello which when set will result in an SSL v2 Hello - * being sent with SSLv3 or TLSv1 version info. + * The protocol versions enabled for use on this connection. + * + * Note: we support a pseudo protocol called SSLv2Hello which when + * set will result in an SSL v2 Hello being sent with SSL (version 3.0) + * or TLS (version 3.1, 3.2, etc.) version info. */ private ProtocolList enabledProtocols; @@ -356,6 +363,7 @@ */ roleIsServer = true; connectionState = cs_START; + receivedCCS = false; /* * default read and write side cipher and MAC support @@ -372,8 +380,10 @@ clientVerifyData = new byte[0]; serverVerifyData = new byte[0]; - enabledCipherSuites = CipherSuiteList.getDefault(); - enabledProtocols = ProtocolList.getDefault(); + enabledCipherSuites = + sslContext.getDefaultCipherSuiteList(roleIsServer); + enabledProtocols = + sslContext.getDefaultProtocolList(roleIsServer); wrapLock = new Object(); unwrapLock = new Object(); @@ -410,8 +420,8 @@ * . if the engine is already closed, throw an Exception (internal error) * * . otherwise (cs_START or cs_DATA), create the appropriate handshaker - * object, initialize it, and advance the connection state (to - * cs_HANDSHAKE or cs_RENEGOTIATE, respectively). + * object and advance the connection state (to cs_HANDSHAKE or + * cs_RENEGOTIATE, respectively). * * This method is called right after a new engine is created, when * starting renegotiation, or when changing client/server mode of the @@ -459,12 +469,8 @@ protocolVersion, connectionState == cs_HANDSHAKE, secureRenegotiation, clientVerifyData, serverVerifyData); } - handshaker.enabledCipherSuites = enabledCipherSuites; + handshaker.setEnabledCipherSuites(enabledCipherSuites); handshaker.setEnableSessionCreation(enableSessionCreation); - if (connectionState == cs_RENEGOTIATE) { - // don't use SSLv2Hello when renegotiating - handshaker.output.r.setHelloVersion(protocolVersion); - } } /* @@ -677,7 +683,15 @@ // to its HandshakeOutStream, which calls back into // SSLSocketImpl.writeRecord() to send it. // - if (!handshaker.started()) { + if (!handshaker.activated()) { + // prior to handshaking, activate the handshake + if (connectionState == cs_RENEGOTIATE) { + // don't use SSLv2Hello when renegotiating + handshaker.activate(protocolVersion); + } else { + handshaker.activate(null); + } + if (handshaker instanceof ClientHandshaker) { // send client hello handshaker.kickstart(); @@ -687,6 +701,7 @@ } else { // we want to renegotiate, send hello request handshaker.kickstart(); + // hello request is not included in the handshake // hashes, reset them handshaker.handshakeHash.reset(); @@ -952,6 +967,15 @@ * in it. */ initHandshaker(); + if (!handshaker.activated()) { + // prior to handshaking, activate the handshake + if (connectionState == cs_RENEGOTIATE) { + // don't use SSLv2Hello when renegotiating + handshaker.activate(protocolVersion); + } else { + handshaker.activate(null); + } + } /* * process the handshake record ... may contain just @@ -965,6 +989,7 @@ if (handshaker.invalidated) { handshaker = null; + receivedCCS = false; // if state is cs_RENEGOTIATE, revert it to cs_DATA if (connectionState == cs_RENEGOTIATE) { connectionState = cs_DATA; @@ -982,6 +1007,7 @@ } handshaker = null; connectionState = cs_DATA; + receivedCCS = false; // No handshakeListeners here. That's a // SSLSocket thing. @@ -1021,13 +1047,25 @@ case Record.ct_change_cipher_spec: if ((connectionState != cs_HANDSHAKE && connectionState != cs_RENEGOTIATE) - || inputRecord.available() != 1 + || !handshaker.sessionKeysCalculated() + || receivedCCS) { + // For the CCS message arriving in the wrong state + fatal(Alerts.alert_unexpected_message, + "illegal change cipher spec msg, conn state = " + + connectionState + ", handshake state = " + + handshaker.state); + } else if (inputRecord.available() != 1 || inputRecord.read() != 1) { + // For structural/content issues with the CCS fatal(Alerts.alert_unexpected_message, - "illegal change cipher spec msg, state = " - + connectionState); + "Malformed change cipher spec msg"); } + // Once we've received CCS, update the flag. + // If the remote endpoint sends it again in this handshake + // we won't process it. + receivedCCS = true; + // // The first message after a change_cipher_spec // record MUST be a "Finished" handshake record, @@ -1051,6 +1089,26 @@ } break; } // switch + + /* + * We only need to check the sequence number state for + * non-handshaking record. + * + * Note that in order to maintain the handshake status + * properly, we check the sequence number after the last + * record reading process. As we request renegotiation + * or close the connection for wrapped sequence number + * when there is enough sequence number space left to + * handle a few more records, so the sequence number + * of the last record cannot be wrapped. + */ + if (connectionState < cs_ERROR && !isInboundDone() && + (hsStatus == HandshakeStatus.NOT_HANDSHAKING)) { + if (checkSequenceNumber(readMAC, + inputRecord.contentType())) { + hsStatus = getHSStatus(null); + } + } } // synchronized (this) } @@ -1203,6 +1261,25 @@ writer.writeRecord(eor, ea, writeMAC, writeCipher); /* + * We only need to check the sequence number state for + * non-handshaking record. + * + * Note that in order to maintain the handshake status + * properly, we check the sequence number after the last + * record writing process. As we request renegotiation + * or close the connection for wrapped sequence number + * when there is enough sequence number space left to + * handle a few more records, so the sequence number + * of the last record cannot be wrapped. + */ + if (connectionState < cs_ERROR && !isOutboundDone() && + (hsStatus == HandshakeStatus.NOT_HANDSHAKING)) { + if (checkSequenceNumber(writeMAC, eor.contentType())) { + hsStatus = getHSStatus(null); + } + } + + /* * turn off the flag of the first application record if we really * consumed at least byte. */ @@ -1237,6 +1314,21 @@ void writeRecord(EngineOutputRecord eor) throws IOException { // eventually compress as well. writer.writeRecord(eor, writeMAC, writeCipher); + + /* + * Check the sequence number state + * + * Note that in order to maintain the connection I/O + * properly, we check the sequence number after the last + * record writing process. As we request renegotiation + * or close the connection for wrapped sequence number + * when there is enough sequence number space left to + * handle a few more records, so the sequence number + * of the last record cannot be wrapped. + */ + if ((connectionState < cs_ERROR) && !isOutboundDone()) { + checkSequenceNumber(writeMAC, eor.contentType()); + } } // @@ -1244,6 +1336,67 @@ // /** + * Check the sequence number state + * + * RFC 4346 states that, "Sequence numbers are of type uint64 and + * may not exceed 2^64-1. Sequence numbers do not wrap. If a TLS + * implementation would need to wrap a sequence number, it must + * renegotiate instead." + * + * Return true if the handshake status may be changed. + */ + private boolean checkSequenceNumber(MAC mac, byte type) + throws IOException { + + /* + * Don't bother to check the sequence number for error or + * closed connections, or NULL MAC + */ + if (connectionState >= cs_ERROR || mac == MAC.NULL) { + return false; + } + + /* + * Conservatively, close the connection immediately when the + * sequence number is close to overflow + */ + if (mac.seqNumOverflow()) { + /* + * TLS protocols do not define a error alert for sequence + * number overflow. We use handshake_failure error alert + * for handshaking and bad_record_mac for other records. + */ + if (debug != null && Debug.isOn("ssl")) { + System.out.println(threadName() + + ", sequence number extremely close to overflow " + + "(2^64-1 packets). Closing connection."); + } + + fatal(Alerts.alert_handshake_failure, "sequence number overflow"); + + return true; // make the compiler happy + } + + /* + * Ask for renegotiation when need to renew sequence number. + * + * Don't bother to kickstart the renegotiation when the local is + * asking for it. + */ + if ((type != Record.ct_handshake) && mac.seqNumIsHuge()) { + if (debug != null && Debug.isOn("ssl")) { + System.out.println(threadName() + ", request renegotiation " + + "to avoid sequence number overflow"); + } + + beginHandshake(); + return true; + } + + return false; + } + + /** * Signals that no more outbound application data will be sent * on this SSLEngine. */ @@ -1582,10 +1735,18 @@ * Emit alerts. Caller must have synchronized with "this". */ private void sendAlert(byte level, byte description) { + // the connectionState cannot be cs_START if (connectionState >= cs_CLOSED) { return; } + // For initial handshaking, don't send alert message to peer if + // handshaker has not started. + if (connectionState == cs_HANDSHAKE && + (handshaker == null || !handshaker.started())) { + return; + } + EngineOutputRecord r = new EngineOutputRecord(Record.ct_alert, this); r.setVersion(protocolVersion); @@ -1635,7 +1796,7 @@ synchronized public void setEnableSessionCreation(boolean flag) { enableSessionCreation = flag; - if ((handshaker != null) && !handshaker.started()) { + if ((handshaker != null) && !handshaker.activated()) { handshaker.setEnableSessionCreation(enableSessionCreation); } } @@ -1663,7 +1824,7 @@ if ((handshaker != null) && (handshaker instanceof ServerHandshaker) && - !handshaker.started()) { + !handshaker.activated()) { ((ServerHandshaker) handshaker).setClientAuth(doClientAuth); } } @@ -1686,7 +1847,7 @@ if ((handshaker != null) && (handshaker instanceof ServerHandshaker) && - !handshaker.started()) { + !handshaker.activated()) { ((ServerHandshaker) handshaker).setClientAuth(doClientAuth); } } @@ -1705,6 +1866,16 @@ switch (connectionState) { case cs_START: + /* + * If we need to change the engine mode and the enabled + * protocols haven't specifically been set by the user, + * change them to the corresponding default ones. + */ + if (roleIsServer != (!flag) && + sslContext.isDefaultProtocolList(enabledProtocols)) { + enabledProtocols = sslContext.getDefaultProtocolList(!flag); + } + roleIsServer = !flag; serverModeSet = true; break; @@ -1718,7 +1889,17 @@ * have the streams. */ assert(handshaker != null); - if (!handshaker.started()) { + if (!handshaker.activated()) { + /* + * If we need to change the engine mode and the enabled + * protocols haven't specifically been set by the user, + * change them to the corresponding default ones. + */ + if (roleIsServer != (!flag) && + sslContext.isDefaultProtocolList(enabledProtocols)) { + enabledProtocols = sslContext.getDefaultProtocolList(!flag); + } + roleIsServer = !flag; connectionState = cs_START; initHandshaker(); @@ -1759,8 +1940,7 @@ * @return an array of cipher suite names */ public String[] getSupportedCipherSuites() { - CipherSuiteList.clearAvailableCache(); - return CipherSuiteList.getSupported().toStringArray(); + return sslContext.getSupportedCipherSuiteList().toStringArray(); } /** @@ -1774,8 +1954,8 @@ */ synchronized public void setEnabledCipherSuites(String[] suites) { enabledCipherSuites = new CipherSuiteList(suites); - if ((handshaker != null) && !handshaker.started()) { - handshaker.enabledCipherSuites = enabledCipherSuites; + if ((handshaker != null) && !handshaker.activated()) { + handshaker.setEnabledCipherSuites(enabledCipherSuites); } } @@ -1800,7 +1980,7 @@ * @ returns an array of protocol names. */ public String[] getSupportedProtocols() { - return ProtocolList.getSupported().toStringArray(); + return sslContext.getSuportedProtocolList().toStringArray(); } /** @@ -1814,7 +1994,7 @@ */ synchronized public void setEnabledProtocols(String[] protocols) { enabledProtocols = new ProtocolList(protocols); - if ((handshaker != null) && !handshaker.started()) { + if ((handshaker != null) && !handshaker.activated()) { handshaker.setEnabledProtocols(enabledProtocols); } } @@ -1855,6 +2035,14 @@ return Thread.currentThread().getName(); } + /* + * Returns a boolean indicating whether the ChangeCipherSpec message + * has been received for this handshake. + */ + boolean receivedChangeCipherSpec() { + return receivedCCS; + } + /** * Returns a printable representation of this end of the connection. */ diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/SSLServerSocketFactoryImpl.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/SSLServerSocketFactoryImpl.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/SSLServerSocketFactoryImpl.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/SSLServerSocketFactoryImpl.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,7 +49,7 @@ * java.security file is set. */ public SSLServerSocketFactoryImpl() throws Exception { - this.context = DefaultSSLContextImpl.getDefaultImpl(); + this.context = SSLContextImpl.DefaultSSLContext.getDefaultImpl(); } /** @@ -99,8 +99,7 @@ * is encrypted to provide confidentiality. */ public String[] getDefaultCipherSuites() { - CipherSuiteList.clearAvailableCache(); - return CipherSuiteList.getDefault().toStringArray(); + return context.getDefaultCipherSuiteList(true).toStringArray(); } /** @@ -114,8 +113,7 @@ * @return an array of cipher suite names */ public String[] getSupportedCipherSuites() { - CipherSuiteList.clearAvailableCache(); - return CipherSuiteList.getSupported().toStringArray(); + return context.getSupportedCipherSuiteList().toStringArray(); } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/SSLServerSocketImpl.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/SSLServerSocketImpl.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/SSLServerSocketImpl.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/SSLServerSocketImpl.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -144,8 +144,8 @@ throw new SSLException("No Authentication context given"); } sslContext = context; - enabledCipherSuites = CipherSuiteList.getDefault(); - enabledProtocols = ProtocolList.getDefault(); + enabledCipherSuites = sslContext.getDefaultCipherSuiteList(true); + enabledProtocols = sslContext.getDefaultProtocolList(true); } /** @@ -159,8 +159,7 @@ * @return an array of cipher suite names */ public String[] getSupportedCipherSuites() { - CipherSuiteList.clearAvailableCache(); - return CipherSuiteList.getSupported().toStringArray(); + return sslContext.getSupportedCipherSuiteList().toStringArray(); } /** @@ -185,7 +184,7 @@ } public String[] getSupportedProtocols() { - return ProtocolList.getSupported().toStringArray(); + return sslContext.getSuportedProtocolList().toStringArray(); } /** @@ -238,6 +237,16 @@ * rejoining the already-negotiated SSL connection. */ public void setUseClientMode(boolean flag) { + /* + * If we need to change the socket mode and the enabled + * protocols haven't specifically been set by the user, + * change them to the corresponding default ones. + */ + if (useServerMode != (!flag) && + sslContext.isDefaultProtocolList(enabledProtocols)) { + enabledProtocols = sslContext.getDefaultProtocolList(!flag); + } + useServerMode = !flag; } @@ -262,15 +271,12 @@ return enableSessionCreation; } - /** * Accept a new SSL connection. This server identifies itself with * information provided in the authentication context which was * presented during construction. */ public Socket accept() throws IOException { - checkEnabledSuites(); - SSLSocketImpl s = new SSLSocketImpl(sslContext, useServerMode, enabledCipherSuites, doClientAuth, enableSessionCreation, enabledProtocols); @@ -280,56 +286,6 @@ return s; } - - /* - * This is a sometimes helpful diagnostic check that is performed - * once for each ServerSocket to verify that the initial set of - * enabled suites are capable of supporting a successful handshake. - */ - private void checkEnabledSuites() throws IOException { - // - // We want to report an error if no cipher suites were actually - // enabled, since this is an error users are known to make. Then - // they get vastly confused by having clients report an error! - // - synchronized (this) { - if (checkedEnabled) { - return; - } - if (useServerMode == false) { - return; - } - - SSLSocketImpl tmp = new SSLSocketImpl(sslContext, useServerMode, - enabledCipherSuites, doClientAuth, - enableSessionCreation, enabledProtocols); - - try { - ServerHandshaker handshaker = tmp.getServerHandshaker(); - - for (Iterator t = enabledCipherSuites.iterator(); - t.hasNext();) { - CipherSuite suite = t.next(); - if (handshaker.trySetCipherSuite(suite)) { - checkedEnabled = true; - return; - } - } - } finally { - tmp.closeSocket(); - } - - // - // diagnostic text here is currently appropriate - // since it's only certificate unavailability that can - // cause such problems ... but that might change someday. - // - throw new SSLException("No available certificate or key corresponds" - + " to the SSL cipher suites which are enabled."); - } - } - - /** * Provides a brief description of this SSL socket. */ diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/SSLSocketFactoryImpl.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/SSLSocketFactoryImpl.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/SSLSocketFactoryImpl.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/SSLSocketFactoryImpl.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,20 +42,18 @@ * * @author David Brownell */ -final -public class SSLSocketFactoryImpl extends SSLSocketFactory -{ +final public class SSLSocketFactoryImpl extends SSLSocketFactory { + private static SSLContextImpl defaultContext; private SSLContextImpl context; - /** * Constructor used to instantiate the default factory. This method is * only called if the old "ssl.SocketFactory.provider" property in the * java.security file is set. */ public SSLSocketFactoryImpl() throws Exception { - this.context = DefaultSSLContextImpl.getDefaultImpl(); + this.context = SSLContextImpl.DefaultSSLContext.getDefaultImpl(); } /** @@ -167,11 +165,9 @@ * is encrypted to provide confidentiality. */ public String[] getDefaultCipherSuites() { - CipherSuiteList.clearAvailableCache(); - return CipherSuiteList.getDefault().toStringArray(); + return context.getDefaultCipherSuiteList(false).toStringArray(); } - /** * Returns the names of the cipher suites which could be enabled for use * on an SSL connection. Normally, only a subset of these will actually @@ -181,7 +177,6 @@ * certain kinds of certificates to use certain cipher suites. */ public String[] getSupportedCipherSuites() { - CipherSuiteList.clearAvailableCache(); - return CipherSuiteList.getSupported().toStringArray(); + return context.getSupportedCipherSuiteList().toStringArray(); } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -174,6 +174,12 @@ private int connectionState; /* + * Flag indicating that the engine's handshaker has done the necessary + * steps so the engine may process a ChangeCipherSpec message. + */ + private boolean receivedCCS; + + /* * Flag indicating if the next record we receive MUST be a Finished * message. Temporarily set during the handshake to ensure that * a change cipher spec message is followed by a finished message. @@ -194,12 +200,14 @@ */ private byte doClientAuth; private boolean roleIsServer; - private CipherSuiteList enabledCipherSuites; private boolean enableSessionCreation = true; private String host; private boolean autoClose = true; private AccessControlContext acc; + // The cipher suites enabled for use on this connection. + private CipherSuiteList enabledCipherSuites; + // hostname identification algorithm, the hostname identification is // disabled by default. private String identificationAlg = null; @@ -342,11 +350,11 @@ private AppOutputStream output; /* - * The protocols we support are SSL Version 3.0) and - * TLS (version 3.1). - * In addition we support a pseudo protocol called - * SSLv2Hello which when set will result in an SSL v2 Hello - * being sent with SSLv3 or TLSv1 version info. + * The protocol versions enabled for use on this connection. + * + * Note: we support a pseudo protocol called SSLv2Hello which when + * set will result in an SSL v2 Hello being sent with SSL (version 3.0) + * or TLS (version 3.1, 3.2, etc.) version info. */ private ProtocolList enabledProtocols; @@ -532,6 +540,7 @@ */ roleIsServer = isServer; connectionState = cs_START; + receivedCCS = false; /* * default read and write side cipher and MAC support @@ -548,8 +557,11 @@ clientVerifyData = new byte[0]; serverVerifyData = new byte[0]; - enabledCipherSuites = CipherSuiteList.getDefault(); - enabledProtocols = ProtocolList.getDefault(); + enabledCipherSuites = + sslContext.getDefaultCipherSuiteList(roleIsServer); + enabledProtocols = + sslContext.getDefaultProtocolList(roleIsServer); + inrec = null; // save the acc @@ -800,6 +812,21 @@ } r.write(sockOutput, holdRecord, heldRecordBuffer); + /* + * Check the sequence number state + * + * Note that in order to maintain the connection I/O + * properly, we check the sequence number after the last + * record writing process. As we request renegotiation + * or close the connection for wrapped sequence number + * when there is enough sequence number space left to + * handle a few more records, so the sequence number + * of the last record cannot be wrapped. + */ + if (connectionState < cs_ERROR) { + checkSequenceNumber(writeMAC, r.contentType()); + } + // turn off the flag of the first application record if (isFirstAppOutputRecord && r.contentType() == Record.ct_application_data) { @@ -930,6 +957,7 @@ fatal(alertType, e.getMessage(), e); } + // if (!r.decompress(c)) // fatal(Alerts.alert_decompression_failure, // "decompression failure"); @@ -952,6 +980,15 @@ * in it. */ initHandshaker(); + if (!handshaker.activated()) { + // prior to handshaking, activate the handshake + if (connectionState == cs_RENEGOTIATE) { + // don't use SSLv2Hello when renegotiating + handshaker.activate(protocolVersion); + } else { + handshaker.activate(null); + } + } /* * process the handshake record ... may contain just @@ -965,6 +1002,7 @@ if (handshaker.invalidated) { handshaker = null; + receivedCCS = false; // if state is cs_RENEGOTIATE, revert it to cs_DATA if (connectionState == cs_RENEGOTIATE) { connectionState = cs_DATA; @@ -979,6 +1017,7 @@ sess = handshaker.getSession(); handshaker = null; connectionState = cs_DATA; + receivedCCS = false; // // Tell folk about handshake completion, but do @@ -996,9 +1035,8 @@ if (needAppData || connectionState != cs_DATA) { continue; - } else { - return; } + break; case Record.ct_application_data: // Pass this right back up to the application. @@ -1018,7 +1056,7 @@ } r.setAppDataValid(true); - return; + break; case Record.ct_alert: recvAlert(r); @@ -1027,13 +1065,24 @@ case Record.ct_change_cipher_spec: if ((connectionState != cs_HANDSHAKE && connectionState != cs_RENEGOTIATE) - || r.available() != 1 - || r.read() != 1) { + || !handshaker.sessionKeysCalculated() + || receivedCCS) { + // For the CCS message arriving in the wrong state fatal(Alerts.alert_unexpected_message, - "illegal change cipher spec msg, state = " - + connectionState); + "illegal change cipher spec msg, conn state = " + + connectionState + ", handshake state = " + + handshaker.state); + } else if (r.available() != 1 || r.read() != 1) { + // For structural/content issues with the CCS + fatal(Alerts.alert_unexpected_message, + "Malformed change cipher spec msg"); } + // Once we've received CCS, update the flag. + // If the remote endpoint sends it again in this handshake + // we won't process it. + receivedCCS = true; + // // The first message after a change_cipher_spec // record MUST be a "Finished" handshake record, @@ -1057,6 +1106,23 @@ } continue; } // switch + + /* + * Check the sequence number state + * + * Note that in order to maintain the connection I/O + * properly, we check the sequence number after the last + * record reading process. As we request renegotiation + * or close the connection for wrapped sequence number + * when there is enough sequence number space left to + * handle a few more records, so the sequence number + * of the last record cannot be wrapped. + */ + if (connectionState < cs_ERROR) { + checkSequenceNumber(readMAC, r.contentType()); + } + + return; } // synchronized (this) } @@ -1068,6 +1134,61 @@ } // synchronized (readLock) } + /** + * Check the sequence number state + * + * RFC 4346 states that, "Sequence numbers are of type uint64 and + * may not exceed 2^64-1. Sequence numbers do not wrap. If a TLS + * implementation would need to wrap a sequence number, it must + * renegotiate instead." + */ + private void checkSequenceNumber(MAC mac, byte type) + throws IOException { + + /* + * Don't bother to check the sequence number for error or + * closed connections, or NULL MAC. + */ + if (connectionState >= cs_ERROR || mac == MAC.NULL) { + return; + } + + /* + * Conservatively, close the connection immediately when the + * sequence number is close to overflow + */ + if (mac.seqNumOverflow()) { + /* + * TLS protocols do not define a error alert for sequence + * number overflow. We use handshake_failure error alert + * for handshaking and bad_record_mac for other records. + */ + if (debug != null && Debug.isOn("ssl")) { + System.out.println(threadName() + + ", sequence number extremely close to overflow " + + "(2^64-1 packets). Closing connection."); + + } + + fatal(Alerts.alert_handshake_failure, "sequence number overflow"); + } + + /* + * Ask for renegotiation when need to renew sequence number. + * + * Don't bother to kickstart the renegotiation when the local is + * asking for it. + */ + if ((type != Record.ct_handshake) && mac.seqNumIsHuge()) { + if (debug != null && Debug.isOn("ssl")) { + System.out.println(threadName() + ", request renegotiation " + + "to avoid sequence number overflow"); + } + + startHandshake(); + } + } + // // HANDSHAKE RELATED CODE // @@ -1080,28 +1201,10 @@ } /** - * Initialize and get the server handshaker. Used by SSLServerSocketImpl - * for the ciphersuite availability test *only*. + * Return the AppOutputStream. For use by Handshaker only. */ - ServerHandshaker getServerHandshaker() throws SSLException { - initHandshaker(); - - // The connection state would have been set to cs_HANDSHAKE during the - // handshaking initializing, however the caller may not have the - // the low level connection's established, which is not consistent with - // the HANDSHAKE state. As if it is unconnected, we need to reset the - // connection state to cs_START. - if (!isConnected()) { - connectionState = cs_START; - } - - // Make sure that we get a ServerHandshaker. - // This should never happen. - if (!(handshaker instanceof ServerHandshaker)) { - throw new SSLProtocolException("unexpected handshaker instance"); - } - - return (ServerHandshaker)handshaker; + AppOutputStream getAppOutputStream() { + return output; } /** @@ -1113,8 +1216,8 @@ * . if the socket is already closed, throw an Exception (internal error) * * . otherwise (cs_START or cs_DATA), create the appropriate handshaker - * object, initialize it, and advance the connection state (to - * cs_HANDSHAKE or cs_RENEGOTIATE, respectively). + * object, and advance the connection state (to cs_HANDSHAKE or + * cs_RENEGOTIATE, respectively). * * This method is called right after a new socket is created, when * starting renegotiation, or when changing client/ server mode of the @@ -1162,12 +1265,8 @@ protocolVersion, connectionState == cs_HANDSHAKE, secureRenegotiation, clientVerifyData, serverVerifyData); } - handshaker.enabledCipherSuites = enabledCipherSuites; + handshaker.setEnabledCipherSuites(enabledCipherSuites); handshaker.setEnableSessionCreation(enableSessionCreation); - if (connectionState == cs_RENEGOTIATE) { - // don't use SSLv2Hello when renegotiating - handshaker.output.r.setHelloVersion(protocolVersion); - } } /** @@ -1182,6 +1281,8 @@ // one thread performs the handshake synchronized (handshakeLock) { if (getConnectionState() == cs_HANDSHAKE) { + kickstartHandshake(); + /* * All initial handshaking goes through this * InputRecord until we have a valid SSL connection. @@ -1204,7 +1305,6 @@ inrec.enableFormatChecks(); } - kickstartHandshake(); readRecord(inrec, false); inrec = null; } @@ -1258,6 +1358,7 @@ * on servers when renegotiating). */ private synchronized void kickstartHandshake() throws IOException { + switch (connectionState) { case cs_HANDSHAKE: @@ -1304,7 +1405,15 @@ // to its HandshakeOutStream, which calls back into // SSLSocketImpl.writeRecord() to send it. // - if (!handshaker.started()) { + if (!handshaker.activated()) { + // prior to handshaking, activate the handshake + if (connectionState == cs_RENEGOTIATE) { + // don't use SSLv2Hello when renegotiating + handshaker.activate(protocolVersion); + } else { + handshaker.activate(null); + } + if (handshaker instanceof ClientHandshaker) { // send client hello handshaker.kickstart(); @@ -1789,10 +1898,18 @@ * Emit alerts. Caller must have synchronized with "this". */ private void sendAlert(byte level, byte description) { + // the connectionState cannot be cs_START if (connectionState >= cs_SENT_CLOSE) { return; } + // For initial handshaking, don't send alert message to peer if + // handshaker has not started. + if (connectionState == cs_HANDSHAKE && + (handshaker == null || !handshaker.started())) { + return; + } + OutputRecord r = new OutputRecord(Record.ct_alert); r.setVersion(protocolVersion); @@ -1984,7 +2101,7 @@ synchronized public void setEnableSessionCreation(boolean flag) { enableSessionCreation = flag; - if ((handshaker != null) && !handshaker.started()) { + if ((handshaker != null) && !handshaker.activated()) { handshaker.setEnableSessionCreation(enableSessionCreation); } } @@ -2012,7 +2129,7 @@ if ((handshaker != null) && (handshaker instanceof ServerHandshaker) && - !handshaker.started()) { + !handshaker.activated()) { ((ServerHandshaker) handshaker).setClientAuth(doClientAuth); } } @@ -2035,7 +2152,7 @@ if ((handshaker != null) && (handshaker instanceof ServerHandshaker) && - !handshaker.started()) { + !handshaker.activated()) { ((ServerHandshaker) handshaker).setClientAuth(doClientAuth); } } @@ -2054,6 +2171,15 @@ switch (connectionState) { case cs_START: + /* + * If we need to change the socket mode and the enabled + * protocols haven't specifically been set by the user, + * change them to the corresponding default ones. + */ + if (roleIsServer != (!flag) && + sslContext.isDefaultProtocolList(enabledProtocols)) { + enabledProtocols = sslContext.getDefaultProtocolList(!flag); + } roleIsServer = !flag; break; @@ -2066,7 +2192,16 @@ * have the streams. */ assert(handshaker != null); - if (!handshaker.started()) { + if (!handshaker.activated()) { + /* + * If we need to change the socket mode and the enabled + * protocols haven't specifically been set by the user, + * change them to the corresponding default ones. + */ + if (roleIsServer != (!flag) && + sslContext.isDefaultProtocolList(enabledProtocols)) { + enabledProtocols = sslContext.getDefaultProtocolList(!flag); + } roleIsServer = !flag; connectionState = cs_START; initHandshaker(); @@ -2102,8 +2237,7 @@ * @return an array of cipher suite names */ public String[] getSupportedCipherSuites() { - CipherSuiteList.clearAvailableCache(); - return CipherSuiteList.getSupported().toStringArray(); + return sslContext.getSupportedCipherSuiteList().toStringArray(); } /** @@ -2117,8 +2251,8 @@ */ synchronized public void setEnabledCipherSuites(String[] suites) { enabledCipherSuites = new CipherSuiteList(suites); - if ((handshaker != null) && !handshaker.started()) { - handshaker.enabledCipherSuites = enabledCipherSuites; + if ((handshaker != null) && !handshaker.activated()) { + handshaker.setEnabledCipherSuites(enabledCipherSuites); } } @@ -2143,7 +2277,7 @@ * @ returns an array of protocol names. */ public String[] getSupportedProtocols() { - return ProtocolList.getSupported().toStringArray(); + return sslContext.getSuportedProtocolList().toStringArray(); } /** @@ -2157,7 +2291,7 @@ */ synchronized public void setEnabledProtocols(String[] protocols) { enabledProtocols = new ProtocolList(protocols); - if ((handshaker != null) && !handshaker.started()) { + if ((handshaker != null) && !handshaker.activated()) { handshaker.setEnabledProtocols(enabledProtocols); } } @@ -2240,6 +2374,14 @@ return identificationAlg; } + /* + * Returns a boolean indicating whether the ChangeCipherSpec message + * has been received for this handshake. + */ + boolean receivedChangeCipherSpec() { + return receivedCCS; + } + // // We allocate a separate thread to deliver handshake completion // events. This ensures that the notifications don't block the diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/SunJSSE.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/SunJSSE.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/ssl/SunJSSE.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/ssl/SunJSSE.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,7 +38,7 @@ * * SunJSSE now supports an experimental FIPS compliant mode when used with an * appropriate FIPS certified crypto provider. In FIPS mode, we: - * . allow only TLS 1.0 + * . allow only TLS 1.0 or later * . allow only FIPS approved ciphersuites * . perform all crypto in the FIPS crypto provider * @@ -201,18 +201,19 @@ put("Alg.Alias.TrustManagerFactory.SunPKIX", "PKIX"); put("Alg.Alias.TrustManagerFactory.X509", "PKIX"); put("Alg.Alias.TrustManagerFactory.X.509", "PKIX"); + + put("SSLContext.TLSv1", + "sun.security.ssl.SSLContextImpl$TLS10Context"); + put("Alg.Alias.SSLContext.TLS", "TLSv1"); if (isfips == false) { - put("SSLContext.SSL", - "sun.security.ssl.SSLContextImpl"); - put("SSLContext.SSLv3", - "sun.security.ssl.SSLContextImpl"); + put("Alg.Alias.SSLContext.SSL", "TLSv1"); + put("Alg.Alias.SSLContext.SSLv3", "TLSv1"); } - put("SSLContext.TLS", - "sun.security.ssl.SSLContextImpl"); - put("SSLContext.TLSv1", - "sun.security.ssl.SSLContextImpl"); + + put("SSLContext.TLSv1.1", + "sun.security.ssl.SSLContextImpl$TLS11Context"); put("SSLContext.Default", - "sun.security.ssl.DefaultSSLContextImpl"); + "sun.security.ssl.SSLContextImpl$DefaultSSLContext"); /* * KeyStore diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/util/AlgorithmConstraints.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/util/AlgorithmConstraints.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/util/AlgorithmConstraints.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/util/AlgorithmConstraints.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.security.util; + +import java.security.AlgorithmParameters; +import java.security.Key; +import java.util.Set; + +/** + * This interface specifies constraints for cryptographic algorithms, + * keys (key sizes), and other algorithm parameters. + *

    + * {@code AlgorithmConstraints} objects are immutable. An implementation + * of this interface should not provide methods that can change the state + * of an instance once it has been created. + *

    + * Note that {@code AlgorithmConstraints} can be used to represent the + * restrictions described by the security properties + * {@code jdk.certpath.disabledAlgorithms} and + * {@code jdk.tls.disabledAlgorithms}, or could be used by a + * concrete {@code PKIXCertPathChecker} to check whether a specified + * certificate in the certification path contains the required algorithm + * constraints. + * + * @see javax.net.ssl.SSLParameters#getAlgorithmConstraints + * @see javax.net.ssl.SSLParameters#setAlgorithmConstraints(AlgorithmConstraints) + * + * @since 1.7 + */ + +public interface AlgorithmConstraints { + + /** + * Determines whether an algorithm is granted permission for the + * specified cryptographic primitives. + * + * @param primitives a set of cryptographic primitives + * @param algorithm the algorithm name + * @param parameters the algorithm parameters, or null if no additional + * parameters + * + * @return true if the algorithm is permitted and can be used for all + * of the specified cryptographic primitives + * + * @throws IllegalArgumentException if primitives or algorithm is null + * or empty + */ + public boolean permits(Set primitives, + String algorithm, AlgorithmParameters parameters); + + /** + * Determines whether a key is granted permission for the specified + * cryptographic primitives. + *

    + * This method is usually used to check key size and key usage. + * + * @param primitives a set of cryptographic primitives + * @param key the key + * + * @return true if the key can be used for all of the specified + * cryptographic primitives + * + * @throws IllegalArgumentException if primitives is null or empty, + * or the key is null + */ + public boolean permits(Set primitives, Key key); + + /** + * Determines whether an algorithm and the corresponding key are granted + * permission for the specified cryptographic primitives. + * + * @param primitives a set of cryptographic primitives + * @param algorithm the algorithm name + * @param key the key + * @param parameters the algorithm parameters, or null if no additional + * parameters + * + * @return true if the key and the algorithm can be used for all of the + * specified cryptographic primitives + * + * @throws IllegalArgumentException if primitives or algorithm is null + * or empty, or the key is null + */ + public boolean permits(Set primitives, + String algorithm, Key key, AlgorithmParameters parameters); + +} diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/util/AuthResources_pt_BR.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/util/AuthResources_pt_BR.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/util/AuthResources_pt_BR.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/util/AuthResources_pt_BR.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.security.util; + +/** + *

    This class represents the ResourceBundle + * for the following packages: + * + *

      + *
    1. com.sun.security.auth + *
    2. com.sun.security.auth.login + *
    + * + * @version 1.6, 01/23/01 + */ +public class AuthResources_pt_BR extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + + // NT principals + {"invalid null input: value", "entrada nula inv\u00e1lida: {0}"}, + {"NTDomainPrincipal: name", "NTDomainPrincipal: {0}"}, + {"NTNumericCredential: name", "NTNumericCredential: {0}"}, + {"Invalid NTSid value", "Valor de NTSid inv\u00e1lido"}, + {"NTSid: name", "NTSid: {0}"}, + {"NTSidDomainPrincipal: name", "NTSidDomainPrincipal: {0}"}, + {"NTSidGroupPrincipal: name", "NTSidGroupPrincipal: {0}"}, + {"NTSidPrimaryGroupPrincipal: name", "NTSidPrimaryGroupPrincipal: {0}"}, + {"NTSidUserPrincipal: name", "NTSidUserPrincipal: {0}"}, + {"NTUserPrincipal: name", "NTUserPrincipal: {0}"}, + + // UnixPrincipals + {"UnixNumericGroupPrincipal [Primary Group]: name", + "UnixNumericGroupPrincipal [grupo principal]: {0}"}, + {"UnixNumericGroupPrincipal [Supplementary Group]: name", + "UnixNumericGroupPrincipal [grupo complement\u00e1rio]: {0}"}, + {"UnixNumericUserPrincipal: name", "UnixNumericUserPrincipal: {0}"}, + {"UnixPrincipal: name", "UnixPrincipal: {0}"}, + + // com.sun.security.auth.login.ConfigFile + {"Unable to properly expand config", "N\u00e3o \u00e9 poss\u00edvel expandir corretamente {0}"}, + {"extra_config (No such file or directory)", + "{0} (tal arquivo ou diret\u00f3rio n\u00e3o existe)"}, + {"Unable to locate a login configuration", + "N\u00e3o \u00e9 poss\u00edvel localizar uma configura\u00e7\u00e3o de logon"}, + {"Configuration Error:\n\tInvalid control flag, flag", + "Erro de configura\u00e7\u00e3o:\n\tSinalizador de controle inv\u00e1lido, {0}"}, + {"Configuration Error:\n\tCan not specify multiple entries for appName", + "Erro de configura\u00e7\u00e3o:\n\tN\u00e3o \u00e9 poss\u00edvel especificar v\u00e1rias entradas para {0}"}, + {"Configuration Error:\n\texpected [expect], read [end of file]", + "Erro de configura\u00e7\u00e3o:\n\tesperado [{0}], lido [fim do arquivo]"}, + {"Configuration Error:\n\tLine line: expected [expect], found [value]", + "Erro de configura\u00e7\u00e3o:\n\tlinha {0}: esperado [{1}], encontrado [{2}]"}, + {"Configuration Error:\n\tLine line: expected [expect]", + "Erro de configura\u00e7\u00e3o:\n\tlinha {0}: esperado [{1}]"}, + {"Configuration Error:\n\tLine line: system property [value] expanded to empty value", + "Erro de configura\u00e7\u00e3o:\n\tlinha {0}: propriedade do sistema [{1}] expandida para valor vazio"}, + + // com.sun.security.auth.module.JndiLoginModule + {"username: ","nome de usu\u00e1rio: "}, + {"password: ","senha: "}, + + // com.sun.security.auth.module.KeyStoreLoginModule + {"Please enter keystore information", + "Insira as informa\u00e7\u00f5es do armazenamento de chaves"}, + {"Keystore alias: ","Alias do armazenamento de chaves: "}, + {"Keystore password: ","Senha do armazenamento de chaves: "}, + {"Private key password (optional): ", + "Senha da chave privada (opcional): "}, + + // com.sun.security.auth.module.Krb5LoginModule + {"Kerberos username [[defUsername]]: ", + "Nome de usu\u00e1rio de Kerberos [{0}]: "}, + {"Kerberos password for [username]: ", + "Senha de Kerberos de {0}: "}, + + /*** EVERYTHING BELOW IS DEPRECATED ***/ + + // com.sun.security.auth.PolicyFile + {": error parsing ", ": erro ao analisar "}, + {": ", ": "}, + {": error adding Permission ", ": erro ao adicionar permiss\u00e3o "}, + {" ", " "}, + {": error adding Entry ", ": erro ao adicionar entrada "}, + {"(", "("}, + {")", ")"}, + {"attempt to add a Permission to a readonly PermissionCollection", + "tentativa de adicionar uma permiss\u00e3o ao um PermissionCollection de somente leitura"}, + + // com.sun.security.auth.PolicyParser + {"expected keystore type", "tipo de armazenamento de chaves esperado"}, + {"can not specify Principal with a ", + "n\u00e3o \u00e9 poss\u00edvel especificar um principal com uma "}, + {"wildcard class without a wildcard name", + "de coringa sem um nome de coringa"}, + {"expected codeBase or SignedBy", "CodeBase ou SignedBy esperado"}, + {"only Principal-based grant entries permitted", + "somente \u00e9 permitido conceder entradas com base no principal"}, + {"expected permission entry", "entrada de permiss\u00e3o esperada"}, + {"number ", "n\u00famero "}, + {"expected ", "esperado "}, + {", read end of file", ", fim de arquivo lido"}, + {"expected ';', read end of file", "esperado ';', fim de arquivo lido"}, + {"line ", "linha "}, + {": expected '", ": esperado '"}, + {"', found '", "', encontrado '"}, + {"'", "'"}, + + // SolarisPrincipals + {"SolarisNumericGroupPrincipal [Primary Group]: ", + "SolarisNumericGroupPrincipal [grupo principal]: "}, + {"SolarisNumericGroupPrincipal [Supplementary Group]: ", + "SolarisNumericGroupPrincipal [grupo complement\u00e1rio]: "}, + {"SolarisNumericUserPrincipal: ", + "SolarisNumericUserPrincipal: "}, + {"SolarisPrincipal: ", "SolarisPrincipal: "}, + {"provided null name", "nome nulo fornecido"} + + }; + + /** + * Returns the contents of this ResourceBundle. + * + *

    + * + * @return the contents of this ResourceBundle. + */ + public Object[][] getContents() { + return contents; + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/util/CryptoPrimitive.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/util/CryptoPrimitive.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/util/CryptoPrimitive.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/util/CryptoPrimitive.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.security.util; + +/** + * An enumeration of cryptographic primitives. + * + * @since 1.7 + */ +public enum CryptoPrimitive { + /** + * Hash function + */ + MESSAGE_DIGEST, + + /** + * Cryptographic random number generator + */ + SECURE_RANDOM, + + /** + * Symmetric primitive: block cipher + */ + BLOCK_CIPHER, + + /** + * Symmetric primitive: stream cipher + */ + STREAM_CIPHER, + + /** + * Symmetric primitive: message authentication code + */ + MAC, + + /** + * Symmetric primitive: key wrap + */ + KEY_WRAP, + + /** + * Asymmetric primitive: public key encryption + */ + PUBLIC_KEY_ENCRYPTION, + + /** + * Asymmetric primitive: signature scheme + */ + SIGNATURE, + + /** + * Asymmetric primitive: key encapsulation mechanism + */ + KEY_ENCAPSULATION, + + /** + * Asymmetric primitive: key agreement and key distribution + */ + KEY_AGREEMENT +} diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/util/DerIndefLenConverter.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/util/DerIndefLenConverter.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/util/DerIndefLenConverter.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/util/DerIndefLenConverter.java 2015-01-20 02:20:42.000000000 +0000 @@ -156,12 +156,18 @@ } if (isLongForm(lenByte)) { lenByte &= LEN_MASK; - if (lenByte > 4) + if (lenByte > 4) { throw new IOException("Too much data"); - if ((dataSize - dataPos) < (lenByte + 1)) + } + if ((dataSize - dataPos) < (lenByte + 1)) { throw new IOException("Too little data"); - for (int i = 0; i < lenByte; i++) + } + for (int i = 0; i < lenByte; i++) { curLen = (curLen << 8) + (data[dataPos++] & 0xff); + } + if (curLen < 0) { + throw new IOException("Invalid length bytes"); + } } else { curLen = (lenByte & LEN_MASK); } @@ -188,10 +194,15 @@ } if (isLongForm(lenByte)) { lenByte &= LEN_MASK; - for (int i = 0; i < lenByte; i++) + for (int i = 0; i < lenByte; i++) { curLen = (curLen << 8) + (data[dataPos++] & 0xff); - } else + } + if (curLen < 0) { + throw new IOException("Invalid length bytes"); + } + } else { curLen = (lenByte & LEN_MASK); + } writeLength(curLen); writeValue(curLen); } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/util/DerInputStream.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/util/DerInputStream.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/util/DerInputStream.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/util/DerInputStream.java 2015-01-20 02:20:42.000000000 +0000 @@ -566,6 +566,10 @@ value <<= 8; value += 0x0ff & in.read(); } + if (value < 0) { + throw new IOException("DerInputStream.getLength(): " + + "Invalid length bytes"); + } } return value; } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java 2015-01-20 03:07:59.000000000 +0000 @@ -0,0 +1,479 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.security.util; + +import java.security.AlgorithmParameters; + +import java.security.Key; +import java.security.Security; +import java.security.PrivilegedAction; +import java.security.AccessController; +import java.security.interfaces.ECKey; +import java.security.interfaces.RSAKey; +import java.security.interfaces.DSAKey; +import javax.crypto.SecretKey; +import javax.crypto.interfaces.DHKey; + +import java.util.Locale; +import java.util.Set; +import java.util.Collections; +import java.util.HashSet; +import java.util.Map; +import java.util.HashMap; +import java.util.regex.Pattern; +import java.util.regex.Matcher; + +/** + * Algorithm constraints for disabled algorithms property + * + * See the "jdk.certpath.disabledAlgorithms" specification in java.security + * for the syntax of the disabled algorithm string. + */ +public class DisabledAlgorithmConstraints implements AlgorithmConstraints { + + // the known security property, jdk.certpath.disabledAlgorithms + public final static String PROPERTY_CERTPATH_DISABLED_ALGS = + "jdk.certpath.disabledAlgorithms"; + + // the known security property, jdk.tls.disabledAlgorithms + public final static String PROPERTY_TLS_DISABLED_ALGS = + "jdk.tls.disabledAlgorithms"; + + private static Map disabledAlgorithmsMap = + Collections.synchronizedMap(new HashMap()); + private static Map keySizeConstraintsMap = + Collections.synchronizedMap(new HashMap()); + + private String[] disabledAlgorithms; + private KeySizeConstraints keySizeConstraints; + + /** + * Initialize algorithm constraints with the specified security property. + * + * @param propertyName the security property name that define the disabled + * algorithm constraints + */ + public DisabledAlgorithmConstraints(String propertyName) { + synchronized (disabledAlgorithmsMap) { + if(!disabledAlgorithmsMap.containsKey(propertyName)) { + loadDisabledAlgorithmsMap(propertyName); + } + + disabledAlgorithms = disabledAlgorithmsMap.get(propertyName); + keySizeConstraints = keySizeConstraintsMap.get(propertyName); + } + } + + final public boolean permits(Set primitives, + String algorithm, AlgorithmParameters parameters) { + + if (algorithm == null || algorithm.length() == 0) { + throw new IllegalArgumentException("No algorithm name specified"); + } + + if (primitives == null || primitives.isEmpty()) { + throw new IllegalArgumentException( + "No cryptographic primitive specified"); + } + + Set elements = null; + for (String disabled : disabledAlgorithms) { + if (disabled == null || disabled.isEmpty()) { + continue; + } + + // check the full name + if (disabled.equalsIgnoreCase(algorithm)) { + return false; + } + + // decompose the algorithm into sub-elements + if (elements == null) { + elements = decomposes(algorithm); + } + + // check the items of the algorithm + for (String element : elements) { + if (disabled.equalsIgnoreCase(element)) { + return false; + } + } + } + + return true; + } + + final public boolean permits(Set primitives, Key key) { + return checkConstraints(primitives, "", key, null); + } + + final public boolean permits(Set primitives, + String algorithm, Key key, AlgorithmParameters parameters) { + + if (algorithm == null || algorithm.length() == 0) { + throw new IllegalArgumentException("No algorithm name specified"); + } + + return checkConstraints(primitives, algorithm, key, parameters); + } + + /** + * Decompose the standard algorithm name into sub-elements. + *

    + * For example, we need to decompose "SHA1WithRSA" into "SHA1" and "RSA" + * so that we can check the "SHA1" and "RSA" algorithm constraints + * separately. + *

    + * Please override the method if need to support more name pattern. + */ + protected Set decomposes(String algorithm) { + if (algorithm == null || algorithm.length() == 0) { + return new HashSet(); + } + + // algorithm/mode/padding + Pattern transPattern = Pattern.compile("/"); + String[] transTockens = transPattern.split(algorithm); + + Set elements = new HashSet(); + for (String transTocken : transTockens) { + if (transTocken == null || transTocken.length() == 0) { + continue; + } + + // PBEWithAnd + // PBEWithAnd + // OAEPWithAndPadding + // with + // withand + Pattern pattern = + Pattern.compile("with|and", Pattern.CASE_INSENSITIVE); + String[] tokens = pattern.split(transTocken); + + for (String token : tokens) { + if (token == null || token.length() == 0) { + continue; + } + + elements.add(token); + } + } + + // In Java standard algorithm name specification, for different + // purpose, the SHA-1 and SHA-2 algorithm names are different. For + // example, for MessageDigest, the standard name is "SHA-256", while + // for Signature, the digest algorithm component is "SHA256" for + // signature algorithm "SHA256withRSA". So we need to check both + // "SHA-256" and "SHA256" to make the right constraint checking. + + // handle special name: SHA-1 and SHA1 + if (elements.contains("SHA1") && !elements.contains("SHA-1")) { + elements.add("SHA-1"); + } + if (elements.contains("SHA-1") && !elements.contains("SHA1")) { + elements.add("SHA1"); + } + + // handle special name: SHA-224 and SHA224 + if (elements.contains("SHA224") && !elements.contains("SHA-224")) { + elements.add("SHA-224"); + } + if (elements.contains("SHA-224") && !elements.contains("SHA224")) { + elements.add("SHA224"); + } + + // handle special name: SHA-256 and SHA256 + if (elements.contains("SHA256") && !elements.contains("SHA-256")) { + elements.add("SHA-256"); + } + if (elements.contains("SHA-256") && !elements.contains("SHA256")) { + elements.add("SHA256"); + } + + // handle special name: SHA-384 and SHA384 + if (elements.contains("SHA384") && !elements.contains("SHA-384")) { + elements.add("SHA-384"); + } + if (elements.contains("SHA-384") && !elements.contains("SHA384")) { + elements.add("SHA384"); + } + + // handle special name: SHA-512 and SHA512 + if (elements.contains("SHA512") && !elements.contains("SHA-512")) { + elements.add("SHA-512"); + } + if (elements.contains("SHA-512") && !elements.contains("SHA512")) { + elements.add("SHA512"); + } + + return elements; + } + + // Check algorithm constraints + private boolean checkConstraints(Set primitives, + String algorithm, Key key, AlgorithmParameters parameters) { + + // check the key parameter, it cannot be null. + if (key == null) { + throw new IllegalArgumentException("The key cannot be null"); + } + + // check the target algorithm + if (algorithm != null && algorithm.length() != 0) { + if (!permits(primitives, algorithm, parameters)) { + return false; + } + } + + // check the key algorithm + if (!permits(primitives, key.getAlgorithm(), null)) { + return false; + } + + // check the key constraints + if (keySizeConstraints.disables(key)) { + return false; + } + + return true; + } + + // Get disabled algorithm constraints from the specified security property. + private static void loadDisabledAlgorithmsMap( + final String propertyName) { + + String property = AccessController.doPrivileged( + new PrivilegedAction() { + public String run() { + return Security.getProperty(propertyName); + } + }); + + String[] algorithmsInProperty = null; + + if (property != null && !property.isEmpty()) { + + // remove double quote marks from beginning/end of the property + if (property.charAt(0) == '"' && + property.charAt(property.length() - 1) == '"') { + property = property.substring(1, property.length() - 1); + } + + algorithmsInProperty = property.split(","); + for (int i = 0; i < algorithmsInProperty.length; i++) { + algorithmsInProperty[i] = algorithmsInProperty[i].trim(); + } + } + + // map the disabled algorithms + if (algorithmsInProperty == null) { + algorithmsInProperty = new String[0]; + } + disabledAlgorithmsMap.put(propertyName, algorithmsInProperty); + + // map the key constraints + KeySizeConstraints keySizeConstraints = + new KeySizeConstraints(algorithmsInProperty); + keySizeConstraintsMap.put(propertyName, keySizeConstraints); + } + + /** + * key constraints + */ + private static class KeySizeConstraints { + private static final Pattern pattern = Pattern.compile( + "(\\S+)\\s+keySize\\s*(<=|<|==|!=|>|>=)\\s*(\\d+)"); + + private Map> constraintsMap = + Collections.synchronizedMap( + new HashMap>()); + + public KeySizeConstraints(String[] restrictions) { + for (String restriction : restrictions) { + if (restriction == null || restriction.isEmpty()) { + continue; + } + + Matcher matcher = pattern.matcher(restriction); + if (matcher.matches()) { + String algorithm = matcher.group(1); + + KeySizeConstraint.Operator operator = + KeySizeConstraint.Operator.of(matcher.group(2)); + int length = Integer.parseInt(matcher.group(3)); + + algorithm = algorithm.toLowerCase(Locale.ENGLISH); + + synchronized (constraintsMap) { + if (!constraintsMap.containsKey(algorithm)) { + constraintsMap.put(algorithm, + new HashSet()); + } + + Set constraintSet = + constraintsMap.get(algorithm); + KeySizeConstraint constraint = + new KeySizeConstraint(operator, length); + constraintSet.add(constraint); + } + } + } + } + + // Does this KeySizeConstraints disable the specified key? + public boolean disables(Key key) { + String algorithm = key.getAlgorithm().toLowerCase(Locale.ENGLISH); + synchronized (constraintsMap) { + if (constraintsMap.containsKey(algorithm)) { + Set constraintSet = + constraintsMap.get(algorithm); + for (KeySizeConstraint constraint : constraintSet) { + if (constraint.disables(key)) { + return true; + } + } + } + } + + return false; + } + } + + /** + * Key size constraint. + * + * e.g. "keysize <= 1024" + */ + private static class KeySizeConstraint { + // operator + static enum Operator { + EQ, // "==" + NE, // "!=" + LT, // "<" + LE, // "<=" + GT, // ">" + GE; // ">=" + + static Operator of(String s) { + if ("==".equals(s)) + return EQ; + if ("!=".equals(s)) + return NE; + if ("<".equals(s)) + return LT; + if ("<=".equals(s)) + return LE; + if (">".equals(s)) + return GT; + if (">=".equals(s)) + return GE; + + throw new IllegalArgumentException( + s + " is not a legal Operator"); + } + } + + private int minSize; // the minimal available key size + private int maxSize; // the maximal available key size + private int prohibitedSize = -1; // unavailable key sizes + + public KeySizeConstraint(Operator operator, int length) { + switch (operator) { + case EQ: // an unavailable key size + this.minSize = 0; + this.maxSize = Integer.MAX_VALUE; + prohibitedSize = length; + break; + case NE: + this.minSize = length; + this.maxSize = length; + break; + case LT: + this.minSize = length; + this.maxSize = Integer.MAX_VALUE; + break; + case LE: + this.minSize = length + 1; + this.maxSize = Integer.MAX_VALUE; + break; + case GT: + this.minSize = 0; + this.maxSize = length; + break; + case GE: + this.minSize = 0; + this.maxSize = length > 1 ? (length - 1) : 0; + break; + default: + // unlikely to happen + this.minSize = Integer.MAX_VALUE; + this.maxSize = -1; + } + } + + // Does this key constraint disable the specified key? + public boolean disables(Key key) { + int size = -1; + + // it is a SecretKey + if (key instanceof SecretKey) { + SecretKey sk = (SecretKey)key; + if (sk.getFormat().equals("RAW") && sk.getEncoded() != null) { + size = sk.getEncoded().length * 8; + + } + } + + // it is an asymmetric key + if (key instanceof RSAKey) { + RSAKey pubk = (RSAKey)key; + size = pubk.getModulus().bitLength(); + } else if (key instanceof ECKey) { + ECKey pubk = (ECKey)key; + size = pubk.getParams().getOrder().bitLength(); + } else if (key instanceof DSAKey) { + DSAKey pubk = (DSAKey)key; + size = pubk.getParams().getP().bitLength(); + } else if (key instanceof DHKey) { + DHKey pubk = (DHKey)key; + size = pubk.getParams().getP().bitLength(); + } // else, it is not a key we know. + + if (size == 0) { + return true; // we don't allow any key of size 0. + } + + if (size >= 0) { + return ((size < minSize) || (size > maxSize) || + (prohibitedSize == size)); + } + + return false; + } + } + +} + diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/util/Resources_pt_BR.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/util/Resources_pt_BR.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/util/Resources_pt_BR.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/util/Resources_pt_BR.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,646 @@ +/* + * Copyright (c) 2001, 2006, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.security.util; + +/** + *

    This class represents the ResourceBundle + * for javax.security.auth and sun.security. + * + * @version 1.33, 12/06/05 + */ +public class Resources_pt_BR extends java.util.ListResourceBundle { + + private static final Object[][] contents = { + + // shared (from jarsigner) + {" ", " "}, + {" ", " "}, + {" ", " "}, + {", ", ", "}, + // shared (from keytool) + {"\n", "\n"}, + {"*******************************************", + "*******************************************"}, + {"*******************************************\n\n", + "*******************************************\n\n"}, + + // keytool + {"keytool error: ", "erro de keytool: "}, + {"Illegal option: ", "Op\u00e7\u00e3o ilegal: "}, + {"Try keytool -help","Tentar keytool -help"}, + {"Command option needs an argument.", "A op\u00e7\u00e3o de comando {0} precisa de um argumento."}, + {"Warning: Different store and key passwords not supported for PKCS12 KeyStores. Ignoring user-specified value.", + "Aviso: senhas de chave e de armazenamento diferentes n\u00e3o suportadas para KeyStores PKCS12. Ignorando valor {0} especificado pelo usu\u00e1rio."}, + {"-keystore must be NONE if -storetype is {0}", + "-keystore deve ser NONE se -storetype for {0}"}, + {"Too may retries, program terminated", + "N\u00famero de tentativas excedido, programa finalizado"}, + {"-storepasswd and -keypasswd commands not supported if -storetype is {0}", + "comandos -storepasswd e -keypasswd n\u00e3o suportados se -storetype for {0}"}, + {"-keypasswd commands not supported if -storetype is PKCS12", + "comandos -keypasswd n\u00e3o suportados se -storetype for PKCS12"}, + {"-keypass and -new can not be specified if -storetype is {0}", + "-keypass e -new n\u00e3o podem ser especificados se -storetype for {0}"}, + {"if -protected is specified, then -storepass, -keypass, and -new must not be specified", + "se -protected estiver especificado, ent\u00e3o -storepass, -keypass e -new n\u00e3o devem ser especificados"}, + {"if -srcprotected is specified, then -srcstorepass and -srckeypass must not be specified", + "se -srcprotected estiver especificado, ent\u00e3o -srcstorepass e -srckeypass n\u00e3o devem ser especificados"}, + {"if keystore is not password protected, then -storepass, -keypass, and -new must not be specified", + "se o armazenamento de chaves n\u00e3o estiver protegido por senha, ent\u00e3o -storepass, -keypass e -new n\u00e3o devem ser especificados"}, + {"if source keystore is not password protected, then -srcstorepass and -srckeypass must not be specified", + "se o armazenamento de chaves de origem n\u00e3o estiver protegido por senha, ent\u00e3o -srcstorepass e -srckeypass n\u00e3o devem ser especificados"}, + {"Validity must be greater than zero", + "A validade deve ser maior do que zero"}, + {"provName not a provider", "{0} n\u00e3o \u00e9 um fornecedor"}, + {"Usage error: no command provided", "Erro de uso: nenhum comando fornecido"}, + {"Usage error, is not a legal command", "Erro de uso, {0} n\u00e3o \u00e9 um comando legal"}, + {"Source keystore file exists, but is empty: ", "O arquivo de armazenamento de chaves de origem existe, mas est\u00e1 vazio: "}, + {"Please specify -srckeystore", "Especifique -srckeystore"}, + {"Must not specify both -v and -rfc with 'list' command", + "N\u00e3o devem ser especificados -v e -rfc com o comando 'list'"}, + {"Key password must be at least 6 characters", + "A senha da chave deve ter como m\u00ednimo 6 caracteres"}, + {"New password must be at least 6 characters", + "A nova senha deve ter como m\u00ednimo 6 caracteres"}, + {"Keystore file exists, but is empty: ", + "O arquivo de armazenamento de chaves existe, mas est\u00e1 vazio: "}, + {"Keystore file does not exist: ", + "O arquivo de armazenamento de chaves n\u00e3o existe. "}, + {"Must specify destination alias", "Deve ser especificado um alias de destino"}, + {"Must specify alias", "Deve ser especificado um alias"}, + {"Keystore password must be at least 6 characters", + "A senha do armazenamento de chaves deve ter como m\u00ednimo 6 caracteres"}, + {"Enter keystore password: ", "Insira a senha do armazenamento de chaves: "}, + {"Enter source keystore password: ", "Insira a senha do armazenamento de chaves de origem: "}, + {"Enter destination keystore password: ", "Insira a senha do armazenamento de chaves de destino: "}, + {"Keystore password is too short - must be at least 6 characters", + "A senha do armazenamento de chaves \u00e9 muito curta - deve ter como m\u00ednimo 6 caracteres"}, + {"Unknown Entry Type", "Tipo de entrada desconhecido"}, + {"Too many failures. Alias not changed", "Excesso de falhas. Alias n\u00e3o alterado"}, + {"Entry for alias successfully imported.", + "Entrada do alias {0} importada com \u00eaxito."}, + {"Entry for alias not imported.", "Entrada do alias {0} n\u00e3o importada."}, + {"Problem importing entry for alias : .\nEntry for alias not imported.", + "Problema ao importar a entrada do {0}: {1}.\nEntrada do alias {0} n\u00e3o importada."}, + {"Import command completed: entries successfully imported, entries failed or cancelled", + "Comando de importa\u00e7\u00e3o conclu\u00eddo: {0} entradas importadas com \u00eaxito, {1} entradas falhas ou canceladas"}, + {"Warning: Overwriting existing alias in destination keystore", + "Aviso: substitui\u00e7\u00e3o de alias {0} existente no armazenamento de chaves de destino"}, + {"Existing entry alias exists, overwrite? [no]: ", + "Entrada j\u00e1 existente no alias {0}, substituir? [n\u00e3o]: "}, + {"Too many failures - try later", "Excesso de falhas - tentar mais tarde"}, + {"Certification request stored in file ", + "Solicita\u00e7\u00e3o de certificado armazenada no arquivo <{0}>"}, + {"Submit this to your CA", "Enviar \u00e0 CA"}, + {"if alias not specified, destalias, srckeypass, and destkeypass must not be specified", + "se o alias n\u00e3o estiver especificado, destalias, srckeypass e destkeypass n\u00e3o devem ser especificados"}, + {"Certificate stored in file ", + "Certificado armazenado no arquivo <{0}>"}, + {"Certificate reply was installed in keystore", + "Resposta do certificado foi instalada no armazenamento de chaves"}, + {"Certificate reply was not installed in keystore", + "Resposta do certificado n\u00e3o foi instalada no armazenamento de chaves"}, + {"Certificate was added to keystore", + "O certificado foi adicionado ao armazenamento de chaves"}, + {"Certificate was not added to keystore", + "O certificado n\u00e3o foi adicionado ao armazenamento de chaves"}, + {"[Storing ksfname]", "[Armazenando {0}]"}, + {"alias has no public key (certificate)", + "{0} n\u00e3o possui chave p\u00fablica (certificado)"}, + {"Cannot derive signature algorithm", + "N\u00e3o \u00e9 poss\u00edvel obter algoritmo de assinatura"}, + {"Alias does not exist", + "O alias <{0}> n\u00e3o existe"}, + {"Alias has no certificate", + "O alias <{0}> n\u00e3o possui certificado"}, + {"Key pair not generated, alias already exists", + "Par de chaves n\u00e3o gerado, o alias <{0}> j\u00e1 existe"}, + {"Cannot derive signature algorithm", + "N\u00e3o \u00e9 poss\u00edvel obter algoritmo de assinatura"}, + {"Generating keysize bit keyAlgName key pair and self-signed certificate (sigAlgName) with a validity of validality days\n\tfor: x500Name", + "Gerando o par de chaves {1} de {0} bit e o certificado autoassinado ({2}) com uma validade de {3} dias\n\tpara: {4}"}, + {"Enter key password for ", "Inserir a senha da chave de <{0}>"}, + {"\t(RETURN if same as keystore password): ", + "\t(RETURN se for igual \u00e0 senha do armazenamento de chaves): "}, + {"Key password is too short - must be at least 6 characters", + "A senha da chave \u00e9 muito curta - deve ter como m\u00ednimo 6 caracteres"}, + {"Too many failures - key not added to keystore", + "Excesso de falhas - chave n\u00e3o adicionada ao armazenamento de chaves"}, + {"Destination alias already exists", + "O alias de destino <{0}> j\u00e1 existe"}, + {"Password is too short - must be at least 6 characters", + "A senha \u00e9 muito curta - deve ter como m\u00ednimo 6 caracteres"}, + {"Too many failures. Key entry not cloned", + "Excesso de falhas. Entrada da chave n\u00e3o clonada"}, + {"key password for ", "senha da chave de <{0}>"}, + {"Keystore entry for already exists", + "A entrada do armazenamento de chaves de <{0}> j\u00e1 existe"}, + {"Creating keystore entry for ...", + "Criando entrada do armazenamento de chaves para <{0}> ..."}, + {"No entries from identity database added", + "Nenhuma entrada adicionada do banco de dados de identidades"}, + {"Alias name: alias", "Nome do alias: {0}"}, + {"Creation date: keyStore.getCreationDate(alias)", + "Data de cria\u00e7\u00e3o: {0,data}"}, + {"alias, keyStore.getCreationDate(alias), ", + "{0}, {1,data}, "}, + {"alias, ", "{0}, "}, + {"Entry type: ", "Tipo de entrada: {0}"}, + {"Certificate chain length: ", "Comprimento da cadeia de certificados: "}, + {"Certificate[(i + 1)]:", "Certificado[{0,n\u00famero,inteiro}]:"}, + {"Certificate fingerprint (MD5): ", "Fingerprint (MD5) do certificado: "}, + {"Entry type: trustedCertEntry\n", "Tipo de entrada: trustedCertEntry\n"}, + {"trustedCertEntry,", "trustedCertEntry,"}, + {"Keystore type: ", "Tipo de armazenamento de chaves: "}, + {"Keystore provider: ", "Fornecedor de armazenamento de chaves: "}, + {"Your keystore contains keyStore.size() entry", + "Seu armazenamento de chaves cont\u00e9m {0,n\u00famero,inteiro} entrada"}, + {"Your keystore contains keyStore.size() entries", + "Seu armazenamento de chaves cont\u00e9m {0,n\u00famero,inteiro} entradas"}, + {"Failed to parse input", "Falha ao analisar a entrada"}, + {"Empty input", "Entrada vazia"}, + {"Not X.509 certificate", "N\u00e3o \u00e9 um certificado X.509"}, + {"Cannot derive signature algorithm", + "N\u00e3o \u00e9 poss\u00edvel obter algoritmo de assinatura"}, + {"alias has no public key", "{0} n\u00e3o possui chave p\u00fablica"}, + {"alias has no X.509 certificate", "{0} n\u00e3o possui certificado X.509"}, + {"New certificate (self-signed):", "Novo certificado (autoassinado):"}, + {"Reply has no certificates", "A resposta n\u00e3o possui certificado"}, + {"Certificate not imported, alias already exists", + "Certificado n\u00e3o importado, o alias <{0}> j\u00e1 existe"}, + {"Input not an X.509 certificate", "A entrada n\u00e3o \u00e9 um certificado X.509"}, + {"Certificate already exists in keystore under alias ", + "O certificado j\u00e1 existe no armazenamento de chaves no alias <{0}>"}, + {"Do you still want to add it? [no]: ", + "Ainda deseja adicion\u00e1-lo? [n\u00e3o]: "}, + {"Certificate already exists in system-wide CA keystore under alias ", + "O certificado j\u00e1 existe no armazenamento de chaves de CA em todo o sistema no alias <{0}>"}, + {"Do you still want to add it to your own keystore? [no]: ", + "Ainda deseja adicion\u00e1-lo ao seu pr\u00f3prio armazenamento de chaves? [n\u00e3o]: "}, + {"Trust this certificate? [no]: ", "Confiar neste certificado? [n\u00e3o]: "}, + {"YES", "SIM"}, + {"New prompt: ", "Nova {0}: "}, + {"Passwords must differ", "As senhas devem ser diferentes"}, + {"Re-enter new prompt: ", "Insira novamente a nova {0}: "}, + {"Re-enter new password: ", "Insira novamente a nova senha: "}, + {"They don't match. Try again", "Elas n\u00e3o correspondem. Tente novamente"}, + {"Enter prompt alias name: ", "Insira o nome do alias {0}: "}, + {"Enter new alias name\t(RETURN to cancel import for this entry): ", + "Insira o novo nome do alias\t(RETURN para cancelar a importa\u00e7\u00e3o desta entrada): "}, + {"Enter alias name: ", "Insira o nome do alias: "}, + {"\t(RETURN if same as for )", + "\t(RETURN se for igual ao de <{0}>)"}, + {"*PATTERN* printX509Cert", + "Propriet\u00e1rio: {0}\nEmissor: {1}\nN\u00famero de s\u00e9rie: {2}\nV\u00e1lido de: {3} a: {4}\nFingerprints do certificado:\n\t MD5: {5}\n\t SHA1: {6}\n\t Nome do algoritmo de assinatura: {7}\n\t Vers\u00e3o: {8}"}, + {"What is your first and last name?", + "Qual \u00e9 o seu nome e o seu sobrenome?"}, + {"What is the name of your organizational unit?", + "Qual \u00e9 o nome da sua unidade organizacional?"}, + {"What is the name of your organization?", + "Qual \u00e9 o nome da sua empresa?"}, + {"What is the name of your City or Locality?", + "Qual \u00e9 o nome da sua cidade ou localidade?"}, + {"What is the name of your State or Province?", + "Qual \u00e9 o nome do seu estado ou munic\u00edpio?"}, + {"What is the two-letter country code for this unit?", + "Quais s\u00e3o as duas letras do c\u00f3digo do pa\u00eds desta unidade?"}, + {"Is correct?", "{0} \u00e9 correto?"}, + {"no", "n\u00e3o"}, + {"yes", "sim"}, + {"y", "s"}, + {" [defaultValue]: ", " [{0}]: "}, + {"Alias has no key", + "O alias <{0}> n\u00e3o possui chave"}, + {"Alias references an entry type that is not a private key entry. The -keyclone command only supports cloning of private key entries", + "O alias <{0}> faz refer\u00eancia a um tipo de entrada que n\u00e3o \u00e9 uma entrada de chave privada. O comando -keyclone oferece suporte somente \u00e0 clonagem de entradas de chave privada"}, + + {"***************** WARNING WARNING WARNING *****************", + "***************** AVISO AVISO AVISO *****************"}, + + // Translators of the following 5 pairs, ATTENTION: + // the next 5 string pairs are meant to be combined into 2 paragraphs, + // 1+3+4 and 2+3+5. make sure your translation also does. + {"* The integrity of the information stored in your keystore *", + "* A integridade das informa\u00e7\u00f5es armazenadas no seu armazenamento de chaves *"}, + {"* The integrity of the information stored in the srckeystore*", + "* A integridade das informa\u00e7\u00f5es armazenadas no srckeystore*"}, + {"* has NOT been verified! In order to verify its integrity, *", + "* N\u00c3O foi verificada! Para verificar a integridade destas informa\u00e7\u00f5es, *"}, + {"* you must provide your keystore password. *", + "* voc\u00ea deve fornecer a senha do seu armazenamento de chaves. *"}, + {"* you must provide the srckeystore password. *", + "* voc\u00ea deve fornecer a senha do srckeystore. *"}, + + + {"Certificate reply does not contain public key for ", + "A resposta do certificado n\u00e3o cont\u00e9m a chave p\u00fablica de <{0}>"}, + {"Incomplete certificate chain in reply", + "Cadeia de certificados incompleta na resposta"}, + {"Certificate chain in reply does not verify: ", + "A cadeia de certificados da resposta n\u00e3o verifica: "}, + {"Top-level certificate in reply:\n", + "Certificado de n\u00edvel superior na resposta:\n"}, + {"... is not trusted. ", "... n\u00e3o \u00e9 confi\u00e1vel. "}, + {"Install reply anyway? [no]: ", "Instalar resposta assim mesmo? [n\u00e3o]: "}, + {"NO", "N\u00c3O"}, + {"Public keys in reply and keystore don't match", + "As chaves p\u00fablicas da resposta e do armazenamento de chaves n\u00e3o correspondem"}, + {"Certificate reply and certificate in keystore are identical", + "O certificado da resposta e o certificado do armazenamento de chaves s\u00e3o id\u00eanticos"}, + {"Failed to establish chain from reply", + "Falha ao estabelecer a cadeia a partir da resposta"}, + {"n", "n"}, + {"Wrong answer, try again", "Resposta errada, tente novamente"}, + {"Secret key not generated, alias already exists", + "Chave secreta n\u00e3o gerada, o alias <{0}> j\u00e1 existe"}, + {"Please provide -keysize for secret key generation", + "Forne\u00e7a o -keysize para a gera\u00e7\u00e3o da chave secreta"}, + {"keytool usage:\n", "uso de keytool:\n"}, + + {"Extensions: ", "Extens\u00f5es: "}, + + {"-certreq [-v] [-protected]", + "-certreq [-v] [-protected]"}, + {"\t [-alias ] [-sigalg ]", + "\t [-alias ] [-sigalg ]"}, + {"\t [-file ] [-keypass ]", + "\t [-file ] [-keypass ]"}, + {"\t [-keystore ] [-storepass ]", + "\t [-keystore ] [-storepass ]"}, + {"\t [-storetype ] [-providername ]", + "\t [-storetype ] [-providername ]"}, + {"\t [-providerclass [-providerarg ]] ...", + "\t [-providerclass [-providerarg ]] ..."}, + {"\t [-providerpath ]", + "\t [-providerpath ]"}, + {"-delete [-v] [-protected] -alias ", + "-delete [-v] [-protected] -alias "}, + /** rest is same as -certreq starting from -keystore **/ + + //{"-export [-v] [-rfc] [-protected]", + // "-export [-v] [-rfc] [-protected]"}, + {"-exportcert [-v] [-rfc] [-protected]", + "-exportcert [-v] [-rfc] [-protected]"}, + {"\t [-alias ] [-file ]", + "\t [-alias ] [-file ]"}, + /** rest is same as -certreq starting from -keystore **/ + + //{"-genkey [-v] [-protected]", + // "-genkey [-v] [-protected]"}, + {"-genkeypair [-v] [-protected]", + "-genkeypair [-v] [-protected]"}, + {"\t [-alias ]", "\t [-alias ]"}, + {"\t [-keyalg ] [-keysize ]", + "\t [-keyalg ] [-keysize ]"}, + {"\t [-sigalg ] [-dname ]", + "\t [-sigalg ] [-dname ]"}, + {"\t [-validity ] [-keypass ]", + "\t [-validity ] [-keypass ]"}, + /** rest is same as -certreq starting from -keystore **/ + + {"-genseckey [-v] [-protected]", + "-genseckey [-v] [-protected]"}, + /** rest is same as -certreq starting from -keystore **/ + + {"-help", "-help"}, + //{"-identitydb [-v] [-protected]", + // "-identitydb [-v] [-protected]"}, + //{"\t [-file ]", "\t [-file ]"}, + /** rest is same as -certreq starting from -keystore **/ + + //{"-import [-v] [-noprompt] [-trustcacerts] [-protected]", + // "-import [-v] [-noprompt] [-trustcacerts] [-protected]"}, + {"-importcert [-v] [-noprompt] [-trustcacerts] [-protected]", + "-importcert [-v] [-noprompt] [-trustcacerts] [-protected]"}, + {"\t [-alias ]", "\t [-alias ]"}, + {"\t [-alias ] [-keypass ]", + "\t [-alias ] [-keypass ]"}, + {"\t [-file ] [-keypass ]", + "\t [-file ] [-keypass ]"}, + /** rest is same as -certreq starting from -keystore **/ + + {"-importkeystore [-v] ", + "-importkeystore [-v] "}, + {"\t [-srckeystore ] [-destkeystore ]", + "\t [-srckeystore ] [-destkeystore ]"}, + {"\t [-srcstoretype ] [-deststoretype ]", + "\t [-srcstoretype ] [-deststoretype ]"}, + {"\t [-srcprotected] [-destprotected]", + "\t [-srcprotected] [-destprotected]"}, + {"\t [-srcstorepass ] [-deststorepass ]", + "\t [-srcstorepass ] [-deststorepass ]"}, + {"\t [-srcprovidername ]\n\t [-destprovidername ]", // line too long, split to 2 + "\t [-srcprovidername ]\n\t [-destprovidername ]"}, + {"\t [-srcalias [-destalias ]", + "\t [-srcalias [-destalias ]"}, + {"\t [-srckeypass ] [-destkeypass ]]", + "\t [-srckeypass ] [-destkeypass ]]"}, + {"\t [-noprompt]", "\t [-noprompt]"}, + /** rest is same as -certreq starting from -keystore **/ + + {"-changealias [-v] [-protected] -alias -destalias ", + "-changealias [-v] [-protected] -alias -destalias "}, + {"\t [-keypass ]", "\t [-keypass ]"}, + + //{"-keyclone [-v] [-protected]", + // "-keyclone [-v] [-protected]"}, + //{"\t [-alias ] -dest ", + // "\t [-alias ] -dest "}, + //{"\t [-keypass ] [-new ]", + // "\t [-keypass ] [-new ]"}, + /** rest is same as -certreq starting from -keystore **/ + + {"-keypasswd [-v] [-alias ]", + "-keypasswd [-v] [-alias ]"}, + {"\t [-keypass ] [-new ]", + "\t [-keypass ] [-new ]"}, + /** rest is same as -certreq starting from -keystore **/ + + {"-list [-v | -rfc] [-protected]", + "-list [-v | -rfc] [-protected]"}, + {"\t [-alias ]", "\t [-alias ]"}, + /** rest is same as -certreq starting from -keystore **/ + + {"-printcert [-v] [-file ]", + "-printcert [-v] [-file ]"}, + + //{"-selfcert [-v] [-protected]", + // "-selfcert [-v] [-protected]"}, + {"\t [-alias ]", "\t [-alias ]"}, + //{"\t [-dname ] [-validity ]", + // "\t [-dname ] [-validity ]"}, + //{"\t [-keypass ] [-sigalg ]", + // "\t [-keypass ] [-sigalg ]"}, + /** rest is same as -certreq starting from -keystore **/ + + {"-storepasswd [-v] [-new ]", + "-storepasswd [-v] [-new ]"}, + /** rest is same as -certreq starting from -keystore **/ + + // policytool + {"Warning: A public key for alias 'signers[i]' does not exist. Make sure a KeyStore is properly configured.", + "Aviso: n\u00e3o existe uma chave p\u00fablica para o alias {0}. Certifique-se de que um KeyStore esteja configurado adequadamente."}, + {"Warning: Class not found: class", "Aviso: classe n\u00e3o encontrada: {0}"}, + {"Warning: Invalid argument(s) for constructor: arg", + "Aviso: argumento(s) inv\u00e1lido(s) para o construtor: {0}"}, + {"Illegal Principal Type: type", "Tipo principal ilegal: {0}"}, + {"Illegal option: option", "Op\u00e7\u00e3o ilegal: {0}"}, + {"Usage: policytool [options]", "Uso: policytool [op\u00e7\u00f5es]"}, + {" [-file ] policy file location", + " [-file ] local do arquivo de pol\u00edtica"}, + {"New", "Novo"}, + {"Open", "Abrir"}, + {"Save", "Salvar"}, + {"Save As", "Salvar como"}, + {"View Warning Log", "Visualizar registro de avisos"}, + {"Exit", "Sair"}, + {"Add Policy Entry", "Adicionar entrada de pol\u00edtica"}, + {"Edit Policy Entry", "Editar entrada de pol\u00edtica"}, + {"Remove Policy Entry", "Remover entrada de pol\u00edtica"}, + {"Edit", "Editar"}, + {"Retain", "Conservar"}, + + {"Warning: File name may include escaped backslash characters. " + + "It is not necessary to escape backslash characters " + + "(the tool escapes characters as necessary when writing " + + "the policy contents to the persistent store).\n\n" + + "Click on Retain to retain the entered name, or click on " + + "Edit to edit the name.", + "Aviso: o nome do arquivo pode incluir caracteres de escape barra invertida. N\u00e3o \u00e9 necess\u00e1rio fazer o escape dos caracteres de barra invertida (a ferramenta faz o escape dos caracteres conforme necess\u00e1rio ao gravar o conte\u00fado da pol\u00edtica no armazenamento persistente).\n\nClique em Conservar para conservar o nome da entrada ou clique em Editar para edit\u00e1-lo."}, + + {"Add Public Key Alias", "Adicionar alias de chave p\u00fablica"}, + {"Remove Public Key Alias", "Remover alias de chave p\u00fablica"}, + {"File", "Arquivo"}, + {"KeyStore", "KeyStore"}, + {"Policy File:", "Arquivo de pol\u00edtica:"}, + {"Could not open policy file: policyFile: e.toString()", + "N\u00e3o foi poss\u00edvel abrir o arquivo de pol\u00edtica: {0}: {1}"}, + {"Policy Tool", "Ferramenta de pol\u00edtica"}, + {"Errors have occurred while opening the policy configuration. View the Warning Log for more information.", + "Ocorreram erros ao abrir a configura\u00e7\u00e3o da pol\u00edtica. Consulte o registro de avisos para obter mais informa\u00e7\u00f5es."}, + {"Error", "Erro"}, + {"OK", "OK"}, + {"Status", "Status"}, + {"Warning", "Aviso"}, + {"Permission: ", + "Permiss\u00e3o: "}, + {"Principal Type:", "Tipo do principal:"}, + {"Principal Name:", "Nome do principal:"}, + {"Target Name: ", + "Nome de destino: "}, + {"Actions: ", + "A\u00e7\u00f5es: "}, + {"OK to overwrite existing file filename?", + "OK para substituir o arquivo existente {0}?"}, + {"Cancel", "Cancelar"}, + {"CodeBase:", "CodeBase:"}, + {"SignedBy:", "SignedBy:"}, + {"Add Principal", "Adicionar principal"}, + {"Edit Principal", "Editar principal"}, + {"Remove Principal", "Remover principal"}, + {"Principals:", "Principais:"}, + {" Add Permission", " Adicionar permiss\u00e3o"}, + {" Edit Permission", " Editar permiss\u00e3o"}, + {"Remove Permission", "Remover permiss\u00e3o"}, + {"Done", "Conclu\u00eddo"}, + {"KeyStore URL:", "URL do KeyStore:"}, + {"KeyStore Type:", "Tipo de KeyStore:"}, + {"KeyStore Provider:", "Fornecedor de KeyStore:"}, + {"KeyStore Password URL:", "URL da senha do KeyStore:"}, + {"Principals", "Principais"}, + {" Edit Principal:", " Editar principal:"}, + {" Add New Principal:", " Adicionar novo principal:"}, + {"Permissions", "Permiss\u00f5es"}, + {" Edit Permission:", " Editar permiss\u00e3o:"}, + {" Add New Permission:", " Adicionar nova permiss\u00e3o:"}, + {"Signed By:", "Assinado por:"}, + {"Cannot Specify Principal with a Wildcard Class without a Wildcard Name", + "N\u00e3o \u00e9 poss\u00edvel especificar principal com uma classe de coringa sem um nome de coringa"}, + {"Cannot Specify Principal without a Name", + "N\u00e3o \u00e9 poss\u00edvel especificar principal sem um nome"}, + {"Permission and Target Name must have a value", + "O nome de destino e a permiss\u00e3o devem ter um valor"}, + {"Remove this Policy Entry?", "Remover esta entrada de pol\u00edtica?"}, + {"Overwrite File", "Substituir arquivo"}, + {"Policy successfully written to filename", + "Pol\u00edtica gravada com \u00eaxito em {0}"}, + {"null filename", "nome de arquivo nulo"}, + {"Save changes?", "Salvar altera\u00e7\u00f5es?"}, + {"Yes", "Sim"}, + {"No", "N\u00e3o"}, + {"Policy Entry", "Entrada de pol\u00edtica"}, + {"Save Changes", "Salvar altera\u00e7\u00f5es"}, + {"No Policy Entry selected", "Nenhuma entrada de pol\u00edtica selecionada"}, + {"Unable to open KeyStore: ex.toString()", + "N\u00e3o \u00e9 poss\u00edvel abrir o KeyStore: {0}"}, + {"No principal selected", "Nenhum principal selecionado"}, + {"No permission selected", "Nenhuma permiss\u00e3o selecionada"}, + {"name", "nome"}, + {"configuration type", "tipo de configura\u00e7\u00e3o"}, + {"environment variable name", "nome da vari\u00e1vel de ambiente"}, + {"library name", "nome da biblioteca"}, + {"package name", "nome do pacote"}, + {"policy type", "tipo de pol\u00edtica"}, + {"property name", "nome da propriedade"}, + {"provider name", "nome do fornecedor"}, + {"Principal List", "Lista de principais"}, + {"Permission List", "Lista de permiss\u00f5es"}, + {"Code Base", "Base de c\u00f3digo"}, + {"KeyStore U R L:", "U R L do KeyStore:"}, + {"KeyStore Password U R L:", "U R L da senha do KeyStore:"}, + + + // javax.security.auth.PrivateCredentialPermission + {"invalid null input(s)", "entrada(s) nula(s) inv\u00e1lida(s)"}, + {"actions can only be 'read'", "as a\u00e7\u00f5es podem ser somente 'lidas'"}, + {"permission name [name] syntax invalid: ", + "sintaxe inv\u00e1lida do nome da permiss\u00e3o [{0}]: "}, + {"Credential Class not followed by a Principal Class and Name", + "Classe da credencial n\u00e3o seguida por um nome e classe do principal"}, + {"Principal Class not followed by a Principal Name", + "Classe do principal n\u00e3o seguida por um nome do principal"}, + {"Principal Name must be surrounded by quotes", + "O nome do principal deve estar entre aspas"}, + {"Principal Name missing end quote", + "Faltam as aspas finais no nome do principal "}, + {"PrivateCredentialPermission Principal Class can not be a wildcard (*) value if Principal Name is not a wildcard (*) value", + "A classe do principal PrivateCredentialPermission n\u00e3o pode ser um valor coringa (*) se o nome do principal n\u00e3o for um valor coringa (*)"}, + {"CredOwner:\n\tPrincipal Class = class\n\tPrincipal Name = name", + "CredOwner:\n\tClasse do principal = {0}\n\tNome do principal = {1}"}, + + // javax.security.auth.x500 + {"provided null name", "nome nulo fornecido"}, + {"provided null keyword map", "mapa de palavra-chave nulo fornecido"}, + {"provided null OID map", "mapa OID nulo fornecido"}, + + // javax.security.auth.Subject + {"invalid null AccessControlContext provided", + "AccessControlContext nulo inv\u00e1lido fornecido"}, + {"invalid null action provided", "a\u00e7\u00e3o nula inv\u00e1lida fornecida"}, + {"invalid null Class provided", "classe nula inv\u00e1lida fornecida"}, + {"Subject:\n", "Subject:\n"}, + {"\tPrincipal: ", "\tPrincipal: "}, + {"\tPublic Credential: ", "\tCredencial p\u00fablica: "}, + {"\tPrivate Credentials inaccessible\n", + "\tCredenciais privadas inacess\u00edveis\n"}, + {"\tPrivate Credential: ", "\tCredencial privada: "}, + {"\tPrivate Credential inaccessible\n", + "\tCredencial privada inacess\u00edvel\n"}, + {"Subject is read-only", "O Subject \u00e9 de somente leitura"}, + {"attempting to add an object which is not an instance of java.security.Principal to a Subject's Principal Set", + "tentativa de adicionar um objeto que n\u00e3o \u00e9 uma inst\u00e2ncia de java.security.Principal a um conjunto de principais do Subject"}, + {"attempting to add an object which is not an instance of class", + "tentativa de adicionar um objeto que n\u00e3o \u00e9 uma inst\u00e2ncia de {0}"}, + + // javax.security.auth.login.AppConfigurationEntry + {"LoginModuleControlFlag: ", "LoginModuleControlFlag: "}, + + // javax.security.auth.login.LoginContext + {"Invalid null input: name", "Entrada nula inv\u00e1lida: nome"}, + {"No LoginModules configured for name", + "Nenhum LoginModule configurado para {0}"}, + {"invalid null Subject provided", "Subject nulo inv\u00e1lido fornecido"}, + {"invalid null CallbackHandler provided", + "CallbackHandler nulo inv\u00e1lido fornecido"}, + {"null subject - logout called before login", + "Subject nulo - logoff chamado antes do logon"}, + {"unable to instantiate LoginModule, module, because it does not provide a no-argument constructor", + "n\u00e3o \u00e9 poss\u00edvel instanciar LoginModule, {0}, porque n\u00e3o fornece um construtor sem argumento"}, + {"unable to instantiate LoginModule", + "n\u00e3o \u00e9 poss\u00edvel instanciar LoginModule"}, + {"unable to instantiate LoginModule: ", + "n\u00e3o \u00e9 poss\u00edvel instanciar LoginModule: "}, + {"unable to find LoginModule class: ", + "n\u00e3o \u00e9 poss\u00edvel localizar a classe LoginModule: "}, + {"unable to access LoginModule: ", + "n\u00e3o \u00e9 poss\u00edvel acessar LoginModule: "}, + {"Login Failure: all modules ignored", + "Falha de logon: todos os m\u00f3dulos ignorados"}, + + // sun.security.provider.PolicyFile + + {"java.security.policy: error parsing policy:\n\tmessage", + "java.security.policy: erro ao analisar {0}:\n\t{1}"}, + {"java.security.policy: error adding Permission, perm:\n\tmessage", + "java.security.policy: erro ao adicionar permiss\u00e3o, {0}:\n\t{1}"}, + {"java.security.policy: error adding Entry:\n\tmessage", + "java.security.policy: erro ao adicionar entrada:\n\t{0}"}, + {"alias name not provided (pe.name)", "nome de alias n\u00e3o fornecido ({0})"}, + {"unable to perform substitution on alias, suffix", + "n\u00e3o \u00e9 poss\u00edvel realizar a substitui\u00e7\u00e3o no alias, {0}"}, + {"substitution value, prefix, unsupported", + "valor da substitui\u00e7\u00e3o, {0}, n\u00e3o suportado"}, + {"(", "("}, + {")", ")"}, + {"type can't be null","o tipo n\u00e3o pode ser nulo"}, + + // sun.security.provider.PolicyParser + {"keystorePasswordURL can not be specified without also specifying keystore", + "keystorePasswordURL n\u00e3o pode ser especificado sem que o armazenamento de chaves tamb\u00e9m seja especificado"}, + {"expected keystore type", "tipo de armazenamento de chaves esperado"}, + {"expected keystore provider", "fornecedor de armazenamento de chaves esperado"}, + {"multiple Codebase expressions", + "v\u00e1rias express\u00f5es CodeBase"}, + {"multiple SignedBy expressions","v\u00e1rias express\u00f5es SignedBy"}, + {"SignedBy has empty alias","SignedBy possui alias vazio"}, + {"can not specify Principal with a wildcard class without a wildcard name", + "n\u00e3o \u00e9 poss\u00edvel especificar principal com uma classe de coringa sem um nome de coringa"}, + {"expected codeBase or SignedBy or Principal", + "CodeBase ou SignedBy ou Principal esperado"}, + {"expected permission entry", "entrada de permiss\u00e3o esperada"}, + {"number ", "n\u00famero "}, + {"expected [expect], read [end of file]", + "esperado [{0}], lido [fim do arquivo]"}, + {"expected [;], read [end of file]", + "esperado [;], lido [fim do arquivo]"}, + {"line number: msg", "linha {0}: {1}"}, + {"line number: expected [expect], found [actual]", + "linha {0}: esperado [{1}], encontrado [{2}]"}, + {"null principalClass or principalName", + "principalClass ou principalName nulo "}, + + // sun.security.pkcs11.SunPKCS11 + {"PKCS11 Token [providerName] Password: ", + "Senha PKCS11 Token [{0}]: "}, + + /* --- DEPRECATED --- */ + // javax.security.auth.Policy + {"unable to instantiate Subject-based policy", + "n\u00e3o \u00e9 poss\u00edvel instanciar a pol\u00edtica com base em Subject"} + }; + + + /** + * Returns the contents of this ResourceBundle. + * + *

    + * + * @return the contents of this ResourceBundle. + */ + public Object[][] getContents() { + return contents; + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/validator/PKIXValidator.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/validator/PKIXValidator.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/validator/PKIXValidator.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/validator/PKIXValidator.java 2015-01-20 02:20:42.000000000 +0000 @@ -31,20 +31,36 @@ import java.security.cert.*; import javax.security.auth.x500.X500Principal; +import sun.security.action.GetBooleanAction; +import sun.security.provider.certpath.AlgorithmChecker; +import sun.security.util.AlgorithmConstraints; /** * Validator implementation built on the PKIX CertPath API. This * implementation will be emphasized going forward.

    - * + *

    * Note that the validate() implementation tries to use a PKIX validator * if that appears possible and a PKIX builder otherwise. This increases * performance and currently also leads to better exception messages * in case of failures. + *

    + * {@code PKIXValidator} objects are immutable once they have been created. + * Please DO NOT add methods that can change the state of an instance once + * it has been created. * * @author Andreas Sterbenz */ public final class PKIXValidator extends Validator { + /** + * Flag indicating whether to enable revocation check for the PKIX trust + * manager. Typically, this will only work if the PKIX implementation + * supports CRL distribution points as we do not manually setup CertStores. + */ + private final static boolean checkTLSRevocation = + AccessController.doPrivileged + (new GetBooleanAction("com.sun.net.ssl.checkRevocation")); + // enable use of the validator if possible private final static boolean TRY_VALIDATOR = true; @@ -53,10 +69,10 @@ private int certPathLength = -1; // needed only for the validator - private Map> trustedSubjects; - private CertificateFactory factory; + private final Map> trustedSubjects; + private final CertificateFactory factory; - private boolean plugin = false; + private final boolean plugin; PKIXValidator(String variant, Collection trustedCerts) { super(TYPE_PKIX, variant); @@ -75,7 +91,33 @@ throw new RuntimeException("Unexpected error: " + e.toString(), e); } setDefaultParameters(variant); - initCommon(); + + // initCommon(); + if (TRY_VALIDATOR) { + if (TRY_VALIDATOR == false) { + return; + } + trustedSubjects = new HashMap>(); + for (X509Certificate cert : trustedCerts) { + X500Principal dn = cert.getSubjectX500Principal(); + List keys; + if (trustedSubjects.containsKey(dn)) { + keys = trustedSubjects.get(dn); + } else { + keys = new ArrayList(); + trustedSubjects.put(dn, keys); + } + keys.add(cert.getPublicKey()); + } + try { + factory = CertificateFactory.getInstance("X.509"); + } catch (CertificateException e) { + throw new RuntimeException("Internal error", e); + } + plugin = variant.equals(VAR_PLUGIN_CODE_SIGNING); + } else { + plugin = false; + } } PKIXValidator(String variant, PKIXBuilderParameters params) { @@ -88,31 +130,33 @@ } } parameterTemplate = params; - initCommon(); - } - private void initCommon() { - if (TRY_VALIDATOR == false) { - return; - } - trustedSubjects = new HashMap>(); - for (X509Certificate cert : trustedCerts) { - X500Principal dn = cert.getSubjectX500Principal(); - List keys; - if (trustedSubjects.containsKey(dn)) { - keys = trustedSubjects.get(dn); - } else { - keys = new ArrayList(); - trustedSubjects.put(dn, keys); + // initCommon(); + if (TRY_VALIDATOR) { + if (TRY_VALIDATOR == false) { + return; } - keys.add(cert.getPublicKey()); - } - try { - factory = CertificateFactory.getInstance("X.509"); - } catch (CertificateException e) { - throw new RuntimeException("Internal error", e); + trustedSubjects = new HashMap>(); + for (X509Certificate cert : trustedCerts) { + X500Principal dn = cert.getSubjectX500Principal(); + List keys; + if (trustedSubjects.containsKey(dn)) { + keys = trustedSubjects.get(dn); + } else { + keys = new ArrayList(); + trustedSubjects.put(dn, keys); + } + keys.add(cert.getPublicKey()); + } + try { + factory = CertificateFactory.getInstance("X.509"); + } catch (CertificateException e) { + throw new RuntimeException("Internal error", e); + } + plugin = variant.equals(VAR_PLUGIN_CODE_SIGNING); + } else { + plugin = false; } - plugin = variant.equals(VAR_PLUGIN_CODE_SIGNING); } public Collection getTrustedCertificates() { @@ -129,7 +173,7 @@ * @return the length of the last certification path passed to * CertPathValidator.validate, or -1 if it has not been invoked yet */ - public int getCertPathLength() { + public int getCertPathLength() { // mutable, should be private return certPathLength; } @@ -138,7 +182,12 @@ * revocation checking. In the future, this should be configurable. */ private void setDefaultParameters(String variant) { - parameterTemplate.setRevocationEnabled(false); + if ((variant == Validator.VAR_TLS_SERVER) || + (variant == Validator.VAR_TLS_CLIENT)) { + parameterTemplate.setRevocationEnabled(checkTLSRevocation); + } else { + parameterTemplate.setRevocationEnabled(false); + } } /** @@ -146,21 +195,37 @@ * modify the parameters but must make sure not to perform any concurrent * validations. */ - public PKIXBuilderParameters getParameters() { + public PKIXBuilderParameters getParameters() { // mutable, should be private return parameterTemplate; } + @Override X509Certificate[] engineValidate(X509Certificate[] chain, - Collection otherCerts, Object parameter) - throws CertificateException { + Collection otherCerts, + AlgorithmConstraints constraints, + Object parameter) throws CertificateException { if ((chain == null) || (chain.length == 0)) { throw new CertificateException ("null or zero-length certificate chain"); } + + // add new algorithm constraints checker + PKIXBuilderParameters pkixParameters = + (PKIXBuilderParameters) parameterTemplate.clone(); + AlgorithmChecker algorithmChecker = null; + if (constraints != null) { + algorithmChecker = new AlgorithmChecker(constraints); + pkixParameters.addCertPathChecker(algorithmChecker); + } + if (TRY_VALIDATOR) { // check if chain contains trust anchor + // check that chain is in correct order and check if chain contains + // trust anchor + X500Principal prevIssuer = null; for (int i = 0; i < chain.length; i++) { - X500Principal dn = chain[i].getSubjectX500Principal(); + X509Certificate cert = chain[i]; + X500Principal dn = cert.getSubjectX500Principal(); // Check if chain[i] is already trusted. It may be inside // trustedCerts, or has the same dn and public key as a cert @@ -168,7 +233,11 @@ // updated its cert with a stronger signature algorithm in JRE // but the weak one is still in circulation. - if (trustedCerts.contains(chain[i]) || // trusted cert + if (i != 0 && !dn.equals(prevIssuer)) { + // chain is not ordered correctly, call builder instead + return doBuild(chain, otherCerts, pkixParameters); + } + if (trustedCerts.contains(cert) || // trusted cert (trustedSubjects.containsKey(dn) && // replacing ... trustedSubjects.get(dn).contains( // ... weak cert chain[i].getPublicKey()))) { @@ -178,17 +247,18 @@ // Remove and call validator on partial chain [0 .. i-1] X509Certificate[] newChain = new X509Certificate[i]; System.arraycopy(chain, 0, newChain, 0, i); - return doValidate(newChain); + return doValidate(newChain, pkixParameters); } + prevIssuer = cert.getIssuerX500Principal(); } - // not self issued and apparently issued by trust anchor? + // apparently issued by trust anchor? X509Certificate last = chain[chain.length - 1]; X500Principal issuer = last.getIssuerX500Principal(); X500Principal subject = last.getSubjectX500Principal(); - if (trustedSubjects.containsKey(issuer) && !issuer.equals(subject) - && isSignatureValid(trustedSubjects.get(issuer), last)) { - return doValidate(chain); + if (trustedSubjects.containsKey(issuer) && + isSignatureValid(trustedSubjects.get(issuer), last)) { + return doValidate(chain, pkixParameters); } // don't fallback to builder if called from plugin/webstart @@ -200,18 +270,17 @@ X509Certificate[] newChain = new X509Certificate[chain.length-1]; System.arraycopy(chain, 0, newChain, 0, newChain.length); + // temporarily set last cert as sole trust anchor - PKIXBuilderParameters params = - (PKIXBuilderParameters) parameterTemplate.clone(); try { - params.setTrustAnchors + pkixParameters.setTrustAnchors (Collections.singleton(new TrustAnchor (chain[chain.length-1], null))); } catch (InvalidAlgorithmParameterException iape) { // should never occur, but ... throw new CertificateException(iape); } - doValidate(newChain, params); + doValidate(newChain, pkixParameters); } // if the rest of the chain is valid, throw exception // indicating no trust anchor was found @@ -221,10 +290,11 @@ // otherwise, fall back to builder } - return doBuild(chain, otherCerts); + return doBuild(chain, otherCerts, pkixParameters); } - private boolean isSignatureValid(List keys, X509Certificate sub) { + private boolean isSignatureValid(List keys, + X509Certificate sub) { if (plugin) { for (PublicKey key: keys) { try { @@ -264,13 +334,6 @@ } } - private X509Certificate[] doValidate(X509Certificate[] chain) - throws CertificateException { - PKIXBuilderParameters params = - (PKIXBuilderParameters)parameterTemplate.clone(); - return doValidate(chain, params); - } - private X509Certificate[] doValidate(X509Certificate[] chain, PKIXBuilderParameters params) throws CertificateException { try { @@ -291,11 +354,10 @@ } private X509Certificate[] doBuild(X509Certificate[] chain, - Collection otherCerts) throws CertificateException { + Collection otherCerts, + PKIXBuilderParameters params) throws CertificateException { try { - PKIXBuilderParameters params = - (PKIXBuilderParameters)parameterTemplate.clone(); setDate(params); // setup target constraints @@ -325,5 +387,4 @@ ("PKIX path building failed: " + e.toString(), e); } } - } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/validator/SimpleValidator.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/validator/SimpleValidator.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/validator/SimpleValidator.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/validator/SimpleValidator.java 2015-01-20 02:20:42.000000000 +0000 @@ -35,6 +35,7 @@ import sun.security.x509.X509CertImpl; import sun.security.x509.NetscapeCertTypeExtension; +import sun.security.util.AlgorithmConstraints; import sun.security.util.DerValue; import sun.security.util.DerInputStream; import sun.security.util.DerOutputStream; @@ -49,6 +50,10 @@ * deployed certificates and previous J2SE versions. It will never support * more advanced features and will be deemphasized in favor of the PKIX * validator going forward. + *

    + * {@code SimpleValidator} objects are immutable once they have been created. + * Please DO NOT add methods that can change the state of an instance once + * it has been created. * * @author Andreas Sterbenz */ @@ -81,13 +86,14 @@ * The list is used because there may be multiple certificates * with an identical subject DN. */ - private Map> trustedX500Principals; + private final Map> + trustedX500Principals; /** * Set of the trusted certificates. Present only for * getTrustedCertificates(). */ - private Collection trustedCerts; + private final Collection trustedCerts; SimpleValidator(String variant, Collection trustedCerts) { super(TYPE_SIMPLE, variant); @@ -115,9 +121,11 @@ * Perform simple validation of chain. The arguments otherCerts and * parameter are ignored. */ + @Override X509Certificate[] engineValidate(X509Certificate[] chain, - Collection otherCerts, Object parameter) - throws CertificateException { + Collection otherCerts, + AlgorithmConstraints constraints, + Object parameter) throws CertificateException { if ((chain == null) || (chain.length == 0)) { throw new CertificateException ("null or zero-length certificate chain"); @@ -130,12 +138,23 @@ if (date == null) { date = new Date(); } - + + // create default algorithm constraints checker + TrustAnchor anchor = new TrustAnchor(chain[chain.length - 1], null); + AlgorithmChecker defaultAlgChecker = new AlgorithmChecker(anchor); + + // create application level algorithm constraints checker + AlgorithmChecker appAlgChecker = null; + if (constraints != null) { + appAlgChecker = new AlgorithmChecker(anchor, constraints); + } + // create distrusted certificates checker UntrustedChecker untrustedChecker = new UntrustedChecker(); // verify top down, starting at the certificate issued by // the trust anchor + int maxPathLength = chain.length - 1; for (int i = chain.length - 2; i >= 0; i--) { X509Certificate issuerCert = chain[i + 1]; X509Certificate cert = chain[i]; @@ -153,7 +172,12 @@ // check certificate algorithm try { - AlgorithmChecker.check(cert); + // Algorithm checker don't care about the unresolved critical + // extensions. + defaultAlgChecker.check(cert, Collections.emptySet()); + if (appAlgChecker != null) { + appAlgChecker.check(cert, Collections.emptySet()); + } } catch (CertPathValidatorException cpve) { throw new ValidatorException (ValidatorException.T_ALGORITHM_DISABLED, cert, cpve); @@ -182,14 +206,14 @@ // check extensions for CA certs if (i != 0) { - checkExtensions(cert, i); + maxPathLength = checkExtensions(cert, maxPathLength); } } return chain; } - private void checkExtensions(X509Certificate cert, int index) + private int checkExtensions(X509Certificate cert, int maxPathLen) throws CertificateException { Set critSet = cert.getCriticalExtensionOIDs(); if (critSet == null) { @@ -197,7 +221,8 @@ } // Check the basic constraints extension - checkBasicConstraints(cert, critSet, index); + int pathLenConstraint = + checkBasicConstraints(cert, critSet, maxPathLen); // Check the key usage and extended key usage extensions checkKeyUsage(cert, critSet); @@ -210,6 +235,8 @@ ("Certificate contains unknown critical extensions: " + critSet, ValidatorException.T_CA_EXTENSIONS, cert); } + + return pathLenConstraint; } private void checkNetscapeCertType(X509Certificate cert, @@ -271,8 +298,8 @@ } } - private void checkBasicConstraints(X509Certificate cert, - Set critSet, int index) throws CertificateException { + private int checkBasicConstraints(X509Certificate cert, + Set critSet, int maxPathLen) throws CertificateException { critSet.remove(OID_BASIC_CONSTRAINTS); int constraints = cert.getBasicConstraints(); @@ -281,10 +308,23 @@ throw new ValidatorException("End user tried to act as a CA", ValidatorException.T_CA_EXTENSIONS, cert); } - if (index - 1 > constraints) { - throw new ValidatorException("Violated path length constraints", - ValidatorException.T_CA_EXTENSIONS, cert); + + // if the certificate is self-issued, ignore the pathLenConstraint + // checking. + if (!X509CertImpl.isSelfIssued(cert)) { + if (maxPathLen <= 1) { // reserved one for end-entity certificate + throw new ValidatorException("Violated path length constraints", + ValidatorException.T_CA_EXTENSIONS, cert); + } + + maxPathLen--; + } + + if (maxPathLen > constraints) { + maxPathLen = constraints; } + + return maxPathLen; } /* @@ -329,18 +369,18 @@ } c.add(cert); } + // check if we can append a trusted cert X509Certificate cert = chain[chain.length - 1]; X500Principal subject = cert.getSubjectX500Principal(); X500Principal issuer = cert.getIssuerX500Principal(); - if (subject.equals(issuer) == false) { - List list = trustedX500Principals.get(issuer); - if (list != null) { - X509Certificate trustedCert = list.iterator().next(); - c.add(trustedCert); - return c.toArray(CHAIN0); - } + List list = trustedX500Principals.get(issuer); + if (list != null) { + X509Certificate trustedCert = list.iterator().next(); + c.add(trustedCert); + return c.toArray(CHAIN0); } + // no trusted cert found, error throw new ValidatorException(ValidatorException.T_NO_TRUST_ANCHOR); } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/validator/Validator.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/validator/Validator.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/validator/Validator.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/validator/Validator.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ import java.security.KeyStore; import java.security.cert.*; +import sun.security.util.AlgorithmConstraints; /** * Validator abstract base class. Concrete classes are instantiated by calling @@ -232,16 +233,44 @@ public final X509Certificate[] validate(X509Certificate[] chain, Collection otherCerts, Object parameter) throws CertificateException { - chain = engineValidate(chain, otherCerts, parameter); + return validate(chain, otherCerts, null, parameter); + } + + /** + * Validate the given certificate chain. + * + * @param chain the target certificate chain + * @param otherCerts a Collection of additional X509Certificates that + * could be helpful for path building (or null) + * @param constraints algorithm constraints for certification path + * processing + * @param parameter an additional parameter with variant specific meaning. + * Currently, it is only defined for TLS_SERVER variant validators, + * where it must be non null and the name of the TLS key exchange + * algorithm being used (see JSSE X509TrustManager specification). + * In the future, it could be used to pass in a PKCS#7 object for + * code signing to check time stamps. + * @return a non-empty chain that was used to validate the path. The + * end entity cert is at index 0, the trust anchor at index n-1. + */ + public final X509Certificate[] validate(X509Certificate[] chain, + Collection otherCerts, + AlgorithmConstraints constraints, + Object parameter) throws CertificateException { + chain = engineValidate(chain, otherCerts, constraints, parameter); + // omit EE extension check if EE cert is also trust anchor if (chain.length > 1) { endEntityChecker.check(chain[0], parameter); } + return chain; } abstract X509Certificate[] engineValidate(X509Certificate[] chain, - Collection otherCerts, Object parameter) throws CertificateException; + Collection otherCerts, + AlgorithmConstraints constraints, + Object parameter) throws CertificateException; /** * Returns an immutable Collection of the X509Certificates this instance diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/x509/X509CRLImpl.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/x509/X509CRLImpl.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/security/x509/X509CRLImpl.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/security/x509/X509CRLImpl.java 2015-01-20 02:20:42.000000000 +0000 @@ -767,6 +767,15 @@ } /** + * Gets the signature AlgorithmId from the CRL. + * + * @return the signature AlgorithmId + */ + public AlgorithmId getSigAlgId() { + return sigAlgId; + } + + /** * return the AuthorityKeyIdentifier, if any. * * @returns AuthorityKeyIdentifier or null diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/swing/FilePane.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/swing/FilePane.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/swing/FilePane.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/swing/FilePane.java 2015-01-20 02:20:42.000000000 +0000 @@ -1938,6 +1938,7 @@ return false; } + try { if (f instanceof ShellFolder) { return ((ShellFolder) f).isFileSystem(); } else { @@ -1953,6 +1954,9 @@ return true; } } + } catch (SecurityException e) { + return false; + } } // This interface is used to access methods in the FileChooserUI diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java 2015-01-20 02:20:42.000000000 +0000 @@ -791,16 +791,9 @@ fireIntervalRemoved(this, 0, oldSize); } - File[] baseFolders; - if (useShellFolder) { - baseFolders = AccessController.doPrivileged(new PrivilegedAction() { - public File[] run() { - return (File[]) ShellFolder.get("fileChooserComboBoxFolders"); - } - }); - } else { - baseFolders = fsv.getRoots(); - } + File[] baseFolders = (useShellFolder) + ? (File[]) ShellFolder.get("fileChooserComboBoxFolders") + : fsv.getRoots(); directories.addAll(Arrays.asList(baseFolders)); // Get the canonical (full) path. This has the side diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java 2015-01-20 02:20:42.000000000 +0000 @@ -29,6 +29,8 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.*; +import java.security.AccessController; +import java.security.PrivilegedAction; import javax.swing.*; import javax.swing.border.*; @@ -79,7 +81,8 @@ setBackground(bgColor); FileSystemView fsv = fc.getFileSystemView(); - files = (File[])ShellFolder.get("fileChooserShortcutPanelFolders"); + files = (File[]) ShellFolder.get("fileChooserShortcutPanelFolders"); + buttons = new JToggleButton[files.length]; buttonGroup = new ButtonGroup(); for (int i = 0; i < files.length; i++) { diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/text/resources/FormatData_be.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/text/resources/FormatData_be.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/text/resources/FormatData_be.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/text/resources/FormatData_be.java 2015-01-20 02:17:46.000000000 +0000 @@ -62,7 +62,7 @@ "\u0436\u043d\u0456\u045e\u043d\u044f", // august "\u0432\u0435\u0440\u0430\u0441\u043d\u044f", // september "\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430", // october - "\u043b\u0438\u0441\u0442\u0430\u043f\u0430\u0434\u0430", // november + "\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430", // november "\u0441\u043d\u0435\u0436\u043d\u044f", // december "" // month 13 if applicable } @@ -79,7 +79,7 @@ "\u0436\u043d\u0432", // abb august "\u0432\u0440\u0441", // abb september "\u043a\u0441\u0442", // abb october - "\u043b\u0441\u0442", // abb november + "\u043b\u0456\u0441", // abb november "\u0441\u043d\u0436", // abb december "" // abb month 13 if applicable } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/text/resources/FormatData_et.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/text/resources/FormatData_et.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/text/resources/FormatData_et.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/text/resources/FormatData_et.java 2015-01-20 02:17:46.000000000 +0000 @@ -50,35 +50,35 @@ return new Object[][] { { "MonthNames", new String[] { - "Jaanuar", // january - "Veebruar", // february - "M\u00e4rts", // march - "Aprill", // april - "Mai", // may - "Juuni", // june - "Juuli", // july - "August", // august - "September", // september - "Oktoober", // october - "November", // november - "Detsember", // december + "jaanuar", // january + "veebruar", // february + "m\u00e4rts", // march + "aprill", // april + "mai", // may + "juuni", // june + "juuli", // july + "august", // august + "september", // september + "oktoober", // october + "november", // november + "detsember", // december "" // month 13 if applicable } }, { "MonthAbbreviations", new String[] { - "Jaan", // abb january - "Veebr", // abb february - "M\u00e4rts", // abb march - "Apr", // abb april - "Mai", // abb may - "Juuni", // abb june - "Juuli", // abb july - "Aug", // abb august - "Sept", // abb september - "Okt", // abb october - "Nov", // abb november - "Dets", // abb december + "jaan", // abb january + "veebr", // abb february + "m\u00e4rts", // abb march + "apr", // abb april + "mai", // abb may + "juuni", // abb june + "juuli", // abb july + "aug", // abb august + "sept", // abb september + "okt", // abb october + "nov", // abb november + "dets", // abb december "" // abb month 13 if applicable } }, diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/text/resources/FormatData_hr_HR.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/text/resources/FormatData_hr_HR.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/text/resources/FormatData_hr_HR.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/text/resources/FormatData_hr_HR.java 2015-01-20 02:17:46.000000000 +0000 @@ -55,6 +55,19 @@ "#,##0%" // percent pattern } }, + { "DateTimePatterns", + new String[] { + "HH:mm:ss z", // full time pattern + "HH:mm:ss z", // long time pattern + "HH:mm:ss", // medium time pattern + "HH:mm", // short time pattern + "yyyy. MMMM dd", // full date pattern + "yyyy. MMMM dd", // long date pattern + "dd.MM.yyyy.", // medium date pattern + "dd.MM.yy.", // short date pattern + "{1} {0}" // date-time pattern + } + } }; } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/text/resources/FormatData_sl.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/text/resources/FormatData_sl.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/text/resources/FormatData_sl.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/text/resources/FormatData_sl.java 2015-01-20 02:17:46.000000000 +0000 @@ -131,8 +131,8 @@ "H:mm:ss z", // long time pattern "H:mm:ss", // medium time pattern "H:mm", // short time pattern - "EEEE, d MMMM yyyy", // full date pattern - "EEEE, d MMMM yyyy", // long date pattern + "EEEE, dd. MMMM y", // full date pattern + "dd. MMMM y", // long date pattern "d.M.yyyy", // medium date pattern "d.M.y", // short date pattern "{1} {0}" // date-time pattern diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/text/resources/FormatData_sv_SE.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/text/resources/FormatData_sv_SE.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/text/resources/FormatData_sv_SE.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/text/resources/FormatData_sv_SE.java 2015-01-20 02:17:46.000000000 +0000 @@ -52,7 +52,7 @@ new String[] { "#,##0.###;-#,##0.###", // decimal pattern "#,##0.00 \u00A4;-#,##0.00 \u00A4", // currency pattern - "#,##0%" // percent pattern + "#,##0 %" // percent pattern } }, }; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/text/resources/FormatData_uk.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/text/resources/FormatData_uk.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/text/resources/FormatData_uk.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/text/resources/FormatData_uk.java 2015-01-20 02:17:46.000000000 +0000 @@ -113,7 +113,7 @@ { "NumberElements", new String[] { ",", // decimal separator - ".", // group (thousands) separator + "\u00a0", // group (thousands) separator ";", // list separator "%", // percent sign "0", // native 0 digit diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/tools/jar/resources/jar_pt_BR.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/tools/jar/resources/jar_pt_BR.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/tools/jar/resources/jar_pt_BR.properties 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/tools/jar/resources/jar_pt_BR.properties 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,47 @@ +# +# Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +error.cant.open=n\u00e3o \u00e9 poss\u00edvel abrir: {0} +error.illegal.option=Op\u00e7\u00e3o ilegal: {0} +error.bad.option=Uma das op\u00e7\u00f5es -{ctxu} deve ser especificada. +error.bad.cflag=sinalizador 'c' requer que os arquivos de manifesto ou entrada sejam especificados! +error.bad.uflag=sinalizador 'u' requer os arquivos de manifesto, o sinalizador 'e' ou os arquivos de entrada sejam especificados! +error.bad.eflag=sinalizador 'e' manifesto com o atributo 'Main-Class' n\u00e3o podem ser especificados \njuntos! +error.nosuch.fileordir={0} : n\u00e3o h\u00e1 tal arquivo ou diret\u00f3rio +error.write.file=Erro ao gravar o arquivo jar existente +error.create.dir={0} : n\u00e3o foi poss\u00edvel gravar o diret\u00f3rio +error.incorrect.length=largura incorreta durante processamento: {0} +out.added.manifest=manifesto adicionado +out.update.manifest=manifesto atualizado +out.ignore.entry=ignorando entrada {0} +out.adding=adicionando: {0} +out.deflated=(vazio {0}%) +out.stored=(armazenado 0%) +out.create=\ \ criando: {0} +out.extracted=extra\u00eddo: {0} +out.inflated=\ \cheio: {0} +out.size=(dento = {0}) (fora= {1}) + +usage=Uso: arquivos jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] ...\nOp\u00e7\u00f5es:\n\ \ -c cria novo arquivo de armazenamento\n\ \ -t lista o sum\u00e1rio do arquivo de armazenamento\n\ \ -x extrai arquivos nomeados (ou todos) do arquivo de armazenamento\n\ \ -u atualizar o arquivo de armazenamento existente\n\ \ -v gera sa\u00edda detalhada na sa\u00edda padr\u00e3o\n\ \ -f especifica o nome do arquivo do arquivo de armazenamento\n\ \ -m inclui as informa\u00e7\u00f5es do manifesto do arquivo de manifesto especificado\n\ \ -e especifica o ponto de entrada do aplicativo para aplicativo independente \n\ \ empacotando em um arquivo jar execut\u00e1vel\n\ \ -0 armazena somente; n\u00e3o usa compacta\u00e7\u00e3o ZIP\n\ \ -M n\u00e3o cria um arquivo de manifesto para as entradas\n\ \ -i gera informa\u00e7\u00f5es de \u00edndice para os arquivos especificados\n\ \ -C altera para o diret\u00f3rio e inclui o arquivo seguinte\nSe nenhum arquivo for um diret\u00f3rio, ent\u00e3o \u00e9 processado repetidamente.\nO nome do arquivo de manifesto, o nome do arquivo de armazenamento e o nome do ponto de entrada s\u00e3o\nespecificados na mesma ordem dos sinalizadores 'm', 'f' e 'e'.\n\nExemplo 1: para arquivar dois arquivos de classe em um arquivo de armazenamento denominado classes.jar: \n\ \ jar cvf classes.jar Foo.class Bar.class \nExemplo 2: use um arquivo de manifesto existente 'mymanifest' e arquive todos os\n\ \ arquivos no diret\u00f3rio foo/ na 'classes.jar': \n\ \ jar cvfm classes.jar mymanifest -C foo/ .\n diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/tools/jstat/Arguments.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/tools/jstat/Arguments.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/tools/jstat/Arguments.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/tools/jstat/Arguments.java 2015-01-20 02:17:13.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -140,8 +140,9 @@ public Arguments(String[] args) throws IllegalArgumentException { int argc = 0; - if (args.length < 1) { - throw new IllegalArgumentException("invalid argument count"); + if (args.length == 0) { + help = true; + return; } if ((args[0].compareTo("-?") == 0) diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/logging/resources/logging_pt_BR.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/logging/resources/logging_pt_BR.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/logging/resources/logging_pt_BR.properties 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/logging/resources/logging_pt_BR.properties 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,37 @@ +# +# Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# Localizations for Level names. For the US locale +# these are the same as the non-localized level name. +ALL=TODOS +SEVERE=GRAVE +WARNING=AVISO +INFO=INFO +CONFIG= CONFIG +FINE=BOM +FINER=MUITO BOM +FINEST=EXCELENTE +OFF=OFF + diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CalendarData_hu.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CalendarData_hu.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CalendarData_hu.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CalendarData_hu.properties 2015-01-20 02:17:16.000000000 +0000 @@ -37,4 +37,4 @@ firstDayOfWeek=2 -minimalDaysInFirstWeek=1 +minimalDaysInFirstWeek=4 diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CalendarData_sl.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CalendarData_sl.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CalendarData_sl.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CalendarData_sl.properties 2015-01-20 02:17:16.000000000 +0000 @@ -36,8 +36,4 @@ # Taligent is a registered trademark of Taligent, Inc. -# This bundle is empty because the data of the base bundle -# is adequate for this locale. -# The bundle is necessary to prevent the resource -# bundle lookup from falling back to the default -# locale. +firstDayOfWeek=2 diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_de.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_de.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_de.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_de.properties 2015-01-20 02:17:17.000000000 +0000 @@ -1,45 +1,68 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. # # # COPYRIGHT AND PERMISSION NOTICE # -# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved. # Distributed under the Terms of Use in http://www.unicode.org/copyright.html. # -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of the Unicode data files and any associated documentation (the "Data -# Files") or Unicode software and any associated documentation (the -# "Software") to deal in the Data Files or Software without restriction, -# including without limitation the rights to use, copy, modify, merge, -# publish, distribute, and/or sell copies of the Data Files or Software, and -# to permit persons to whom the Data Files or Software are furnished to do -# so, provided that (a) the above copyright notice(s) and this permission -# notice appear with all copies of the Data Files or Software, (b) both the -# above copyright notice(s) and this permission notice appear in associated -# documentation, and (c) there is clear notice in each modified Data File or -# in the Software as well as in the documentation associated with the Data -# File(s) or Software that the data or software has been modified. -# -# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS -# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR -# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THE DATA FILES OR SOFTWARE. -# -# Except as contained in this notice, the name of a copyright holder shall not -# be used in advertising or otherwise to promote the sale, use or other -# dealings in these Data Files or Software without prior written -# authorization of the copyright holder. +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of the Unicode data files and any associated documentation (the +# "Data Files") or Unicode software and any associated documentation +# (the "Software") to deal in the Data Files or Software without +# restriction, including without limitation the rights to use, copy, +# modify, merge, publish, distribute, and/or sell copies of the Data +# Files or Software, and to permit persons to whom the Data Files or +# Software are furnished to do so, provided that (a) the above copyright +# notice(s) and this permission notice appear with all copies of the +# Data Files or Software, (b) both the above copyright notice(s) and +# this permission notice appear in associated documentation, and (c) +# there is clear notice in each modified Data File or in the Software as +# well as in the documentation associated with the Data File(s) or +# Software that the data or software has been modified. # - -# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR +# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR +# SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in these Data Files or Software without prior +# written authorization of the copyright holder. +# +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# adp=Andorranische Pesete aed=UAE Dirham afa=Afghani (1927-2002) @@ -52,7 +75,8 @@ ats=\u00d6sterreichischer Schilling aud=Australischer Dollar awg=Aruba Florin -azm=Aserbeidschan Manat +azm=Aserbaidschan-Manat (1993-2006) +azn=Aserbaidschan-Manat bam=Konvertierbare Mark bbd=Barbados-Dollar bdt=Taka @@ -80,9 +104,11 @@ cny=Renminbi Yuan cop=Kolumbianischer Peso crc=Costa Rica Colon +csd=Alter Serbischer Dinar +cuc=Kubanischer Peso (konvertibel) cup=Kubanischer Peso cve=Kap Verde Escudo -cyp=Zypern Pfund +cyp=Zypern-Pfund czk=Tschechische Krone dem=Deutsche Mark djf=Dschibuti-Franc @@ -92,24 +118,24 @@ eek=Estnische Krone egp=\u00c4gyptisches Pfund ern=Nakfa -esp=Spanische Pesete +esp=Spanische Peseta etb=Birr -eur=Euro fim=Finnische Mark -fjd=Fidschi Dollar -fkp=Falkland Pfund +fjd=Fidschi-Dollar +fkp=Falkland-Pfund frf=Franz\u00f6sischer Franc gbp=Pfund Sterling gel=Georgischer Lari ghc=Cedi -gip=Gibraltar Pfund +ghs=Ghanaische Cedi +gip=Gibraltar-Pfund gmd=Dalasi -gnf=Guinea Franc +gnf=Guinea-Franc grd=Griechische Drachme gtq=Quetzal gwp=Guinea Bissau Peso -gyd=Guyana Dollar -hkd=Hongkong Dollar +gyd=Guyana-Dollar +hkd=Hongkong-Dollar hnl=Lempira hrk=Kuna htg=Gourde @@ -121,11 +147,11 @@ iqd=Irak Dinar irr=Rial isk=Isl\u00e4ndische Krone -itl=Italienische Lire -jmd=Jamaika Dollar +itl=Italienische Lira +jmd=Jamaika-Dollar jod=Jordanischer Dinar jpy=Yen -kes=Kenia Schilling +kes=Kenia-Schilling kgs=Som khr=Riel kmf=Komoren Franc @@ -146,27 +172,28 @@ mad=Marokkanischer Dirham mdl=Moldau Leu mga=Madagaskar Ariary -mgf=Madagaskar Franc +mgf=Madagaskar-Franc mkd=Denar mmk=Kyat mnt=Tugrik mop=Pataca mro=Ouguiya mtl=Maltesische Lira -mur=Mauritius Rupie +mur=Mauritius-Rupie mvr=Rufiyaa mwk=Malawi Kwacha mxn=Mexikanischer Peso mxv=Mexican Unidad de Inversion (UDI) myr=Malaysischer Ringgit -mzm=Metical -nad=Namibia Dollar +mzm=Alter Metical +mzn=Metical +nad=Namibia-Dollar ngn=Naira nio=Gold-Cordoba nlg=Holl\u00e4ndischer Gulden nok=Norwegische Krone npr=Nepalesische Rupie -nzd=Neuseeland Dollar +nzd=Neuseeland-Dollar omr=Rial Omani pab=Balboa pen=Neuer Sol @@ -178,20 +205,23 @@ pyg=Guarani qar=Katar Riyal rol=Leu +ron=Rum\u00e4nischer Leu +rsd=Serbischer Dinar rub=Russischer Rubel (neu) rur=Russischer Rubel (alt) -rwf=Ruanda Franc -sar=Saudi Riyal -sbd=Salomonen Dollar -scr=Seychellen Rupie +rwf=Ruanda-Franc +sbd=Salomonen-Dollar +scr=Seychellen-Rupie sdd=Sudanesischer Dinar +sdg=Sudanesisches Pfund sek=Schwedische Krone -sgd=Singapur Dollar +sgd=Singapur-Dollar shp=St. Helena Pfund sit=Tolar skk=Slowakische Krone sll=Leone -sos=Somalia Schilling +sos=Somalia-Schilling +srd=Surinamischer Dollar srg=Suriname Gulden std=Dobra svc=El Salvador Colon @@ -200,28 +230,32 @@ thb=Baht tjs=Tadschikistan Somoni tmm=Turkmenistan-Manat +tmt=Neuer Turkmenistan-Manat tnd=Tunesischer Dinar top=Pa\u02bbanga -tpe=Timor Escudo -trl=T\u00fcrkische Lira -try=Neue T\u00fcrkische Lira -ttd=Trinidad und Tobago Dollar -twd=Neuer Taiwan Dollar -tzs=Tansania Schilling +tpe=Timor-Escudo +trl=Alte T\u00fcrkische Lira +try=T\u00fcrkische Lira +ttd=Trinidad- und Tobago-Dollar +twd=Neuer Taiwan-Dollar +tzs=Tansania-Schilling uah=Hryvnia -ugx=Uganda Schilling -usd=US Dollar +ugx=Uganda-Schilling +usd=US-Dollar usn=US Dollar (N\u00e4chster Tag) uss=US Dollar (Gleicher Tag) uyu=Uruguayischer Peso uzs=Usbekistan Sum veb=Bolivar +vef=Bol\u00edvar Fuerte vnd=Dong vuv=Vatu wst=Tala xaf=CFA Franc (\u00c4quatorial) -xau=Gold +xag=Unze Silber +xau=Unze Gold xba=Europ\u00e4ische Rechnungseinheit +xbb=Europ\u00e4ische W\u00e4hrungseinheit (XBB) xbc=Europ\u00e4ische Rechnungseinheit (XBC) xbd=Europ\u00e4ische Rechnungseinheit (XBD) xcd=Ostkaribischer Dollar @@ -229,9 +263,13 @@ xfo=Franz\u00f6sischer Gold-Franc xfu=Franz\u00f6sischer UIC-Franc xof=CFA Franc (West) -xpf=CFP Franc -yer=Jemen Rial +xpd=Unze Palladium +xpt=Unze Platin +xts=Testw\u00e4hrung +xxx=Unbekannte W\u00e4hrung +yer=Jemen-Rial yum=Neuer Dinar -zar=Rand +zar=S\u00fcdafrikanischer Rand zmk=Kwacha -zwd=Simbabwe Dollar +zwd=Simbabwe-Dollar +zwl=Simbabwe-Dollar (2009) diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_es_CU.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_es_CU.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_es_CU.properties 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_es_CU.properties 2015-01-20 02:17:17.000000000 +0000 @@ -0,0 +1,67 @@ +# +# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved. +# Distributed under the Terms of Use in http://www.unicode.org/copyright.html. +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of the Unicode data files and any associated documentation (the +# "Data Files") or Unicode software and any associated documentation +# (the "Software") to deal in the Data Files or Software without +# restriction, including without limitation the rights to use, copy, +# modify, merge, publish, distribute, and/or sell copies of the Data +# Files or Software, and to permit persons to whom the Data Files or +# Software are furnished to do so, provided that (a) the above copyright +# notice(s) and this permission notice appear with all copies of the +# Data Files or Software, (b) both the above copyright notice(s) and +# this permission notice appear in associated documentation, and (c) +# there is clear notice in each modified Data File or in the Software as +# well as in the documentation associated with the Data File(s) or +# Software that the data or software has been modified. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR +# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR +# SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in these Data Files or Software without prior +# written authorization of the copyright holder. + +# +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# +CUP=CU$ +CUC=CUC$ diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_es_PE.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_es_PE.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_es_PE.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_es_PE.properties 2015-01-20 02:17:18.000000000 +0000 @@ -35,4 +35,4 @@ # This notice and attribution to Taligent may not be removed. # Taligent is a registered trademark of Taligent, Inc. -PEN=S/ +PEN=S/. diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_es.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_es.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_es.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_es.properties 2015-01-20 02:17:17.000000000 +0000 @@ -1,47 +1,70 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. # # # COPYRIGHT AND PERMISSION NOTICE # -# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved. # Distributed under the Terms of Use in http://www.unicode.org/copyright.html. # -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of the Unicode data files and any associated documentation (the "Data -# Files") or Unicode software and any associated documentation (the -# "Software") to deal in the Data Files or Software without restriction, -# including without limitation the rights to use, copy, modify, merge, -# publish, distribute, and/or sell copies of the Data Files or Software, and -# to permit persons to whom the Data Files or Software are furnished to do -# so, provided that (a) the above copyright notice(s) and this permission -# notice appear with all copies of the Data Files or Software, (b) both the -# above copyright notice(s) and this permission notice appear in associated -# documentation, and (c) there is clear notice in each modified Data File or -# in the Software as well as in the documentation associated with the Data -# File(s) or Software that the data or software has been modified. -# -# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS -# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR -# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THE DATA FILES OR SOFTWARE. -# -# Except as contained in this notice, the name of a copyright holder shall not -# be used in advertising or otherwise to promote the sale, use or other -# dealings in these Data Files or Software without prior written -# authorization of the copyright holder. +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of the Unicode data files and any associated documentation (the +# "Data Files") or Unicode software and any associated documentation +# (the "Software") to deal in the Data Files or Software without +# restriction, including without limitation the rights to use, copy, +# modify, merge, publish, distribute, and/or sell copies of the Data +# Files or Software, and to permit persons to whom the Data Files or +# Software are furnished to do so, provided that (a) the above copyright +# notice(s) and this permission notice appear with all copies of the +# Data Files or Software, (b) both the above copyright notice(s) and +# this permission notice appear in associated documentation, and (c) +# there is clear notice in each modified Data File or in the Software as +# well as in the documentation associated with the Data File(s) or +# Software that the data or software has been modified. # - -# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR +# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR +# SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in these Data Files or Software without prior +# written authorization of the copyright holder. +# +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# adp=peseta andorrana -aed=dirham de los Emiratos \u00c1rabes Unidos +aed=d\u00edrham de los Emiratos \u00c1rabes Unidos afa=afgani (1927-2002) afn=afgani all=lek alban\u00e9s @@ -52,7 +75,8 @@ ats=chel\u00edn austriaco aud=d\u00f3lar australiano awg=flor\u00edn de Aruba -azm=manat azer\u00ed +azm=manat azer\u00ed (1993-2006) +azn=manat azer\u00ed bam=marco convertible de Bosnia-Herzegovina bbd=d\u00f3lar de Barbados bdt=taka de Bangladesh @@ -80,7 +104,8 @@ cny=yuan renminbi chino cop=peso colombiano crc=col\u00f3n costarricense -csd=dinar serbio +csd=antiguo dinar serbio +cuc=peso cubano convertible cup=peso cubano cve=escudo de Cabo Verde cyp=libra chipriota @@ -102,7 +127,8 @@ frf=franco franc\u00e9s gbp=libra esterlina brit\u00e1nica gel=lari georgiano -ghc=cedi ghan\u00e9s +ghc=cedi ghan\u00e9s (1979-2007) +ghs=cedi ghan\u00e9s gip=libra de Gibraltar gmd=dalasi gambiano gnf=franco guineano @@ -160,7 +186,8 @@ mxn=peso mexicano mxv=unidad de inversi\u00f3n (UDI) mexicana myr=ringgit malasio -mzm=metical mozambique\u00f1o +mzm=antiguo metical mozambique\u00f1o +mzn=metical mozambique\u00f1o nad=d\u00f3lar de Namibia ngn=naira nigeriano nio=c\u00f3rdoba oro nicarag\u00fcense @@ -180,6 +207,7 @@ qar=riyal de Qatar rol=antiguo leu rumano ron=leu rumano +rsd=dinar serbio rub=rublo ruso rur=rublo ruso (1991-1998) rwf=franco ruand\u00e9s @@ -187,6 +215,7 @@ sbd=d\u00f3lar de las Islas Salom\u00f3n scr=rupia de Seychelles sdd=dinar sudan\u00e9s +sdg=libra sudanesa sek=corona sueca sgd=d\u00f3lar singapurense shp=libra de Santa Elena @@ -203,10 +232,11 @@ thb=baht tailand\u00e9s tjs=somoni tayiko tmm=manat turcomano +tmt=nuevo manat turcomano tnd=dinar tunecino top=pa\u02bbanga tongano tpe=escudo timorense -trl=lira turca +trl=lira turca antigua try=nueva lira turca ttd=d\u00f3lar de Trinidad y Tobago twd=nuevo d\u00f3lar taiwan\u00e9s @@ -219,6 +249,7 @@ uyu=peso uruguayo uzs=sum uzbeko veb=bol\u00edvar venezolano +vef=bol\u00edvar fuerte venezolano vnd=dong vietnamita vuv=vatu vanuatuense wst=tala samoano @@ -244,3 +275,4 @@ zar=rand sudafricano zmk=kwacha zambiano zwd=d\u00f3lar de Zimbabue +zwl=d\u00f3lar zimbabuense diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_es_VE.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_es_VE.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_es_VE.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_es_VE.properties 2015-01-20 02:17:18.000000000 +0000 @@ -36,5 +36,5 @@ # Taligent is a registered trademark of Taligent, Inc. VEB=Bs -VEF=BsF. +VEF=Bs.F. diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_et_EE.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_et_EE.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_et_EE.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_et_EE.properties 2015-01-20 02:17:18.000000000 +0000 @@ -1,5 +1,5 @@ -# -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -21,18 +21,49 @@ # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. -# +# -# (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved -# (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved # -# The original version of this source code and documentation -# is copyrighted and owned by Taligent, Inc., a wholly-owned -# subsidiary of IBM. These materials are provided under terms -# of a License Agreement between Taligent and Sun. This technology -# is protected by multiple US and International patents. +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved. +# Distributed under the Terms of Use in http://www.unicode.org/copyright.html. # -# This notice and attribution to Taligent may not be removed. -# Taligent is a registered trademark of Taligent, Inc. +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of the Unicode data files and any associated documentation (the +# "Data Files") or Unicode software and any associated documentation +# (the "Software") to deal in the Data Files or Software without +# restriction, including without limitation the rights to use, copy, +# modify, merge, publish, distribute, and/or sell copies of the Data +# Files or Software, and to permit persons to whom the Data Files or +# Software are furnished to do so, provided that (a) the above copyright +# notice(s) and this permission notice appear with all copies of the +# Data Files or Software, (b) both the above copyright notice(s) and +# this permission notice appear in associated documentation, and (c) +# there is clear notice in each modified Data File or in the Software as +# well as in the documentation associated with the Data File(s) or +# Software that the data or software has been modified. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR +# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR +# SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in these Data Files or Software without prior +# written authorization of the copyright holder. +# +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# EEK=kr +eek=Eesti kroon +EUR=\u20ac +eur=euro diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_fr.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_fr.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_fr.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_fr.properties 2015-01-20 02:17:18.000000000 +0000 @@ -1,224 +1,258 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. # # # COPYRIGHT AND PERMISSION NOTICE # -# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved. # Distributed under the Terms of Use in http://www.unicode.org/copyright.html. # -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of the Unicode data files and any associated documentation (the "Data -# Files") or Unicode software and any associated documentation (the -# "Software") to deal in the Data Files or Software without restriction, -# including without limitation the rights to use, copy, modify, merge, -# publish, distribute, and/or sell copies of the Data Files or Software, and -# to permit persons to whom the Data Files or Software are furnished to do -# so, provided that (a) the above copyright notice(s) and this permission -# notice appear with all copies of the Data Files or Software, (b) both the -# above copyright notice(s) and this permission notice appear in associated -# documentation, and (c) there is clear notice in each modified Data File or -# in the Software as well as in the documentation associated with the Data -# File(s) or Software that the data or software has been modified. -# -# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS -# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR -# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THE DATA FILES OR SOFTWARE. -# -# Except as contained in this notice, the name of a copyright holder shall not -# be used in advertising or otherwise to promote the sale, use or other -# dealings in these Data Files or Software without prior written -# authorization of the copyright holder. +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of the Unicode data files and any associated documentation (the +# "Data Files") or Unicode software and any associated documentation +# (the "Software") to deal in the Data Files or Software without +# restriction, including without limitation the rights to use, copy, +# modify, merge, publish, distribute, and/or sell copies of the Data +# Files or Software, and to permit persons to whom the Data Files or +# Software are furnished to do so, provided that (a) the above copyright +# notice(s) and this permission notice appear with all copies of the +# Data Files or Software, (b) both the above copyright notice(s) and +# this permission notice appear in associated documentation, and (c) +# there is clear notice in each modified Data File or in the Software as +# well as in the documentation associated with the Data File(s) or +# Software that the data or software has been modified. # - -# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR +# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR +# SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in these Data Files or Software without prior +# written authorization of the copyright holder. +# +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# adp=peseta andorrane aed=dirham des \u00c9mirats arabes unis -afa=afghani [AFA] +afa=afghani (1927\u20132002) afn=afghani -all=lek +all=lek albanais amd=dram arm\u00e9nien -ang=florin des Antilles +ang=florin antillais aoa=kwanza angolais ars=peso argentin ats=schilling autrichien aud=dollar australien -awg=florin d\u2019Aruba -azm=manat az\u00e9ri -bam=mark bosniaque convertible -bbd=dollar de Barbade -bdt=taka +awg=florin arubais +azm=manat az\u00e9ri (1993-2006) +azn=manat az\u00e9ri +bam=mark convertible bosniaque +bbd=dollar barbadien +bdt=taka bangladeshi bef=franc belge -bgl=lev -bgn=nouveau lev -bhd=dinar de Bahre\u00efn -bif=franc du Burundi -bmd=dollar des Bermudes -bnd=dollar de Brunei +bgl=lev bulgare (1962\u20131999) +bgn=nouveau lev bulgare +bhd=dinar bahre\u00efni +bif=franc burundais +bmd=dollar bermudien +bnd=dollar brun\u00e9ien bob=boliviano -bov=mvdol -brl=r\u00e9al -bsd=dollar des Bahamas -btn=ngultrum -bwp=pula +bov=mvdol bolivien +brl=r\u00e9al br\u00e9silien +bsd=dollar baham\u00e9en +btn=ngultrum bouthanais +bwp=pula botswanais byb=nouveau rouble bi\u00e9lorusse (1994-1999) byr=rouble bi\u00e9lorusse -bzd=dollar de Belize +bzd=dollar b\u00e9liz\u00e9en cad=dollar canadien cdf=franc congolais chf=franc suisse clf=unit\u00e9 d\u2019investissement chilienne clp=peso chilien -cny=Yuan Ren-min-bi +cny=yuan renminbi chinois cop=peso colombien -crc=colon de Costa Rica -csd=dinar serbe +crc=col\u00f3n costaricain +csd=dinar serbo-mont\u00e9n\u00e9grin +cuc=peso cubain convertible cup=peso cubain -cve=escudo du Cap-Vert -cyp=livre cypriote +cve=escudo capverdien +cyp=livre chypriote czk=couronne tch\u00e8que -dem=deutsche mark -djf=franc de Djibouti +dem=mark allemand +djf=franc djiboutien dkk=couronne danoise dop=peso dominicain dzd=dinar alg\u00e9rien eek=couronne estonienne egp=livre \u00e9gyptienne -ern=Eritrean Nakfa +ern=nafka \u00e9rythr\u00e9en esp=peseta espagnole -etb=birr +etb=birr \u00e9thiopien eur=euro fim=mark finlandais -fjd=dollar de Fidji -fkp=livre des Falkland (Malvinas) +fjd=dollar fidjien +fkp=livre des Falkland frf=franc fran\u00e7ais gbp=livre sterling -gel=lari +gel=lari g\u00e9orgien ghc=c\u00e9di +ghs=c\u00e9di ghan\u00e9en gip=livre de Gibraltar -gmd=dalasie +gmd=dalasi gambien gnf=franc guin\u00e9en -grd=drachme -gtq=quetzal -gwp=peso de Guin\u00e9e-Bissau +grd=drachme grecque +gtq=quetzal guat\u00e9malt\u00e8que +gwp=peso bissau-guin\u00e9en gyd=dollar du Guyana hkd=dollar de Hong Kong -hnl=lempira -hrk=kuna -htg=gourde -huf=forint -idr=rupiah +hnl=lempira hondurien +hrk=kuna croate +htg=gourde ha\u00eftienne +huf=forint hongrois +idr=roupie indon\u00e9sienne iep=livre irlandaise +ils=nouveau shekel isra\u00e9lien inr=roupie indienne +iqd=dinar irakien irr=rial iranien isk=couronne islandaise itl=lire italienne jmd=dollar jama\u00efcain jod=dinar jordanien -jpy=yen -kes=shilling du Kenya -kgs=som -khr=riel -kmf=franc des Comores +jpy=yen japonais +kes=shilling k\u00e9nyan +kgs=som kirghize +khr=riel cambodgien +kmf=franc comorien kpw=won nord-cor\u00e9en krw=won sud-cor\u00e9en +kwd=dinar kowe\u00eftien kyd=dollar des \u00eeles Ca\u00efmanes -kzt=tenge du Kazakhstan -lak=kip +kzt=tenge kazakh +lak=kip loatien lbp=livre libanaise -lkr=roupie de Sri Lanka +lkr=roupie srilankaise lrd=dollar lib\u00e9rien -lsl=loti +lsl=loti lesothan ltl=litas lituanien luf=franc luxembourgeois lvl=lats letton lyd=dinar lybien mad=dirham marocain mdl=leu moldave -mga=ariary +mga=ariary malgache mgf=franc malgache -mkd=denar -mmk=Myanmar Kyat -mnt=tugrik -mop=pataca -mro=ouguija +mkd=denar mac\u00e9donien +mmk=kyat myanmarais +mnt=tugrik mongol +mop=pataca macanaise +mro=ouguiya mauritanien mtl=lire maltaise mur=roupie mauricienne -mvr=roupie des Maldives -mwk=kwacha [MWK] +mvr=rufiyaa maldivienne +mwk=kwacha malawite mxn=peso mexicain mxv=unit\u00e9 de conversion mexicaine (UDI) -myr=ringgit +myr=ringgit malais mzm=m\u00e9tical +mzn=metical mozambicain nad=dollar namibien -ngn=naira -nio=cordoba d\u2019or +ngn=naira nig\u00e9rian +nio=c\u00f3rdoba oro nicaraguayen nlg=florin n\u00e9erlandais nok=couronne norv\u00e9gienne -npr=roupie du N\u00e9pal +npr=roupie n\u00e9palaise nzd=dollar n\u00e9o-z\u00e9landais omr=rial omani -pab=balboa +pab=balboa panam\u00e9en pen=nouveau sol p\u00e9ruvien -pgk=kina +pgk=kina papouan-n\u00e9o-guin\u00e9en php=peso philippin -pkr=roupie du Pakistan -pln=zloty +pkr=roupie pakistanaise +pln=zloty polonais pte=escudo portugais -pyg=guarani -qar=rial du Qatar +pyg=guaran\u00ed paraguayen +qar=rial qatari rol=ancien leu roumain -ron=nouveau leu roumain -rub=rouble -rur=rouble de Russie (1991-1998) +ron=leu roumain +rsd=dinar serbe +rub=rouble russe +rur=rouble russe (1991\u20131998) rwf=franc rwandais sar=rial saoudien -sbd=dollar des \u00celes Salomon +sbd=dollar des \u00eeles Salomon scr=roupie des Seychelles sdd=dinar soudanais +sdg=livre soudanaise sek=couronne su\u00e9doise sgd=dollar de Singapour shp=livre de Sainte-H\u00e9l\u00e8ne -sit=tolar +sit=tolar slov\u00e8ne skk=couronne slovaque -sll=l\u00e9one -sos=shilling de Somalie +sll=leone sierra-l\u00e9onais +sos=shilling somalien srd=dollar surinamais -srg=florin du Surinam -std=dobra -svc=colon salvadorien +srg=florin surinamais +std=dobra santom\u00e9en +svc=col\u00f3n salvadorien syp=livre syrienne -szl=lilangeni -thb=baht -tjs=somoni du Tadjikistan -tmm=Turkmenistan Manat +szl=lilangeni swazi +thb=baht tha\u00eflandais +tjs=somoni tadjik +tmm=manat turkm\u00e8ne +tmt=nouveau manat turkm\u00e8ne tnd=dinar tunisien -top=pa\u02bbanga -tpe=escudo de Timor +top=pa\u2019anga tongan +tpe=escudo timorais trl=livre turque try=nouvelle livre turque -ttd=dollar de la Trinit\u00e9 -twd=dollar ta\u00efwanais -tzs=shilling de Tanzanie -uah=hryvnia +ttd=dollar trinidadien +twd=nouveau dollar ta\u00efwanais +tzs=shilling tanzanien +uah=hryvnia ukrainienne ugx=shilling ougandais usd=dollar des \u00c9tats-Unis usn=dollar des Etats-Unis (jour suivant) uss=dollar des Etats-Unis (jour m\u00eame) uyu=peso uruguayen -uzs=sum +uzs=sum ouzbek veb=bolivar -vnd=dong -vuv=vatu -wst=tala +vef=bolivar fuerte v\u00e9n\u00e9zu\u00e9lien +vnd=d\u00f4ng vietnamien +vuv=vatu vanuatuan +wst=tala samoan xaf=franc CFA (BEAC) xag=argent xau=or @@ -234,8 +268,10 @@ xpd=palladium xpf=franc CFP xpt=platine -yer=riyal du Y\u00e9men +xts=(devise de test) +xxx=devise inconnue ou non valide +yer=rial y\u00e9m\u00e9nite yum=dinar yougoslave Noviy -zar=rand -zmk=kwacha -zwd=dollar du Zimbabwe +zar=rand sud-africain +zmk=kwacha zambien +zwd=dollar zimbabw\u00e9en diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_it.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_it.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_it.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_it.properties 2015-01-20 02:17:18.000000000 +0000 @@ -1,45 +1,68 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. # # # COPYRIGHT AND PERMISSION NOTICE # -# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved. # Distributed under the Terms of Use in http://www.unicode.org/copyright.html. # -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of the Unicode data files and any associated documentation (the "Data -# Files") or Unicode software and any associated documentation (the -# "Software") to deal in the Data Files or Software without restriction, -# including without limitation the rights to use, copy, modify, merge, -# publish, distribute, and/or sell copies of the Data Files or Software, and -# to permit persons to whom the Data Files or Software are furnished to do -# so, provided that (a) the above copyright notice(s) and this permission -# notice appear with all copies of the Data Files or Software, (b) both the -# above copyright notice(s) and this permission notice appear in associated -# documentation, and (c) there is clear notice in each modified Data File or -# in the Software as well as in the documentation associated with the Data -# File(s) or Software that the data or software has been modified. -# -# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS -# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR -# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THE DATA FILES OR SOFTWARE. -# -# Except as contained in this notice, the name of a copyright holder shall not -# be used in advertising or otherwise to promote the sale, use or other -# dealings in these Data Files or Software without prior written -# authorization of the copyright holder. +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of the Unicode data files and any associated documentation (the +# "Data Files") or Unicode software and any associated documentation +# (the "Software") to deal in the Data Files or Software without +# restriction, including without limitation the rights to use, copy, +# modify, merge, publish, distribute, and/or sell copies of the Data +# Files or Software, and to permit persons to whom the Data Files or +# Software are furnished to do so, provided that (a) the above copyright +# notice(s) and this permission notice appear with all copies of the +# Data Files or Software, (b) both the above copyright notice(s) and +# this permission notice appear in associated documentation, and (c) +# there is clear notice in each modified Data File or in the Software as +# well as in the documentation associated with the Data File(s) or +# Software that the data or software has been modified. # - -# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR +# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR +# SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in these Data Files or Software without prior +# written authorization of the copyright holder. +# +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# adp=Peseta Andorrana aed=Dirham degli Emirati Arabi Uniti afa=Afgani (1927-2002) @@ -52,7 +75,7 @@ ats=Scellino Austriaco aud=Dollaro Australiano awg=Fiorino di Aruba -azm=Manat Azero +azm=Manat Azero (1993-2006) bam=Marco Conv. Bosnia-Erzegovina bbd=Dollaro di Barbados bdt=Taka Bangladese @@ -80,7 +103,6 @@ cny=Renmimbi Cinese cop=Peso Colombiano crc=Col\u00f3n Costaricano -csd=Dinaro serbo cup=Peso Cubano cve=Escudo del Capo Verde cyp=Sterlina Cipriota @@ -95,7 +117,6 @@ ern=Nakfa Eritreo esp=Peseta Spagnola etb=Birr Etiopico -eur=Euro fim=Markka Finlandese fjd=Dollaro delle Figi fkp=Sterlina delle Falkland @@ -103,6 +124,7 @@ gbp=Sterlina Inglese gel=Lari Georgiano ghc=Cedi del Ghana +ghs=Cedi ghanese gip=Sterlina di Gibilterra gmd=Dalasi del Gambia gnf=Franco della Guinea @@ -116,7 +138,7 @@ htg=Gourde Haitiano huf=Fiorino Ungherese idr=Rupia Indonesiana -iep=Lira Irlandese +iep=Sterlina irlandese ils=Nuovo sheqel israeliano inr=Rupia Indiana iqd=Dinaro Iracheno @@ -127,7 +149,7 @@ jod=Dinaro Giordano jpy=Yen Giapponese kes=Scellino Keniota -kgs=Som Kirghiso +kgs=Som Kirghiso khr=Riel Cambogiano kmf=Franco Comoriano kpw=Won Nordcoreano @@ -160,7 +182,7 @@ mxn=Peso Messicano mxv=Unidad de Inversion (UDI) Messicana myr=Ringgit della Malesia -mzm=Metical del Mozambico +mzn=Metical del Mozambico nad=Dollaro Namibiano ngn=Naira Nigeriana nio=C\u00f3rdoba oro nicaraguense @@ -179,6 +201,7 @@ pyg=Guarani del Paraguay qar=Rial del Qatar rol=Leu della Romania +rsd=Dinaro serbo rub=Rublo Russo rur=Rublo della CSI rwf=Franco Ruandese @@ -186,6 +209,7 @@ sbd=Dollaro delle Isole Solomon scr=Rupia delle Seychelles sdd=Dinaro Sudanese +sdg=Sterlina sudanese sek=Corona Svedese sgd=Dollaro di Singapore shp=Sterlina di Sant\u2019Elena @@ -193,6 +217,7 @@ skk=Corona Slovacca sll=Leone della Sierra Leone sos=Scellino Somalo +srd=Dollaro surinamese srg=Fiorino del Suriname std=Dobra di Sao Tom\u00e9 e Principe svc=Col\u00f3n Salvadoregno @@ -216,10 +241,12 @@ uyu=Peso Uruguayo uruguaiano uzs=Sum dell\u2019Uzbekistan veb=Bolivar Venezuelano +vef=Bol\u00edvar venezuelano forte vnd=Dong Vietnamita vuv=Vatu di Vanuatu wst=Tala della Samoa Occidentale xaf=Franco CFA BEAC +xag=Argento xau=Oro xba=Unit\u00e0 composita europea xbb=Unit\u00e0 monetaria europea @@ -230,6 +257,7 @@ xfo=Franco Oro Francese xfu=Franco UIC Francese xof=Franco CFA BCEAO +xpd=Palladio xpf=Franco CFP xxx=Nessuna valuta yer=Rial dello Yemen diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_ja.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_ja.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_ja.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_ja.properties 2015-01-20 02:17:18.000000000 +0000 @@ -1,45 +1,68 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. # # # COPYRIGHT AND PERMISSION NOTICE # -# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved. # Distributed under the Terms of Use in http://www.unicode.org/copyright.html. # -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of the Unicode data files and any associated documentation (the "Data -# Files") or Unicode software and any associated documentation (the -# "Software") to deal in the Data Files or Software without restriction, -# including without limitation the rights to use, copy, modify, merge, -# publish, distribute, and/or sell copies of the Data Files or Software, and -# to permit persons to whom the Data Files or Software are furnished to do -# so, provided that (a) the above copyright notice(s) and this permission -# notice appear with all copies of the Data Files or Software, (b) both the -# above copyright notice(s) and this permission notice appear in associated -# documentation, and (c) there is clear notice in each modified Data File or -# in the Software as well as in the documentation associated with the Data -# File(s) or Software that the data or software has been modified. -# -# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS -# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR -# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THE DATA FILES OR SOFTWARE. -# -# Except as contained in this notice, the name of a copyright holder shall not -# be used in advertising or otherwise to promote the sale, use or other -# dealings in these Data Files or Software without prior written -# authorization of the copyright holder. +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of the Unicode data files and any associated documentation (the +# "Data Files") or Unicode software and any associated documentation +# (the "Software") to deal in the Data Files or Software without +# restriction, including without limitation the rights to use, copy, +# modify, merge, publish, distribute, and/or sell copies of the Data +# Files or Software, and to permit persons to whom the Data Files or +# Software are furnished to do so, provided that (a) the above copyright +# notice(s) and this permission notice appear with all copies of the +# Data Files or Software, (b) both the above copyright notice(s) and +# this permission notice appear in associated documentation, and (c) +# there is clear notice in each modified Data File or in the Software as +# well as in the documentation associated with the Data File(s) or +# Software that the data or software has been modified. # - -# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR +# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR +# SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in these Data Files or Software without prior +# written authorization of the copyright holder. +# +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# adp=\u30a2\u30f3\u30c9\u30e9 \u30da\u30bb\u30bf aed=UAE \u30c7\u30a3\u30eb\u30cf\u30e0 afa=\u30a2\u30d5\u30ac\u30cb\u30fc (1927-2002) @@ -52,7 +75,8 @@ ats=\u30aa\u30fc\u30b9\u30c8\u30ea\u30a2 \u30b7\u30ea\u30f3\u30b0 aud=\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2 \u30c9\u30eb awg=\u30a2\u30eb\u30d0 \u30ae\u30eb\u30c0\u30fc -azm=\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3 \u30de\u30ca\u30c8 +azm=\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3 \u30de\u30ca\u30c8 (1993-2006) +azn=\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3 \u30de\u30ca\u30c8 bam=\u30dc\u30b9\u30cb\u30a2 \u30de\u30eb\u30af (BAM) bbd=\u30d0\u30eb\u30d0\u30c9\u30b9 \u30c9\u30eb bdt=\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5 \u30bf\u30ab @@ -81,6 +105,7 @@ cop=\u30b3\u30ed\u30f3\u30d3\u30a2 \u30da\u30bd crc=\u30b3\u30b9\u30bf\u30ea\u30ab \u30b3\u30ed\u30f3 csd=\u30bb\u30eb\u30d3\u30a2\u30f3 \u30c7\u30a3\u30ca\u30fc\u30eb +cuc=\u30ad\u30e5\u30fc\u30d0 \u514c\u63db\u30da\u30bd cup=\u30ad\u30e5\u30fc\u30d0 \u30da\u30bd cve=\u30ab\u30fc\u30dc\u30d9\u30eb\u30c7 \u30a8\u30b9\u30af\u30fc\u30c9 cyp=\u30ad\u30d7\u30ed\u30b9 \u30dd\u30f3\u30c9 @@ -102,7 +127,8 @@ frf=\u30d5\u30e9\u30f3\u30b9 \u30d5\u30e9\u30f3 gbp=\u82f1\u56fd\u30dd\u30f3\u30c9 gel=\u30b0\u30eb\u30b8\u30a2 \u30e9\u30ea -ghc=\u30ac\u30fc\u30ca \u30bb\u30c7\u30a3 +ghc=\u30ac\u30fc\u30ca \u30bb\u30c7\u30a3 (1979-2007) +ghs=\u30ac\u30fc\u30ca \u30bb\u30c7\u30a3 gip=\u30b8\u30d6\u30e9\u30eb\u30bf\u30eb \u30dd\u30f3\u30c9 gmd=\u30ac\u30f3\u30d3\u30a2 \u30c0\u30e9\u30b7 gnf=\u30ae\u30cb\u30a2 \u30d5\u30e9\u30f3 @@ -161,6 +187,7 @@ mxv=\u30e1\u30ad\u30b7\u30b3 UDI myr=\u30de\u30ec\u30fc\u30b7\u30a2 \u30ea\u30f3\u30ae\u30c3\u30c8 mzm=\u30e2\u30b6\u30f3\u30d4\u30fc\u30af \u30e1\u30c6\u30a3\u30ab\u30eb +mzn=\u30e2\u30b6\u30f3\u30d3\u30fc\u30af \u30e1\u30c6\u30a3\u30ab\u30eb nad=\u30ca\u30df\u30d3\u30a2 \u30c9\u30eb ngn=\u30ca\u30a4\u30b8\u30a7\u30ea\u30a2 \u30ca\u30a4\u30e9 nio=\u30cb\u30ab\u30e9\u30b0\u30a2 \u30b3\u30eb\u30c9\u30d0 \u30aa\u30ed @@ -178,7 +205,9 @@ pte=\u30dd\u30eb\u30c8\u30ac\u30eb \u30a8\u30b9\u30af\u30fc\u30c9 pyg=\u30d1\u30e9\u30b0\u30a2\u30a4 \u30b0\u30a2\u30e9\u30cb qar=\u30ab\u30bf\u30fc\u30eb \u30ea\u30a2\u30eb -rol=\u30eb\u30fc\u30de\u30cb\u30a2 \u30ec\u30a4 +rol=\u30eb\u30fc\u30de\u30cb\u30a2 \u65e7\u30ec\u30a4 +ron=\u30eb\u30fc\u30de\u30cb\u30a2 \u30ec\u30a4 +rsd=\u30c7\u30a3\u30ca\u30fc\u30eb (\u30bb\u30eb\u30d3\u30a2) rub=\u30ed\u30b7\u30a2 \u30eb\u30fc\u30d6\u30eb rur=\u30ed\u30b7\u30a2 \u30eb\u30fc\u30d6\u30eb (1991-1998) rwf=\u30eb\u30ef\u30f3\u30c0 \u30d5\u30e9\u30f3 @@ -186,6 +215,7 @@ sbd=\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6 \u30c9\u30eb scr=\u30bb\u30a4\u30b7\u30a7\u30eb \u30eb\u30d4\u30fc sdd=\u30b9\u30fc\u30c0\u30f3 \u30c7\u30a3\u30ca\u30fc\u30eb +sdg=\u30b9\u30fc\u30c0\u30f3 \u30dd\u30f3\u30c9 sek=\u30b9\u30a6\u30a7\u30fc\u30c7\u30f3 \u30af\u30ed\u30fc\u30ca sgd=\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb \u30c9\u30eb shp=\u30bb\u30f3\u30c8\u30d8\u30ec\u30ca\u5cf6 \u30dd\u30f3\u30c9 @@ -193,6 +223,7 @@ skk=\u30b9\u30ed\u30d0\u30ad\u30a2 \u30b3\u30eb\u30ca sll=\u30b7\u30a8\u30e9\u30ec\u30aa\u30cd \u30ec\u30aa\u30f3 sos=\u30bd\u30de\u30ea\u30a2 \u30b7\u30ea\u30f3\u30b0 +srd=\u30b9\u30ea\u30ca\u30e0 \u30c9\u30eb srg=\u30b9\u30ea\u30ca\u30e0 \u30ae\u30eb\u30c0\u30fc std=\u30b5\u30f3\u30c8\u30e1\u30fb\u30d7\u30ea\u30f3\u30b7\u30da \u30c9\u30d6\u30e9 svc=\u30a8\u30eb\u30b5\u30eb\u30d0\u30c9\u30eb \u30b3\u30ed\u30f3 @@ -201,6 +232,7 @@ thb=\u30bf\u30a4 \u30d0\u30fc\u30c4 tjs=\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3 \u30bd\u30e2\u30cb tmm=\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3 \u30de\u30ca\u30c8 +tmt=\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3 \u65b0\u30de\u30ca\u30c8 tnd=\u30c1\u30e5\u30cb\u30b8\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb top=\u30c8\u30f3\u30ac \u30d1\u30fb\u30a2\u30f3\u30ac tpe=\u30c6\u30a3\u30e2\u30fc\u30eb \u30a8\u30b9\u30af\u30fc\u30c9 @@ -217,10 +249,12 @@ uyu=\u30a6\u30eb\u30b0\u30a2\u30a4 \u30da\u30bd uzs=\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3 \u30b9\u30e0 veb=\u30d9\u30cd\u30ba\u30a8\u30e9 \u30dc\u30ea\u30d0\u30eb +vef=\u30d9\u30cd\u30ba\u30a8\u30e9 \u30dc\u30ea\u30d0\u30eb\u30d5\u30a8\u30eb\u30c6 vnd=\u30d9\u30c8\u30ca\u30e0 \u30c9\u30f3 vuv=\u30d0\u30cc\u30a2\u30c4 \u30d0\u30c4 wst=\u897f\u30b5\u30e2\u30a2 \u30bf\u30e9 xaf=CFA \u30d5\u30e9\u30f3 BEAC +xag=\u9280 xau=\u91d1 xba=\u30e8\u30fc\u30ed\u30c3\u30d1\u6df7\u5408\u5358\u4f4d (EURCO) xbb=\u30e8\u30fc\u30ed\u30c3\u30d1\u901a\u8ca8\u5358\u4f4d (EMU-6) @@ -231,8 +265,14 @@ xfo=\u30d5\u30e9\u30f3\u30b9\u91d1\u30d5\u30e9\u30f3 xfu=\u30d5\u30e9\u30f3\u30b9 UIC \u30d5\u30e9\u30f3 xof=CFA \u30d5\u30e9\u30f3 BCEAO +xpd=\u30d1\u30e9\u30b8\u30a6\u30e0 xpf=CFP \u30d5\u30e9\u30f3 +xpt=\u30d7\u30e9\u30c1\u30ca +xts=\u30c6\u30b9\u30c8\u7528\u901a\u8ca8\u30b3\u30fc\u30c9 +xxx=\u4e0d\u660e\u307e\u305f\u306f\u7121\u52b9\u306a\u901a\u8ca8 yer=\u30a4\u30a8\u30e1\u30f3 \u30ea\u30a2\u30eb yum=\u30e6\u30fc\u30b4\u30b9\u30e9\u30d3\u30a2 \u30b9\u30fc\u30d1\u30fc \u30c7\u30a3\u30ca\u30fc\u30eb zar=\u5357\u30a2\u30d5\u30ea\u30ab \u30e9\u30f3\u30c9 +zmk=\u30b6\u30f3\u30d3\u30a2 \u30af\u30ef\u30c1\u30e3 zwd=\u30b8\u30f3\u30d0\u30d6\u30a8 \u30c9\u30eb +zwl=\u30b8\u30f3\u30d0\u30d6\u30a8 \u30c9\u30eb (2009) diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_ko.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_ko.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_ko.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_ko.properties 2015-01-20 02:17:18.000000000 +0000 @@ -1,58 +1,82 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. # # # COPYRIGHT AND PERMISSION NOTICE # -# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved. # Distributed under the Terms of Use in http://www.unicode.org/copyright.html. # -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of the Unicode data files and any associated documentation (the "Data -# Files") or Unicode software and any associated documentation (the -# "Software") to deal in the Data Files or Software without restriction, -# including without limitation the rights to use, copy, modify, merge, -# publish, distribute, and/or sell copies of the Data Files or Software, and -# to permit persons to whom the Data Files or Software are furnished to do -# so, provided that (a) the above copyright notice(s) and this permission -# notice appear with all copies of the Data Files or Software, (b) both the -# above copyright notice(s) and this permission notice appear in associated -# documentation, and (c) there is clear notice in each modified Data File or -# in the Software as well as in the documentation associated with the Data -# File(s) or Software that the data or software has been modified. -# -# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS -# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR -# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THE DATA FILES OR SOFTWARE. -# -# Except as contained in this notice, the name of a copyright holder shall not -# be used in advertising or otherwise to promote the sale, use or other -# dealings in these Data Files or Software without prior written -# authorization of the copyright holder. +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of the Unicode data files and any associated documentation (the +# "Data Files") or Unicode software and any associated documentation +# (the "Software") to deal in the Data Files or Software without +# restriction, including without limitation the rights to use, copy, +# modify, merge, publish, distribute, and/or sell copies of the Data +# Files or Software, and to permit persons to whom the Data Files or +# Software are furnished to do so, provided that (a) the above copyright +# notice(s) and this permission notice appear with all copies of the +# Data Files or Software, (b) both the above copyright notice(s) and +# this permission notice appear in associated documentation, and (c) +# there is clear notice in each modified Data File or in the Software as +# well as in the documentation associated with the Data File(s) or +# Software that the data or software has been modified. # - -# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR +# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR +# SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in these Data Files or Software without prior +# written authorization of the copyright holder. +# +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# adp=\uc548\ub3c4\ub77c \ud398\uc138\ud0c0 -aed=\uc544\ub78d\uc5d0\ubbf8\ub808\uc774\ud2b8 \ub514\ub098\ub974 +aed=\uc544\ub78d\uc5d0\ubbf8\ub9ac\ud2b8 \ub514\ub974\ud568 afa=\uc544\ud504\uac00\ub2c8 (1927-2002) afn=\uc544\ud504\uac00\ub2c8 all=\uc54c\ubc14\ub2c8\uc544 \ub808\ud06c amd=\uc544\ub974\uba54\ub2c8\uc544 \ub4dc\ub78c -ang=\ub124\ub378\ub780\ub4dc \uc548\ud2f8\ub808\uc2a4 \uad74\ub374 +ang=\ub124\ub35c\ub780\ub4dc\ub839 \uc548\ud2f8\ub808\uc2a4 \uae38\ub354 aoa=\uc559\uace8\ub77c \ucf74\uc790 ars=\uc544\ub974\ud5e8\ud2f0\ub098 \ud398\uc18c ats=\ud638\uc8fc \uc2e4\ub9c1 aud=\ud638\uc8fc \ub2ec\ub7ec awg=\uc544\ub8e8\ubc14 \uae38\ub354 -azm=\uc544\uc81c\ub974\ubc14\uc774\uc820 \ub9c8\ub098\ud2b8 +azm=\uc544\uc81c\ub974\ubc14\uc774\uc820 \ub9c8\ub098\ud2b8(1993-2006) +azn=\uc544\uc81c\ub974\ubc14\uc774\uc794 \ub9c8\ub098\ud2b8 bam=\ubcf4\uc2a4\ub2c8\uc544-\ud5e4\ub974\uccb4\uace0\ube44\ub098 \ud0dc\ud658 \ub9c8\ub974\ud06c bbd=\ubc14\ubca0\uc774\ub3c4\uc2a4 \ub2ec\ub7ec bdt=\ubc29\uae00\ub77c\ub370\uc2dc \ud0c0\uce74 @@ -64,6 +88,7 @@ bmd=\ubc84\ubba4\ub2e4 \ub2ec\ub7ec bnd=\ubd80\ub8e8\ub098\uc774 \ub2ec\ub7ec bob=\ubcfc\ub9ac\ube44\uc544\ub178 +bov=\ubcfc\ub9ac\ube44\uc544\ub178 Mvdol(\uae30\uae08) brl=\ube0c\ub77c\uc9c8 \ub808\uc54c bsd=\ubc14\ud558\ub9c8 \ub2ec\ub7ec btn=\ubd80\ud0c4 \ub20c\ud22c\ub214 @@ -73,11 +98,14 @@ bzd=\ubca8\ub9ac\uc988 \ub2ec\ub7ec cad=\uce90\ub098\ub2e4 \ub2ec\ub7ec cdf=\ucf69\uace0 \ud504\ub791 \ucf69\uace8\ub77c\uc2a4 -chf=\uc2a4\uc704\uc2a4 \ud504\ub791\ub2ec\ub7ec +chf=\uc2a4\uc704\uc2a4 \ud504\ub791 +clf=\uce60\ub808 UF (Unidades de Fomento) clp=\uce60\ub808 \ud398\uc18c cny=\uc911\uad6d \uc704\uc548 \uc778\ubbfc\ud3d0 cop=\ucf5c\ub86c\ube44\uc544 \ud398\uc18c crc=\ucf54\uc2a4\ud0c0\ub9ac\uce74 \ucf5c\ub860 +csd=\uace0 \uc138\ub974\ube44\uc544 \ub514\ub098\ub974 +cuc=\ucfe0\ubc14 \ud0dc\ud658 \ud398\uc18c cup=\ucfe0\ubc14 \ud398\uc18c cve=\uce74\ubcf4\ubca0\ub974\ub370 \uc5d0\uc2a4\ucfe0\ub3c4 cyp=\uc2f8\uc774\ud504\ub7ec\uc2a4 \ud30c\uc6b4\ub4dc @@ -99,7 +127,8 @@ frf=\ud504\ub791\uc2a4 \ud504\ub791 gbp=\uc601\uad6d\ub839 \ud30c\uc6b4\ub4dc \uc2a4\ud138\ub9c1 gel=\uadf8\ub8e8\uc9c0\uc57c \ub77c\ub9ac -ghc=\uac00\ub098 \uc2dc\ub514 +ghc=\uac00\ub098 \uc2dc\ub514 (1979-2007) +ghs=\uac00\ub098 \uc2dc\ub514 gip=\uc9c0\ube0c\ub864\ud130 \ud30c\uc6b4\ub4dc gmd=\uac10\ube44\uc544 \ub2ec\ub77c\uc2dc gnf=\uae30\ub2c8 \ud504\ub791 @@ -155,8 +184,10 @@ mvr=\ubab0\ub514\ube0c \uc81c\ub3c4 \ub8e8\ud53c\uc544 mwk=\ub9d0\ub77c\uc704 \ucf70\uccd0 mxn=\uba55\uc2dc\ucf54 \ud398\uc18c -myr=\ub9d0\ub808\uc774\uc9c0\uc544 \ub9c1\uae30\ud2b8 -mzm=\ubaa8\uc7a0\ube44\ud06c \uba54\ud2f0\uce7c +mxv=\uba55\uc2dc\ucf54 UDI(Unidad de Inversion) +myr=\ub9d0\ub808\uc774\uc2dc\uc544 \ub9c1\uae43 +mzm=\uace0 \ubaa8\uc7a0\ube44\ud06c \uba54\ud2f0\uce7c +mzn=\ubaa8\uc7a0\ube44\ud06c \uba54\ud2f0\uce7c nad=\ub098\ubbf8\ube44\uc544 \ub2ec\ub7ec ngn=\ub2c8\uc81c\ub974 \ub098\uc774\ub77c nio=\ub2c8\uce74\ub77c\uacfc \ucf54\ub974\ub3c4\ubc14 \uc624\ub85c @@ -175,6 +206,8 @@ pyg=\ud30c\ub77c\uacfc\uc774 \uacfc\ub77c\ub2c8 qar=\uce74\ud0c0\ub974 \ub9ac\uc584 rol=\ub8e8\ub9c8\ub2c8\uc544 \ub808\uc774 +ron=\ub8e8\ub9c8\ub2c8\uc544 \ub808\uc6b0 +rsd=\uc138\ub974\ube44\uc544 \ub514\ub098\ub974 rub=\ub7ec\uc2dc\uc544 \ub8e8\ube14 rur=\ub7ec\uc2dc\uc544 \ub8e8\ube14 (1991-1998) rwf=\ub974\uc644\ub2e4 \ud504\ub791 @@ -182,6 +215,7 @@ sbd=\uc194\ub85c\ubaac \uc81c\ub3c4 \ub2ec\ub7ec scr=\uc138\uc774\uc274 \ub8e8\ud53c sdd=\uc218\ub2e8 \ub514\ub098\ub974 +sdg=\uc218\ub2e8 \ud30c\uc6b4\ub4dc sek=\uc2a4\uc6e8\ub374 \ud06c\ub85c\ub098 sgd=\uc2f1\uac00\ud3f4 \ub2ec\ub7ec shp=\uc138\uc778\ud2b8\ud5ec\ub808\ub098 \ud30c\uc6b4\ub4dc @@ -189,6 +223,7 @@ skk=\uc2ac\ub85c\ubc14\ud0a4\uc544 \ucf54\ub8e8\ub098 sll=\uc2dc\uc5d0\ub77c\ub9ac\uc628 \ub9ac\uc628 sos=\uc18c\ub9d0\ub9ac\uc544 \uc2e4\ub9c1 +srd=\uc218\ub9ac\ub0a8 \ub2ec\ub7ec srg=\uc218\ub9ac\ub0a8 \uae38\ub354 std=\uc0c1\ud22c\uba54 \ud504\ub9b0\uc2dc\ud398 \ub3c4\ube0c\ub77c svc=\uc5d8\uc0b4\ubc14\ub3c4\ub974 \ucf5c\ub860 @@ -198,28 +233,44 @@ tjs=\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4 \uc18c\ubaa8\ub2c8 tmm=\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \ub9c8\ub098\ud2b8 tnd=\ud280\ub2c8\uc9c0 \ub514\ub098\ub974 +top=\ud1b5\uac00 \ud30c\uc559\uac00 tpe=\ud2f0\ubaa8\ub974 \uc5d0\uc2a4\ucfe0\ub3c4 -trl=\ud130\uae30 \ub9ac\ub77c -try=\uc0c8\ub85c\uc6b4 \ud130\ud0a4 \ub9ac\ub77c +trl=\ud130\ud0a4 \ub9ac\ub77c +try=\uc2e0 \ud130\ud0a4 \ub9ac\ub77c ttd=\ud2b8\ub9ac\ub2c8\ub2e4\ub4dc \ud1a0\ubc14\uace0 \ub2ec\ub7ec twd=\ub300\ub9cc \uc2e0\uad8c \ub2ec\ub7ec tzs=\ud0c4\uc790\ub2c8\uc544 \uc2e4\ub9c1 uah=\uc6b0\ud06c\ub77c\uc774\ub098 \uadf8\ub9ac\ube0c\ub098 ugx=\uc6b0\uac04\ub2e4 \uc2e4\ub9c1 usd=\ubbf8\uad6d \ub2ec\ub7ec +usn=\ubbf8\uad6d \ub2ec\ub7ec(\ub2e4\uc74c\ub0a0) +uss=\ubbf8\uad6d \ub2ec\ub7ec(\ub2f9\uc77c) uyu=\uc6b0\ub8e8\uacfc\uc774 \ud398\uc18c \uc6b0\ub8e8\uacfc\uc694 uzs=\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc228 veb=\ubca0\ub124\uc8fc\uc5d8\ub77c \ubcfc\ub9ac\ubc14\ub974 +vef=\ubca0\ub124\uc8fc\uc5d8\ub77c \ubcfc\ub9ac\ubc14\ub974 \ud478\uc5d0\ub974\ub5bc vnd=\ubca0\ud2b8\ub0a8 \ub3d9 vuv=\ubc14\ub204\uc544\ud22c \ubc14\ud22c wst=\uc11c \uc0ac\ubaa8\uc544 \ud0c8\ub77c +xaf=CFA \ud504\ub791 BEAC +xag=\uc740\ud654 xau=\uae08 +xba=\uc720\ub974\ucf54 (\uc720\ub7fd \ud68c\uacc4 \ub2e8\uc704) +xbb=\uc720\ub7fd \ud1b5\ud654 \ub3d9\ub9f9 +xbc=\uc720\ub7fd \uacc4\uc0b0 \ub2e8\uc704 (XBC) +xbd=\uc720\ub7fd \uacc4\uc0b0 \ub2e8\uc704 (XBD) xcd=\ub3d9\uce74\ub9ac\ube0c \ub2ec\ub7ec xdr=\ud2b9\ubcc4\uc778\ucd9c\uad8c xfo=\ud504\ub791\uc2a4 Gold \ud504\ub791 xfu=\ud504\ub791\uc2a4 UIC-\ud504\ub791 +xof=CFA \ud504\ub791 BCEAO +xpd=\ud314\ub77c\ub4d0 +xpf=CFP \ud504\ub791 +xpt=\ubc31\uae08 +xts=\ud14c\uc2a4\ud2b8 \ud1b5\ud654 \ucf54\ub4dc +xxx=\uc54c\uc218\uc5c6\uac70\ub098 \uc720\ud6a8\ud558\uc9c0\uc54a\uc740 \ud1b5\ud654\ub2e8\uc704 yer=\uc608\uba58 \ub9ac\uc54c yum=\uc720\uace0\uc2ac\ub77c\ube44\uc544 \ub178\ube44 \ub514\ub098\ub974 zar=\ub0a8\uc544\ud504\ub9ac\uce74 \ub79c\ub4dc zmk=\uc7d8\ube44\uc544 \ucf70\uccd0 -zwd=\uc9d0\ube44\ube0c\uc6e8 \ub2ec\ub7ec +zwd=\uc9d0\ubc14\ube0c\uc6e8 \ub2ec\ub7ec diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_lt_LT.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_lt_LT.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_lt_LT.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_lt_LT.properties 2015-01-20 02:17:18.000000000 +0000 @@ -35,4 +35,5 @@ # This notice and attribution to Taligent may not be removed. # Taligent is a registered trademark of Taligent, Inc. +EUR=\u20AC LTL=Lt diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_lv_LV.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_lv_LV.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_lv_LV.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_lv_LV.properties 2015-01-20 02:17:18.000000000 +0000 @@ -35,4 +35,5 @@ # This notice and attribution to Taligent may not be removed. # Taligent is a registered trademark of Taligent, Inc. +EUR=\u20AC LVL=Ls diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames.properties 2015-01-20 02:17:16.000000000 +0000 @@ -1,45 +1,68 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. # # # COPYRIGHT AND PERMISSION NOTICE # -# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Copyright (C) 1991-2012 Unicode, Inc. All rights reserved. # Distributed under the Terms of Use in http://www.unicode.org/copyright.html. # -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of the Unicode data files and any associated documentation (the "Data -# Files") or Unicode software and any associated documentation (the -# "Software") to deal in the Data Files or Software without restriction, -# including without limitation the rights to use, copy, modify, merge, -# publish, distribute, and/or sell copies of the Data Files or Software, and -# to permit persons to whom the Data Files or Software are furnished to do -# so, provided that (a) the above copyright notice(s) and this permission -# notice appear with all copies of the Data Files or Software, (b) both the -# above copyright notice(s) and this permission notice appear in associated -# documentation, and (c) there is clear notice in each modified Data File or -# in the Software as well as in the documentation associated with the Data -# File(s) or Software that the data or software has been modified. -# -# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS -# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR -# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THE DATA FILES OR SOFTWARE. -# -# Except as contained in this notice, the name of a copyright holder shall not -# be used in advertising or otherwise to promote the sale, use or other -# dealings in these Data Files or Software without prior written -# authorization of the copyright holder. +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of the Unicode data files and any associated documentation (the +# "Data Files") or Unicode software and any associated documentation +# (the "Software") to deal in the Data Files or Software without +# restriction, including without limitation the rights to use, copy, +# modify, merge, publish, distribute, and/or sell copies of the Data +# Files or Software, and to permit persons to whom the Data Files or +# Software are furnished to do so, provided that (a) the above copyright +# notice(s) and this permission notice appear with all copies of the +# Data Files or Software, (b) both the above copyright notice(s) and +# this permission notice appear in associated documentation, and (c) +# there is clear notice in each modified Data File or in the Software as +# well as in the documentation associated with the Data File(s) or +# Software that the data or software has been modified. # - -# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR +# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR +# SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in these Data Files or Software without prior +# written authorization of the copyright holder. +# +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# ADP=ADP AED=AED AFA=AFA @@ -83,6 +106,7 @@ COP=COP CRC=CRC CSD=CSD +CUC=CUC CUP=CUP CVE=CVE CYP=CYP @@ -202,6 +226,7 @@ SOS=SOS SRD=SRD SRG=SRG +SSP=SSP STD=STD SVC=SVC SYP=SYP @@ -209,6 +234,7 @@ THB=THB TJS=TJS TMM=TMM +TMT=TMT TND=TND TOP=TOP TPE=TPE @@ -244,62 +270,68 @@ XPD=XPD XPF=XPF XPT=XPT +XSU=XSU XTS=XTS +XUA=XUA XXX=XXX YER=YER YUM=YUM ZAR=ZAR ZMK=ZMK +ZMW=ZMW ZWD=ZWD +ZWL=ZWL ZWN=ZWN +ZWR=ZWR adp=Andorran Peseta aed=United Arab Emirates Dirham -afa=Afghani (1927-2002) -afn=Afghani +afa=Afghan Afghani (1927-2002) +afn=Afghan Afghani all=Albanian Lek amd=Armenian Dram -ang=Netherlands Antillan Guilder +ang=Netherlands Antillean Guilder aoa=Angolan Kwanza ars=Argentine Peso ats=Austrian Schilling aud=Australian Dollar -awg=Aruban Guilder -azm=Azerbaijanian Manat (1993-2006) -azn=Azerbaijanian Manat +awg=Aruban Florin +azm=Azerbaijani Manat (1993-2006) +azn=Azerbaijani Manat bam=Bosnia-Herzegovina Convertible Mark -bbd=Barbados Dollar -bdt=Bangladesh Taka +bbd=Barbadian Dollar +bdt=Bangladeshi Taka bef=Belgian Franc bgl=Bulgarian Hard Lev -bgn=Bulgarian New Lev +bgn=Bulgarian Lev bhd=Bahraini Dinar -bif=Burundi Franc +bif=Burundian Franc bmd=Bermudan Dollar bnd=Brunei Dollar -bob=Boliviano +bob=Bolivian Boliviano bov=Bolivian Mvdol brl=Brazilian Real bsd=Bahamian Dollar -btn=Bhutan Ngultrum +btn=Bhutanese Ngultrum bwp=Botswanan Pula -byb=Belarussian New Ruble (1994-1999) -byr=Belarussian Ruble +byb=Belarusian New Ruble (1994-1999) +byr=Belarusian Ruble bzd=Belize Dollar cad=Canadian Dollar -cdf=Congolese Franc Congolais +cdf=Congolese Franc chf=Swiss Franc -clf=Chilean Unidades de Fomento +clf=Chilean Unit of Account (UF) clp=Chilean Peso -cny=Chinese Yuan Renminbi +cny=Chinese Yuan cop=Colombian Peso -crc=Costa Rican Colon -csd=Serbian Dinar +crc=Costa Rican Col\u00f3n +csd=Serbian Dinar (2002-2006) +cuc=Cuban Convertible Peso cup=Cuban Peso -cve=Cape Verde Escudo -cyp=Cyprus Pound +cve=Cape Verdean Escudo +cyp=Cypriot Pound czk=Czech Republic Koruna -dem=Deutsche Mark -djf=Djibouti Franc +dem=German Mark +djf=Djiboutian Franc dkk=Danish Krone dop=Dominican Peso dzd=Algerian Dinar @@ -310,22 +342,22 @@ etb=Ethiopian Birr eur=Euro fim=Finnish Markka -fjd=Fiji Dollar +fjd=Fijian Dollar fkp=Falkland Islands Pound frf=French Franc gbp=British Pound Sterling gel=Georgian Lari -ghc=Ghana Cedi -ghs=Ghana Cedi +ghc=Ghanaian Cedi (1979-2007) +ghs=Ghanaian Cedi gip=Gibraltar Pound -gmd=Gambia Dalasi -gnf=Guinea Franc +gmd=Gambian Dalasi +gnf=Guinean Franc grd=Greek Drachma -gtq=Guatemala Quetzal +gtq=Guatemalan Quetzal gwp=Guinea-Bissau Peso -gyd=Guyana Dollar +gyd=Guyanaese Dollar hkd=Hong Kong Dollar -hnl=Hoduras Lempira +hnl=Honduran Lempira hrk=Croatian Kuna htg=Haitian Gourde huf=Hungarian Forint @@ -335,110 +367,113 @@ inr=Indian Rupee iqd=Iraqi Dinar irr=Iranian Rial -isk=Icelandic Krona +isk=Icelandic Kr\u00f3na itl=Italian Lira jmd=Jamaican Dollar jod=Jordanian Dinar jpy=Japanese Yen kes=Kenyan Shilling -kgs=Kyrgystan Som +kgs=Kyrgystani Som khr=Cambodian Riel -kmf=Comoro Franc +kmf=Comorian Franc kpw=North Korean Won krw=South Korean Won kwd=Kuwaiti Dinar kyd=Cayman Islands Dollar -kzt=Kazakhstan Tenge +kzt=Kazakhstani Tenge lak=Laotian Kip lbp=Lebanese Pound -lkr=Sri Lanka Rupee +lkr=Sri Lankan Rupee lrd=Liberian Dollar lsl=Lesotho Loti -ltl=Lithuanian Lita -luf=Luxembourg Franc +ltl=Lithuanian Litas +luf=Luxembourgian Franc lvl=Latvian Lats lyd=Libyan Dinar mad=Moroccan Dirham mdl=Moldovan Leu -mga=Madagascar Ariary -mgf=Madagascar Franc +mga=Malagasy Ariary +mgf=Malagasy Franc mkd=Macedonian Denar -mmk=Myanmar Kyat +mmk=Myanma Kyat mnt=Mongolian Tugrik -mop=Macao Pataca -mro=Mauritania Ouguiya +mop=Macanese Pataca +mro=Mauritanian Ouguiya mtl=Maltese Lira -mur=Mauritius Rupee -mvr=Maldive Islands Rufiyaa -mwk=Malawi Kwacha +mur=Mauritian Rupee +mvr=Maldivian Rufiyaa +mwk=Malawian Kwacha mxn=Mexican Peso -mxv=Mexican Unidad de Inversion (UDI) +mxv=Mexican Investment Unit myr=Malaysian Ringgit -mzm=Old Mozambique Metical -mzn=Mozambique Metical -nad=Namibia Dollar +mzm=Mozambican Metical (1980-2006) +mzn=Mozambican Metical +nad=Namibian Dollar ngn=Nigerian Naira -nio=Nicaraguan Cordoba Oro -nlg=Netherlands Guilder +nio=Nicaraguan C\u00f3rdoba +nlg=Dutch Guilder nok=Norwegian Krone npr=Nepalese Rupee nzd=New Zealand Dollar -omr=Oman Rial +omr=Omani Rial pab=Panamanian Balboa -pen=Peruvian Sol Nuevo -pgk=Papua New Guinea Kina +pen=Peruvian Nuevo Sol +pgk=Papua New Guinean Kina php=Philippine Peso -pkr=Pakistan Rupee +pkr=Pakistani Rupee pln=Polish Zloty pte=Portuguese Escudo -pyg=Paraguay Guarani +pyg=Paraguayan Guarani qar=Qatari Rial -rol=Old Romanian Leu +rol=Romanian Leu (1952-2006) ron=Romanian Leu +rsd=Serbian Dinar rub=Russian Ruble rur=Russian Ruble (1991-1998) rwf=Rwandan Franc sar=Saudi Riyal sbd=Solomon Islands Dollar -scr=Seychelles Rupee -sdd=Sudanese Dinar +scr=Seychellois Rupee +sdd=Sudanese Dinar (1992-2007) sdg=Sudanese Pound sek=Swedish Krona sgd=Singapore Dollar shp=Saint Helena Pound -sit=Slovenia Tolar +sit=Slovenian Tolar skk=Slovak Koruna -sll=Sierra Leone Leone +sll=Sierra Leonean Leone sos=Somali Shilling -srd=Surinam Dollar -srg=Suriname Guilder -std=Sao Tome and Principe Dobra -svc=El Salvador Colon +srd=Surinamese Dollar +srg=Surinamese Guilder +ssp=South Sudanese Pound +std=S\u00e3o Tom\u00e9 and Pr\u00edncipe Dobra +svc=Salvadoran Col\u00f3n syp=Syrian Pound -szl=Swaziland Lilangeni +szl=Swazi Lilangeni thb=Thai Baht -tjs=Tajikistan Somoni -tmm=Turkmenistan Manat +tjs=Tajikistani Somoni +tmm=Turkmenistani Manat (1993-2009) +tmt=Turkmenistani Manat tnd=Tunisian Dinar -top=Tonga Pa\u02bbanga -tpe=Timor Escudo -trl=Turkish Lira -try=New Turkish Lira +top=Tongan Pa\u02bbanga +tpe=Timorese Escudo +trl=Turkish Lira (1922-2005) +try=Turkish Lira ttd=Trinidad and Tobago Dollar -twd=Taiwan New Dollar +twd=New Taiwan Dollar tzs=Tanzanian Shilling uah=Ukrainian Hryvnia ugx=Ugandan Shilling usd=US Dollar usn=US Dollar (Next day) uss=US Dollar (Same day) -uyu=Uruguay Peso Uruguayo -uzs=Uzbekistan Sum -veb=Venezuelan Bolivar -vef=Venezuelan Bolivar Fuerte +uyu=Uruguayan Peso +uzs=Uzbekistan Som +veb=Venezuelan Bol\u00edvar (1871-2008) +vef=Venezuelan Bol\u00edvar vnd=Vietnamese Dong vuv=Vanuatu Vatu -wst=Western Samoa Tala +wst=Samoan Tala xaf=CFA Franc BEAC xag=Silver xau=Gold @@ -454,10 +489,14 @@ xpd=Palladium xpf=CFP Franc xpt=Platinum +xsu=Sucre xts=Testing Currency Code -xxx=No Currency +xua=ADB Unit of Account +xxx=Unknown Currency yer=Yemeni Rial -yum=Yugoslavian Noviy Dinar +yum=Yugoslavian New Dinar (1994-2002) zar=South African Rand zmk=Zambian Kwacha -zwd=Zimbabwe Dollar +zwd=Zimbabwean Dollar (1980-2008) +zwl=Zimbabwean Dollar (2009) +zwr=Zimbabwean Dollar (2008) diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_pt.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_pt.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_pt.properties 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_pt.properties 2015-01-20 02:17:19.000000000 +0000 @@ -0,0 +1,278 @@ +# +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved. +# Distributed under the Terms of Use in http://www.unicode.org/copyright.html. +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of the Unicode data files and any associated documentation (the +# "Data Files") or Unicode software and any associated documentation +# (the "Software") to deal in the Data Files or Software without +# restriction, including without limitation the rights to use, copy, +# modify, merge, publish, distribute, and/or sell copies of the Data +# Files or Software, and to permit persons to whom the Data Files or +# Software are furnished to do so, provided that (a) the above copyright +# notice(s) and this permission notice appear with all copies of the +# Data Files or Software, (b) both the above copyright notice(s) and +# this permission notice appear in associated documentation, and (c) +# there is clear notice in each modified Data File or in the Software as +# well as in the documentation associated with the Data File(s) or +# Software that the data or software has been modified. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR +# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR +# SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in these Data Files or Software without prior +# written authorization of the copyright holder. + +# +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# +adp=Peseta de Andorra +aed=Dir\u00e9m dos Emirados \u00c1rabes Unidos +afa=Afegane (1927-2002) +afn=Afegane +all=Lek Alban\u00eas +amd=Dram arm\u00eanio +ang=Guilder das Antilhas Holandesas +aoa=Cuanza angolano +ars=Peso argentino +ats=Xelim austr\u00edaco +aud=D\u00f3lar australiano +awg=Guilder de Aruba +azm=Manat azerbaijano +azn=Manat do Azerbaij\u00e3o +bam=Marco b\u00f3snio-herzegovino convers\u00edvel +bbd=D\u00f3lar de Barbados +bdt=Taka de Bangladesh +bef=Franco belga +bgl=Lev forte b\u00falgaro +bgn=Lev novo b\u00falgaro +bhd=Dinar bareinita +bif=Franco do Burundi +bmd=D\u00f3lar das Bermudas +bnd=D\u00f3lar do Brunei +bob=Boliviano +bov=Mvdol boliviano +brl=Real brasileiro +bsd=D\u00f3lar das Bahamas +btn=Ngultrum do But\u00e3o +bwp=Pula botsuanesa +byb=Rublo novo bielo-russo (1994-1999) +byr=Rublo bielo-russo +bzd=D\u00f3lar do Belize +cad=D\u00f3lar canadense +cdf=Franco congol\u00eas +chf=Franco su\u00ed\u00e7o +clf=Unidades de Fomento chilenas +clp=Peso chileno +cny=Yuan Renminbi chin\u00eas +cop=Peso colombiano +crc=Colon da Costa Rica +csd=Dinar s\u00e9rvio antigo +cuc=Peso cubano convers\u00edvel +cup=Peso cubano +cve=Escudo cabo-verdiano +cyp=Libra cipriota +czk=Coroa checa +dem=Marco alem\u00e3o +djf=Franco do Djibuti +dkk=Coroa dinamarquesa +dop=Peso dominicano +dzd=Dinar argelino +eek=Coroa estoniana +egp=Libra eg\u00edpcia +ern=Nakfa da Eritreia +esp=Peseta espanhola +etb=Birr et\u00edope +fim=Marca finlandesa +fjd=D\u00f3lar de Fiji +fkp=Libra das Malvinas +frf=Franco franc\u00eas +gbp=Libra esterlina brit\u00e2nica +gel=Lari georgiano +ghc=Cedi de Gana (1979-2007) +ghs=Cedi gan\u00eas +gip=Libra de Gibraltar +gmd=Dalasi de G\u00e2mbia +gnf=Franco de Guin\u00e9 +grd=Dracma grego +gtq=Quet\u00e7al da Guatemala +gwp=Peso da Guin\u00e9-Bissau +gyd=D\u00f3lar da Guiana +hkd=D\u00f3lar de Hong Kong +hnl=Lempira de Honduras +hrk=Kuna croata +htg=Gurde do Haiti +huf=Forinte h\u00fangaro +idr=Rupia indon\u00e9sia +iep=Libra irlandesa +ils=Sheqel Novo israelita +inr=R\u00fapia indiana +iqd=Dinar iraquiano +irr=Rial iraniano +isk=Coroa islandesa +itl=Lira italiana +jmd=D\u00f3lar jamaicano +jod=Dinar jordaniano +jpy=Iene japon\u00eas +kes=Xelim queniano +kgs=Som quirguiz +khr=Riel cambojano +kmf=Franco de Comores +kpw=Won norte-coreano +krw=Won sul-coreano +kwd=Dinar coveitiano +kyd=D\u00f3lar das Ilhas Caiman +kzt=Tenge do Cazaquist\u00e3o +lak=Kip de Laos +lbp=Libra libanesa +lkr=Rupia do Sri Lanka +lrd=D\u00f3lar liberiano +lsl=Loti do Lesoto +ltl=Lita lituano +luf=Franco luxemburgu\u00eas +lvl=Lats let\u00e3o +lyd=Dinar l\u00edbio +mad=Dir\u00e9m marroquino +mdl=Leu mold\u00e1vio +mga=Ariary de Madagascar +mgf=Franco de Madagascar +mkd=Dinar maced\u00f4nio +mmk=Kyat de Mianmar +mnt=Tugrik mongol +mop=Pataca macaense +mro=Ouguiya da Maurit\u00e2nia +mtl=Lira maltesa +mur=Rupia de Maur\u00edcio +mvr=Rupias das Ilhas Maldivas +mwk=Cuacha do Mal\u00e1ui +mxn=Peso mexicano +mxv=Unidade Mexicana de Investimento (UDI) +myr=Ringgit malaio +mzm=Metical antigo de Mo\u00e7ambique +mzn=Metical do Mo\u00e7ambique +nad=D\u00f3lar da Nam\u00edbia +ngn=Naira nigeriana +nio=C\u00f3rdoba Ouro nicaraguense +nlg=Florim holand\u00eas +nok=Coroa norueguesa +npr=Rupia nepalesa +nzd=D\u00f3lar da Nova Zel\u00e2ndia +omr=Rial de Om\u00e3 +pab=Balboa panamenho +pen=Sol Novo peruano +pgk=Kina da Papua-Nova Guin\u00e9 +php=Peso filipino +pkr=Rupia paquistanesa +pln=Zloti polon\u00eas +pte=Escudo portugu\u00eas +pyg=Guarani paraguaio +qar=Rial catariano +rol=Leu romeno antigo +ron=Leu romeno +rsd=Dinar s\u00e9rvio +rub=Rublo russo +rur=Rublo russo (1991-1998) +rwf=Franco ruand\u00eas +sar=Rial saudita +sbd=D\u00f3lar das Ilhas Salom\u00e3o +scr=Rupia das Seychelles +sdd=Dinar sudan\u00eas +sdg=Libra sudanesa +sek=Coroa sueca +sgd=D\u00f3lar de Cingapura +shp=Libra de Santa Helena +sit=Tolar Bons esloveno +skk=Coroa eslovaca +sll=Leone de Serra Leoa +sos=Xelim somali +srd=D\u00f3lar do Suriname +srg=Florim do Suriname +std=Dobra de S\u00e3o Tom\u00e9 e Pr\u00edncipe +svc=Colom salvadorenho +syp=Libra s\u00edria +szl=Lilangeni da Suazil\u00e2ndia +thb=Baht tailand\u00eas +tjs=Somoni tadjique +tmm=Manat do Turcomenist\u00e3o +tmt=Novo Manat do Turcomenist\u00e3o +tnd=Dinar tunisiano +top=Pa\u02bbanga de Tonga +tpe=Escudo timorense +trl=Lira turca antiga +try=Lira turca +ttd=D\u00f3lar de Trinidad e Tobago +twd=D\u00f3lar Novo de Taiwan +tzs=Xelim da Tanz\u00e2nia +uah=Hryvnia ucraniano +ugx=Xelim ugandense +usd=D\u00f3lar norte-americano +usn=D\u00f3lar norte-americano (Dia seguinte) +uss=D\u00f3lar norte-americano (Mesmo dia) +uyu=Peso uruguaio +uzs=Sum do Usbequist\u00e3o +veb=Bol\u00edvar venezuelano +vef=Bol\u00edvar v enezuelano forte +vnd=Dong vietnamita +vuv=Vatu de Vanuatu +wst=Tala samoano +xaf=Franco CFA BEAC +xag=Prata +xau=Ouro +xba=Unidade Composta Europeia +xbb=Unidade Monet\u00e1ria Europeia +xbc=Unidade de Conta Europeia (XBC) +xbd=Unidade de Conta Europeia (XBD) +xcd=D\u00f3lar do Caribe Oriental +xdr=Direitos Especiais de Giro +xfo=Franco-ouro franc\u00eas +xfu=Franco UIC franc\u00eas +xof=Franco CFA BCEAO +xpd=Pal\u00e1dio +xpf=Franco CFP +xpt=Platina +xts=C\u00f3digo de Moeda de Teste +xxx=Moeda Desconhecida ou Inv\u00e1lida +yer=Rial iemenita +yum=Dinar noviy iugoslavo +zar=Rand sul-africano +zmk=Cuacha zambiano +zwd=D\u00f3lar do Zimb\u00e1bue +zwl=D\u00f3lar do Zimb\u00e1bue (2009) +zwr=D\u00f3lar do Zimb\u00e1bue (2008) diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_sk_SK.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_sk_SK.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_sk_SK.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_sk_SK.properties 2015-01-20 02:17:19.000000000 +0000 @@ -1,5 +1,5 @@ -# -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -21,18 +21,48 @@ # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. -# +# -# (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved -# (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved # -# The original version of this source code and documentation -# is copyrighted and owned by Taligent, Inc., a wholly-owned -# subsidiary of IBM. These materials are provided under terms -# of a License Agreement between Taligent and Sun. This technology -# is protected by multiple US and International patents. +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved. +# Distributed under the Terms of Use in http://www.unicode.org/copyright.html. # -# This notice and attribution to Taligent may not be removed. -# Taligent is a registered trademark of Taligent, Inc. +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of the Unicode data files and any associated documentation (the +# "Data Files") or Unicode software and any associated documentation +# (the "Software") to deal in the Data Files or Software without +# restriction, including without limitation the rights to use, copy, +# modify, merge, publish, distribute, and/or sell copies of the Data +# Files or Software, and to permit persons to whom the Data Files or +# Software are furnished to do so, provided that (a) the above copyright +# notice(s) and this permission notice appear with all copies of the +# Data Files or Software, (b) both the above copyright notice(s) and +# this permission notice appear in associated documentation, and (c) +# there is clear notice in each modified Data File or in the Software as +# well as in the documentation associated with the Data File(s) or +# Software that the data or software has been modified. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR +# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR +# SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in these Data Files or Software without prior +# written authorization of the copyright holder. +# +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# SKK=Sk +skk=Slovensk\u00e1 koruna +EUR=\u20ac diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_sr_RS.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_sr_RS.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_sr_RS.properties 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_sr_RS.properties 2015-01-20 02:17:19.000000000 +0000 @@ -0,0 +1,66 @@ +# +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved. +# Distributed under the Terms of Use in http://www.unicode.org/copyright.html. +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of the Unicode data files and any associated documentation (the +# "Data Files") or Unicode software and any associated documentation +# (the "Software") to deal in the Data Files or Software without +# restriction, including without limitation the rights to use, copy, +# modify, merge, publish, distribute, and/or sell copies of the Data +# Files or Software, and to permit persons to whom the Data Files or +# Software are furnished to do so, provided that (a) the above copyright +# notice(s) and this permission notice appear with all copies of the +# Data Files or Software, (b) both the above copyright notice(s) and +# this permission notice appear in associated documentation, and (c) +# there is clear notice in each modified Data File or in the Software as +# well as in the documentation associated with the Data File(s) or +# Software that the data or software has been modified. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR +# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR +# SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in these Data Files or Software without prior +# written authorization of the copyright holder. + +# +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# +RSD=\u0434\u0438\u043d. diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_sv.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_sv.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_sv.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_sv.properties 2015-01-20 02:17:19.000000000 +0000 @@ -1,230 +1,271 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. # # # COPYRIGHT AND PERMISSION NOTICE # -# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved. # Distributed under the Terms of Use in http://www.unicode.org/copyright.html. # -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of the Unicode data files and any associated documentation (the "Data -# Files") or Unicode software and any associated documentation (the -# "Software") to deal in the Data Files or Software without restriction, -# including without limitation the rights to use, copy, modify, merge, -# publish, distribute, and/or sell copies of the Data Files or Software, and -# to permit persons to whom the Data Files or Software are furnished to do -# so, provided that (a) the above copyright notice(s) and this permission -# notice appear with all copies of the Data Files or Software, (b) both the -# above copyright notice(s) and this permission notice appear in associated -# documentation, and (c) there is clear notice in each modified Data File or -# in the Software as well as in the documentation associated with the Data -# File(s) or Software that the data or software has been modified. -# -# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS -# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR -# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THE DATA FILES OR SOFTWARE. -# -# Except as contained in this notice, the name of a copyright holder shall not -# be used in advertising or otherwise to promote the sale, use or other -# dealings in these Data Files or Software without prior written -# authorization of the copyright holder. +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of the Unicode data files and any associated documentation (the +# "Data Files") or Unicode software and any associated documentation +# (the "Software") to deal in the Data Files or Software without +# restriction, including without limitation the rights to use, copy, +# modify, merge, publish, distribute, and/or sell copies of the Data +# Files or Software, and to permit persons to whom the Data Files or +# Software are furnished to do so, provided that (a) the above copyright +# notice(s) and this permission notice appear with all copies of the +# Data Files or Software, (b) both the above copyright notice(s) and +# this permission notice appear in associated documentation, and (c) +# there is clear notice in each modified Data File or in the Software as +# well as in the documentation associated with the Data File(s) or +# Software that the data or software has been modified. # - -# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR +# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR +# SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in these Data Files or Software without prior +# written authorization of the copyright holder. -adp=Andorransk peseta -aed=F\u00f6renade arabemiratens dirham -afa=afro-asiatiskt spr\u00e5k (annat) -all=Albansk lek -amd=Armenisk dram -ang=Nederl\u00e4ndsk antillisk gulden -aoa=Angolansk kwanza -ars=Argentinsk peso -ats=\u00d6sterrikisk schilling -aud=Australisk dollar -awg=Aruba-florin -azm=Azerbajdzjansk manat -bam=Konvertibel bosnisk-hercegovinsk mark -bbd=Barbadisk dollar -bdt=Bangladeshisk taka -bef=Belgisk franc -bgl=Bulgarisk h\u00e5rd lev -bgn=Bulgarisk ny lev -bhd=Bahrainsk dinar -bif=Burundisk franc +# +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# +adp=andorransk peseta +aed=F\u00f6renade Arabemiratens dirham +afa=afghani (1927-2002) +afn=afghani +all=albansk lek +amd=armenisk dram +ang=Nederl\u00e4ndska Antillernas gulden +aoa=angolansk kwanza +ars=argentinsk peso +ats=\u00f6sterrikisk schilling +aud=australisk dollar +awg=Aruba-gulden +azm=azerbajdzjansk manat (1993-2006) +azn=azerbajdzjansk manat +bam=bosnisk-hercegovinsk mark (konvertibel) +bbd=Barbados-dollar +bdt=bangladeshisk taka +bef=belgisk franc +bgn=bulgarisk ny lev +bhd=Bahrain-dinar +bif=burundisk franc bmd=Bermuda-dollar -bnd=Bruneisk dollar -bov=Boliviansk mvdol -brl=Brasiliansk real -bsd=Bahamansk dollar -btn=Bhutanesisk ngultrum -bwp=Botswansk pula -byb=Vitrysk ny rubel (1994-1999) -byr=Vitrysk rubel -bzd=Belizisk dollar -cad=Kanadensisk dollar -cdf=Kongolesisk franc congolais -chf=Schweizisk franc -clf=Chilensk unidad de fomento -clp=Chilensk peso -cny=Kinesisk yuan renminbi -cop=Colombiansk peso -crc=Costarikansk col\u00f3n -cup=Kubansk peso -cve=Kapverdisk escudo -cyp=Cypriotiskt pund -czk=Tjeckisk koruna -dem=Tysk mark -djf=Djiboutisk franc -dkk=Dansk krona -dop=Dominikansk peso -dzd=Algerisk dinar -eek=Estnisk krona -egp=Egyptiskt pund -ern=Eritreansk nakfa -esp=Spansk peseta -etb=Etiopisk birr -eur=Euro -fim=Finsk mark -fjd=Fijiansk dollar +bnd=Brunei-dollar +bob=boliviano +bov=boliviansk mvdol +brl=brasiliansk real +bsd=Bahamas-dollar +btn=bhutanesisk ngultrum +bwp=botswansk pula +byb=vitrysk ny rubel (1994-1999) +byr=vitrysk rubel +bzd=belizisk dollar +cad=kanadensisk dollar +cdf=kongolesisk franc +chf=schweizisk franc +clf=chilensk unidad de fomento +clp=chilensk peso +cny=kinesisk yuan renminbi +cop=colombiansk peso +crc=costarikansk col\u00f3n +csd=jugoslavisk dinar +cup=kubansk peso +cve=kapverdisk escudo +cyp=cypriotiskt pund +czk=tjeckisk koruna +dem=tysk mark +djf=djiboutisk franc +dkk=dansk krona +dop=dominikansk peso +dzd=algerisk dinar +eek=estnisk krona +egp=egyptiskt pund +ern=eritreansk nakfa +esp=spansk peseta +etb=etiopisk birr +eur=euro +fim=finsk mark +fjd=Fiji-dollar fkp=Falklands\u00f6arnas pund -frf=Fransk franc -gbp=Brittiskt pund sterling -gel=Georgisk lari -ghc=Ghanansk cedi -gip=Gibraltiskt pund -gmd=Gambisk dalasi -gnf=Guineansk franc -grd=Grekisk drachma -gtq=Guatemalansk quetzal +frf=fransk franc +gbp=brittiskt pund sterling +gel=georgisk lari +ghc=ghanansk cedi (1979-2007) +ghs=ghanansk cedi +gip=gibraltiskt pund +gmd=gambisk dalasi +gnf=guineansk franc +grd=grekisk drachma +gtq=guatemalansk quetzal gwp=Guinea-Bissau-peso -gyd=Guyanansk dollar +gyd=guyanansk dollar hkd=Hongkong-dollar -hnl=Hoduransk lempira -hrk=Kroatisk kuna -htg=Haitisk gourde -huf=Ungersk forint -idr=Indonesisk rupiah -iep=Irl\u00e4ndskt pund -ils=Israelisk ny shekel -inr=Indisk rupie -iqd=Irakisk dinar -irr=Iransk rial -isk=Isl\u00e4ndsk krona -itl=Italiensk lira -jmd=Jamaicansk dollar -jod=Jordansk dinar -jpy=Japansk yen -kes=Kenyansk shilling -kgs=Kirgizistansk som -khr=Kambodjansk riel -kmf=Komorisk franc -kpw=Nordkoreansk won -krw=Sydkoreansk won -kwd=Kuwaitisk dinar +hnl=honduransk lempira +hrk=kroatisk kuna +htg=haitisk gourde +huf=ungersk forint +idr=indonesisk rupiah +iep=irl\u00e4ndskt pund +ils=israelisk ny shekel +inr=indisk rupie +iqd=irakisk dinar +irr=iransk rial +isk=isl\u00e4ndsk krona +itl=italiensk lira +jmd=Jamaica-dollar +jod=jordansk dinar +jpy=japansk yen +kes=kenyansk shilling +kgs=kirgizisk som +khr=kambodjansk riel +kmf=komorisk franc +kpw=nordkoreansk won +krw=sydkoreansk won +kwd=kuwaitisk dinar kyd=Cayman-dollar -kzt=Kazakisk tenge -lak=Laotisk kip -lbp=Libanesiskt pund -lkr=Srilankesisk rupie -lrd=Liberisk dollar -lsl=Lesothisk loti -ltl=Lettisk lita -luf=Luxemburgsk franc -lvl=Lettisk lats -lyd=Libysk dinar -mad=Marockansk dirham -mdl=Moldavisk leu -mga=Madagaskisk ariary -mgf=Madagaskisk franc -mkd=Makedonisk denar -mmk=Myanmarisk kyat -mnt=Mongolisk tugrik -mop=Macaoisk pataca -mro=Mauretansk ouguiya -mtl=Maltesisk lira -mur=Mauritisk rupie -mvr=Maldivisk rufiyaa -mwk=Malawisk kwacha -mxn=Mexikansk peso -mxv=Mexikansk Unidad de Inversion (UDI) -myr=Malaysisk ringgit -mzm=Mo\u00e7ambikisk metical -nad=Namibisk dollar -ngn=Nigeriansk naira -nio=Nicaraguansk c\u00f3rdoba oro -nlg=Nederl\u00e4ndsk gulden -nok=Norsk krona -npr=Nepalesisk rupie -nzd=Nyzeel\u00e4ndsk dollar -omr=Omansk rial -pab=Panamansk balboa -pen=Peruansk sol nuevo -pgk=Papuansk kina -php=Filippinsk peso -pkr=Pakistansk rupie -pln=Polsk zloty -pte=Portugisisk escudo -pyg=Paraguaysk guarani -qar=Qatarisk rial -rol=Rum\u00e4nsk leu -rub=Rysk rubel -rur=Rysk rubel (1991-1998) -rwf=Rwandisk franc -sar=Saudisk riyal +kzt=kazakisk tenge +lak=laotisk kip +lbp=libanesiskt pund +lkr=srilankesisk rupie +lrd=Liberia-dollar +lsl=lesothisk loti +ltl=litauisk litas +luf=luxemburgsk franc +lvl=lettisk lats +lyd=libysk dinar +mad=marockansk dirham +mdl=moldavisk leu +mga=madagaskisk ariary +mgf=madagaskisk franc +mkd=makedonisk denar +mmk=myanmarisk kyat +mnt=mongolisk tugrik +mop=Macao-pataca +mro=mauretansk ouguiya +mtl=maltesisk lira +mur=mauritisk rupie +mvr=maldivisk rufiyaa +mwk=malawisk kwacha +mxn=mexikansk peso +mxv=mexikansk unidad de inversion +myr=malaysisk ringgit +mzm=gammal mo\u00e7ambikisk metical +mzn=mo\u00e7ambikisk metical +nad=Namibia-dollar +ngn=nigeriansk naira +nio=nicaraguansk c\u00f3rdoba oro +nlg=nederl\u00e4ndsk gulden +nok=norsk krona +npr=nepalesisk rupie +nzd=nyzeel\u00e4ndsk dollar +omr=omansk rial +pab=panamansk balboa +pen=peruansk sol nuevo +pgk=papuansk kina +php=filippinsk peso +pkr=pakistansk rupie +pln=polsk zloty +pte=portugisisk escudo +pyg=paraguaysk guarani +qar=qatarisk rial +rol=gammal rum\u00e4nsk leu +ron=rum\u00e4nsk leu +rsd=Serbisk dinar +rub=rysk rubel +rur=rysk rubel (1991-1998) +rwf=rwandisk franc +sar=saudisk riyal sbd=Salomon-dollar -scr=Seychellisk rupie -sdd=Sudanesisk dinar -sek=Svensk krona -sgd=Singaporiansk dollar +scr=seychellisk rupie +sdd=sudanesisk dinar +sdg=sudanesiskt pund +sek=svensk krona +sgd=Singapore-dollar shp=S\:t Helena-pund -sit=Slovensk tolar -skk=Slovakisk koruna -sll=Sierraleonsk leone -sos=Somalisk shilling -srg=Surinamesisk gulden +sit=slovensk tolar +skk=slovakisk koruna +sll=sierraleonsk leone +sos=somalisk shilling +srd=Surinam-dollar +srg=surinamesisk gulden std=S\u00e3o Tom\u00e9 och Pr\u00edncipe-dobra -svc=Salvadoransk col\u00f3n -syp=Syriskt pund -szl=Swazil\u00e4ndsk lilangeni -thb=Thail\u00e4ndsk baht -tjs=Tadzjikisk somoni -tmm=Turkmensk manat -tnd=Tunisisk dinar -top=Tongansk pa\u02bbanga -tpe=Timoriansk escudo -trl=Turkisk lira -try=Ny turkisk lira -ttd=Trinidadisk dollar -twd=Taiwanesisk ny dollar -tzs=Tanzanisk shilling -uah=Ukrainsk hryvnia -ugx=Ugandisk shilling +svc=salvadoransk col\u00f3n +syp=syriskt pund +szl=swazil\u00e4ndsk lilangeni +thb=thail\u00e4ndsk baht +tjs=tadzjikisk somoni +tmm=turkmensk manat +tnd=tunisisk dinar +top=tongansk pa\u02bbanga +tpe=timoriansk escudo +trl=gammal turkisk lira +try=ny turkisk lira +ttd=Trinidad ochTobago-dollar +twd=taiwanesisk ny dollar +tzs=tanzanisk shilling +uah=ukrainsk hryvnia +ugx=ugandisk shilling usd=US-dollar usn=US-dollar (n\u00e4sta dag) uss=US-dollar (samma dag) -uyu=Uruguayansk peso uruguayo -uzs=Uzbekisk sum -veb=Venezuelansk bolivar -vnd=Vietnamesisk dong -vuv=Vanuatisk vatu -wst=V\u00e4stsamoansk tala -xaf=CFA Franc BEAC -xcd=\u00d6stkaribisk dollar -xfo=Fransk guldfranc -xfu=French UIC-Franc -xof=CFA Franc BCEAO +uyu=uruguayansk peso +uzs=uzbekisk sum +veb=venezuelansk bolivar +vef=venezuelansk bolivar fuerte +vnd=vietnamesisk dong +vuv=vanuatisk vatu +wst=v\u00e4stsamoansk tala +xag=silver +xau=guld +xba=europeisk kompositenhet +xbb=europeisk monet\u00e4r enhet +xbc=europeisk kontoenhet (XBC) +xbd=europeisk kontoenhet (XBD) +xcd=\u00f6stkaribisk dollar +xdr=IMF s\u00e4rskild dragningsr\u00e4tt +xfo=fransk guldfranc +xpd=palladium xpf=CFP-franc -yer=Jemenitisk rial -yum=Dinar (Serbien och Montenegro) -zar=Sydafrikansk rand -zmk=Zambisk kwacha -zwd=Zimbabwisk dollar +xpt=platina +xts=test-valutakod +xxx=ok\u00e4nd eller ogiltig valuta +yer=jemenitisk rial +yum=jugoslavisk ny dinar +zar=sydafrikansk rand +zmk=zambisk kwacha +zwd=Zimbabwe-dollar diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_tr_TR.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_tr_TR.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_tr_TR.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_tr_TR.properties 2015-01-20 02:17:19.000000000 +0000 @@ -36,4 +36,4 @@ # Taligent is a registered trademark of Taligent, Inc. TRL=TL -TRY=YTL +TRY=TL diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_uk_UA.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_uk_UA.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_uk_UA.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_uk_UA.properties 2015-01-20 02:17:19.000000000 +0000 @@ -35,4 +35,4 @@ # This notice and attribution to Taligent may not be removed. # Taligent is a registered trademark of Taligent, Inc. -UAH=\u0433\u0440\u0432. +UAH=\u0433\u0440\u043d. diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_zh_CN.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_zh_CN.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_zh_CN.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_zh_CN.properties 2015-01-20 02:17:19.000000000 +0000 @@ -1,45 +1,68 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. # # # COPYRIGHT AND PERMISSION NOTICE # -# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved. # Distributed under the Terms of Use in http://www.unicode.org/copyright.html. # -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of the Unicode data files and any associated documentation (the "Data -# Files") or Unicode software and any associated documentation (the -# "Software") to deal in the Data Files or Software without restriction, -# including without limitation the rights to use, copy, modify, merge, -# publish, distribute, and/or sell copies of the Data Files or Software, and -# to permit persons to whom the Data Files or Software are furnished to do -# so, provided that (a) the above copyright notice(s) and this permission -# notice appear with all copies of the Data Files or Software, (b) both the -# above copyright notice(s) and this permission notice appear in associated -# documentation, and (c) there is clear notice in each modified Data File or -# in the Software as well as in the documentation associated with the Data -# File(s) or Software that the data or software has been modified. -# -# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS -# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR -# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THE DATA FILES OR SOFTWARE. -# -# Except as contained in this notice, the name of a copyright holder shall not -# be used in advertising or otherwise to promote the sale, use or other -# dealings in these Data Files or Software without prior written -# authorization of the copyright holder. +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of the Unicode data files and any associated documentation (the +# "Data Files") or Unicode software and any associated documentation +# (the "Software") to deal in the Data Files or Software without +# restriction, including without limitation the rights to use, copy, +# modify, merge, publish, distribute, and/or sell copies of the Data +# Files or Software, and to permit persons to whom the Data Files or +# Software are furnished to do so, provided that (a) the above copyright +# notice(s) and this permission notice appear with all copies of the +# Data Files or Software, (b) both the above copyright notice(s) and +# this permission notice appear in associated documentation, and (c) +# there is clear notice in each modified Data File or in the Software as +# well as in the documentation associated with the Data File(s) or +# Software that the data or software has been modified. # - -# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR +# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR +# SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in these Data Files or Software without prior +# written authorization of the copyright holder. +# +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# CNY=\uffe5 cny=\u4eba\u6c11\u5e01 adp=\u5b89\u9053\u5c14\u6bd4\u585e\u5854 @@ -48,13 +71,14 @@ afn=\u963f\u5bcc\u6c57\u5c3c all=\u963f\u5c14\u5df4\u5c3c\u4e9a\u5217\u514b amd=\u4e9a\u7f8e\u5c3c\u4e9a\u5fb7\u62c9\u59c6 -ang=\u53e4\u82f1\u6587 +ang=\u8377\u5170\u5b89\u66ff\u5170\u76fe aoa=\u5b89\u54e5\u62c9\u5bbd\u624e ars=\u963f\u6839\u5ef7\u6bd4\u7d22 ats=\u5965\u5730\u5229\u5148\u4ee4 aud=\u6fb3\u5927\u5229\u4e9a\u5143 awg=\u963f\u9c81\u5df4\u57fa\u5c14\u5fb7\u5143 -azm=\u963f\u585e\u62dc\u7586\u9a6c\u7eb3\u7279 +azm=\u963f\u585e\u62dc\u7586\u9a6c\u7eb3\u7279 (1993-2006) +azn=\u963f\u585e\u62dc\u7586\u9a6c\u7eb3\u7279 bam=\u6ce2\u58eb\u5c3c\u4e9a-\u8d6b\u585e\u54e5\u7ef4\u7eb3\u5151\u6362\u5238 bbd=\u5df4\u5df4\u591a\u65af\u5143 bdt=\u5b5f\u52a0\u62c9\u5854\u5361 @@ -81,7 +105,8 @@ clp=\u667a\u5229\u6bd4\u7d22 cop=\u54e5\u4f26\u6bd4\u4e9a\u6bd4\u7d22 crc=\u54e5\u65af\u8fbe\u9ece\u52a0\u79d1\u6717 -csd=\u585e\u5c14\u7ef4\u4e9a\u7b2c\u7eb3\u5c14 +csd=\u65e7\u585e\u5c14\u7ef4\u4e9a\u7b2c\u7eb3\u5c14 +cuc=\u53e4\u5df4\u53ef\u5151\u6362\u6bd4\u7d22 cup=\u53e4\u5df4\u6bd4\u7d22 cve=\u4f5b\u5f97\u89d2\u57c3\u65af\u5e93\u591a cyp=\u585e\u6d66\u8def\u65af\u9551 @@ -104,6 +129,7 @@ gbp=\u82f1\u9551 gel=\u4e54\u6cbb\u4e9a\u62c9\u745e ghc=\u52a0\u7eb3\u585e\u7b2c +ghs=\u52a0\u7eb3\u585e\u5730 gip=\u76f4\u5e03\u7f57\u9640\u9551 gmd=\u5188\u6bd4\u4e9a\u8fbe\u62c9\u897f gnf=\u51e0\u5185\u4e9a\u6cd5\u90ce @@ -161,7 +187,8 @@ mxn=\u58a8\u897f\u54e5\u6bd4\u7d22 mxv=\u58a8\u897f\u54e5 Unidad de Inversion (UDI)\uff08\u8d44\u91d1\uff09 myr=\u9a6c\u6765\u897f\u4e9a\u6797\u5409\u7279 -mzm=\u83ab\u6851\u6bd4\u514b\u6885\u8482\u5361\u5c14 +mzm=\u65e7\u83ab\u6851\u6bd4\u514b\u7f8e\u63d0\u5361 +mzn=\u83ab\u6851\u6bd4\u514b\u7f8e\u63d0\u5361 nad=\u7eb3\u7c73\u6bd4\u4e9a\u5143 ngn=\u5c3c\u65e5\u5229\u4e9a\u5948\u62c9 nio=\u5c3c\u52a0\u62c9\u74dc\u91d1\u79d1\u591a\u5df4 @@ -180,6 +207,8 @@ pyg=\u5df4\u62c9\u572d\u74dc\u62c9\u5c3c qar=\u5361\u5854\u5c14\u91cc\u4e9a\u5c14 rol=\u65e7\u7f57\u9a6c\u5c3c\u4e9a\u5217\u4f0a +ron=\u7f57\u9a6c\u5c3c\u4e9a\u5217\u4f0a +rsd=\u585e\u5c14\u7ef4\u4e9a\u7b2c\u7eb3\u5c14 rub=\u4fc4\u56fd\u5362\u5e03 rur=\u4fc4\u56fd\u5362\u5e03 (1991-1998) rwf=\u5362\u65fa\u8fbe\u6cd5\u90ce @@ -189,7 +218,7 @@ sdd=\u82cf\u4e39\u7b2c\u7eb3\u5c14 sek=\u745e\u5178\u514b\u6717 sgd=\u65b0\u52a0\u5761\u5143 -shp=\u5723\u8d6b\u52d2\u62ff\u9551 +shp=\u5723\u8d6b\u52d2\u62ff\u7fa4\u5c9b\u78c5 sit=\u65af\u6d1b\u6587\u5c3c\u4e9a\u6258\u62c9\u5c14 skk=\u65af\u6d1b\u4f10\u514b\u514b\u6717 sll=\u585e\u62c9\u5229\u6602\u5229\u6602 @@ -203,13 +232,14 @@ thb=\u6cf0\u94e2 tjs=\u5854\u5409\u514b\u65af\u5766\u7d22\u83ab\u5c3c tmm=\u571f\u5e93\u66fc\u65af\u5766\u9a6c\u7eb3\u7279 +tmt=\u571f\u5e93\u66fc\u65af\u5766\u65b0\u9a6c\u7eb3\u7279 tnd=\u7a81\u5c3c\u65af\u7b2c\u7eb3\u5c14 top=\u6c64\u52a0\u6f58\u52a0 tpe=\u5e1d\u6c76\u57c3\u65af\u5e93\u591a trl=\u571f\u8033\u5176\u91cc\u62c9 try=\u65b0\u571f\u8033\u5176\u91cc\u62c9 ttd=\u7279\u7acb\u5c3c\u8fbe\u548c\u591a\u5df4\u54e5\u5143 -twd=\u65b0\u53f0\u5e01\u5143 +twd=\u65b0\u53f0\u5e01 tzs=\u5766\u6851\u5c3c\u4e9a\u5148\u4ee4 uah=\u4e4c\u514b\u5170\u683c\u91cc\u592b\u5c3c\u4e9a ugx=\u4e4c\u5e72\u8fbe\u5148\u4ee4 @@ -219,6 +249,7 @@ uyu=\u4e4c\u62c9\u572d\u6bd4\u7d22 uzs=\u4e4c\u5179\u522b\u514b\u65af\u82cf\u59c6 veb=\u59d4\u5185\u745e\u62c9\u535a\u5229\u74e6 +vef=\u59d4\u5185\u745e\u62c9\u5f3a\u52bf\u73bb\u5229\u74e6 vnd=\u8d8a\u5357\u76fe vuv=\u74e6\u52aa\u963f\u56fe\u74e6\u56fe wst=\u897f\u8428\u6469\u4e9a\u5854\u62c9 @@ -238,9 +269,10 @@ xpf=\u592a\u5e73\u6d0b\u6cd5\u90ce xpt=\u94c2 xts=\u4e3a\u6d4b\u8bd5\u4fdd\u7559\u7684\u4ee3\u7801 -xxx=\u6ca1\u6709\u8d27\u5e01\u7684\u4ea4\u6613 +xxx=\u8d27\u5e01\u672a\u77e5\u6216\u65e0\u6548 yer=\u4e5f\u95e8\u91cc\u4e9a\u5c14 yum=\u5357\u65af\u62c9\u592b\u504c\u5a01\u7b2c\u7eb3\u5c14 zar=\u5357\u975e\u5170\u7279 zmk=\u8d5e\u6bd4\u4e9a\u514b\u74e6\u67e5 zwd=\u6d25\u5df4\u5e03\u97e6\u5143 +zwl=\u6d25\u5df4\u5e03\u97e6\u5143 (2009) diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_zh_TW.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_zh_TW.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/CurrencyNames_zh_TW.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/CurrencyNames_zh_TW.properties 2015-01-20 02:17:19.000000000 +0000 @@ -1,60 +1,84 @@ # -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. # # # COPYRIGHT AND PERMISSION NOTICE # -# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved. +# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved. # Distributed under the Terms of Use in http://www.unicode.org/copyright.html. # -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of the Unicode data files and any associated documentation (the "Data -# Files") or Unicode software and any associated documentation (the -# "Software") to deal in the Data Files or Software without restriction, -# including without limitation the rights to use, copy, modify, merge, -# publish, distribute, and/or sell copies of the Data Files or Software, and -# to permit persons to whom the Data Files or Software are furnished to do -# so, provided that (a) the above copyright notice(s) and this permission -# notice appear with all copies of the Data Files or Software, (b) both the -# above copyright notice(s) and this permission notice appear in associated -# documentation, and (c) there is clear notice in each modified Data File or -# in the Software as well as in the documentation associated with the Data -# File(s) or Software that the data or software has been modified. -# -# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS -# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR -# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THE DATA FILES OR SOFTWARE. -# -# Except as contained in this notice, the name of a copyright holder shall not -# be used in advertising or otherwise to promote the sale, use or other -# dealings in these Data Files or Software without prior written -# authorization of the copyright holder. +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of the Unicode data files and any associated documentation (the +# "Data Files") or Unicode software and any associated documentation +# (the "Software") to deal in the Data Files or Software without +# restriction, including without limitation the rights to use, copy, +# modify, merge, publish, distribute, and/or sell copies of the Data +# Files or Software, and to permit persons to whom the Data Files or +# Software are furnished to do so, provided that (a) the above copyright +# notice(s) and this permission notice appear with all copies of the +# Data Files or Software, (b) both the above copyright notice(s) and +# this permission notice appear in associated documentation, and (c) +# there is clear notice in each modified Data File or in the Software as +# well as in the documentation associated with the Data File(s) or +# Software that the data or software has been modified. # - -# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR +# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR +# SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in these Data Files or Software without prior +# written authorization of the copyright holder. +# +# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! +# TWD=NT$ twd=\u65b0\u81fa\u5e63 adp=\u5b89\u9053\u723e\u966a\u58eb\u7279 aed=\u963f\u62c9\u4f2f\u806f\u5408\u5927\u516c\u570b\u8fea\u723e\u6c57 -afa=\u975e\u9583\u65cf\u53ca\u975e\u4e9e\u8a9e\u8a00 +afa=\u963f\u5bcc\u6c57\u5c3c (1927-2002) afn=\u963f\u5bcc\u6c57\u5c3c all=\u963f\u723e\u5df4\u5c3c\u4e9e\u5217\u514b amd=\u4e9e\u7f8e\u5c3c\u4e9e\u5fb7\u62c9\u59c6 -ang=\u8377\u862d \u5b89\u68af\u862d \u76fe +ang=\u53e4\u82f1\u6587 aoa=\u5b89\u54e5\u62c9\u5bec\u624e ars=\u963f\u6839\u5ef7\u62ab\u7d22 ats=\u5967\u5730\u5229\u5148\u4ee4 aud=\u6fb3\u5e63 awg=\u963f\u9b6f\u5df4\u76fe -azm=\u963f\u585e\u62dc\u5f4a\u99ac\u7279\u7d0d +azm=\u4e9e\u585e\u62dc\u7136\u99ac\u7d0d\u7279 (1993-2006) +azn=\u4e9e\u585e\u62dc\u7136\u99ac\u7d0d\u7279 bam=\u6ce2\u58eb\u5c3c\u4e9e-\u9ed1\u585e\u54e5\u7dad\u90a3\u53ef\u8f49\u63db\u99ac\u514b bbd=\u5df4\u8c9d\u591a\u5143 bdt=\u5b5f\u52a0\u62c9\u5854\u5361 @@ -66,14 +90,14 @@ bmd=\u767e\u6155\u9054\u5e63 bnd=\u6c76\u840a\u5143 bob=\u73bb\u5229\u7dad\u4e9e\u8ca8\u5e63\u55ae\u4f4d -bov=\u73bb\u5229\u7dad\u4e9e \u5e55\u591a +bov=\u73bb\u5229\u7dad\u4e9e\u5e55\u591a brl=\u5df4\u897f\u91cc\u62c9 bsd=\u5df4\u54c8\u99ac\u5143 btn=\u4e0d\u4e39\u52aa\u624e\u59c6 -bwp=\u6ce2\u672d\u90a3 - \u666e\u62c9 +bwp=\u6ce2\u672d\u90a3\u666e\u62c9 byb=\u767d\u4fc4\u7f85\u65af\u65b0\u76e7\u5e03 (1994-1999) byr=\u767d\u4fc4\u7f85\u65af\u76e7\u5e03 -bzd=\u4f2f\u5229\u8332\u5143 +bzd=\u8c9d\u91cc\u65af\u5143 cad=\u52a0\u5e63 cdf=\u525b\u679c\u6cd5\u90ce chf=\u745e\u58eb\u6cd5\u90ce @@ -82,9 +106,11 @@ cny=\u4eba\u6c11\u5e63 cop=\u54e5\u502b\u6bd4\u4e9e\u62ab\u7d22 crc=\u54e5\u65af\u5927\u9ece\u52a0\u79d1\u90ce +csd=\u65e7\u585e\u5c14\u7ef4\u4e9a\u7b2c\u7eb3\u5c14 +cuc=\u53e4\u5df4\u53ef\u8f49\u63db\u62ab\u7d22 cup=\u53e4\u5df4\u62ab\u7d22 cve=\u7dad\u5fb7\u89d2\u57c3\u65af\u5eab\u591a -cyp=\u8cfd\u6d66\u8def\u65af\u938a +cyp=\u8cfd\u666e\u52d2\u65af\u938a czk=\u6377\u514b\u514b\u6717 dem=\u5fb7\u570b\u99ac\u514b djf=\u5409\u5e03\u5730\u6cd5\u90ce @@ -103,23 +129,24 @@ frf=\u6cd5\u570b\u6cd5\u90ce gbp=\u82f1\u938a gel=\u55ac\u6cbb\u62c9\u91cc -ghc=\u8fe6\u7d0d\u4ed9\u8515 +ghc=\u8fe6\u7d0d\u4ed9\u8515 (1979-2007) +ghs=\u8fe6\u7d0d\u4ed9\u8515 gip=\u76f4\u5e03\u7f85\u9640\u938a gmd=\u7518\u6bd4\u4e9e\u9054\u62c9\u897f gnf=\u5e7e\u5167\u4e9e\u6cd5\u90ce grd=\u5e0c\u81d8\u5fb7\u62c9\u514b\u99ac gtq=\u74dc\u5730\u99ac\u62c9\u683c\u67e5\u723e -gwp=\u5e7e\u5167\u4e9e\u62ab\u7d22\u62ab\u7d22 +gwp=\u5e7e\u5167\u4e9e\u6bd4\u7d22\u62ab\u7d22 gyd=\u572d\u4e9e\u90a3\u5143 hkd=\u6e2f\u5143 hnl=\u6d2a\u90fd\u62c9\u65af\u502b\u76ae\u62c9 hrk=\u514b\u7f85\u5730\u4e9e\u5eab\u7d0d htg=\u6d77\u5730\u53e4\u5fb7 -huf=\u5308\u7259\u5229 - \u798f\u6797 -idr=\u5370\u5c3c - \u76e7\u5e03 +huf=\u5308\u7259\u5229\u798f\u6797 +idr=\u5370\u5c3c\u76fe iep=\u611b\u723e\u862d\u938a ils=\u4ee5\u8272\u5217\u65b0\u8b1d\u514b\u723e -inr=\u5370\u5ea6\u76e7\u5e03 +inr=\u5370\u5ea6\u76e7\u6bd4 iqd=\u4f0a\u62c9\u514b\u7b2c\u7d0d\u723e irr=\u4f0a\u6717\u91cc\u4e9e\u723e isk=\u51b0\u5cf6\u514b\u6717 @@ -131,12 +158,12 @@ kgs=\u5409\u723e\u5409\u65af\u7d22\u99ac khr=\u67ec\u57d4\u5be8\u745e\u723e kmf=\u79d1\u6469\u7f85\u6cd5\u90ce -kpw=\u5317\u671d\u9bae\u5e63 -krw=\u97d3\u570b\u571c +kpw=\u5317\u97d3\u571c +krw=\u97d3\u571c kwd=\u79d1\u5a01\u7279\u7b2c\u7d0d\u723e kyd=\u958b\u66fc\u7fa4\u5cf6\u7f8e\u5143 kzt=\u5361\u624e\u514b\u65af\u5766\u5766\u5409 -lak=\u8001\u64be \u958b\u666e +lak=\u8001\u631d\u57fa\u666e lbp=\u9ece\u5df4\u5ae9\u938a lkr=\u65af\u91cc\u862d\u5361\u76e7\u5e03 lrd=\u8cf4\u6bd4\u745e\u4e9e\u5143 @@ -145,7 +172,7 @@ luf=\u76e7\u68ee\u5821\u6cd5\u90ce lvl=\u62c9\u812b\u7dad\u4e9e\u62c9\u7279\u9280\u5e63 lyd=\u5229\u6bd4\u4e9e\u7b2c\u7d0d\u723e -mad=\u99ac\u90fd\u62c9\u6587 +mad=\u6469\u6d1b\u54e5\u8fea\u62c9\u59c6 mdl=\u6469\u675c\u96f2\u5217\u4f0a mga=\u99ac\u9054\u52a0\u65af\u52a0\u827e\u745e\u723e mgf=\u99ac\u9054\u52a0\u65af\u52a0\u6cd5\u90ce @@ -158,13 +185,14 @@ mur=\u6a21\u91cc\u897f\u65af\u76e7\u5e03 mvr=\u99ac\u723e\u5730\u592b\u6d77\u5cf6\u76e7\u975e\u4e9e mwk=\u99ac\u62c9\u7dad\u514b\u74e6\u67e5 -mxn=\u58a8\u897f\u54e5 - \u62ab\u7d22 -mxv=\u58a8\u897f\u54e5\u6cd5\u5f8b\u53cd\u8f49(UDI) -myr=\u99ac\u4f86\u897f\u4e9e - \u6797\u5409\u7279 +mxn=\u58a8\u897f\u54e5\u62ab\u7d22 +mxv=\u58a8\u897f\u54e5 Unidad de Inversion (UDI)\uff08\u8d44\u91d1\uff09 +myr=\u99ac\u4f86\u897f\u4e9e\u4ee4\u5409 mzm=\u83ab\u4e09\u6bd4\u514b\u6885\u8482\u5361\u723e +mzn=\u83ab\u4e09\u6bd4\u514b\u7f8e\u63d0\u5361 nad=\u7d0d\u7c73\u6bd4\u4e9e\u5143 ngn=\u5948\u53ca\u5229\u4e9e\u5948\u62c9 -nio=\u5c3c\u52a0\u62c9\u74dc \u91d1\u54e5\u591a\u83ef +nio=\u5c3c\u52a0\u62c9\u74dc\u91d1\u79d1\u591a\u5df4 nlg=\u8377\u862d\u76fe nok=\u632a\u5a01\u514b\u7f85\u7d0d npr=\u5c3c\u6cca\u723e\u76e7\u5e03 @@ -179,61 +207,73 @@ pte=\u8461\u8404\u7259\u57c3\u65af\u5eab\u591a pyg=\u5df4\u62c9\u572d\u74dc\u62c9\u5c3c qar=\u5361\u9054\u723e\u91cc\u4e9e\u723e -rol=\u7f85\u99ac\u5c3c\u4e9e\u5217\u4f0a +rol=\u65e7\u7f57\u9a6c\u5c3c\u4e9a\u5217\u4f0a +ron=\u7f85\u99ac\u5c3c\u4e9e\u5217\u4f0a +rsd=\u585e\u723e\u7dad\u4e9e\u6234\u7d0d rub=\u4fc4\u7f85\u65af\u76e7\u5e03 rur=\u4fc4\u7f85\u65af\u76e7\u5e03 (1991-1998) rwf=\u76e7\u5b89\u9054\u6cd5\u90ce sar=\u6c99\u70cf\u5730\u91cc\u96c5 sbd=\u7d22\u7f85\u9580\u7fa4\u5cf6\u5143 -scr=\u585e\u820c\u723e\u7fa4\u5cf6\u76e7\u5e03 +scr=\u585e\u5e2d\u723e\u76e7\u6bd4 sdd=\u8607\u4e39\u7b2c\u7d0d\u723e +sdg=\u8607\u4e39\u938a sek=\u745e\u5178\u514b\u7f85\u7d0d sgd=\u65b0\u52a0\u5761\u5e63 -shp=\u8056\u8d6b\u52d2\u62ff \u938a +shp=\u5723\u8d6b\u52d2\u62ff\u7fa4\u5c9b\u78c5 sit=\u65af\u6d1b\u7dad\u5c3c\u4e9e\u6258\u52d2 skk=\u65af\u6d1b\u4f10\u514b\u514b\u6717 sll=\u7345\u5b50\u5c71\u5229\u6602 sos=\u7d22\u99ac\u5229\u4e9e\u5148\u4ee4 -srg=\u8607\u91cc\u5357\u76fe +srd=\u82cf\u91cc\u5357\u5143 +srg=\u8607\u5229\u5357\u57fa\u723e std=\u8056\u591a\u7f8e\u5cf6\u548c\u666e\u6797\u897f\u6bd4\u5cf6\u591a\u5e03\u62c9 -svc=\u611b\u723e \u85a9\u723e\u74e6\u591a\u79d1\u90ce +svc=\u8428\u5c14\u74e6\u591a\u79d1\u6717 syp=\u6558\u5229\u4e9e\u938a -szl=\u65af\u5a01\u58eb\u862d \u91cc\u90ce +szl=\u65af\u5a01\u58eb\u5170\u91cc\u5170\u5409\u5c3c thb=\u6cf0\u9296 -tjs=\u5854\u5409\u514b\u65af\u5766 \u7d22\u83ab\u5c3c +tjs=\u5854\u5409\u514b\u65af\u5766\u7d22\u83ab\u5c3c tmm=\u571f\u5eab\u66fc\u99ac\u7d0d\u7279 +tmt=\u571f\u5eab\u66fc\u65b0\u99ac\u7d0d\u7279 tnd=\u7a81\u5c3c\u897f\u4e9e\u7b2c\u7d0d\u723e top=\u6771\u52a0\u6f58\u52a0 -tpe=\u5e1d\u6c76 \u57c3\u65af\u5eab\u591a +tpe=\u5e1d\u6c76\u57c3\u65af\u5e93\u591a trl=\u571f\u8033\u5176\u91cc\u62c9 try=\u65b0\u571f\u8033\u5176\u91cc\u62c9 -ttd=\u5343\u91cc\u9054\u53ca\u6258\u5df4\u54e5r -tzs=\u5766\u6851\u5c3c\u4e9e \u5148\u4ee4 +ttd=\u7279\u7acb\u5c3c\u8fbe\u548c\u591a\u5df4\u54e5\u5143 +tzs=\u5766\u6851\u5c3c\u4e9a\u5148\u4ee4 uah=\u70cf\u514b\u862d\u683c\u91cc\u592b\u90a3 ugx=\u70cf\u5e72\u9054\u5148\u4ee4 usd=\u7f8e\u5143 usn=\u7f8e\u5143 (\u7b2c\u4e8c\u5929) uss=\u7f8e\u5143 (\u540c\u4e00\u5929) uyu=\u70cf\u62c9\u572d\u62ab\u7d22 -uzs=\u70cf\u8332\u5225\u514b\u65af\u5766 \u85a9\u6728 -veb=\u59d4\u5167\u745e\u62c9\u535a\u5229\u74e6 +uzs=\u70cf\u8332\u5225\u514b\u7d22\u59c6 +veb=\u59d4\u5167\u745e\u62c9\u73bb\u5229\u74e6 +vef=\u59d4\u5167\u745e\u62c9\u5f37\u52e2\u73bb\u5229\u74e6 vnd=\u8d8a\u5357\u76fe vuv=\u842c\u90a3\u675c\u842c\u675c wst=\u897f\u85a9\u6469\u4e9e\u5854\u62c9 -xaf=\u897f\u975e \u6cd5\u90ce BEAC +xaf=\u897f\u975e\u6cd5\u90ce BEAC +xag=XAG xau=\u9ec3\u91d1 xba=\u6b50\u6d32\u7d9c\u5408\u55ae\u4f4d xbb=\u6b50\u6d32\u8ca8\u5e63\u55ae\u4f4d XBB -xbc=\u6b50\u6d32\u6703\u8a08\u55ae\u4f4d(XBC) -xbd=\u6b50\u6d32\u6703\u8a08\u55ae\u4f4d(XBD) +xbc=\u6b50\u6d32\u6703\u8a08\u55ae\u4f4d (XBC) +xbd=\u6b50\u6d32\u6703\u8a08\u55ae\u4f4d (XBD) xcd=\u683c\u745e\u90a3\u9054\u5143 xdr=\u7279\u6b8a\u63d0\u6b3e\u6b0a xfo=\u6cd5\u570b\u91d1\u6cd5\u90ce xfu=\u6cd5\u570b UIC \u6cd5\u90ce -xof=\u897f\u975e \u6cd5\u90ce BCEAO +xof=\u897f\u975e\u6cd5\u90ce BCEAO +xpd=\u94af xpf=CFP \u6cd5\u90ce -yer=\u4e5f\u9580\u91cc\u4e9e\u723e +xpt=\u94c2 +xts=XTS +xxx=XXX +yer=\u8449\u9580\u91cc\u96c5 yum=\u5357\u65af\u62c9\u592b\u632a\u5a01\u4e9e\u7b2c\u7d0d\u723e zar=\u5357\u975e\u862d\u7279 zmk=\u5c1a\u6bd4\u4e9e\u514b\u74e6\u67e5 zwd=\u8f9b\u5df4\u5a01\u5143 +zwl=\u8f9b\u5df4\u5a01\u5143 (2009) diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/LocaleNames_es.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/LocaleNames_es.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/LocaleNames_es.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/LocaleNames_es.properties 2015-01-20 02:17:19.000000000 +0000 @@ -38,7 +38,7 @@ # language names # key is ISO 639 language code -aa=afarense +aa=afar ab=abjasio ae=av\u00e9stico af=afrikaans @@ -47,16 +47,16 @@ an=aragon\u00e9s ar=\u00e1rabe as=asam\u00e9s -av=avaro +av=avar ay=aimara -az=azerbaiyano -ba=bashkiro +az=azer\u00ed +ba=bashkir be=bielorruso bg=b\u00falgaro -bh=bihar\u00ed +bh=bihari bi=bislama bm=bambara -bn=bengal\u00e9s +bn=bengal\u00ed bo=tibetano br=bret\u00f3n bs=bosnio @@ -66,37 +66,37 @@ co=corso cr=cree cs=checo -cu=glagol\u00edtico +cu=eslavo eclesi\u00e1stico cv=chuvash cy=gal\u00e9s da=dan\u00e9s de=alem\u00e1n dv=divehi -dz=butan\u00e9s +dz=dzongkha ee=ewe el=griego en=ingl\u00e9s eo=esperanto es=espa\u00f1ol et=estonio -eu=vascuence -fa=farsi -ff=fulb\u00e9 +eu=vasco +fa=persa +ff=fula fi=fin\u00e9s -fj=fijiano -fo=faro\u00e9s +fj=fidjiano +fo=fero\u00e9s fr=franc\u00e9s -fy=frisio +fy=fris\u00f3n ga=irland\u00e9s gd=ga\u00e9lico escoc\u00e9s gl=gallego gn=guaran\u00ed -gu=gujarat\u00ed -gv=manx +gu=gujarati +gv=ga\u00e9lico man\u00e9s ha=hausa he=hebreo -hi=hind\u00fa -ho=hiri Motu +hi=hindi +ho=hiri motu hr=croata ht=haitiano hu=h\u00fangaro @@ -104,10 +104,10 @@ hz=herero ia=interlingua id=indonesio -ie=interlingua -ig=ibo -ii=yi de sichuan -ik=inupiak +ie=interlingue +ig=igbo +ii=sichuan yi +ik=inupiaq in=indonesio io=ido is=island\u00e9s @@ -118,20 +118,20 @@ ji=y\u00eddish jv=javan\u00e9s ka=georgiano -kg=kikongo -ki=gikuyu -kj=kwanyama -kk=kazajio +kg=kongo +ki=kikuyu +kj=kuanyama +kk=kazajo kl=groenland\u00e9s -km=camboyano -kn=kanada +km=jemer +kn=canar\u00e9s ko=coreano kr=kanuri -ks=cachemir\u00ed -ku=curdo +ks=cachemiro +ku=kurdo kv=komi kw=c\u00f3rnico -ky=kirgu\u00eds +ky=kirghiz la=lat\u00edn lb=luxemburgu\u00e9s lg=ganda @@ -139,7 +139,7 @@ ln=lingala lo=laosiano lt=lituano -lu=tshiluba +lu=luba-katanga lv=let\u00f3n mg=malgache mh=marshal\u00e9s @@ -148,82 +148,82 @@ ml=malayalam mn=mongol mo=moldavo -mr=m\u00e1rata +mr=marathi ms=malayo mt=malt\u00e9s my=birmano na=nauruano -nb=noruego (bokm\u00e5l) -nd=ndebele (norte) +nb=bokmal noruego +nd=ndebele septentrional ne=nepal\u00ed ng=ndonga nl=neerland\u00e9s -nn=noruego (nynorsk) +nn=nynorsk noruego no=noruego -nr=ndebele (sur) +nr=ndebele meridional nv=navajo ny=nyanja oc=occitano oj=ojibwa om=oromo or=oriya -os=osetio +os=os\u00e9tico pa=punjab\u00ed pi=pali pl=polaco ps=pashto pt=portugu\u00e9s qu=quechua -rm=retorromano -rn=rund\u00ed +rm=retorrom\u00e1nico +rn=kiroundi ro=rumano ru=ruso -rw=ruand\u00e9s +rw=kinyarwanda sa=s\u00e1nscrito sc=sardo -sd=sindino -se=sami del norte +sd=sindhi +se=sami septentrional sg=sango si=cingal\u00e9s sk=eslovaco -sl=eslovenio +sl=esloveno sm=samoano -sn=son\u00e9s +sn=shona so=somal\u00ed sq=alban\u00e9s sr=serbio -ss=suaziland\u00e9s -st=sesot\u00e9s -su=sudan\u00e9s +ss=siswati +st=sesotho +su=sundan\u00e9s sv=sueco -sw=suajili +sw=swahili ta=tamil te=telugu -tg=tajik +tg=tayiko th=tailand\u00e9s -ti=tigri\u00f1es +ti=tigri\u00f1a tk=turcomano tl=tagalo -tn=sechuan\u00e9s -to=tongu\u00e9s +tn=setchwana +to=tongano tr=turco ts=tsonga tt=t\u00e1rtaro -tw=tui -ty=taitiano -ug=uighur -uk=ucranio +tw=twi +ty=tahitiano +ug=uigur +uk=ucraniano ur=urdu -uz=uzbeco +uz=uzbeko ve=venda vi=vietnamita -vo=volapuk +vo=volap\u00fck wa=val\u00f3n wo=uolof xh=xhosa yi=y\u00eddish yo=yoruba -za=chuang +za=zhuang zh=chino zu=zul\u00fa diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/LocaleNames_nl.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/LocaleNames_nl.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/LocaleNames_nl.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/LocaleNames_nl.properties 2015-01-20 02:17:20.000000000 +0000 @@ -34,14 +34,436 @@ # This notice and attribution to Taligent may not be removed. # Taligent is a registered trademark of Taligent, Inc. - # language names # key is ISO 639 language code +aa=Afar +ab=Abchazisch +ae=Avestisch +af=Afrikaans +ak=Akan +am=Amhaars +an=Aragonees +ar=Arabisch +as=Assamees +av=Avarisch +ay=Aymara +az=Azerbeidzjaans +ba=Basjkiers +be=Wit-Russisch +bg=Bulgaars +bh=Bihari +bi=Bislama +bm=Bambara +bn=Bengalees +bo=Tibetaans +br=Bretons +bs=Bosnisch +ca=Catalaans +ce=Chechen +ch=Chamorro +co=Corsicaans +cr=Cree +cs=Tsjechisch +cu=Kerkslavisch +cv=Tsjoevasjisch +cy=Welsh +da=Deens +de=Duits +dv=Divehi +dz=Dzongkha +ee=Ewe +el=Grieks +en=Engels +eo=Esperanto +es=Spaans +et=Estlands +eu=Baskisch +fa=Perzisch +ff=Fulah +fi=Fins +fj=Fijisch +fo=Faer\u00f6ers +fr=Frans +fy=Fries +ga=Iers +gd=Schots Gaelic +gl=Galicisch +gn=Guarani +gu=Gujarati +gv=Manx +ha=Hausa +he=Hebreeuws +hi=Hindi +ho=Hiri Motu +hr=Kroatisch +ht=Ha\u00eftiaans +hu=Hongaars +hy=Armeens +hz=Herero +ia=Interlingua +id=Indonesisch +ie=Interlingue +ig=Igbo +ii=Sichuan Yi +ik=Inupiaq +io=Ido +is=IJslands +it=Italiaans +iu=Inuktitut +ja=Japans +jv=Javaans +ka=Georgisch +kg=Kongo +ki=Kikuyu +kj=Kuanyama +kk=Kazachs +kl=Kalaallisut +km=Khmer +kn=Kannada +ko=Koreaans +kr=Kanuri +ks=Kashmiri +ku=Koerdisch +kv=Komi +kw=Cornish +ky=Kirgizisch +la=Latijn +lb=Luxemburgs +lg=Ganda +li=Limburgs +ln=Lingala +lo=Lao +lt=Litouws +lu=Luba-Katanga +lv=Letlands +mg=Malagasisch +mh=Marshallees +mi=Maori +mk=Macedonisch +ml=Malayalam +mn=Mongools +mo=Moldavisch +mr=Marathi +ms=Maleis +mt=Maltees +my=Birmees +na=Nauru +nb=Noors - Bokm\u00e5l +nd=Noord-Ndbele +ne=Nepalees +ng=Ndonga nl=Nederlands +nn=Noors - Nynorsk +no=Noors +nr=Zuid-Ndbele +nv=Navajo +ny=Nyanja +oc=Occitaans +oj=Ojibwa +om=Oromo +or=Oriya +os=Ossetisch +pa=Punjabi +pi=Pali +pl=Pools +ps=Pasjtoe +pt=Portugees +qu=Quechua +rm=Reto-Romaans +rn=Rundi +ro=Roemeens +ru=Russisch +rw=Kinyarwanda +sa=Sanskriet +sc=Sardinisch +sd=Sindhi +se=Noord-Samisch +sg=Sango +si=Singalees +sk=Slowaaks +sl=Sloveens +sm=Samoaans +sn=Shona +so=Somalisch +sq=Albanees +sr=Servisch +ss=Swati +st=Zuid-Sotho +su=Soendanees +sv=Zweeds +sw=Swahili +ta=Tamil +te=Teloegoe +tg=Tadzjieks +th=Thais +ti=Tigrinya +tk=Turkmeens +tl=Tagalog +tn=Tswana +to=Tonga +tr=Turks +ts=Tsonga +tt=Tataars +tw=Twi +ty=Tahitisch +ug=Oeigoers +uk=Oekra\u00efens +ur=Urdu +uz=Oezbeeks +ve=Venda +vi=Vietnamees +vo=Volap\u00fck +wa=Wallonisch +wo=Wolof +xh=Xhosa +yi=Jiddisch +yo=Yoruba +za=Zhuang +zh=Chinees +zu=Zulu # country names # key is ISO 3166 country code -NL=Nederland +AD=Andorra +AE=Verenigde Arabische Emiraten +AF=Afghanistan +AG=Antigua en Barbuda +AI=Anguilla +AL=Albani\u00eb +AM=Armeni\u00eb +AN=Nederlandse Antillen +AO=Angola +AQ=Antarctica +AR=Argentini\u00eb +AS=Amerikaans Samoa +AT=Oostenrijk +AU=Australi\u00eb +AW=Aruba +AX=Alandeilanden +AZ=Azerbeidzjan +BA=Bosni\u00eb en Herzegovina +BB=Barbados +BD=Bangladesh BE=Belgi\u00eb +BF=Burkina Faso +BG=Bulgarije +BH=Bahrein +BI=Burundi +BJ=Benin +BM=Bermuda +BN=Brunei +BO=Bolivia +BR=Brazili\u00eb +BS=Bahama\u2019s +BT=Bhutan +BV=Bouveteiland +BW=Botswana +BY=Wit-Rusland +BZ=Belize +CA=Canada +CC=Cocoseilanden +CD=Congo-Kinshasa +CF=Centraal-Afrikaanse Republiek +CG=Congo +CH=Zwitserland +CI=Ivoorkust +CK=Cookeilanden +CL=Chili +CM=Kameroen +CN=China +CO=Colombia +CR=Costa Rica +CS=Servi\u00eb en Montenegro +CU=Cuba +CV=Kaapverdi\u00eb +CX=Christmaseiland +CY=Cyprus +CZ=Tsjechi\u00eb +DE=Duitsland +DJ=Djibouti +DK=Denemarken +DM=Dominica +DO=Dominicaanse Republiek +DZ=Algerije +EC=Ecuador +EE=Estland +EG=Egypte +EH=Westelijke Sahara +ER=Eritrea +ES=Spanje +ET=Ethiopi\u00eb +FI=Finland +FJ=Fiji +FK=Falklandeilanden +FM=Micronesi\u00eb +FO=Faer\u00f6er +FR=Frankrijk +GA=Gabon +GB=Verenigd Koninkrijk +GD=Grenada +GE=Georgi\u00eb +GF=Frans-Guyana +GH=Ghana +GI=Gibraltar +GL=Groenland +GM=Gambia +GN=Guinee +GP=Guadeloupe +GQ=Equatoriaal-Guinea +GR=Griekenland +GS=Zuid-Georgi\u00eb en Zuidelijke Sandwicheilanden +GT=Guatemala +GU=Guam +GW=Guinee-Bissau +GY=Guyana +HK=Hongkong SAR van China +HM=Heard- en McDonaldeilanden +HN=Honduras +HR=Kroati\u00eb +HT=Ha\u00efti +HU=Hongarije +ID=Indonesi\u00eb +IE=Ierland +IL=Isra\u00ebl +IN=India +IO=Britse Gebieden in de Indische Oceaan +IQ=Irak +IR=Iran +IS=IJsland +IT=Itali\u00eb +JM=Jamaica +JO=Jordani\u00eb +JP=Japan +KE=Kenia +KG=Kirgizi\u00eb +KH=Cambodja +KI=Kiribati +KM=Comoren +KN=Saint Kitts en Nevis +KP=Noord-Korea +KR=Zuid-Korea +KW=Koeweit +KY=Caymaneilanden +KZ=Kazachstan +LA=Laos +LB=Libanon +LC=Saint Lucia +LI=Liechtenstein +LK=Sri Lanka +LR=Liberia +LS=Lesotho +LT=Litouwen +LU=Luxemburg +LV=Letland +LY=Libi\u00eb +MA=Marokko +MC=Monaco +MD=Moldavi\u00eb +ME=Montenegro +MG=Madagaskar +MH=Marshalleilanden +MK=Macedoni\u00eb +ML=Mali +MM=Myanmar +MN=Mongoli\u00eb +MO=Macao SAR van China +MP=Noordelijke Marianeneilanden +MQ=Martinique +MR=Mauritani\u00eb +MS=Montserrat +MT=Malta +MU=Mauritius +MV=Maldiven +MW=Malawi +MX=Mexico +MY=Maleisi\u00eb +MZ=Mozambique +NA=Namibi\u00eb +NC=Nieuw-Caledoni\u00eb +NE=Niger +NF=Norfolkeiland +NG=Nigeria +NI=Nicaragua +NL=Nederland +NO=Noorwegen +NP=Nepal +NR=Nauru +NU=Niue +NZ=Nieuw-Zeeland +OM=Oman +PA=Panama +PE=Peru +PF=Frans-Polynesi\u00eb +PG=Papoea-Nieuw-Guinea +PH=Filipijnen +PK=Pakistan +PL=Polen +PM=Saint Pierre en Miquelon +PN=Pitcairn +PR=Puerto Rico +PS=Palestijns Gebied +PT=Portugal +PW=Palau +PY=Paraguay +QA=Qatar +RE=R\u00e9union +RO=Roemeni\u00eb +RS=Servi\u00eb +RU=Rusland +RW=Rwanda +SA=Saoedi-Arabi\u00eb +SB=Salomonseilanden +SC=Seychellen +SD=Soedan +SE=Zweden +SG=Singapore +SH=Sint-Helena +SI=Sloveni\u00eb +SJ=Svalbard en Jan Mayen +SK=Slowakije +SL=Sierra Leone +SM=San Marino +SN=Senegal +SO=Somali\u00eb +SR=Suriname +ST=Sao Tom\u00e9 en Principe +SV=El Salvador +SY=Syri\u00eb +SZ=Swaziland +TC=Turks- en Caicoseilanden +TD=Tsjaad +TF=Franse Gebieden in de zuidelijke Indische Oceaan +TG=Togo +TH=Thailand +TJ=Tadzjikistan +TK=Tokelau +TL=Oost-Timor +TM=Turkmenistan +TN=Tunesi\u00eb +TO=Tonga +TR=Turkije +TT=Trinidad en Tobago +TV=Tuvalu +TW=Taiwan +TZ=Tanzania +UA=Oekra\u00efne +UG=Oeganda +UM=Amerikaanse kleinere afgelegen eilanden +US=Verenigde Staten +UY=Uruguay +UZ=Oezbekistan +VA=Vaticaanstad +VC=Saint Vincent en de Grenadines +VE=Venezuela +VG=Britse Maagdeneilanden +VI=Amerikaanse Maagdeneilanden +VN=Vietnam +VU=Vanuatu +WF=Wallis en Futuna +WS=Samoa +YE=Jemen +YT=Mayotte +ZA=Zuid-Afrika +ZM=Zambia diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/LocaleNames.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/LocaleNames.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/LocaleNames.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/LocaleNames.properties 2015-01-20 02:17:19.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -257,9 +257,11 @@ BH=Bahrain BI=Burundi BJ=Benin +BL=Saint Barth\u00e9lemy BM=Bermuda BN=Brunei BO=Bolivia +BQ=Bonaire, Sint Eustatius and Saba BR=Brazil BS=Bahamas BT=Bhutan @@ -283,6 +285,7 @@ CS=Serbia and Montenegro CU=Cuba CV=Cape Verde +CW=Cura\u00e7ao CX=Christmas Island CY=Cyprus CZ=Czech Republic @@ -370,6 +373,7 @@ MC=Monaco MD=Moldova ME=Montenegro +MF=Saint Martin MG=Madagascar MH=Marshall Islands MK=Macedonia @@ -436,8 +440,10 @@ SN=Senegal SO=Somalia SR=Suriname +SS=South Sudan ST=Sao Tome And Principe SV=El Salvador +SX=Sint Maarten (Dutch part) SY=Syria SZ=Swaziland TC=Turks And Caicos Islands diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/LocaleNames_sv.properties openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/LocaleNames_sv.properties --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/LocaleNames_sv.properties 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/LocaleNames_sv.properties 2015-01-20 02:17:20.000000000 +0000 @@ -469,6 +469,6 @@ WS=Samoa YE=Jemen YT=Mayotte -ZA=Sydafrika +ZA=Sydafrika ZM=Zambia ZW=Zimbabwe diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,8 +45,8 @@ protected final Object[][] getContents() { String ACT[] = new String[] {"Acre Normalzeit", "ACT", "Acre Sommerzeit", "ACST"}; - String ADELAIDE[] = new String[] {"Zentrale Normalzeit (S\u00fcdaustralien)", "CST", - "Zentrale Sommerzeit (S\u00fcdaustralien)", "CST"}; + String ADELAIDE[] = new String[] {"Zentrale Normalzeit (S\u00FCdaustralien)", "ACST", + "Zentrale Sommerzeit (S\u00FCdaustralien)", "ACDT"}; String AGT[] = new String[] {"Argentinische Zeit", "ART", "Argentinische Sommerzeit", "ARST"}; String AKST[] = new String[] {"Alaska Normalzeit", "AKST", @@ -61,10 +61,10 @@ "Atlantik Sommerzeit", "ADT"}; String BDT[] = new String[] {"Bangladesch Zeit", "BDT", "Bangladesch Sommerzeit", "BDST"}; - String BRISBANE[] = new String[] {"\u00d6stliche Normalzeit (Queensland)", "EST", - "\u00d6stliche Sommerzeit (Queensland)", "EST"}; - String BROKEN_HILL[] = new String[] {"Zentrale Normalzeit (S\u00fcdaustralien/New South Wales)", "CST", - "Zentrale Sommerzeit (S\u00fcdaustralien/New South Wales)", "CST"}; + String BRISBANE[] = new String[] {"\u00D6stliche Normalzeit (Queensland)", "AEST", + "\u00D6stliche Sommerzeit (Queensland)", "AEDT"}; + String BROKEN_HILL[] = new String[] {"Zentrale Normalzeit (S\u00FCdaustralien/New South Wales)", "ACST", + "Zentrale Sommerzeit (S\u00FCdaustralien/New South Wales)", "ACDT"}; String BRT[] = new String[] {"Brasilianische Zeit", "BRT", "Brasilianische Sommerzeit", "BRST"}; String BTT[] = new String[] {"Bhutanische Zeit", "BTT", @@ -75,7 +75,11 @@ "Mitteleurop\u00e4ische Sommerzeit", "MESZ"}; String CHAST[] = new String[] {"Chatham Normalzeit", "CHAST", "Chatham Sommerzeit", "CHADT"}; - String CIT[] = new String[] {"Zentralindonesische Zeit", "CIT", + String ChST[] = new String[] {"Chamorro Normalzeit", "ChST", + "Chamorro Sommerzeit", "ChDT"}; + String CHUT[] = new String[] {"Chuuk Zeit", "CHUT", + "Chuuk Sommerzeit", "CHUST"}; + String CIT[] = new String[] {"Zentralindonesische Zeit", "WITA", "Zentralindonesische Sommerzeit", "CIST"}; String CLT[] = new String[] {"Chilenische Zeit", "CLT", "Chilenische Sommerzeit", "CLST"}; @@ -83,10 +87,10 @@ "Zentrale Sommerzeit", "CDT"}; String CTT[] = new String[] {"Chinesische Normalzeit", "CST", "Chinesische Sommerzeit", "CDT"}; - String CUBA[] = new String[] {"Cuba Standard Time", "CST", - "Cuba Daylight Time", "CDT"}; - String DARWIN[] = new String[] {"Zentrale Normalzeit (Northern Territory)", "CST", - "Zentrale Sommerzeit (Northern Territory)", "CST"}; + String CUBA[] = new String[] {"Kubanische Normalzeit", "CST", + "Kubanische Sommerzeit", "CDT"}; + String DARWIN[] = new String[] {"Zentrale Normalzeit (Northern Territory)", "ACST", + "Zentrale Sommerzeit (Northern Territory)", "ACDT"}; String DUBLIN[] = new String[] {"Greenwich Zeit", "GMT", "Irische Sommerzeit", "IST"}; String EAT[] = new String[] {"Ostafrikanische Zeit", "EAT", @@ -99,8 +103,10 @@ "Ostgr\u00f6nl\u00e4ndische Sommerzeit", "EGST"}; String EST[] = new String[] {"\u00d6stliche Normalzeit", "EST", "\u00d6stliche Sommerzeit", "EDT"}; - String EST_NSW[] = new String[] {"\u00d6stliche Normalzeit (New South Wales)", "EST", - "\u00d6stliche Sommerzeit (New South Wales)", "EST"}; + String EST_NSW[] = new String[] {"\u00D6stliche Normalzeit (New South Wales)", "AEST", + "\u00D6stliche Sommerzeit (New South Wales)", "AEDT"}; + String FET[] = new String[] {"Kaliningrader Zeit", "FET", + "Kaliningrader Sommerzeit", "FEST"}; String GHMT[] = new String[] {"Ghanaische Normalzeit", "GMT", "Ghanaische Sommerzeit", "GHST"}; String GAMBIER[] = new String[] {"Gambier Zeit", "GAMT", @@ -127,10 +133,12 @@ "Indische Sommerzeit", "IDT"}; String JST[] = new String[] {"Japanische Normalzeit", "JST", "Japanische Sommerzeit", "JDT"}; + String KRAT[] = new String[] {"Krasnojarsker Zeit", "KRAT", + "Krasnojarsker Sommerzeit", "KRAST"}; String KST[] = new String[] {"Koreanische Normalzeit", "KST", "Koreanische Sommerzeit", "KDT"}; String LORD_HOWE[] = new String[] {"Lord Howe Normalzeit", "LHST", - "Lord Howe Sommerzeit", "LHST"}; + "Lord Howe Sommerzeit", "LHDT"}; String MHT[] = new String[] {"Marshallinseln Zeit", "MHT", "Marshallinseln Sommerzeit", "MHST"}; String MSK[] = new String[] {"Moskauer Normalzeit", "MSK", @@ -153,48 +161,48 @@ "Pitcairn Sommerzeit", "PDT"}; String PKT[] = new String[] {"Pakistanische Zeit", "PKT", "Pakistanische Sommerzeit", "PKST"}; + String PONT[] = new String[] {"Pohnpei Zeit", "PONT", + "Pohnpei Sommerzeit", "PONST"}; String PST[] = new String[] {"Pazifische Normalzeit", "PST", "Pazifische Sommerzeit", "PDT"}; - String RST[] = new String[] {"\u00d6stliche Normalzeit", "EST", - "Zentrale Sommerzeit", "CDT"}; + String SAMOA[] = new String[] {"Samoa Normalzeit", "SST", + "Samoa Sommerzeit", "SDT"}; + String IRKT[] = new String[] {"Irkutsk Zeit", "IRKT", + "Irkutsk Sommerzeit", "IRKST"}; String SAST[] = new String[] {"S\u00fcdafrikanische Normalzeit", "SAST", "S\u00fcdafrikanische Sommerzeit", "SAST"}; String SBT[] = new String[] {"Salomoninseln Zeit", "SBT", "Salomoninseln Sommerzeit", "SBST"}; String SGT[] = new String[] {"Singapur Zeit", "SGT", "Singapur Sommerzeit", "SGST"}; - String SLST[] = new String[] {"Greenwich Normalzeit", "GMT", - "Sierra Leone Sommerzeit", "SLST"}; - String TASMANIA[] = new String[] {"\u00d6stliche Normalzeit (Tasmanien)", "EST", - "\u00d6stliche Sommerzeit (Tasmanien)", "EST"}; + String TASMANIA[] = new String[] {"\u00D6stliche Normalzeit (Tasmanien)", "AEST", + "\u00D6stliche Sommerzeit (Tasmanien)", "AEDT"}; String TMT[] = new String[] {"Turkmenische Zeit", "TMT", "Turkmenische Sommerzeit", "TMST"}; - String TRUT[] = new String[] {"Truk Zeit", "TRUT", - "Truk Sommerzeit", "TRUST"}; String ULAT[]= new String[] {"Ulaanbaatar Zeit", "ULAT", "Ulaanbaatar Sommerzeit", "ULAST"}; - String WART[] = new String[] {"Argentinische Zeit", "WART", - "Argentinische Sommerzeit", "WARST"}; + String UTC[] = new String[] {"Koordinierte Universalzeit", "UTC", + "Koordinierte Universalzeit", "UTC"}; + String UZT[] = new String[] {"Usbekistan Zeit", "UZT", + "Usbekistan Sommerzeit", "UZST"}; + String VICTORIA[] = new String[] {"\u00D6stliche Normalzeit (Victoria)", "AEST", + "\u00D6stliche Sommerzeit (Victoria)", "AEDT"}; + String VLAT[] = new String[] {"Wladiwostok Zeit", "VLAT", + "Wladiwostok Sommerzeit", "VLAST"}; String WAT[] = new String[] {"Westafrikanische Zeit", "WAT", "Westafrikanische Sommerzeit", "WAST"}; String WET[] = new String[] {"Westeurop\u00e4ische Zeit", "WEZ", "Westeurop\u00e4ische Sommerzeit", "WESZ"}; - String WIT[] = new String[] {"Westindonesische Zeit", "WIT", + String WIT[] = new String[] {"Westindonesische Zeit", "WIB", "Westindonesische Sommerzeit", "WIST"}; - String WST_AUS[] = new String[] {"Westliche Normalzeit (Australien)", "WST", - "Westliche Sommerzeit (Australien)", "WST"}; - String SAMOA[] = new String[] {"Samoa Normalzeit", "SST", - "Samoa Sommerzeit", "SDT"}; - String WST_SAMOA[] = new String[] {"West Samoa Zeit", "WST", - "West Samoa Sommerzeit", "WSST"}; - String ChST[] = new String[] {"Chamorro Normalzeit", "ChST", - "Chamorro Sommerzeit", "ChDT"}; - String VICTORIA[] = new String[] {"\u00d6stliche Normalzeit (Victoria)", "EST", - "\u00d6stliche Sommerzeit (Victoria)", "EST"}; - String UTC[] = new String[] {"Koordinierte Universalzeit", "UTC", - "Koordinierte Universalzeit", "UTC"}; - String UZT[] = new String[] {"Usbekistan Zeit", "UZT", - "Usbekistan Sommerzeit", "UZST"}; + String WST_AUS[] = new String[] {"Westliche Normalzeit (Australien)", "AWST", + "Westliche Sommerzeit (Australien)", "AWDT"}; + String WST_SAMOA[] = new String[] {"West Samoa Zeit", "WSST", + "West Samoa Sommerzeit", "WSDT"}; + String XJT[] = new String[] {"Chinesische Normalzeit", "XJT", + "Chinesische Sommerzeit", "XJDT"}; + String YAKT[] = new String[] {"Jakutsk Zeit", "YAKT", + "Jakutsk Sommerzeit", "YAKST"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -214,6 +222,7 @@ {"America/Anchorage", AKST}, {"AST", AKST}, {"America/Halifax", AST}, + {"America/Sitka", AKST}, {"America/St_Johns", NST}, {"CNT", NST}, {"Europe/Paris", CET}, @@ -255,10 +264,11 @@ {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, + {"Africa/Juba", EAT}, {"Africa/Kampala", EAT}, {"Africa/Khartoum", EAT}, {"Africa/Kigali", CAT}, @@ -300,7 +310,7 @@ {"America/Argentina/Rio_Gallegos", AGT}, {"America/Argentina/Salta", AGT}, {"America/Argentina/San_Juan", AGT}, - {"America/Argentina/San_Luis", WART}, + {"America/Argentina/San_Luis", AGT}, {"America/Argentina/Tucuman", AGT}, {"America/Argentina/Ushuaia", AGT}, {"America/Aruba", AST}, @@ -309,6 +319,7 @@ {"America/Atikokan", EST}, {"America/Atka", HAST}, {"America/Bahia", BRT}, + {"America/Bahia_Banderas", CST}, {"America/Barbados", AST}, {"America/Belem", BRT}, {"America/Belize", CST}, @@ -328,6 +339,7 @@ "Franz\u00f6sisch-Guiana Sommerzeit", "GFST"}}, {"America/Cayman", EST}, {"America/Chihuahua", MST}, + {"America/Creston", MST}, {"America/Coral_Harbour", EST}, {"America/Cordoba", AGT}, {"America/Costa_Rica", CST}, @@ -339,7 +351,7 @@ {"America/Detroit", EST}, {"America/Dominica", AST}, {"America/Edmonton", MST}, - {"America/Eirunepe", AMT}, + {"America/Eirunepe", ACT}, {"America/El_Salvador", CST}, {"America/Ensenada", PST}, {"America/Fort_Wayne", EST}, @@ -348,7 +360,7 @@ {"America/Godthab", new String[] {"Westgr\u00f6nl\u00e4ndische Zeit", "WGT", "Westgr\u00f6nl\u00e4ndische Sommerzeit", "WGST"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -374,11 +386,13 @@ {"America/Kentucky/Louisville", EST}, {"America/Kentucky/Monticello", EST}, {"America/Knox_IN", CST}, + {"America/Kralendijk", AST}, {"America/La_Paz", new String[] {"Bolivianische Zeit", "BOT", "Bolivianische Sommerzeit", "BOST"}}, {"America/Lima", new String[] {"Peruanische Zeit", "PET", "Peruanische Sommerzeit", "PEST"}}, {"America/Louisville", EST}, + {"America/Lower_Princes", AST}, {"America/Maceio", BRT}, {"America/Managua", CST}, {"America/Manaus", AMT}, @@ -389,6 +403,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Pierre & Miquelon Normalzeit", "PMST", "Pierre & Miquelon Sommerzeit", "PMDT"}}, @@ -402,6 +417,7 @@ {"America/Nipigon", EST}, {"America/Nome", AKST}, {"America/Noronha", NORONHA}, + {"America/North_Dakota/Beulah", CST}, {"America/North_Dakota/Center", CST}, {"America/North_Dakota/New_Salem", CST}, {"America/Ojinaga", MST}, @@ -411,15 +427,15 @@ "Suriname Sommerzeit", "SRST"}}, {"America/Port-au-Prince", EST}, {"America/Port_of_Spain", AST}, - {"America/Porto_Acre", AMT}, + {"America/Porto_Acre", ACT}, {"America/Porto_Velho", AMT}, {"America/Puerto_Rico", AST}, {"America/Rainy_River", CST}, {"America/Rankin_Inlet", CST}, {"America/Recife", BRT}, {"America/Regina", CST}, - {"America/Resolute", RST}, - {"America/Rio_Branco", AMT}, + {"America/Resolute", CST}, + {"America/Rio_Branco", ACT}, {"America/Rosario", AGT}, {"America/Santa_Isabel", PST}, {"America/Santarem", BRT}, @@ -446,10 +462,13 @@ {"America/Winnipeg", CST}, {"America/Yakutat", AKST}, {"America/Yellowknife", MST}, + {"Antarctica/Casey", WST_AUS}, {"Antarctica/Davis", new String[] {"Davis Zeit", "DAVT", "Davis Sommerzeit", "DAVST"}}, {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville Zeit", "DDUT", "Dumont-d'Urville Sommerzeit", "DDUST"}}, + {"Antarctica/Macquarie", new String[] {"Macquarieinsel Zeit", "MIST", + "Macquarieinsel Sommerzeit", "MIDT"}}, {"Antarctica/Mawson", new String[] {"Mawson Zeit", "MAWT", "Mawson Sommerzeit", "MAWST"}}, {"Antarctica/McMurdo", NZST}, @@ -459,6 +478,8 @@ {"Antarctica/South_Pole", NZST}, {"Antarctica/Syowa", new String[] {"Syowa Zeit", "SYOT", "Syowa Sommerzeit", "SYOST"}}, + {"Antarctica/Troll", new String[] {"Koordinierte Universalzeit", "UTC", + "Mitteleurop\u00e4ische Sommerzeit", "MESZ"}}, {"Antarctica/Vostok", new String[] {"Vostok Zeit", "VOST", "Vostok Sommerzeit", "VOSST"}}, {"Arctic/Longyearbyen", CET}, @@ -485,6 +506,7 @@ {"Asia/Brunei", new String[] {"Brunei Zeit", "BNT", "Brunei Sommerzeit", "BNST"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"Choibalsan Zeit", "CHOT", "Choibalsan Sommerzeit", "CHOST"}}, {"Asia/Chongqing", CTT}, @@ -500,27 +522,28 @@ "Tadschikische Sommerzeit", "TJST"}}, {"Asia/Gaza", EET}, {"Asia/Harbin", CTT}, + {"Asia/Hebron", EET}, {"Asia/Ho_Chi_Minh", ICT}, {"Asia/Hong_Kong", HKT}, {"Asia/Hovd", new String[] {"Hovd Zeit", "HOVT", "Hovd Sommerzeit", "HOVST"}}, - {"Asia/Irkutsk", new String[] {"Irkutsk Zeit", "IRKT", - "Irkutsk Sommerzeit", "IRKST"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, - {"Asia/Jayapura", new String[] {"Ostindonesische Zeit", "EIT", + {"Asia/Jayapura", new String[] {"Ostindonesische Zeit", "WIT", "Ostindonesische Sommerzeit", "EIST"}}, {"Asia/Kabul", new String[] {"Afghanistanische Zeit", "AFT", "Afghanistanische Sommerzeit", "AFST"}}, {"Asia/Kamchatka", new String[] {"Petropawlowsk-Kamtschatkische Zeit", "PETT", "Petropawlowsk-Kamtschatkische Sommerzeit", "PETST"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, + {"Asia/Khandyga", new String[] {"Chandyga Zeit", "YAKT", + "Chandyga Sommerzeit", "YAKST"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"Krasnojarsker Zeit", "KRAT", - "Krasnojarsker Sommerzeit", "KRAST"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -533,7 +556,7 @@ "Philippinische Sommerzeit", "PHST"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"Oral Zeit", "ORAT", "Oral Sommerzeit", "ORAST"}}, @@ -554,6 +577,8 @@ {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -565,12 +590,12 @@ {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, + {"Asia/Ust-Nera", new String[] {"Ust-Nera Zeit", "VLAT", + "Ust-Nera Sommerzeit", "VLAST"}}, {"Asia/Vientiane", ICT}, - {"Asia/Vladivostok", new String[] {"Wladiwostok Zeit", "VLAT", - "Wladiwostok Sommerzeit", "VLAST"}}, - {"Asia/Yakutsk", new String[] {"Jakutsk Zeit", "YAKT", - "Jakutsk Sommerzeit", "YAKST"}}, + {"Asia/Vladivostok", VLAT}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"Jekaterinburger Zeit", "YEKT", "Jekaterinburger Sommerzeit", "YEKST"}}, {"Asia/Yerevan", ARMT}, @@ -597,8 +622,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", - "Central Western Summer Time (Australia)", "CWST"}}, + {"Australia/Eucla", new String[] {"Zentral-Westliche Normalzeit (Australien)", "ACWST", + "Zentral-Westliche Sommerzeit (Australien)", "ACWDT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -616,7 +641,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, - {"Brazil/Acre", AMT}, + {"Brazil/Acre", ACT}, {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, @@ -654,6 +679,7 @@ {"Europe/Bratislava", CET}, {"Europe/Brussels", CET}, {"Europe/Budapest", CET}, + {"Europe/Busingen", CET}, {"Europe/Chisinau", EET}, {"Europe/Copenhagen", CET}, {"Europe/Dublin", DUBLIN}, @@ -672,7 +698,7 @@ {"Europe/Madrid", CET}, {"Europe/Malta", CET}, {"Europe/Mariehamn", EET}, - {"Europe/Minsk", EET}, + {"Europe/Minsk", MSK}, {"Europe/Monaco", CET}, {"Europe/Moscow", MSK}, {"Europe/Nicosia", EET}, @@ -685,7 +711,7 @@ "Samarische Sommerzeit", "SAMST"}}, {"Europe/San_Marino", CET}, {"Europe/Sarajevo", CET}, - {"Europe/Simferopol", EET}, + {"Europe/Simferopol", MSK}, {"Europe/Skopje", CET}, {"Europe/Sofia", EET}, {"Europe/Stockholm", CET}, @@ -697,8 +723,7 @@ {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"Wolgograder Zeit", "VOLT", - "Wolgograder Sommerzeit", "VOLST"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, @@ -751,7 +776,10 @@ {"PRT", AST}, {"Pacific/Apia", WST_SAMOA}, {"Pacific/Auckland", NZST}, + {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST", + "Bougainville Daylight Time", "BST"}}, {"Pacific/Chatham", CHAST}, + {"Pacific/Chuuk", CHUT}, {"Pacific/Easter", EASTER}, {"Pacific/Efate", new String[] {"Vanuatu Zeit", "VUT", "Vanuatu Sommerzeit", "VUST"}}, @@ -790,8 +818,8 @@ {"Pacific/Palau", new String[] {"Palau Zeit", "PWT", "Palau Sommerzeit", "PWST"}}, {"Pacific/Pitcairn", PITCAIRN}, - {"Pacific/Ponape", new String[] {"Ponape Zeit", "PONT", - "Ponape Sommerzeit", "PONST"}}, + {"Pacific/Pohnpei", PONT}, + {"Pacific/Ponape", PONT}, {"Pacific/Port_Moresby", new String[] {"Papua-Neuguinea Zeit", "PGT", "Papua-Neuguinea Sommerzeit", "PGST"}}, {"Pacific/Rarotonga", new String[] {"Cook-Inseln Zeit", "CKT", @@ -804,12 +832,12 @@ "Gilbert-Inseln Sommerzeit", "GILST"}}, {"Pacific/Tongatapu", new String[] {"Tonga Zeit", "TOT", "Tonga Sommerzeit", "TOST"}}, - {"Pacific/Truk", TRUT}, + {"Pacific/Truk", CHUT}, {"Pacific/Wake", new String[] {"Wake Zeit", "WAKT", "Wake Sommerzeit", "WAKST"}}, {"Pacific/Wallis", new String[] {"Wallis u. Futuna Zeit", "WFT", "Wallis u. Futuna Sommerzeit", "WFST"}}, - {"Pacific/Yap", TRUT}, + {"Pacific/Yap", CHUT}, {"Poland", CET}, {"PRC", CTT}, {"PST8PDT", PST}, diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,8 +45,8 @@ protected final Object[][] getContents() { String ACT[] = new String[] {"Hora de Acre", "ACT", "Hora de verano de Acre", "ACST"}; - String ADELAIDE[] = new String[] {"Hora est\u00e1ndar Central (Sur de Australia)", "CST", - "Hora de verano Central (Sur de Australia)", "CST"}; + String ADELAIDE[] = new String[] {"Hora est\u00E1ndar Central (Sur de Australia)", "ACST", + "Hora de verano Central (Sur de Australia)", "ACDT"}; String AGT[] = new String[] {"Hora de Argentina", "ART", "Hora de verano de Argentina", "ARST"}; String AKST[] = new String[] {"Hora est\u00e1ndar de Alaska", "AKST", @@ -61,10 +61,10 @@ "Hora de verano Atl\u00e1ntico", "ADT"}; String BDT[] = new String[] {"Hora de Bangladesh", "BDT", "Hora de verano de Bangladesh", "BDST"}; - String BRISBANE[] = new String[] {"Hora est\u00e1ndar del Este (Queensland)", "EST", - "Hora de verano del Este (Queensland)", "EST"}; - String BROKEN_HILL[] = new String[] {"Hora est\u00e1ndar Central (Sur de Australia/Nueva Gales del Sur)", "CST", - "Hora de verano Central (Sur de Australia/Nueva Gales del Sur)", "CST"}; + String BRISBANE[] = new String[] {"Hora est\u00E1ndar del Este (Queensland)", "AEST", + "Hora est\u00E1ndar de verano del Este (Queensland)", "AEDT"}; + String BROKEN_HILL[] = new String[] {"Hora est\u00E1ndar Central (Sur de Australia/Nueva Gales del Sur)", "ACST", + "Hora de verano Central (Sur de Australia/Nueva Gales del Sur)", "ACDT"}; String BRT[] = new String[] {"Hora de Brasil", "BRT", "Hora de verano de Brasil", "BRST"}; String BTT[] = new String[] {"Hora de But\u00e1n", "BTT", @@ -75,7 +75,11 @@ "Hora de verano de Europa Central", "CEST"}; String CHAST[] = new String[] {"Hora est\u00e1ndar de Chatham", "CHAST", "Hora de verano de Chatham", "CHADT"}; - String CIT[] = new String[] {"Hora de Indonesia Central", "CIT", + String ChST[] = new String[] {"Hora est\u00e1ndar de Chamorro", "ChST", + "Hora de verano de Chamorro", "ChDT"}; + String CHUT[] = new String[] {"Hora de Chuuk", "CHUT", + "Hora de verano de Chuuk", "CHUST"}; + String CIT[] = new String[] {"Hora de Indonesia Central", "WITA", "Hora de verano de Indonesia Central", "CIST"}; String CLT[] = new String[] {"Hora de Chile", "CLT", "Hora de verano de Chile", "CLST"}; @@ -83,10 +87,10 @@ "Hora de verano Central", "CDT"}; String CTT[] = new String[] {"Hora est\u00e1ndar de China", "CST", "Hora de verano de China", "CDT"}; - String CUBA[] = new String[] {"Cuba Standard Time", "CST", - "Cuba Daylight Time", "CDT"}; - String DARWIN[] = new String[] {"Hora est\u00e1ndar Central (territorio del Norte)", "CST", - "Hora de verano Central (territorio del Norte)", "CST"}; + String CUBA[] = new String[] {"Hora est\u00e1ndar de Cuba", "CST", + "Hora de verano de Cuba", "CDT"}; + String DARWIN[] = new String[] {"Hora est\u00E1ndar Central (territorio del Norte)", "ACST", + "Hora de verano Central (territorio del Norte)", "ACDT"}; String DUBLIN[] = new String[] {"Hora del Meridiano de Greenwich", "GMT", "Hora de verano de Irlanda", "IST"}; String EAT[] = new String[] {"Hora de \u00c1frica Oriental", "EAT", @@ -99,8 +103,10 @@ "Hora de verano de Groenlandia Oriental", "EGST"}; String EST[] = new String[] {"Hora est\u00e1ndar Oriental", "EST", "Hora de verano Oriental", "EDT"}; - String EST_NSW[] = new String[] {"Hora est\u00e1ndar Oriental (Nueva Gales del Sur)", "EST", - "Hora de verano Oriental (Nueva Gales del Sur)", "EST"}; + String EST_NSW[] = new String[] {"Hora est\u00E1ndar Oriental (Nueva Gales del Sur)", "AEST", + "Hora de verano Oriental (Nueva Gales del Sur)", "AEDT"}; + String FET[] = new String[] {"Hora de Europa m\u00E1s Oriental", "FET", + "Hora de verano de Europa m\u00E1s Oriental", "FEST"}; String GHMT[] = new String[] {"Hora central de Ghana", "GMT", "Hora de verano de Ghana", "GHST"}; String GAMBIER[] = new String[] {"Hora de Gambier", "GAMT", @@ -127,10 +133,12 @@ "Hora de verano de India", "IDT"}; String JST[] = new String[] {"Hora est\u00e1ndar de Jap\u00f3n", "JST", "Hora de verano de Jap\u00f3n", "JDT"}; + String KRAT[] = new String[] {"Hora de Krasnoyarsk", "KRAT", + "Hora de verano de Krasnoyarsk", "KRAST"}; String KST[] = new String[] {"Hora est\u00e1ndar de Corea", "KST", "Hora de verano de Corea", "KDT"}; String LORD_HOWE[] = new String[] {"Hora est\u00e1ndar de Lord Howe", "LHST", - "Hora de verano de Lord Howe", "LHST"}; + "Hora de verano de Lord Howe", "LHDT"}; String MHT[] = new String[] {"Hora de las Islas Marshall", "MHT", "Hora de verano de las Islas Marshall", "MHST"}; String MSK[] = new String[] {"Hora est\u00e1ndar de Mosc\u00fa", "MSK", @@ -153,48 +161,48 @@ "Hora de verano de Pitcairn", "PDT"}; String PKT[] = new String[] {"Hora de Pakist\u00e1n", "PKT", "Hora de verano de Pakist\u00e1n", "PKST"}; + String PONT[] = new String[] {"Hora de Pohnpei", "PONT", + "Hora de verano de Pohnpei", "PONST"}; String PST[] = new String[] {"Hora est\u00e1ndar del Pac\u00edfico", "PST", "Hora de verano del Pac\u00edfico", "PDT"}; - String RST[] = new String[] {"Hora est\u00e1ndar Oriental", "EST", - "Hora de verano Central", "CDT"}; + String SAMOA[] = new String[] {"Hora est\u00e1ndar de Samoa", "SST", + "Hora de verano de Samoa", "SDT"}; + String IRKT[] = new String[] {"Hora de Irkutsk", "IRKT", + "Hora de verano de Irkutsk", "IRKST"}; String SAST[] = new String[] {"Hora est\u00e1ndar de Sud\u00e1frica", "SAST", "Hora de verano de Sud\u00e1frica", "SAST"}; String SBT[] = new String[] {"Hora de las Islas Solomon", "SBT", "Hora de verano de las Islas Solomon", "SBST"}; String SGT[] = new String[] {"Hora de Singapur", "SGT", "Hora de verano de Singapur", "SGST"}; - String SLST[] = new String[] {"Hora del Meridiano de Greenwich", "GMT", - "Hora de verano de Sierra Leona", "SLST"}; - String TASMANIA[] = new String[] {"Hora est\u00e1ndar del Este (Tasmania)", "EST", - "Hora de verano del Este (Tasmania)", "EST"}; + String TASMANIA[] = new String[] {"Hora est\u00E1ndar del Este (Tasmania)", "AEST", + "Hora de verano del Este (Tasmania)", "AEDT"}; String TMT[] = new String[] {"Hora de Turkmenist\u00e1n", "TMT", "Hora de verano de Turkmenist\u00e1n", "TMST"}; - String TRUT[] =new String[] {"Hora de Truk", "TRUT", - "Hora de verano de Truk", "TRUST"}; String ULAT[]= new String[] {"Hora de Ulan Bator", "ULAT", "Hora de verano de Ulan Bator", "ULAST"}; - String WART[] = new String[] {"Hora de Argentina", "WART", - "Hora de verano de Argentina", "WARST"}; + String UTC[] = new String[] {"Hora Universal Coordinada", "UTC", + "Hora Universal Coordinada", "UTC"}; + String UZT[] = new String[] {"Hora de Uzbekist\u00e1n", "UZT", + "Hora de verano de Uzbekist\u00e1n", "UZST"}; + String VICTORIA[] = new String[] {"Hora est\u00E1ndar del Este (Victoria)", "AEST", + "Hora de verano del Este (Victoria)", "AEDT"}; + String VLAT[] = new String[] {"Hora de Vladivostok", "VLAT", + "Hora de verano de Vladivostok", "VLAST"}; String WAT[] = new String[] {"Hora de \u00c1frica Occidental", "WAT", "Hora de verano de \u00c1frica Occidental", "WAST"}; String WET[] = new String[] {"Hora de Europa Occidental", "WET", "Hora de verano de Europa Occidental", "WEST"}; - String WIT[] = new String[] {"Hora de Indonesia Occidental", "WIT", + String WIT[] = new String[] {"Hora de Indonesia Occidental", "WIB", "Indonesia Hora de verano de Indonesia Occidental", "WIST"}; - String WST_AUS[] = new String[] {"Hora est\u00e1ndar Occidental (Australia)", "WST", - "Hora de verano Occidental (Australia)", "WST"}; - String SAMOA[] = new String[] {"Hora est\u00e1ndar de Samoa", "SST", - "Hora de verano de Samoa", "SDT"}; - String WST_SAMOA[] = new String[] {"Hora de Samoa Occidental", "WST", - "Hora de verano de Samoa Occidental", "WSST"}; - String ChST[] = new String[] {"Hora est\u00e1ndar de Chamorro", "ChST", - "Hora de verano de Chamorro", "ChDT"}; - String VICTORIA[] = new String[] {"Hora est\u00e1ndar del Este (Victoria)", "EST", - "Hora de verano del Este (Victoria)", "EST"}; - String UTC[] = new String[] {"Hora Universal Coordinada", "UTC", - "Hora Universal Coordinada", "UTC"}; - String UZT[] = new String[] {"Hora de Uzbekist\u00e1n", "UZT", - "Hora de verano de Uzbekist\u00e1n", "UZST"}; + String WST_AUS[] = new String[] {"Hora est\u00E1ndar Occidental (Australia)", "AWST", + "Hora de verano Occidental (Australia)", "AWDT"}; + String WST_SAMOA[] = new String[] {"Hora de Samoa Occidental", "WSST", + "Hora de verano de Samoa Occidental", "WSDT"}; + String XJT[] = new String[] {"Hora est\u00e1ndar de China", "XJT", + "Hora de verano de China", "XJDT"}; + String YAKT[] = new String[] {"Hora de Yakutsk", "YAKT", + "Hora de verano de Yakutsk", "YAKST"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -214,6 +222,7 @@ {"America/Anchorage", AKST}, {"AST", AKST}, {"America/Halifax", AST}, + {"America/Sitka", AKST}, {"America/St_Johns", NST}, {"CNT", NST}, {"Europe/Paris", CET}, @@ -255,10 +264,11 @@ {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, + {"Africa/Juba", EAT}, {"Africa/Kampala", EAT}, {"Africa/Khartoum", EAT}, {"Africa/Kigali", CAT}, @@ -300,7 +310,7 @@ {"America/Argentina/Rio_Gallegos", AGT}, {"America/Argentina/Salta", AGT}, {"America/Argentina/San_Juan", AGT}, - {"America/Argentina/San_Luis", WART}, + {"America/Argentina/San_Luis", AGT}, {"America/Argentina/Tucuman", AGT}, {"America/Argentina/Ushuaia", AGT}, {"America/Aruba", AST}, @@ -309,6 +319,7 @@ {"America/Atikokan", EST}, {"America/Atka", HAST}, {"America/Bahia", BRT}, + {"America/Bahia_Banderas", CST}, {"America/Barbados", AST}, {"America/Belem", BRT}, {"America/Belize", CST}, @@ -328,6 +339,7 @@ "Hora de verano de la Guayana Francesa", "GFST"}}, {"America/Cayman", EST}, {"America/Chihuahua", MST}, + {"America/Creston", MST}, {"America/Coral_Harbour", EST}, {"America/Cordoba", AGT}, {"America/Costa_Rica", CST}, @@ -339,7 +351,7 @@ {"America/Detroit", EST}, {"America/Dominica", AST}, {"America/Edmonton", MST}, - {"America/Eirunepe", AMT}, + {"America/Eirunepe", ACT}, {"America/El_Salvador", CST}, {"America/Ensenada", PST}, {"America/Fort_Wayne", EST}, @@ -348,7 +360,7 @@ {"America/Godthab", new String[] {"Hora de Groenlandia Occidental", "WGT", "Hora de verano de Groenlandia Occidental", "WGST"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -374,11 +386,13 @@ {"America/Kentucky/Louisville", EST}, {"America/Kentucky/Monticello", EST}, {"America/Knox_IN", CST}, + {"America/Kralendijk", AST}, {"America/La_Paz", new String[] {"Hora de Bolivia", "BOT", "Hora de verano de Bolivia", "BOST"}}, {"America/Lima", new String[] {"Hora de Per\u00fa", "PET", "Hora de verano de Per\u00fa", "PEST"}}, {"America/Louisville", EST}, + {"America/Lower_Princes", AST}, {"America/Maceio", BRT}, {"America/Managua", CST}, {"America/Manaus", AMT}, @@ -389,6 +403,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Hora est\u00e1ndar de Pierre & Miquelon", "PMST", "Hora de verano de Pierre & Miquelon", "PMDT"}}, @@ -402,6 +417,7 @@ {"America/Nipigon", EST}, {"America/Nome", AKST}, {"America/Noronha", NORONHA}, + {"America/North_Dakota/Beulah", CST}, {"America/North_Dakota/Center", CST}, {"America/North_Dakota/New_Salem", CST}, {"America/Ojinaga", MST}, @@ -411,15 +427,15 @@ "Hora de verano de Surinam", "SRST"}}, {"America/Port-au-Prince", EST}, {"America/Port_of_Spain", AST}, - {"America/Porto_Acre", AMT}, + {"America/Porto_Acre", ACT}, {"America/Porto_Velho", AMT}, {"America/Puerto_Rico", AST}, {"America/Rainy_River", CST}, {"America/Rankin_Inlet", CST}, {"America/Recife", BRT}, {"America/Regina", CST}, - {"America/Resolute", RST}, - {"America/Rio_Branco", AMT}, + {"America/Resolute", CST}, + {"America/Rio_Branco", ACT}, {"America/Rosario", AGT}, {"America/Santa_Isabel", PST}, {"America/Santarem", BRT}, @@ -446,10 +462,13 @@ {"America/Winnipeg", CST}, {"America/Yakutat", AKST}, {"America/Yellowknife", MST}, + {"Antarctica/Casey", WST_AUS}, {"Antarctica/Davis", new String[] {"Hora de Davis", "DAVT", "Hora de verano de Davis", "DAVST"}}, {"Antarctica/DumontDUrville", new String[] {"Hora de Dumont-d'Urville", "DDUT", "Hora de verano de Dumont-d'Urville", "DDUST"}}, + {"Antarctica/Macquarie", new String[] {"Hora de Isla Macquarie", "MIST", + "Hora de verano de Isla Macquarie", "MIDT"}}, {"Antarctica/Mawson", new String[] {"Hora de Mawson", "MAWT", "Hora de verano de Mawson", "MAWST"}}, {"Antarctica/McMurdo", NZST}, @@ -459,6 +478,8 @@ {"Antarctica/South_Pole", NZST}, {"Antarctica/Syowa", new String[] {"Hora de Syowa", "SYOT", "Hora de verano de Syowa", "SYOST"}}, + {"Antarctica/Troll", new String[] {"Hora Universal Coordinada", "UTC", + "Hora de verano de Europa Central", "CEST"}}, {"Antarctica/Vostok", new String[] {"Hora de Vostok", "VOST", "Hora de verano de Vostok", "VOSST"}}, {"Arctic/Longyearbyen", CET}, @@ -485,6 +506,7 @@ {"Asia/Brunei", new String[] {"Hora de Brunei", "BNT", "Hora de verano de Brunei", "BNST"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"Hora de Choibalsan", "CHOT", "Hora de verano de Choibalsan", "CHOST"}}, {"Asia/Chongqing", CTT}, @@ -500,27 +522,28 @@ "Hora de verano de Tajikist\u00e1n", "TJST"}}, {"Asia/Gaza", EET}, {"Asia/Harbin", CTT}, + {"Asia/Hebron", EET}, {"Asia/Ho_Chi_Minh", ICT}, {"Asia/Hong_Kong", HKT}, {"Asia/Hovd", new String[] {"Hora de Hovd", "HOVT", "Hora de verano de Hovd", "HOVST"}}, - {"Asia/Irkutsk", new String[] {"Hora de Irkutsk", "IRKT", - "Hora de verano de Irkutsk", "IRKST"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, - {"Asia/Jayapura", new String[] {"Hora de Indonesia Oriental", "EIT", + {"Asia/Jayapura", new String[] {"Hora de Indonesia Oriental", "WIT", "Hora de verano de Indonesia Oriental", "EIST"}}, {"Asia/Kabul", new String[] {"Hora de Afganist\u00e1n", "AFT", "Hora de verano de Afganist\u00e1n", "AFST"}}, {"Asia/Kamchatka", new String[] {"Hora de Petropavlovsk-Kamchatski", "PETT", "Hora de verano de Petropavlovsk-Kamchatski", "PETST"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, + {"Asia/Khandyga", new String[] {"Hora de Khandyga", "YAKT", + "Hora de verano de Khandyga", "YAKST"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"Hora de Krasnoyarsk", "KRAT", - "Hora de verano de Krasnoyarsk", "KRAST"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -533,8 +556,7 @@ "Hora de verano de Filipinas", "PHST"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"Hora de Uralsk", "ORAT", "Hora de verano de Uralsk", "ORAST"}}, @@ -555,6 +577,8 @@ {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -566,12 +590,12 @@ {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, + {"Asia/Ust-Nera", new String[] {"Hora de Ust-Nera", "VLAT", + "Hora de verano de Ust-Nera", "VLAST"}}, {"Asia/Vientiane", ICT}, - {"Asia/Vladivostok", new String[] {"Hora de Vladivostok", "VLAT", - "Hora de verano de Vladivostok", "VLAST"}}, - {"Asia/Yakutsk", new String[] {"Hora de Yakutsk", "YAKT", - "Hora de verano de Yakutsk", "YAKST"}}, + {"Asia/Vladivostok", VLAT}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"Hora de Ekaterinburgo", "YEKT", "Hora de verano de Ekaterinburgo", "YEKST"}}, {"Asia/Yerevan", ARMT}, @@ -598,8 +622,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", - "Central Western Summer Time (Australia)", "CWST"}}, + {"Australia/Eucla", new String[] {"Hora est\u00E1ndar de Australia Central y Occidental", "ACWST", + "Hora est\u00E1ndar de verano de Australia Central y Occidental", "ACWDT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -617,7 +641,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, - {"Brazil/Acre", AMT}, + {"Brazil/Acre", ACT}, {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, @@ -655,6 +679,7 @@ {"Europe/Bratislava", CET}, {"Europe/Brussels", CET}, {"Europe/Budapest", CET}, + {"Europe/Busingen", CET}, {"Europe/Chisinau", EET}, {"Europe/Copenhagen", CET}, {"Europe/Dublin", DUBLIN}, @@ -673,7 +698,7 @@ {"Europe/Madrid", CET}, {"Europe/Malta", CET}, {"Europe/Mariehamn", EET}, - {"Europe/Minsk", EET}, + {"Europe/Minsk", MSK}, {"Europe/Monaco", CET}, {"Europe/Moscow", MSK}, {"Europe/Nicosia", EET}, @@ -686,7 +711,7 @@ "Hora de verano de Samara", "SAMST"}}, {"Europe/San_Marino", CET}, {"Europe/Sarajevo", CET}, - {"Europe/Simferopol", EET}, + {"Europe/Simferopol", MSK}, {"Europe/Skopje", CET}, {"Europe/Sofia", EET}, {"Europe/Stockholm", CET}, @@ -698,8 +723,7 @@ {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"Hora de Volgogrado", "VOLT", - "Hora de verano de Volgogrado", "VOLST"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, @@ -752,7 +776,10 @@ {"PRT", AST}, {"Pacific/Apia", WST_SAMOA}, {"Pacific/Auckland", NZST}, + {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST", + "Bougainville Daylight Time", "BST"}}, {"Pacific/Chatham", CHAST}, + {"Pacific/Chuuk", CHUT}, {"Pacific/Easter", EASTER}, {"Pacific/Efate", new String[] {"Hora de Vanuatu", "VUT", "Hora de verano de Vanuatu", "VUST"}}, @@ -791,8 +818,8 @@ {"Pacific/Palau", new String[] {"Hora de Palau", "PWT", "Hora de verano de Palau", "PWST"}}, {"Pacific/Pitcairn", PITCAIRN}, - {"Pacific/Ponape", new String[] {"Hora de Ponape", "PONT", - "Hora de verano de Ponape", "PONST"}}, + {"Pacific/Pohnpei", PONT}, + {"Pacific/Ponape", PONT}, {"Pacific/Port_Moresby", new String[] {"Hora de Pap\u00faa-Nueva Guinea", "PGT", "Hora de verano de Pap\u00faa-Nueva Guinea", "PGST"}}, {"Pacific/Rarotonga", new String[] {"Hora de las islas Cook", "CKT", @@ -805,12 +832,12 @@ "Hora de verano de las islas Gilbert", "GILST"}}, {"Pacific/Tongatapu", new String[] {"Hora de Tonga", "TOT", "Hora de verano de Tonga", "TOST"}}, - {"Pacific/Truk", TRUT}, + {"Pacific/Truk", CHUT}, {"Pacific/Wake", new String[] {"Hora de Wake", "WAKT", "Hora de verano de Wake", "WAKST"}}, {"Pacific/Wallis", new String[] {"Hora de Wallis y Futuna", "WFT", "Hora de verano de Wallis y Futuna", "WFST"}}, - {"Pacific/Yap", TRUT}, + {"Pacific/Yap", CHUT}, {"Poland", CET}, {"PRC", CTT}, {"PST8PDT", PST}, diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,98 +45,106 @@ protected final Object[][] getContents() { String ACT[] = new String[] {"Heure de l'Acre", "ACT", "Heure d'\u00e9t\u00e9 de l'Acre", "ACST"}; - String ADELAIDE[] = new String[] {"Heure standard d'Australie centrale (Australie du sud)", "CST", - "Heure d'\u00e9t\u00e9 d'Australie centrale (Australie du sud)", "CST"}; + String ADELAIDE[] = new String[] {"Heure standard d'Australie centrale (Australie du sud)", "ACST", + "Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud)", "ACDT"}; String AGT[] = new String[] {"Heure D'Argentine", "ART", - "Heure d'\u00e9t\u00e9 D'Argentine", "ARST"} ; + "Heure d'\u00e9t\u00e9 D'Argentine", "ARST"}; String AKST[] = new String[] {"Heure normale d'Alaska", "AKST", - "Heure avanc\u00e9e d'Alaska", "AKDT"} ; + "Heure avanc\u00e9e d'Alaska", "AKDT"}; String AMT[] = new String[] {"Heure normale d'Amazonie", "AMT", - "Heure d'\u00e9t\u00e9 d'Amazonie", "AMST"} ; + "Heure d'\u00e9t\u00e9 d'Amazonie", "AMST"}; String ARAST[] = new String[] {"Heure normale d'Arabie", "AST", - "Heure avanc\u00e9e d'Arabie", "ADT"} ; + "Heure avanc\u00e9e d'Arabie", "ADT"}; String ARMT[] = new String[] {"Heure d'Arm\u00e9nie", "AMT", - "Heure d'\u00e9t\u00e9 d'Arm\u00e9nie", "AMST"} ; + "Heure d'\u00e9t\u00e9 d'Arm\u00e9nie", "AMST"}; String AST[] = new String[] {"Heure normale de l'Atlantique", "AST", - "Heure avanc\u00e9e de l'Atlantique", "ADT"} ; + "Heure avanc\u00e9e de l'Atlantique", "ADT"}; String BDT[] = new String[] {"Heure du Bangladesh", "BDT", - "Heure d'\u00e9t\u00e9 du Bangladesh", "BDST"} ; - String BRISBANE[] = new String[] {"Heure standard d'Australie orientale (Queensland)", "EST", - "Heure d'\u00e9t\u00e9 d'Australie orientale (Queensland)", "EST"}; - String BROKEN_HILL[] = new String[] {"Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "CST", - "Heure d'\u00e9t\u00e9 d'Australie centrale(Australie du sud/Nouvelle-Galles du sud)", "CST"}; + "Heure d'\u00e9t\u00e9 du Bangladesh", "BDST"}; + String BRISBANE[] = new String[] {"Heure standard d'Australie orientale (Queensland)", "AEST", + "Heure d'\u00E9t\u00E9 d'Australie orientale (Queensland)", "AEDT"}; + String BROKEN_HILL[] = new String[] {"Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "ACST", + "Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "ACDT"}; String BRT[] = new String[] {"Heure du Br\u00e9sil", "BRT", - "Heure d'\u00e9t\u00e9 du Br\u00e9sil", "BRST"} ; + "Heure d'\u00e9t\u00e9 du Br\u00e9sil", "BRST"}; String BTT[] = new String[] {"Heure du Bhoutan", "BTT", - "Heure d'\u00e9t\u00e9 du Bhoutan", "BTST"} ; + "Heure d'\u00e9t\u00e9 du Bhoutan", "BTST"}; String CAT[] = new String[] {"Heure d'Afrique centrale", "CAT", - "Heure d'\u00e9t\u00e9 d'Afrique centrale", "CAST"} ; + "Heure d'\u00e9t\u00e9 d'Afrique centrale", "CAST"}; String CET[] = new String[] {"Heure d'Europe centrale", "CET", - "Heure d'\u00e9t\u00e9 d'Europe centrale", "CEST"} ; + "Heure d'\u00e9t\u00e9 d'Europe centrale", "CEST"}; String CHAST[] = new String[] {"Heure standard de Chatham", "CHAST", "Heure avanc\u00e9e de Chatham", "CHADT"}; - String CIT[] = new String[] {"Heure d'Indon\u00e9sie centrale", "CIT", + String ChST[] = new String[] {"Heure normale des \u00eeles Mariannes", "ChST", + "Heure d'\u00e9t\u00e9 des \u00eeles Mariannes", "ChDT"}; + String CHUT[] = new String[] {"Heure de Chuuk", "CHUT", + "Heure d'\u00E9t\u00E9 de Chuuk", "CHUST"}; + String CIT[] = new String[] {"Heure d'Indon\u00e9sie centrale", "WITA", "Heure d'\u00e9t\u00e9 d'Indon\u00e9sie centrale", "CIST"}; String CLT[] = new String[] {"Heure du Chili", "CLT", - "Heure d'\u00e9t\u00e9 du Chili", "CLST"} ; + "Heure d'\u00e9t\u00e9 du Chili", "CLST"}; String CST[] = new String[] {"Heure normale du Centre", "CST", - "Heure avanc\u00e9e du Centre", "CDT"} ; + "Heure avanc\u00e9e du Centre", "CDT"}; String CTT[] = new String[] {"Heure normale de Chine", "CST", - "Heure avanc\u00e9e de Chine", "CDT"} ; - String CUBA[] = new String[] {"Cuba Standard Time", "CST", - "Cuba Daylight Time", "CDT"}; - String DARWIN[] = new String[] {"Heure standard d'Australie centrale (Territoire du Nord)", "CST", - "Heure d'\u00e9t\u00e9 d'Australie centrale (Territoire du Nord)", "CST"}; + "Heure avanc\u00e9e de Chine", "CDT"}; + String CUBA[] = new String[] {"Heure standard de Cuba", "CST", + "Heure d'\u00e9t\u00e9 de Cuba", "CDT"}; + String DARWIN[] = new String[] {"Heure standard d'Australie centrale (Territoire du Nord)", "ACST", + "Heure d'\u00E9t\u00E9 d'Australie centrale (Territoire du Nord)", "ACDT"}; String DUBLIN[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT", "Heure d'\u00e9t\u00e9 irlandaise", "IST"}; String EAT[] = new String[] {"Heure d'Afrique de l'Est", "EAT", - "Heure d'\u00e9t\u00e9 d'Afrique de l'Est", "EAST"} ; + "Heure d'\u00e9t\u00e9 d'Afrique de l'Est", "EAST"}; String EASTER[] = new String[] {"Heure de l'Ile de P\u00e2ques", "EAST", "Heure d'\u00e9t\u00e9 de l'Ile de P\u00e2ques", "EASST"}; String EET[] = new String[] {"Heure d'Europe de l'Est", "EET", - "Heure d'\u00e9t\u00e9 d'Europe de l'Est", "EEST"} ; + "Heure d'\u00e9t\u00e9 d'Europe de l'Est", "EEST"}; String EGT[] = new String[] {"Heure du Groenland de l'Est", "EGT", - "Heure d'\u00e9t\u00e9 du Groenland de l'Est", "EGST"} ; + "Heure d'\u00e9t\u00e9 du Groenland de l'Est", "EGST"}; String EST[] = new String[] {"Heure normale de l'Est", "EST", - "Heure avanc\u00e9e de l'Est", "EDT"} ; - String EST_NSW[] = new String[] {"Heure normale de l'Est (Nouvelle-Galles du Sud)", "EST", - "Heure d'\u00e9t\u00e9 de l'Est (Nouvelle-Galles du Sud)", "EST"} ; + "Heure avanc\u00e9e de l'Est", "EDT"}; + String EST_NSW[] = new String[] {"Heure normale de l'Est (Nouvelle-Galles du Sud)", "AEST", + "Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud)", "AEDT"}; + String FET[] = new String[] {"Heure d'Europe de l'Est UTC+3", "FET", + "Heure d'\u00E9t\u00E9 d'Europe de l'Est UTC+3", "FEST"}; String GHMT[] = new String[] {"Heure du Ghana", "GMT", "Heure d'\u00e9t\u00e9 du Ghana", "GHST"}; String GAMBIER[] = new String[] {"Heure de Gambi", "GAMT", "Heure d'\u00e9t\u00e9 de Gambi", "GAMST"}; String GMT[] = new String[] {"Heure de Greenwich", "GMT", - "Heure de Greenwich", "GMT"} ; + "Heure de Greenwich", "GMT"}; String GMTBST[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT", "Heure d'\u00e9t\u00e9 britannique", "BST"}; String GST[] = new String[] {"Heure normale du Golfe", "GST", - "Heure avanc\u00e9e du Golfe", "GDT"} ; + "Heure avanc\u00e9e du Golfe", "GDT"}; String HAST[] = new String[] {"Heure normale d'Hawa\u00ef-Al\u00e9outiennes", "HAST", - "Heure avanc\u00e9e d'Hawa\u00ef-Al\u00e9outiennes", "HADT"} ; + "Heure avanc\u00e9e d'Hawa\u00ef-Al\u00e9outiennes", "HADT"}; String HKT[] = new String[] {"Heure de Hong Kong", "HKT", "Heure d'\u00e9t\u00e9 de Hong Kong", "HKST"}; String HST[] = new String[] {"Heure normale d'Hawa\u00ef", "HST", - "Heure avanc\u00e9e d'Hawa\u00ef", "HDT"} ; + "Heure avanc\u00e9e d'Hawa\u00ef", "HDT"}; String ICT[] = new String[] {"Heure d'Indochine", "ICT", - "Heure d'\u00e9t\u00e9 d'Indochine", "ICST"} ; + "Heure d'\u00e9t\u00e9 d'Indochine", "ICST"}; String IRT[] = new String[] {"Heure normale d'Iran", "IRST", - "Heure avanc\u00e9e d'Iran", "IRDT"} ; + "Heure avanc\u00e9e d'Iran", "IRDT"}; String ISRAEL[] = new String[] {"Heure standard d'Isra\u00ebl", "IST", "Heure avanc\u00e9e d'Isra\u00ebl", "IDT"}; String IST[] = new String[] {"Heure normale d'Inde", "IST", - "Heure avanc\u00e9e d'Inde", "IDT"} ; + "Heure avanc\u00e9e d'Inde", "IDT"}; String JST[] = new String[] {"Heure normale du Japon", "JST", - "Heure avanc\u00e9e du Japon", "JDT"} ; + "Heure avanc\u00e9e du Japon", "JDT"}; + String KRAT[] = new String[] {"Heure de Krasno\u00efarsk", "KRAT", + "Heure d'\u00e9t\u00e9 de Krasno\u00efarsk", "KRAST"}; String KST[] = new String[] {"Heure normale de Cor\u00e9e", "KST", - "Heure avanc\u00e9e de Cor\u00e9e", "KDT"} ; + "Heure avanc\u00e9e de Cor\u00e9e", "KDT"}; String LORD_HOWE[] = new String[] {"Heure standard de Lord Howe", "LHST", - "Heure d'\u00e9t\u00e9 de Lord Howe", "LHST"}; + "Heure d'\u00e9t\u00e9 de Lord Howe", "LHDT"}; String MHT[] = new String[] {"Heure des Iles Marshall", "MHT", "Heure d'\u00e9t\u00e9 des Iles Marshall", "MHST"}; String MSK[] = new String[] {"Heure standard de Moscou", "MSK", "Heure avanc\u00e9e de Moscou", "MSD"}; String MST[] = new String[] {"Heure normale des Rocheuses", "MST", - "Heure avanc\u00e9e des Rocheuses", "MDT"} ; + "Heure avanc\u00e9e des Rocheuses", "MDT"}; String MYT[] = new String[] {"Heure de Malaisie", "MYT", "Heure d'\u00e9t\u00e9 de Malaisie", "MYST"}; String NORONHA[] = new String[] {"Heure de Fernando de Noronha", "FNT", @@ -146,55 +154,55 @@ String NPT[] = new String[] {"Heure du N\u00e9pal", "NPT", "Heure d'\u00e9t\u00e9 du N\u00e9pal", "NPST"}; String NST[] = new String[] {"Heure normale de Terre-Neuve", "NST", - "Heure avanc\u00e9e de Terre-Neuve", "NDT"} ; + "Heure avanc\u00e9e de Terre-Neuve", "NDT"}; String NZST[] = new String[] {"Heure normale de Nouvelle-Z\u00e9lande", "NZST", - "Heure avanc\u00e9e de Nouvelle-Z\u00e9lande", "NZDT"} ; + "Heure avanc\u00e9e de Nouvelle-Z\u00e9lande", "NZDT"}; String PITCAIRN[] = new String[] {"Heure standard des Pitcairn", "PST", "heure avanc\u00e9e des Pitcairn", "PDT"}; String PKT[] = new String[] {"Heure du Pakistan", "PKT", - "Heure d'\u00e9t\u00e9 du Pakistan", "PKST"} ; + "Heure d'\u00e9t\u00e9 du Pakistan", "PKST"}; + String PONT[] = new String[] {"Heure de Pohnpei", "PONT", + "Heure d'\u00E9t\u00E9 de Pohnpei", "PONST"}; String PST[] = new String[] {"Heure normale du Pacifique", "PST", - "Heure avanc\u00e9e du Pacifique", "PDT"} ; - String RST[] = new String[] {"Heure normale de l'Est", "EST", - "Heure avanc\u00e9e du Centre", "CDT"} ; + "Heure avanc\u00e9e du Pacifique", "PDT"}; + String SAMOA[] = new String[] {"Heure standard de Samoa", "SST", + "Heure avanc\u00e9e de Samoa", "SDT"}; + String IRKT[] = new String[] {"Heure d'Irkutsk", "IRKT", + "Heure d'\u00e9t\u00e9 d'Irkutsk", "IRKST"}; String SAST[] = new String[] {"Heure normale d'Afrique du Sud", "SAST", - "Heure d'\u00e9t\u00e9 d'Afrique du Sud", "SAST"} ; + "Heure d'\u00e9t\u00e9 d'Afrique du Sud", "SAST"}; String SBT[] = new String[] {"Heure des \u00celes Salomon", "SBT", - "Heure d'\u00e9t\u00e9 des \u00celes Salomon", "SBST"} ; + "Heure d'\u00e9t\u00e9 des \u00celes Salomon", "SBST"}; String SGT[] = new String[] {"Heure de Singapour", "SGT", "Heure d'\u00e9t\u00e9 de Singapour", "SGST"}; - String SLST[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT", - "Heure d'\u00e9t\u00e9 de Sierra Leone", "SLST"}; - String TASMANIA[] = new String[] {"Heure standard d'Australie orientale (Tasmanie)", "EST", - "Heure d'\u00e9t\u00e9 d'Australie orientale (Tasmanie)", "EST"}; + String TASMANIA[] = new String[] {"Heure standard d'Australie orientale (Tasmanie)", "AEST", + "Heure d'\u00E9t\u00E9 d'Australie orientale (Tasmanie)", "AEDT"}; String TMT[] = new String[] {"Heure du Turkm\u00e9nistan", "TMT", - "Heure d'\u00e9t\u00e9 du Turkm\u00e9nistan", "TMST"} ; - String TRUT[] = new String[] {"Heure de Truk", "TRUT", - "Heure d'\u00e9t\u00e9 de Truk", "TRUST"}; + "Heure d'\u00e9t\u00e9 du Turkm\u00e9nistan", "TMST"}; String ULAT[]= new String[] {"Heure de l'Ulaanbaatar", "ULAT", - "Heure d'\u00e9t\u00e9 de l'Ulaanbaatar", "ULAST"} ; - String WART[] = new String[] {"Heure D'Argentine", "WART", - "Heure d'\u00e9t\u00e9 D'Argentine", "WARST"} ; - String WAT[] = new String[] {"Heure d'Afrique de l'Ouest", "WAT", - "Heure d'\u00e9t\u00e9 d'Afrique de l'Ouest", "WAST"} ; - String WET[] = new String[] {"Heure d'Europe de l'Ouest", "WET", - "Heure d'\u00e9t\u00e9 d'Europe de l'Ouest", "WEST"} ; - String WIT[] = new String[] {"Heure de l'Indon\u00e9sie occidentale", "WIT", - "Heure d'\u00e9t\u00e9 de l'Indon\u00e9sie occidentale", "WIST"}; - String WST_AUS[] = new String[] {"Heure normale de l'Ouest (Australie)", "WST", - "Heure d'\u00e9t\u00e9 de l'Ouest (Australie)", "WST"} ; - String SAMOA[] = new String[] {"Heure standard de Samoa", "SST", - "Heure avanc\u00e9e de Samoa", "SDT"}; - String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WST", - "Heure d'\u00e9t\u00e9 des Samoas occidentales", "WSST"} ; - String ChST[] = new String[] {"Heure normale des \u00eeles Mariannes", "ChST", - "Heure d'\u00e9t\u00e9 des \u00eeles Mariannes", "ChDT"}; - String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "EST", - "Heure d'\u00e9t\u00e9 d'Australie orientale (Victoria)", "EST"}; + "Heure d'\u00e9t\u00e9 de l'Ulaanbaatar", "ULAST"}; String UTC[] = new String[] {"Temps universel coordonn\u00e9", "UTC", "Temps universel coordonn\u00e9", "UTC"}; String UZT[] = new String[] {"Heure de l'Ouzb\u00e9kistan", "UZT", "Heure d'\u00e9t\u00e9 de l'Ouzb\u00e9kistan", "UZST"}; + String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "AEST", + "Heure d'\u00E9t\u00E9 d'Australie orientale (Victoria)", "AEDT"}; + String VLAT[] = new String[] {"Heure de Vladivostok", "VLAT", + "Heure d'\u00e9t\u00e9 de Vladivostok", "VLAST"}; + String WAT[] = new String[] {"Heure d'Afrique de l'Ouest", "WAT", + "Heure d'\u00e9t\u00e9 d'Afrique de l'Ouest", "WAST"}; + String WET[] = new String[] {"Heure d'Europe de l'Ouest", "WET", + "Heure d'\u00e9t\u00e9 d'Europe de l'Ouest", "WEST"}; + String WIT[] = new String[] {"Heure de l'Indon\u00e9sie occidentale", "WIB", + "Heure d'\u00e9t\u00e9 de l'Indon\u00e9sie occidentale", "WIST"}; + String WST_AUS[] = new String[] {"Heure normale de l'Ouest (Australie)", "AWST", + "Heure d'\u00E9t\u00E9 de l'Ouest (Australie)", "AWDT"}; + String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WSST", + "Heure d'\u00e9t\u00e9 des Samoas occidentales", "WSDT"}; + String XJT[] = new String[] {"Heure normale de Chine", "XJT", + "Heure avanc\u00e9e de Chine", "XJDT"}; + String YAKT[] = new String[] {"Heure du Iakoutsk", "YAKT", + "Heure d'\u00e9t\u00e9 du Iakoutsk", "YAKST"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -214,6 +222,7 @@ {"America/Anchorage", AKST}, {"AST", AKST}, {"America/Halifax", AST}, + {"America/Sitka", AKST}, {"America/St_Johns", NST}, {"CNT", NST}, {"Europe/Paris", CET}, @@ -255,10 +264,11 @@ {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, + {"Africa/Juba", EAT}, {"Africa/Kampala", EAT}, {"Africa/Khartoum", EAT}, {"Africa/Kigali", CAT}, @@ -300,7 +310,7 @@ {"America/Argentina/Rio_Gallegos", AGT}, {"America/Argentina/Salta", AGT}, {"America/Argentina/San_Juan", AGT}, - {"America/Argentina/San_Luis", WART}, + {"America/Argentina/San_Luis", AGT}, {"America/Argentina/Tucuman", AGT}, {"America/Argentina/Ushuaia", AGT}, {"America/Aruba", AST}, @@ -309,6 +319,7 @@ {"America/Atikokan", EST}, {"America/Atka", HAST}, {"America/Bahia", BRT}, + {"America/Bahia_Banderas", CST}, {"America/Barbados", AST}, {"America/Belem", BRT}, {"America/Belize", CST}, @@ -328,6 +339,7 @@ "Heure d'\u00e9t\u00e9 de Guyane fran\u00e7aise", "GFST"}}, {"America/Cayman", EST}, {"America/Chihuahua", MST}, + {"America/Creston", MST}, {"America/Coral_Harbour", EST}, {"America/Cordoba", AGT}, {"America/Costa_Rica", CST}, @@ -339,7 +351,7 @@ {"America/Detroit", EST}, {"America/Dominica", AST}, {"America/Edmonton", MST}, - {"America/Eirunepe", AMT}, + {"America/Eirunepe", ACT}, {"America/El_Salvador", CST}, {"America/Ensenada", PST}, {"America/Fort_Wayne", EST}, @@ -348,7 +360,7 @@ {"America/Godthab", new String[] {"Heure du Groenland de l'Ouest", "WGT", "Heure d'\u00e9t\u00e9 du Groenland de l'Ouest", "WGST"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -374,11 +386,13 @@ {"America/Kentucky/Louisville", EST}, {"America/Kentucky/Monticello", EST}, {"America/Knox_IN", CST}, + {"America/Kralendijk", AST}, {"America/La_Paz", new String[] {"Heure de Bolivie", "BOT", "Heure d'\u00e9t\u00e9 de Bolivie", "BOST"}}, {"America/Lima", new String[] {"Heure du P\u00e9rou", "PET", "Heure d'\u00e9t\u00e9 du P\u00e9rou", "PEST"}}, {"America/Louisville", EST}, + {"America/Lower_Princes", AST}, {"America/Maceio", BRT}, {"America/Managua", CST}, {"America/Manaus", AMT}, @@ -389,6 +403,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Heure normale de Saint-Pierre et Miquelon", "PMST", "Heure avanc\u00e9e de Saint-Pierre et Miquelon", "PMDT"}}, @@ -402,6 +417,7 @@ {"America/Nipigon", EST}, {"America/Nome", AKST}, {"America/Noronha", NORONHA}, + {"America/North_Dakota/Beulah", CST}, {"America/North_Dakota/Center", CST}, {"America/North_Dakota/New_Salem", CST}, {"America/Ojinaga", MST}, @@ -411,15 +427,15 @@ "Heure d'\u00e9t\u00e9 du Surinam", "SRST"}}, {"America/Port-au-Prince", EST}, {"America/Port_of_Spain", AST}, - {"America/Porto_Acre", AMT}, + {"America/Porto_Acre", ACT}, {"America/Porto_Velho", AMT}, {"America/Puerto_Rico", AST}, {"America/Rainy_River", CST}, {"America/Rankin_Inlet", CST}, {"America/Recife", BRT}, {"America/Regina", CST}, - {"America/Resolute", RST}, - {"America/Rio_Branco", AMT}, + {"America/Resolute", CST}, + {"America/Rio_Branco", ACT}, {"America/Rosario", AGT}, {"America/Santa_Isabel", PST}, {"America/Santarem", BRT}, @@ -446,10 +462,13 @@ {"America/Winnipeg", CST}, {"America/Yakutat", AKST}, {"America/Yellowknife", MST}, + {"Antarctica/Casey", WST_AUS}, {"Antarctica/Davis", new String[] {"Heure de Davis", "DAVT", "Heure d'\u00e9t\u00e9 de Davis", "DAVST"}}, {"Antarctica/DumontDUrville", new String[] {"Heure de Dumont-d'Urville", "DDUT", "Heure d'\u00e9t\u00e9 de Dumont-d'Urville", "DDUST"}}, + {"Antarctica/Macquarie", new String[] {"Heure de l'Ile Macquarie", "MIST", + "Heure d'\u00E9t\u00E9 de l'Ile Macquarie", "MIDT"}}, {"Antarctica/Mawson", new String[] {"Heure de Mawson", "MAWT", "Heure d'\u00e9t\u00e9 de Mawson", "MAWST"}}, {"Antarctica/McMurdo", NZST}, @@ -459,6 +478,8 @@ {"Antarctica/South_Pole", NZST}, {"Antarctica/Syowa", new String[] {"Heure de Syowa", "SYOT", "Heure d'\u00e9t\u00e9 de Syowa", "SYOST"}}, + {"Antarctica/Troll", new String[] {"Temps universel coordonn\u00e9", "UTC", + "Heure d'\u00e9t\u00e9 d'Europe centrale", "CEST"}}, {"Antarctica/Vostok", new String[] {"Heure de Vostok", "VOST", "Heure d'\u00e9t\u00e9 de Vostok", "VOSST"}}, {"Arctic/Longyearbyen", CET}, @@ -485,6 +506,7 @@ {"Asia/Brunei", new String[] {"Heure du Brunei", "BNT", "Heure d'\u00e9t\u00e9 du Brunei", "BNST"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"Heure de Choibalsan", "CHOT", "Heure d'\u00e9t\u00e9 de Choibalsan", "CHOST"}}, {"Asia/Chongqing", CTT}, @@ -500,27 +522,28 @@ "Heure d'\u00e9t\u00e9 du Tadjikistan", "TJST"}}, {"Asia/Gaza", EET}, {"Asia/Harbin", CTT}, + {"Asia/Hebron", EET}, {"Asia/Ho_Chi_Minh", ICT}, {"Asia/Hong_Kong", HKT}, {"Asia/Hovd", new String[] {"Heure de Hovd", "HOVT", "Heure d'\u00e9t\u00e9 de Hovd", "HOVST"}}, - {"Asia/Irkutsk", new String[] {"Heure d'Irkutsk", "IRKT", - "Heure d'\u00e9t\u00e9 d'Irkutsk", "IRKST"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, - {"Asia/Jayapura", new String[] {"Heure d'Indon\u00e9sie orientale", "EIT", + {"Asia/Jayapura", new String[] {"Heure d'Indon\u00e9sie orientale", "WIT", "Heure d'\u00e9t\u00e9 d'Indon\u00e9sie orientale", "EIST"}}, {"Asia/Kabul", new String[] {"Heure d'Afghanistan", "AFT", "Heure d'\u00e9t\u00e9 d'Afghanistan", "AFST"}}, {"Asia/Kamchatka", new String[] {"Heure de Petropavlovsk-Kamchatski", "PETT", "Heure d'\u00e9t\u00e9 de Petropavlovsk-Kamchatski", "PETST"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, + {"Asia/Khandyga", new String[] {"Heure de Khandyga", "YAKT", + "Heure d'\u00E9t\u00E9 de Khandyga", "YAKST"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"Heure de Krasno\u00efarsk", "KRAT", - "Heure d'\u00e9t\u00e9 de Krasno\u00efarsk", "KRAST"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -533,7 +556,7 @@ "Heure d'\u00e9t\u00e9 des Philippines", "PHST"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"Heure d'Oral", "ORAT", "Heure d'\u00e9t\u00e9 d'Oral", "ORAST"}}, @@ -554,6 +577,8 @@ {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -565,12 +590,12 @@ {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, + {"Asia/Ust-Nera", new String[] {"Heure d'Ust-Nera", "VLAT", + "Heure d'\u00E9t\u00E9 d'Ust-Nera", "VLAST"}}, {"Asia/Vientiane", ICT}, - {"Asia/Vladivostok", new String[] {"Heure de Vladivostok", "VLAT", - "Heure d'\u00e9t\u00e9 de Vladivostok", "VLAST"}}, - {"Asia/Yakutsk", new String[] {"Heure du Iakoutsk", "YAKT", - "Heure d'\u00e9t\u00e9 du Iakoutsk", "YAKST"}}, + {"Asia/Vladivostok", VLAT}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"Heure de Yekaterinburg", "YEKT", "Heure d'\u00e9t\u00e9 de Yekaterinburg", "YEKST"}}, {"Asia/Yerevan", ARMT}, @@ -597,8 +622,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", - "Central Western Summer Time (Australia)", "CWST"}}, + {"Australia/Eucla", new String[] {"Heure standard de l'Australie occidentale (centre)", "ACWST", + "Heure d'\u00E9t\u00E9 de l'Australie occidentale (centre)", "ACWDT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -616,7 +641,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, - {"Brazil/Acre", AMT}, + {"Brazil/Acre", ACT}, {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, @@ -654,6 +679,7 @@ {"Europe/Bratislava", CET}, {"Europe/Brussels", CET}, {"Europe/Budapest", CET}, + {"Europe/Busingen", CET}, {"Europe/Chisinau", EET}, {"Europe/Copenhagen", CET}, {"Europe/Dublin", DUBLIN}, @@ -672,7 +698,7 @@ {"Europe/Madrid", CET}, {"Europe/Malta", CET}, {"Europe/Mariehamn", EET}, - {"Europe/Minsk", EET}, + {"Europe/Minsk", MSK}, {"Europe/Monaco", CET}, {"Europe/Moscow", MSK}, {"Europe/Nicosia", EET}, @@ -685,7 +711,7 @@ "Heure d'\u00e9t\u00e9 de Samara", "SAMST"}}, {"Europe/San_Marino", CET}, {"Europe/Sarajevo", CET}, - {"Europe/Simferopol", EET}, + {"Europe/Simferopol", MSK}, {"Europe/Skopje", CET}, {"Europe/Sofia", EET}, {"Europe/Stockholm", CET}, @@ -697,8 +723,7 @@ {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"Heure de Volgograd", "VOLT", - "Heure d'\u00e9t\u00e9 de Volgograd", "VOLST"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, @@ -751,7 +776,10 @@ {"PRT", AST}, {"Pacific/Apia", WST_SAMOA}, {"Pacific/Auckland", NZST}, + {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST", + "Bougainville Daylight Time", "BST"}}, {"Pacific/Chatham", CHAST}, + {"Pacific/Chuuk", CHUT}, {"Pacific/Easter", EASTER}, {"Pacific/Efate", new String[] {"Heure du Vanuatu", "VUT", "Heure d'\u00e9t\u00e9 du Vanuatu", "VUST"}}, @@ -790,8 +818,8 @@ {"Pacific/Palau", new String[] {"Heure de Palaos", "PWT", "Heure d'\u00e9t\u00e9 de Palaos", "PWST"}}, {"Pacific/Pitcairn", PITCAIRN}, - {"Pacific/Ponape", new String[] {"Heure de Ponap\u00e9", "PONT", - "Heure d'\u00e9t\u00e9 de Ponap\u00e9", "PONST"}}, + {"Pacific/Pohnpei", PONT}, + {"Pacific/Ponape", PONT}, {"Pacific/Port_Moresby", new String[] {"Heure de Papouasie-Nouvelle-Guin\u00e9e", "PGT", "Heure d'\u00e9t\u00e9 de de Papouasie-Nouvelle-Guin\u00e9e", "PGST"}}, {"Pacific/Rarotonga", new String[] {"Heure des \u00celes Cook", "CKT", @@ -804,12 +832,12 @@ "Heure d'\u00e9t\u00e9 de Kiribati", "GILST"}}, {"Pacific/Tongatapu", new String[] {"Heure de Tonga", "TOT", "Heure d'\u00e9t\u00e9 de Tonga", "TOST"}}, - {"Pacific/Truk", TRUT}, + {"Pacific/Truk", CHUT}, {"Pacific/Wake", new String[] {"Heure de Wake", "WAKT", "Heure d'\u00e9t\u00e9 de Wake", "WAKST"}}, {"Pacific/Wallis", new String[] {"Heure de Wallis et Futuna", "WFT", "Heure d'\u00e9t\u00e9 de Wallis et Futuna", "WFST"}}, - {"Pacific/Yap", TRUT}, + {"Pacific/Yap", CHUT}, {"Poland", CET}, {"PRC", CTT}, {"PST8PDT", PST}, diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,8 +45,8 @@ protected final Object[][] getContents() { String ACT[] = new String[] {"Ora di Acre", "ACT", "Ora estiva di Acre", "ACST"}; - String ADELAIDE[] = new String[] {"Ora centrale standard (Australia del Sud)", "CST", - "Ora estiva standard (Australia del Sud)", "CST"}; + String ADELAIDE[] = new String[] {"Ora standard centrale (Australia del Sud)", "ACST", + "Ora estiva centrale (Australia del Sud)", "ACDT"}; String AGT[] = new String[] {"Ora dell'Argentina", "ART", "Ora estiva dell'Argentina", "ARST"}; String AKST[] = new String[] {"Ora solare dell'Alaska", "AKST", @@ -61,10 +61,10 @@ "Ora legale dell'Atlantico occidentale", "ADT"}; String BDT[] = new String[] {"Ora del Bangladesh", "BDT", "Ora estiva del Bangladesh", "BDST"}; - String BRISBANE[] = new String[] {"Ora orientale standard (Queensland)", "EST", - "Ora estiva orientale (Queensland)", "EST"}; - String BROKEN_HILL[] = new String[] {"Ora centrale standard (Australia del Sud/Nuovo Galles del Sud)", "CST", - "Ora estiva centrale (Australia del Sud/Nuovo Galles del Sud)", "CST"}; + String BRISBANE[] = new String[] {"Ora standard orientale (Queensland)", "AEST", + "Ora estiva orientale (Queensland)", "AEDT"}; + String BROKEN_HILL[] = new String[] {"Ora standard centrale (Australia del Sud/Nuovo Galles del Sud)", "ACST", + "Ora estiva centrale (Australia del Sud/Nuovo Galles del Sud)", "ACDT"}; String BRT[] = new String[] {"Ora del Brasile", "BRT", "Ora estiva del Brasile", "BRST"}; String BTT[] = new String[] {"Ora del Bhutan", "BTT", @@ -75,7 +75,11 @@ "Ora estiva dell'Europa centrale", "CEST"}; String CHAST[] = new String[] {"Ora di Chatham standard", "CHAST", "Ora legale di Chatham", "CHADT"}; - String CIT[] = new String[] {"Ora dell'Indonesia centrale", "CIT", + String CHUT[] = new String[] {"Ora di Chuuk", "CHUT", + "Ora estiva di Chuuk", "CHUST"}; + String ChST[] = new String[] {"Ora standard di Chamorro", "ChST", + "Ora legale di Chamorro", "ChDT"}; + String CIT[] = new String[] {"Ora dell'Indonesia centrale", "WITA", "Ora estiva dell'Indonesia centrale", "CIST"}; String CLT[] = new String[] {"Ora del Cile", "CLT", "Ora estiva del Cile", "CLST"}; @@ -83,10 +87,10 @@ "Ora legale USA centrale", "CDT"}; String CTT[] = new String[] {"Ora solare della Cina", "CST", "Ora legale della Cina", "CDT"}; - String CUBA[] = new String[] {"Cuba Standard Time", "CST", - "Cuba Daylight Time", "CDT"}; - String DARWIN[] = new String[] {"Ora centrale standard (Territori del Nord)", "CST", - "Ora estiva centrale (Territori del Nord)", "CST"}; + String CUBA[] = new String[] {"Ora solare Cuba", "CST", + "Ora legale Cuba", "CDT"}; + String DARWIN[] = new String[] {"Ora standard centrale (Territori del Nord)", "ACST", + "Ora estiva centrale (Territori del Nord)", "ACDT"}; String DUBLIN[] = new String[] {"Ora media di Greenwich", "GMT", "Ora estiva irlandese", "IST"}; String EAT[] = new String[] {"Ora dell'Africa orientale", "EAT", @@ -99,8 +103,10 @@ "Ora estiva della Groenlandia orientale", "EGST"}; String EST[] = new String[] {"Ora solare USA orientale", "EST", "Ora legale USA orientale", "EDT"}; - String EST_NSW[] = new String[] {"Ora solare dell'Australia orientale (Nuovo Galles del Sud)", "EST", - "Ora estiva dell'Australia orientale (Nuovo Galles del Sud)", "EST"}; + String EST_NSW[] = new String[] {"Ora standard dell'Australia orientale (Nuovo Galles del Sud)", "AEST", + "Ora estiva dell'Australia orientale (Nuovo Galles del Sud)", "AEDT"}; + String FET[] = new String[] {"Ora dei paesi europei pi\u00F9 orientali", "FET", + "Ora estiva dei paesi europei pi\u00F9 orientali", "FEST"}; String GHMT[] = new String[] {"Ora media del Ghana", "GMT", "Ora legale del Ghana", "GHST"}; String GAMBIER[] = new String[] {"Ora di Gambier", "GAMT", @@ -127,10 +133,12 @@ "Ora legale dell'India", "IDT"}; String JST[] = new String[] {"Ora solare del Giappone", "JST", "Ora legale del Giappone", "JDT"}; + String KRAT[] = new String[] {"Ora di Krasnojarsk", "KRAT", + "Ora estiva di Krasnojarsk", "KRAST"}; String KST[] = new String[] {"Ora solare della Corea", "KST", "Ora legale della Corea", "KDT"}; String LORD_HOWE[] = new String[] {"Ora standard di Lord Howe", "LHST", - "Ora estiva di Lord Howe", "LHST"}; + "Ora estiva di Lord Howe", "LHDT"}; String MHT[] = new String[] {"Ora delle Isole Marshall", "MHT", "Ora estiva delle Isole Marshall", "MHST"}; String MSK[] = new String[] {"Ora standard di Mosca", "MSK", @@ -153,48 +161,48 @@ "Ora legale di Pitcairn", "PDT"}; String PKT[] = new String[] {"Ora del Pakistan", "PKT", "Ora estiva del Pakistan", "PKST"}; + String PONT[] = new String[] {"Ora di Pohnpei", "PONT", + "Ora estiva di Pohnpei", "PONST"}; String PST[] = new String[] {"Ora solare della costa occidentale USA", "PST", "Ora legale della costa occidentale USA", "PDT"}; - String RST[] = new String[] {"Ora solare USA orientale", "EST", - "Ora legale USA centrale", "CDT"}; + String SAMOA[] = new String[] {"Ora standard di Samoa", "SST", + "Ora legale di Samoa", "SDT"}; + String IRKT[] = new String[] {"Ora di Irkutsk", "IRKT", + "Ora estiva di Irkutsk", "IRKST"}; String SAST[] = new String[] {"Ora solare del Sudafrica", "SAST", "Ora estiva del Sudafrica", "SAST"}; String SBT[] = new String[] {"Ora delle Isole Salomone", "SBT", "Ora estiva delle Isole Salomone", "SBST"}; String SGT[] = new String[] {"Ora di Singapore", "SGT", "Ora estiva di Singapore", "SGST"}; - String SLST[] = new String[] {"Ora media di Greenwich", "GMT", - "Ora legale della Sierra Leone", "SLST"}; - String TASMANIA[] = new String[] {"Ora orientale standard (Tasmania)", "EST", - "Ora estiva orientale (Tasmania)", "EST"}; + String TASMANIA[] = new String[] {"Ora standard orientale (Tasmania)", "AEST", + "Ora estiva orientale (Tasmania)", "AEDT"}; String TMT[] = new String[] {"Ora del Turkmenistan", "TMT", "Ora estiva del Turkmenistan", "TMST"}; - String TRUT[] = new String[] {"Ora di Truk", "TRUT", - "Ora estiva di Truk", "TRUST"}; String ULAT[]= new String[] {"Ora di Ulaanbaatar", "ULAT", "Ora estiva di Ulaanbaatar", "ULAST"}; - String WART[] = new String[] {"Ora dell'Argentina", "WART", - "Ora estiva dell'Argentina", "WARST"}; + String UTC[] = new String[] {"Tempo universale coordinato", "UTC", + "Tempo universale coordinato", "UTC"}; + String UZT[] = new String[] {"Ora dell'Uzbekistan", "UZT", + "Ora estiva dell'Uzbekistan", "UZST"}; + String VICTORIA[] = new String[] {"Ora standard orientale (Victoria)", "AEST", + "Ora estiva orientale (Victoria)", "AEDT"}; + String VLAT[] = new String[] {"Ora di Vladivostok", "VLAT", + "Ora estiva di Vladivostok", "VLAST"}; String WAT[] = new String[] {"Ora dell'Africa occidentale", "WAT", "Ora estiva dell'Africa occidentale", "WAST"}; String WET[] = new String[] {"Ora dell'Europa occidentale", "WET", "Ora estiva dell'Europa occidentale", "WEST"}; - String WIT[] = new String[] {"Ora dell'Indonesia occidentale", "WIT", + String WIT[] = new String[] {"Ora dell'Indonesia occidentale", "WIB", "Ora estiva dell'Indonesia occidentale", "WIST"}; - String WST_AUS[] = new String[] {"Ora solare dell'Australia occidentale", "WST", - "Ora estiva dell'Australia occidentale", "WST"}; - String SAMOA[] = new String[] {"Ora standard di Samoa", "SST", - "Ora legale di Samoa", "SDT"}; - String WST_SAMOA[] = new String[] {"Ora di Samoa", "WST", - "Ora estiva di Samoa", "WSST"}; - String ChST[] = new String[] {"Ora standard di Chamorro", "ChST", - "Ora legale di Chamorro", "ChDT"}; - String VICTORIA[] = new String[] {"Ora orientale standard (Victoria)", "EST", - "Ora estiva orientale (Victoria)", "EST"}; - String UTC[] = new String[] {"Tempo universale coordinato", "UTC", - "Tempo universale coordinato", "UTC"}; - String UZT[] = new String[] {"Ora dell'Uzbekistan", "UZT", - "Ora estiva dell'Uzbekistan", "UZST"}; + String WST_AUS[] = new String[] {"Ora standard dell'Australia occidentale", "AWST", + "Ora estiva dell'Australia occidentale", "AWDT"}; + String WST_SAMOA[] = new String[] {"Ora di Samoa", "WSST", + "Ora estiva di Samoa", "WSDT"}; + String XJT[] = new String[] {"Ora solare della Cina", "XJT", + "Ora legale della Cina", "XJDT"}; + String YAKT[] = new String[] {"Ora di Jakutsk", "YAKT", + "Ora estiva di Jakutsk", "YAKST"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -214,6 +222,7 @@ {"America/Anchorage", AKST}, {"AST", AKST}, {"America/Halifax", AST}, + {"America/Sitka", AKST}, {"America/St_Johns", NST}, {"CNT", NST}, {"Europe/Paris", CET}, @@ -255,10 +264,11 @@ {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, + {"Africa/Juba", EAT}, {"Africa/Kampala", EAT}, {"Africa/Khartoum", EAT}, {"Africa/Kigali", CAT}, @@ -300,7 +310,7 @@ {"America/Argentina/Rio_Gallegos", AGT}, {"America/Argentina/Salta", AGT}, {"America/Argentina/San_Juan", AGT}, - {"America/Argentina/San_Luis", WART}, + {"America/Argentina/San_Luis", AGT}, {"America/Argentina/Tucuman", AGT}, {"America/Argentina/Ushuaia", AGT}, {"America/Aruba", AST}, @@ -309,6 +319,7 @@ {"America/Atikokan", EST}, {"America/Atka", HAST}, {"America/Bahia", BRT}, + {"America/Bahia_Banderas", CST}, {"America/Barbados", AST}, {"America/Belem", BRT}, {"America/Belize", CST}, @@ -328,6 +339,7 @@ "Ora estiva della Guyana Francese", "GFST"}}, {"America/Cayman", EST}, {"America/Chihuahua", MST}, + {"America/Creston", MST}, {"America/Coral_Harbour", EST}, {"America/Cordoba", AGT}, {"America/Costa_Rica", CST}, @@ -339,7 +351,7 @@ {"America/Detroit", EST}, {"America/Dominica", AST}, {"America/Edmonton", MST}, - {"America/Eirunepe", AMT}, + {"America/Eirunepe", ACT}, {"America/El_Salvador", CST}, {"America/Ensenada", PST}, {"America/Fort_Wayne", EST}, @@ -348,7 +360,7 @@ {"America/Godthab", new String[] {"Ora della Groenlandia occidentale", "WGT", "Ora estiva della Groenlandia occidentale", "WGST"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -374,11 +386,13 @@ {"America/Kentucky/Louisville", EST}, {"America/Kentucky/Monticello", EST}, {"America/Knox_IN", CST}, + {"America/Kralendijk", AST}, {"America/La_Paz", new String[] {"Ora della Bolivia", "BOT", "Ora estiva della Bolivia", "BOST"}}, {"America/Lima", new String[] {"Ora del Per\u00f9", "PET", "Ora estiva del Per\u00f9", "PEST"}}, {"America/Louisville", EST}, + {"America/Lower_Princes", AST}, {"America/Maceio", BRT}, {"America/Managua", CST}, {"America/Manaus", AMT}, @@ -389,6 +403,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Ora solare di Saint-Pierre e Miquelon", "PMST", "Ora legale di Saint-Pierre e Miquelon", "PMDT"}}, @@ -402,6 +417,7 @@ {"America/Nipigon", EST}, {"America/Nome", AKST}, {"America/Noronha", NORONHA}, + {"America/North_Dakota/Beulah", CST}, {"America/North_Dakota/Center", CST}, {"America/North_Dakota/New_Salem", CST}, {"America/Ojinaga", MST}, @@ -411,15 +427,15 @@ "Ora estiva di Suriname", "SRST"}}, {"America/Port-au-Prince", EST}, {"America/Port_of_Spain", AST}, - {"America/Porto_Acre", AMT}, + {"America/Porto_Acre", ACT}, {"America/Porto_Velho", AMT}, {"America/Puerto_Rico", AST}, {"America/Rainy_River", CST}, {"America/Rankin_Inlet", CST}, {"America/Recife", BRT}, {"America/Regina", CST}, - {"America/Resolute", RST}, - {"America/Rio_Branco", AMT}, + {"America/Resolute", CST}, + {"America/Rio_Branco", ACT}, {"America/Rosario", AGT}, {"America/Santa_Isabel", PST}, {"America/Santarem", BRT}, @@ -446,10 +462,13 @@ {"America/Winnipeg", CST}, {"America/Yakutat", AKST}, {"America/Yellowknife", MST}, + {"Antarctica/Casey", WST_AUS}, {"Antarctica/Davis", new String[] {"Ora di Davis", "DAVT", "Ora estiva di Davis", "DAVST"}}, {"Antarctica/DumontDUrville", new String[] {"Ora di Dumont-d'Urville", "DDUT", "Ora estiva di Dumont-d'Urville", "DDUST"}}, + {"Antarctica/Macquarie", new String[] {"Ora dell'Isola Macquarie", "MIST", + "Ora estiva dell'Isola Macquarie", "MIDT"}}, {"Antarctica/Mawson", new String[] {"Ora di Mawson", "MAWT", "Ora estiva di Mawson", "MAWST"}}, {"Antarctica/McMurdo", NZST}, @@ -459,6 +478,8 @@ {"Antarctica/South_Pole", NZST}, {"Antarctica/Syowa", new String[] {"Ora di Syowa", "SYOT", "Ora estiva di Syowa", "SYOST"}}, + {"Antarctica/Troll", new String[] {"Tempo universale coordinato", "UTC", + "Ora estiva dell'Europa centrale", "CEST"}}, {"Antarctica/Vostok", new String[] {"Ora di Vostok", "VOST", "Ora estiva di Vostok", "VOSST"}}, {"Arctic/Longyearbyen", CET}, @@ -485,6 +506,7 @@ {"Asia/Brunei", new String[] {"Ora del Brunei", "BNT", "Ora estiva del Brunei", "BNST"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"Ora di Choibalsan", "CHOT", "Ora estiva di Choibalsan", "CHOST"}}, {"Asia/Chongqing", CTT}, @@ -500,27 +522,28 @@ "Ora estiva del Tagikistan", "TJST"}}, {"Asia/Gaza", EET}, {"Asia/Harbin", CTT}, + {"Asia/Hebron", EET}, {"Asia/Ho_Chi_Minh", ICT}, {"Asia/Hong_Kong", HKT}, {"Asia/Hovd", new String[] {"Ora di Hovd", "HOVT", "Ora estiva di Hovd", "HOVST"}}, - {"Asia/Irkutsk", new String[] {"Ora di Irkutsk", "IRKT", - "Ora estiva di Irkutsk", "IRKST"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, - {"Asia/Jayapura", new String[] {"Ora dell'Indonesia orientale", "EIT", + {"Asia/Jayapura", new String[] {"Ora dell'Indonesia orientale", "WIT", "Ora estiva dell'Indonesia orientale", "EIST"}}, {"Asia/Kabul", new String[] {"Ora dell'Afghanistan", "AFT", "Ora estiva dell'Afghanistan", "AFST"}}, {"Asia/Kamchatka", new String[] {"Ora di Petropavlovsk-Kamchatski", "PETT", "Ora estiva di Petropavlovsk-Kamchatski", "PETST"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, + {"Asia/Khandyga", new String[] {"Ora di Khandyga", "YAKT", + "Ora estiva di Khandyga", "YAKST"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"Ora di Krasnojarsk", "KRAT", - "Ora estiva di Krasnojarsk", "KRAST"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -533,7 +556,7 @@ "Ora estiva delle Filippine", "PHST"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"Ora di Oral", "ORAT", "Ora estiva di Oral", "ORAST"}}, @@ -554,6 +577,8 @@ {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -565,12 +590,12 @@ {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, + {"Asia/Ust-Nera", new String[] {"Ora di Ust-Nera", "VLAT", + "Ora estiva di Ust-Nera", "VLAST"}}, {"Asia/Vientiane", ICT}, - {"Asia/Vladivostok", new String[] {"Ora di Vladivostok", "VLAT", - "Ora estiva di Vladivostok", "VLAST"}}, - {"Asia/Yakutsk", new String[] {"Ora di Jakutsk", "YAKT", - "Ora estiva di Jakutsk", "YAKST"}}, + {"Asia/Vladivostok", VLAT}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"Ora di Ekaterinburg", "YEKT", "Ora estiva di Ekaterinburg", "YEKST"}}, {"Asia/Yerevan", ARMT}, @@ -597,8 +622,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", - "Central Western Summer Time (Australia)", "CWST"}}, + {"Australia/Eucla", new String[] {"Ora standard Australia centro-occidentale", "ACWST", + "Ora estiva Australia centro-occidentale", "ACWDT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -616,7 +641,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, - {"Brazil/Acre", AMT}, + {"Brazil/Acre", ACT}, {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, @@ -654,6 +679,7 @@ {"Europe/Bratislava", CET}, {"Europe/Brussels", CET}, {"Europe/Budapest", CET}, + {"Europe/Busingen", CET}, {"Europe/Chisinau", EET}, {"Europe/Copenhagen", CET}, {"Europe/Dublin", DUBLIN}, @@ -672,7 +698,7 @@ {"Europe/Madrid", CET}, {"Europe/Malta", CET}, {"Europe/Mariehamn", EET}, - {"Europe/Minsk", EET}, + {"Europe/Minsk", MSK}, {"Europe/Monaco", CET}, {"Europe/Moscow", MSK}, {"Europe/Nicosia", EET}, @@ -685,7 +711,7 @@ "Ora estiva di Samara", "SAMST"}}, {"Europe/San_Marino", CET}, {"Europe/Sarajevo", CET}, - {"Europe/Simferopol", EET}, + {"Europe/Simferopol", MSK}, {"Europe/Skopje", CET}, {"Europe/Sofia", EET}, {"Europe/Stockholm", CET}, @@ -697,8 +723,7 @@ {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"Ora di Volgograd", "VOLT", - "Ora estiva di Volgograd", "VOLST"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, @@ -751,7 +776,10 @@ {"PRT", AST}, {"Pacific/Apia", WST_SAMOA}, {"Pacific/Auckland", NZST}, + {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST", + "Bougainville Daylight Time", "BST"}}, {"Pacific/Chatham", CHAST}, + {"Pacific/Chuuk", CHUT}, {"Pacific/Easter", EASTER}, {"Pacific/Efate", new String[] {"Ora di Vanuatu", "VUT", "Ora estiva di Vanuatu", "VUST"}}, @@ -790,8 +818,8 @@ {"Pacific/Palau", new String[] {"Ora di Palau", "PWT", "Ora estiva di Palau", "PWST"}}, {"Pacific/Pitcairn", PITCAIRN}, - {"Pacific/Ponape", new String[] {"Ora di Ponape", "PONT", - "Ora estiva di Ponape", "PONST"}}, + {"Pacific/Pohnpei", PONT}, + {"Pacific/Ponape", PONT}, {"Pacific/Port_Moresby", new String[] {"Ora di Papua Nuova Guinea", "PGT", "Ora estiva di Papua Nuova Guinea", "PGST"}}, {"Pacific/Rarotonga", new String[] {"Ora delle Isole Cook", "CKT", @@ -804,12 +832,12 @@ "Ora estiva delle Isole Gilbert", "GILST"}}, {"Pacific/Tongatapu", new String[] {"Ora di Tonga", "TOT", "Ora estiva di Tonga", "TOST"}}, - {"Pacific/Truk", TRUT}, + {"Pacific/Truk", CHUT}, {"Pacific/Wake", new String[] {"Ora di Wake", "WAKT", "Ora estiva di Wake", "WAKST"}}, {"Pacific/Wallis", new String[] {"Ora di Wallis e Futuna", "WFT", "Ora estiva di Wallis e Futuna", "WFST"}}, - {"Pacific/Yap", TRUT}, + {"Pacific/Yap", CHUT}, {"Poland", CET}, {"PRC", CTT}, {"PST8PDT", PST}, diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,8 +45,8 @@ protected final Object[][] getContents() { String ACT[] = new String[] {"\u30a2\u30af\u30ec\u6642\u9593", "ACT", "\u30a2\u30af\u30ec\u590f\u6642\u9593", "ACST"}; - String ADELAIDE[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642 (\u5357\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "CST", - "\u4e2d\u90e8\u590f\u6642\u9593 (\u5357\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "CST"}; + String ADELAIDE[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACST", + "\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACDT"}; String AGT[] = new String[] {"\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "ART", "\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "ARST"}; String AKST[] = new String[] {"\u30a2\u30e9\u30b9\u30ab\u6a19\u6e96\u6642", "AKST", @@ -61,10 +61,10 @@ "\u5927\u897f\u6d0b\u590f\u6642\u9593", "ADT"}; String BDT[] = new String[] {"\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5\u6642\u9593", "BDT", "\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5\u590f\u6642\u9593", "BDST"}; - String BRISBANE[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30af\u30a4\u30fc\u30f3\u30ba\u30e9\u30f3\u30c9)", "EST", - "\u6771\u90e8\u590f\u6642\u9593 (\u30af\u30a4\u30fc\u30f3\u30ba\u30e9\u30f3\u30c9)", "EST"}; - String BROKEN_HILL[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642 (\u5357\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2/\u30cb\u30e5\u30fc\u30b5\u30a6\u30b9\u30a6\u30a7\u30fc\u30eb\u30ba)", "CST", - "\u4e2d\u90e8\u590f\u6642\u9593 (\u5357\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2/\u30cb\u30e5\u30fc\u30b5\u30a6\u30b9\u30a6\u30a7\u30fc\u30eb\u30ba)", "CST"}; + String BRISBANE[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "AEST", + "\u6771\u90E8\u590F\u6642\u9593(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "AEDT"}; + String BROKEN_HILL[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "ACST", + "\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "ACDT"}; String BRT[] = new String[] {"\u30d6\u30e9\u30b8\u30eb\u6642\u9593", "BRT", "\u30d6\u30e9\u30b8\u30eb\u590f\u6642\u9593", "BRST"}; String BTT[] = new String[] {"\u30d6\u30fc\u30bf\u30f3\u6642\u9593", "BTT", @@ -75,7 +75,11 @@ "\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "CEST"}; String CHAST[] = new String[] {"\u30c1\u30e3\u30bf\u30e0\u6a19\u6e96\u6642", "CHAST", "\u30c1\u30e3\u30bf\u30e0\u590f\u6642\u9593", "CHADT"}; - String CIT[] = new String[] {"\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "CIT", + String ChST[] = new String[] {"\u30b0\u30a2\u30e0\u6a19\u6e96\u6642", "ChST", + "\u30b0\u30a2\u30e0\u590f\u6642\u9593", "ChDT"}; + String CHUT[] = new String[] {"\u30C1\u30E5\u30FC\u30AF\u6642\u9593", "CHUT", + "Chuuk Time", "CHUST"}; + String CIT[] = new String[] {"\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "WITA", "\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "CIST"}; String CLT[] = new String[] {"\u30c1\u30ea\u6642\u9593", "CLT", "\u30c1\u30ea\u590f\u6642\u9593", "CLST"}; @@ -83,10 +87,10 @@ "\u4e2d\u90e8\u590f\u6642\u9593", "CDT"}; String CTT[] = new String[] {"\u4e2d\u56fd\u6a19\u6e96\u6642", "CST", "\u4e2d\u56fd\u590f\u6642\u9593", "CDT"}; - String CUBA[] = new String[] {"Cuba Standard Time", "CST", - "Cuba Daylight Time", "CDT"}; - String DARWIN[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642 (\u30ce\u30fc\u30b6\u30f3\u30c6\u30ea\u30c8\u30ea\u30fc)", "CST", - "\u4e2d\u90e8\u590f\u6642\u9593 (\u30ce\u30fc\u30b6\u30f3\u30c6\u30ea\u30c8\u30ea\u30fc)", "CST"}; + String CUBA[] = new String[] {"\u30ad\u30e5\u30fc\u30d0\u6a19\u6e96\u6642", "CST", + "\u30ad\u30e5\u30fc\u30d0\u590f\u6642\u9593", "CDT"}; + String DARWIN[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "ACST", + "\u4E2D\u90E8\u590F\u6642\u9593(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "ACDT"}; String DUBLIN[] = new String[] {"\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642", "GMT", "\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9\u590f\u6642\u9593", "IST"}; String EAT[] = new String[] {"\u6771\u30a2\u30d5\u30ea\u30ab\u6642\u9593", "EAT", @@ -99,8 +103,10 @@ "\u6771\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u590f\u6642\u9593", "EGST"}; String EST[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642", "EST", "\u6771\u90e8\u590f\u6642\u9593", "EDT"}; - String EST_NSW[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30cb\u30e5\u30fc\u30b5\u30a6\u30b9\u30a6\u30a7\u30fc\u30eb\u30ba)", "EST", - "\u6771\u90e8\u590f\u6642\u9593 (\u30cb\u30e5\u30fc\u30b5\u30a6\u30b9\u30a6\u30a7\u30fc\u30eb\u30ba)", "EST"}; + String EST_NSW[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "AEST", + "\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "AEDT"}; + String FET[] = new String[] {"\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593", "FET", + "\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u590F\u6642\u9593", "FEST"}; String GHMT[] = new String[] {"\u30ac\u30fc\u30ca\u6a19\u6e96\u6642", "GMT", "\u30ac\u30fc\u30ca\u590f\u6642\u9593", "GHST"}; String GAMBIER[] = new String[] {"\u30ac\u30f3\u30d3\u30a2\u6642\u9593", "GAMT", @@ -127,10 +133,12 @@ "\u30a4\u30f3\u30c9\u590f\u6642\u9593", "IDT"}; String JST[] = new String[] {"\u65e5\u672c\u6a19\u6e96\u6642", "JST", "\u65e5\u672c\u590f\u6642\u9593", "JDT"}; + String KRAT[] = new String[] {"\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u6642\u9593", "KRAT", + "\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u590f\u6642\u9593", "KRAST"}; String KST[] = new String[] {"\u97d3\u56fd\u6a19\u6e96\u6642", "KST", "\u97d3\u56fd\u590f\u6642\u9593", "KDT"}; String LORD_HOWE[] = new String[] {"\u30ed\u30fc\u30c9\u30cf\u30a6\u5cf6\u6a19\u6e96\u6642", "LHST", - "\u30ed\u30fc\u30c9\u30cf\u30a6\u5cf6\u590f\u6642\u9593", "LHST"}; + "\u30ed\u30fc\u30c9\u30cf\u30a6\u5cf6\u590f\u6642\u9593", "LHDT"}; String MHT[] = new String[] {"\u30de\u30fc\u30b7\u30e3\u30eb\u5cf6\u6642\u9593", "MHT", "\u30de\u30fc\u30b7\u30e3\u30eb\u5cf6\u590f\u6642\u9593", "MHST"}; String MSK[] = new String[] {"\u30e2\u30b9\u30af\u30ef\u6a19\u6e96\u6642", "MSK", @@ -153,48 +161,48 @@ "\u30d4\u30c8\u30b1\u30eb\u30f3\u5cf6\u590f\u6642\u9593", "PDT"}; String PKT[] = new String[] {"\u30d1\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "PKT", "\u30d1\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "PKST"}; + String PONT[] = new String[] {"\u30DD\u30F3\u30DA\u30A4\u6642\u9593", "PONT", + "\u30DD\u30F3\u30DA\u30A4\u590F\u6642\u9593", "PONST"}; String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642", "PST", "\u592a\u5e73\u6d0b\u590f\u6642\u9593", "PDT"}; - String RST[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642", "EST", - "\u4e2d\u90e8\u590f\u6642\u9593", "CDT"}; + String SAMOA[] = new String[] {"\u30b5\u30e2\u30a2\u6a19\u6e96\u6642", "SST", + "\u30b5\u30e2\u30a2\u590f\u6642\u9593", "SDT"}; + String IRKT[] = new String[] {"\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u6642\u9593", "IRKT", + "\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "IRKST"}; String SAST[] = new String[] {"\u5357\u30a2\u30d5\u30ea\u30ab\u6a19\u6e96\u6642", "SAST", "\u5357\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "SAST"}; String SBT[] = new String[] {"\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6\u6642\u9593", "SBT", "\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6\u590f\u6642\u9593", "SBST"}; String SGT[] = new String[] {"\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb\u6642\u9593", "SGT", "\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb\u590f\u6642\u9593", "SGST"}; - String SLST[] = new String[] {"\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642", "GMT", - "\u30b7\u30a8\u30e9\u30ec\u30aa\u30cd\u590f\u6642\u9593", "SLST"}; - String TASMANIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30bf\u30b9\u30de\u30cb\u30a2)", "EST", - "\u6771\u90e8\u590f\u6642\u9593 (\u30bf\u30b9\u30de\u30cb\u30a2)", "EST"}; + String TASMANIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2)", "AEST", + "\u6771\u90E8\u590F\u6642\u9593(\u30BF\u30B9\u30DE\u30CB\u30A2)", "AEDT"}; String TMT[] = new String[] {"\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u6642\u9593", "TMT", "\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u590f\u6642\u9593", "TMST"}; - String TRUT[] = new String[] {"\u30c8\u30e9\u30c3\u30af\u6642\u9593", "TRUT", - "\u30c8\u30e9\u30c3\u30af\u590f\u6642\u9593", "TRUST"}; String ULAT[]= new String[] {"\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u6642\u9593", "ULAT", "\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u590f\u6642\u9593", "ULAST"}; - String WART[] = new String[] {"\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "WART", - "\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "WARST"}; + String UTC[] = new String[] {"\u5354\u5b9a\u4e16\u754c\u6642", "UTC", + "\u5354\u5b9a\u4e16\u754c\u6642", "UTC"}; + String UZT[] = new String[] {"\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "UZT", + "\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "UZST"}; + String VICTORIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2)", "AEST", + "\u6771\u90E8\u590F\u6642\u9593(\u30D3\u30AF\u30C8\u30EA\u30A2)", "AEDT"}; + String VLAT[] = new String[] {"\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u6642\u9593", "VLAT", + "\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u590f\u6642\u9593", "VLAST"}; String WAT[] = new String[] {"\u897f\u30a2\u30d5\u30ea\u30ab\u6642\u9593", "WAT", "\u897f\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "WAST"}; String WET[] = new String[] {"\u897f\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593", "WET", "\u897f\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "WEST"}; - String WIT[] = new String[] {"\u897f\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "WIT", + String WIT[] = new String[] {"\u897f\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "WIB", "\u897f\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "WIST"}; - String WST_AUS[] = new String[] {"\u897f\u90e8\u6a19\u6e96\u6642 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "WST", - "\u897f\u90e8\u590f\u6642\u9593 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "WST"}; - String SAMOA[] = new String[] {"\u30b5\u30e2\u30a2\u6a19\u6e96\u6642", "SST", - "\u30b5\u30e2\u30a2\u590f\u6642\u9593", "SDT"}; - String WST_SAMOA[] = new String[] {"\u897f\u30b5\u30e2\u30a2\u6642\u9593", "WST", - "\u897f\u30b5\u30e2\u30a2\u590f\u6642\u9593", "WSST"}; - String ChST[] = new String[] {"\u30b0\u30a2\u30e0\u6a19\u6e96\u6642", "ChST", - "\u30b0\u30a2\u30e0\u590f\u6642\u9593", "ChDT"}; - String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST", - "\u6771\u90e8\u590f\u6642\u9593 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST"}; - String UTC[] = new String[] {"\u5354\u5b9a\u4e16\u754c\u6642", "UTC", - "\u5354\u5b9a\u4e16\u754c\u6642", "UTC"}; - String UZT[] = new String[] {"\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "UZT", - "\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "UZST"}; + String WST_AUS[] = new String[] {"\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "AWST", + "\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "AWDT"}; + String WST_SAMOA[] = new String[] {"\u897f\u30b5\u30e2\u30a2\u6642\u9593", "WSST", + "\u897f\u30b5\u30e2\u30a2\u590f\u6642\u9593", "WSDT"}; + String XJT[] = new String[] {"\u4e2d\u56fd\u6a19\u6e96\u6642", "XJT", + "\u4e2d\u56fd\u590f\u6642\u9593", "XJDT"}; + String YAKT[] = new String[] {"\u30e4\u30af\u30fc\u30c4\u30af\u6642\u9593", "YAKT", + "\u30e4\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "YAKST"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -214,6 +222,7 @@ {"America/Anchorage", AKST}, {"AST", AKST}, {"America/Halifax", AST}, + {"America/Sitka", AKST}, {"America/St_Johns", NST}, {"CNT", NST}, {"Europe/Paris", CET}, @@ -255,10 +264,11 @@ {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, + {"Africa/Juba", EAT}, {"Africa/Kampala", EAT}, {"Africa/Khartoum", EAT}, {"Africa/Kigali", CAT}, @@ -300,7 +310,7 @@ {"America/Argentina/Rio_Gallegos", AGT}, {"America/Argentina/Salta", AGT}, {"America/Argentina/San_Juan", AGT}, - {"America/Argentina/San_Luis", WART}, + {"America/Argentina/San_Luis", AGT}, {"America/Argentina/Tucuman", AGT}, {"America/Argentina/Ushuaia", AGT}, {"America/Aruba", AST}, @@ -309,6 +319,7 @@ {"America/Atikokan", EST}, {"America/Atka", HAST}, {"America/Bahia", BRT}, + {"America/Bahia_Banderas", CST}, {"America/Barbados", AST}, {"America/Belem", BRT}, {"America/Belize", CST}, @@ -328,6 +339,7 @@ "\u4ecf\u9818\u30ae\u30a2\u30ca\u590f\u6642\u9593", "GFST"}}, {"America/Cayman", EST}, {"America/Chihuahua", MST}, + {"America/Creston", MST}, {"America/Coral_Harbour", EST}, {"America/Cordoba", AGT}, {"America/Costa_Rica", CST}, @@ -339,7 +351,7 @@ {"America/Detroit", EST}, {"America/Dominica", AST}, {"America/Edmonton", MST}, - {"America/Eirunepe", AMT}, + {"America/Eirunepe", ACT}, {"America/El_Salvador", CST}, {"America/Ensenada", PST}, {"America/Fort_Wayne", EST}, @@ -348,7 +360,7 @@ {"America/Godthab", new String[] {"\u897f\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u6642\u9593", "WGT", "\u897f\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u590f\u6642\u9593", "WGST"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -374,11 +386,13 @@ {"America/Kentucky/Louisville", EST}, {"America/Kentucky/Monticello", EST}, {"America/Knox_IN", CST}, + {"America/Kralendijk", AST}, {"America/La_Paz", new String[] {"\u30dc\u30ea\u30d3\u30a2\u6642\u9593", "BOT", "\u30dc\u30ea\u30d3\u30a2\u590f\u6642\u9593", "BOST"}}, {"America/Lima", new String[] {"\u30da\u30eb\u30fc\u6642\u9593", "PET", "\u30da\u30eb\u30fc\u590f\u6642\u9593", "PEST"}}, {"America/Louisville", EST}, + {"America/Lower_Princes", AST}, {"America/Maceio", BRT}, {"America/Managua", CST}, {"America/Manaus", AMT}, @@ -389,6 +403,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u6a19\u6e96\u6642", "PMST", "\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u590f\u6642\u9593", "PMDT"}}, @@ -402,6 +417,7 @@ {"America/Nipigon", EST}, {"America/Nome", AKST}, {"America/Noronha", NORONHA}, + {"America/North_Dakota/Beulah", CST}, {"America/North_Dakota/Center", CST}, {"America/North_Dakota/New_Salem", CST}, {"America/Ojinaga", MST}, @@ -411,15 +427,15 @@ "\u30b9\u30ea\u30ca\u30e0\u590f\u6642\u9593", "SRST"}}, {"America/Port-au-Prince", EST}, {"America/Port_of_Spain", AST}, - {"America/Porto_Acre", AMT}, + {"America/Porto_Acre", ACT}, {"America/Porto_Velho", AMT}, {"America/Puerto_Rico", AST}, {"America/Rainy_River", CST}, {"America/Rankin_Inlet", CST}, {"America/Recife", BRT}, {"America/Regina", CST}, - {"America/Resolute", RST}, - {"America/Rio_Branco", AMT}, + {"America/Resolute", CST}, + {"America/Rio_Branco", ACT}, {"America/Rosario", AGT}, {"America/Santa_Isabel", PST}, {"America/Santarem", BRT}, @@ -446,10 +462,13 @@ {"America/Winnipeg", CST}, {"America/Yakutat", AKST}, {"America/Yellowknife", MST}, + {"Antarctica/Casey", WST_AUS}, {"Antarctica/Davis", new String[] {"\u30c7\u30a4\u30d3\u30b9\u6642\u9593", "DAVT", "\u30c7\u30a4\u30d3\u30b9\u590f\u6642\u9593", "DAVST"}}, {"Antarctica/DumontDUrville", new String[] {"\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u6642\u9593", "DDUT", "\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u590f\u6642\u9593", "DDUST"}}, + {"Antarctica/Macquarie", new String[] {"\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u6642\u9593", "MIST", + "\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u590F\u6642\u9593", "MIDT"}}, {"Antarctica/Mawson", new String[] {"\u30e2\u30fc\u30bd\u30f3\u6642\u9593", "MAWT", "\u30e2\u30fc\u30bd\u30f3\u590f\u6642\u9593", "MAWST"}}, {"Antarctica/McMurdo", NZST}, @@ -459,6 +478,8 @@ {"Antarctica/South_Pole", NZST}, {"Antarctica/Syowa", new String[] {"\u662d\u548c\u57fa\u5730\u6642\u9593", "SYOT", "\u662d\u548c\u57fa\u5730\u590f\u6642\u9593", "SYOST"}}, + {"Antarctica/Troll", new String[] {"\u5354\u5b9a\u4e16\u754c\u6642", "UTC", + "\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "CEST"}}, {"Antarctica/Vostok", new String[] {"\u30dc\u30b9\u30c8\u30fc\u30af\u57fa\u5730\u6642\u9593", "VOST", "\u30dc\u30b9\u30c8\u30fc\u30af\u57fa\u5730\u590f\u6642\u9593", "VOSST"}}, {"Arctic/Longyearbyen", CET}, @@ -485,6 +506,7 @@ {"Asia/Brunei", new String[] {"\u30d6\u30eb\u30cd\u30a4\u6642\u9593", "BNT", "\u30d6\u30eb\u30cd\u30a4\u590f\u6642\u9593", "BNST"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"\u30c1\u30e7\u30a4\u30d0\u30eb\u30b5\u30f3\u6642\u9593", "CHOT", "\u30c1\u30e7\u30a4\u30d0\u30eb\u30b5\u30f3\u590f\u6642\u9593", "CHOST"}}, {"Asia/Chongqing", CTT}, @@ -500,27 +522,28 @@ "\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "TJST"}}, {"Asia/Gaza", EET}, {"Asia/Harbin", CTT}, + {"Asia/Hebron", EET}, {"Asia/Ho_Chi_Minh", ICT}, {"Asia/Hong_Kong", HKT}, {"Asia/Hovd", new String[] {"\u30db\u30d6\u30c9\u6642\u9593", "HOVT", "\u30db\u30d6\u30c9\u590f\u6642\u9593", "HOVST"}}, - {"Asia/Irkutsk", new String[] {"\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u6642\u9593", "IRKT", - "\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "IRKST"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, - {"Asia/Jayapura", new String[] {"\u6771\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "EIT", + {"Asia/Jayapura", new String[] {"\u6771\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "WIT", "\u6771\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "EIST" }}, {"Asia/Kabul", new String[] {"\u30a2\u30d5\u30ac\u30cb\u30b9\u30bf\u30f3\u6642\u9593", "AFT", "\u30a2\u30d5\u30ac\u30cb\u30b9\u30bf\u30f3\u590f\u6642\u9593", "AFST"}}, {"Asia/Kamchatka", new String[] {"\u30da\u30c8\u30ed\u30d1\u30d6\u30ed\u30d5\u30b9\u30af\u30ab\u30e0\u30c1\u30e3\u30c4\u30ad\u30fc\u6642\u9593", "PETT", "\u30da\u30c8\u30ed\u30d1\u30d6\u30ed\u30d5\u30b9\u30af\u30ab\u30e0\u30c1\u30e3\u30c4\u30ad\u30fc\u590f\u6642\u9593", "PETST"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, + {"Asia/Khandyga", new String[] {"\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u6642\u9593", "YAKT", + "\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u590F\u6642\u9593", "YAKST"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u6642\u9593", "KRAT", - "\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u590f\u6642\u9593", "KRAST"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -533,7 +556,7 @@ "\u30d5\u30a3\u30ea\u30d4\u30f3\u590f\u6642\u9593", "PHST"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"\u30aa\u30e9\u30eb\u6642\u9593", "ORAT", "\u30aa\u30e9\u30eb\u590f\u6642\u9593", "ORAST"}}, @@ -554,6 +577,8 @@ {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -565,12 +590,12 @@ {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, + {"Asia/Ust-Nera", new String[] {"\u30A6\u30B9\u30C1\u30CD\u30E9\u6642\u9593", "VLAT", + "\u30A6\u30B9\u30C1\u30CD\u30E9\u590F\u6642\u9593", "VLAST"}}, {"Asia/Vientiane", ICT}, - {"Asia/Vladivostok", new String[] {"\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u6642\u9593", "VLAT", - "\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u590f\u6642\u9593", "VLAST"}}, - {"Asia/Yakutsk", new String[] {"\u30e4\u30af\u30fc\u30c4\u30af\u6642\u9593", "YAKT", - "\u30e4\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "YAKST"}}, + {"Asia/Vladivostok", VLAT}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"\u30a8\u30ab\u30c6\u30ea\u30f3\u30d6\u30eb\u30b0\u6642\u9593", "YEKT", "\u30a8\u30ab\u30c6\u30ea\u30f3\u30d6\u30eb\u30b0\u590f\u6642\u9593", "YEKST"}}, {"Asia/Yerevan", ARMT}, @@ -597,8 +622,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", - "Central Western Summer Time (Australia)", "CWST"}}, + {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACWST", + "\u4E2D\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACWDT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -616,7 +641,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, - {"Brazil/Acre", AMT}, + {"Brazil/Acre", ACT}, {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, @@ -654,6 +679,7 @@ {"Europe/Bratislava", CET}, {"Europe/Brussels", CET}, {"Europe/Budapest", CET}, + {"Europe/Busingen", CET}, {"Europe/Chisinau", EET}, {"Europe/Copenhagen", CET}, {"Europe/Dublin", DUBLIN}, @@ -672,7 +698,7 @@ {"Europe/Madrid", CET}, {"Europe/Malta", CET}, {"Europe/Mariehamn", EET}, - {"Europe/Minsk", EET}, + {"Europe/Minsk", MSK}, {"Europe/Monaco", CET}, {"Europe/Moscow", MSK}, {"Europe/Nicosia", EET}, @@ -685,7 +711,7 @@ "\u30b5\u30de\u30e9\u590f\u6642\u9593", "SAMST"}}, {"Europe/San_Marino", CET}, {"Europe/Sarajevo", CET}, - {"Europe/Simferopol", EET}, + {"Europe/Simferopol", MSK}, {"Europe/Skopje", CET}, {"Europe/Sofia", EET}, {"Europe/Stockholm", CET}, @@ -697,8 +723,7 @@ {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"\u30dc\u30eb\u30b4\u30b0\u30e9\u30fc\u30c9\u6642\u9593", "VOLT", - "\u30dc\u30eb\u30b4\u30b0\u30e9\u30fc\u30c9\u590f\u6642\u9593", "VOLST"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, @@ -751,7 +776,10 @@ {"PRT", AST}, {"Pacific/Apia", WST_SAMOA}, {"Pacific/Auckland", NZST}, + {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST", + "Bougainville Daylight Time", "BST"}}, {"Pacific/Chatham", CHAST}, + {"Pacific/Chuuk", CHUT}, {"Pacific/Easter", EASTER}, {"Pacific/Efate", new String[] {"\u30d0\u30cc\u30a2\u30c4\u6642\u9593", "VUT", "\u30d0\u30cc\u30a2\u30c4\u590f\u6642\u9593", "VUST"}}, @@ -790,8 +818,8 @@ {"Pacific/Palau", new String[] {"\u30d1\u30e9\u30aa\u6642\u9593", "PWT", "\u30d1\u30e9\u30aa\u590f\u6642\u9593", "PWST"}}, {"Pacific/Pitcairn", PITCAIRN}, - {"Pacific/Ponape", new String[] {"\u30dd\u30ca\u30da\u6642\u9593", "PONT", - "\u30dd\u30ca\u30da\u590f\u6642\u9593", "PONST"}}, + {"Pacific/Pohnpei", PONT}, + {"Pacific/Ponape", PONT}, {"Pacific/Port_Moresby", new String[] {"\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2\u6642\u9593", "PGT", "\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2\u590f\u6642\u9593", "PGST"}}, {"Pacific/Rarotonga", new String[] {"\u30af\u30c3\u30af\u8af8\u5cf6\u6642\u9593", "CKT", @@ -804,12 +832,12 @@ "\u30ae\u30eb\u30d0\u30fc\u30c8\u8af8\u5cf6\u590f\u6642\u9593", "GILST"}}, {"Pacific/Tongatapu", new String[] {"\u30c8\u30f3\u30ac\u6642\u9593", "TOT", "\u30c8\u30f3\u30ac\u590f\u6642\u9593", "TOST"}}, - {"Pacific/Truk", TRUT}, + {"Pacific/Truk", CHUT}, {"Pacific/Wake", new String[] {"\u30a6\u30a7\u30fc\u30af\u6642\u9593", "WAKT", "\u30a6\u30a7\u30fc\u30af\u590f\u6642\u9593", "WAKST"}}, {"Pacific/Wallis", new String[] {"\u30ef\u30ea\u30b9\u53ca\u3073\u30d5\u30c4\u30ca\u6642\u9593", "WFT", "\u30ef\u30ea\u30b9\u53ca\u3073\u30d5\u30c4\u30ca\u590f\u6642\u9593", "WFST"}}, - {"Pacific/Yap", TRUT}, + {"Pacific/Yap", CHUT}, {"Poland", CET}, {"PRC", CTT}, {"PST8PDT", PST}, diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,8 +45,8 @@ protected final Object[][] getContents() { String ACT[] = new String[] {"Acre Time", "ACT", "Acre Summer Time", "ACST"}; - String ADELAIDE[] = new String[] {"Central Standard Time (South Australia)", "CST", - "Central Summer Time (South Australia)", "CST"}; + String ADELAIDE[] = new String[] {"Australian Central Standard Time (South Australia)", "ACST", + "Australian Central Daylight Time (South Australia)", "ACDT"}; String AGT[] = new String[] {"Argentine Time", "ART", "Argentine Summer Time", "ARST"}; String AKST[] = new String[] {"Alaska Standard Time", "AKST", @@ -61,10 +61,10 @@ "Atlantic Daylight Time", "ADT"}; String BDT[] = new String[] {"Bangladesh Time", "BDT", "Bangladesh Summer Time", "BDST"}; - String BRISBANE[] = new String[] {"Eastern Standard Time (Queensland)", "EST", - "Eastern Summer Time (Queensland)", "EST"}; - String BROKEN_HILL[] = new String[] {"Central Standard Time (South Australia/New South Wales)", "CST", - "Central Summer Time (South Australia/New South Wales)", "CST"}; + String BRISBANE[] = new String[] {"Australian Eastern Standard Time (Queensland)", "AEST", + "Australian Eastern Daylight Time (Queensland)", "AEDT"}; + String BROKEN_HILL[] = new String[] {"Australian Central Standard Time (South Australia/New South Wales)", "ACST", + "Australian Central Daylight Time (South Australia/New South Wales)", "ACDT"}; String BRT[] = new String[] {"Brasilia Time", "BRT", "Brasilia Summer Time", "BRST"}; String BTT[] = new String[] {"Bhutan Time", "BTT", @@ -75,7 +75,11 @@ "Central European Summer Time", "CEST"}; String CHAST[] = new String[] {"Chatham Standard Time", "CHAST", "Chatham Daylight Time", "CHADT"}; - String CIT[] = new String[] {"Central Indonesia Time", "CIT", + String ChST[] = new String[] {"Chamorro Standard Time", "ChST", + "Chamorro Daylight Time", "ChDT"}; + String CHUT[] = new String[] {"Chuuk Time", "CHUT", + "Chuuk Summer Time", "CHUST"}; + String CIT[] = new String[] {"Central Indonesia Time", "WITA", "Central Indonesia Summer Time", "CIST"}; String CLT[] = new String[] {"Chile Time", "CLT", "Chile Summer Time", "CLST"}; @@ -85,8 +89,8 @@ "China Daylight Time", "CDT"}; String CUBA[] = new String[] {"Cuba Standard Time", "CST", "Cuba Daylight Time", "CDT"}; - String DARWIN[] = new String[] {"Central Standard Time (Northern Territory)", "CST", - "Central Summer Time (Northern Territory)", "CST"}; + String DARWIN[] = new String[] {"Australian Central Standard Time (Northern Territory)", "ACST", + "Australian Central Daylight Time (Northern Territory)", "ACDT"}; String DUBLIN[] = new String[] {"Greenwich Mean Time", "GMT", "Irish Summer Time", "IST"}; String EAT[] = new String[] {"Eastern African Time", "EAT", @@ -99,8 +103,10 @@ "Eastern Greenland Summer Time", "EGST"}; String EST[] = new String[] {"Eastern Standard Time", "EST", "Eastern Daylight Time", "EDT"}; - String EST_NSW[] = new String[] {"Eastern Standard Time (New South Wales)", "EST", - "Eastern Summer Time (New South Wales)", "EST"}; + String EST_NSW[] = new String[] {"Australian Eastern Standard Time (New South Wales)", "AEST", + "Australian Eastern Daylight Time (New South Wales)", "AEDT"}; + String FET[] = new String[] {"Further-eastern European Time", "FET", + "Further-eastern European Summer Time", "FEST"}; String GHMT[] = new String[] {"Ghana Mean Time", "GMT", "Ghana Summer Time", "GHST"}; String GAMBIER[] = new String[] {"Gambier Time", "GAMT", @@ -127,10 +133,12 @@ "India Daylight Time", "IDT"}; String JST[] = new String[] {"Japan Standard Time", "JST", "Japan Daylight Time", "JDT"}; + String KRAT[] = new String[] {"Krasnoyarsk Time", "KRAT", + "Krasnoyarsk Summer Time", "KRAST"}; String KST[] = new String[] {"Korea Standard Time", "KST", "Korea Daylight Time", "KDT"}; String LORD_HOWE[] = new String[] {"Lord Howe Standard Time", "LHST", - "Lord Howe Summer Time", "LHST"}; + "Lord Howe Daylight Time", "LHDT"}; String MHT[] = new String[] {"Marshall Islands Time", "MHT", "Marshall Islands Summer Time", "MHST"}; String MSK[] = new String[] {"Moscow Standard Time", "MSK", @@ -153,48 +161,48 @@ "Pitcairn Daylight Time", "PDT"}; String PKT[] = new String[] {"Pakistan Time", "PKT", "Pakistan Summer Time", "PKST"}; + String PONT[] = new String[] {"Pohnpei Time", "PONT", + "Pohnpei Summer Time", "PONST"}; String PST[] = new String[] {"Pacific Standard Time", "PST", "Pacific Daylight Time", "PDT"}; - String RST[] = new String[] {"Eastern Standard Time", "EST", - "Central Daylight Time", "CDT"}; + String SAMOA[] = new String[] {"Samoa Standard Time", "SST", + "Samoa Daylight Time", "SDT"}; String SAST[] = new String[] {"South Africa Standard Time", "SAST", "South Africa Summer Time", "SAST"}; + String IRKT[] = new String[] {"Irkutsk Time", "IRKT", + "Irkutsk Summer Time", "IRKST"}; String SBT[] = new String[] {"Solomon Is. Time", "SBT", "Solomon Is. Summer Time", "SBST"}; String SGT[] = new String[] {"Singapore Time", "SGT", "Singapore Summer Time", "SGST"}; - String SLST[] = new String[] {"Greenwich Mean Time", "GMT", - "Sierra Leone Summer Time", "SLST"}; - String TASMANIA[] = new String[] {"Eastern Standard Time (Tasmania)", "EST", - "Eastern Summer Time (Tasmania)", "EST"}; + String TASMANIA[] = new String[] {"Australian Eastern Standard Time (Tasmania)", "AEST", + "Australian Eastern Daylight Time (Tasmania)", "AEDT"}; String TMT[] = new String[] {"Turkmenistan Time", "TMT", "Turkmenistan Summer Time", "TMST"}; - String TRUT[] = new String[] {"Truk Time", "TRUT", - "Truk Summer Time", "TRUST"}; String ULAT[]= new String[] {"Ulaanbaatar Time", "ULAT", "Ulaanbaatar Summer Time", "ULAST"}; - String WART[] = new String[] {"Western Argentine Time", "WART", - "Western Argentine Summer Time", "WARST"}; + String UTC[] = new String[] {"Coordinated Universal Time", "UTC", + "Coordinated Universal Time", "UTC"}; + String UZT[] = new String[] {"Uzbekistan Time", "UZT", + "Uzbekistan Summer Time", "UZST"}; + String VICTORIA[] = new String[] {"Australian Eastern Standard Time (Victoria)", "AEST", + "Australian Eastern Daylight Time (Victoria)", "AEDT"}; + String VLAT[] = new String[] {"Vladivostok Time", "VLAT", + "Vladivostok Summer Time", "VLAST"}; String WAT[] = new String[] {"Western African Time", "WAT", "Western African Summer Time", "WAST"}; String WET[] = new String[] {"Western European Time", "WET", "Western European Summer Time", "WEST"}; - String WIT[] = new String[] {"West Indonesia Time", "WIT", + String WIT[] = new String[] {"West Indonesia Time", "WIB", "West Indonesia Summer Time", "WIST"}; - String WST_AUS[] = new String[] {"Western Standard Time (Australia)", "WST", - "Western Summer Time (Australia)", "WST"}; - String SAMOA[] = new String[] {"Samoa Standard Time", "SST", - "Samoa Daylight Time", "SDT"}; - String WST_SAMOA[] = new String[] {"West Samoa Time", "WST", - "West Samoa Summer Time", "WSST"}; - String ChST[] = new String[] {"Chamorro Standard Time", "ChST", - "Chamorro Daylight Time", "ChDT"}; - String VICTORIA[] = new String[] {"Eastern Standard Time (Victoria)", "EST", - "Eastern Summer Time (Victoria)", "EST"}; - String UTC[] = new String[] {"Coordinated Universal Time", "UTC", - "Coordinated Universal Time", "UTC"}; - String UZT[] = new String[] {"Uzbekistan Time", "UZT", - "Uzbekistan Summer Time", "UZST"}; + String WST_AUS[] = new String[] {"Australian Western Standard Time", "AWST", + "Australian Western Daylight Time", "AWDT"}; + String WST_SAMOA[] = new String[] {"West Samoa Standard Time", "WSST", + "West Samoa Daylight Time", "WSDT"}; + String XJT[] = new String[] {"Xinjiang Standard Time", "XJT", + "Xinjiang Daylight Time", "XJDT"}; + String YAKT[] = new String[] {"Yakutsk Time", "YAKT", + "Yakutsk Summer Time", "YAKST"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -214,6 +222,7 @@ {"America/Anchorage", AKST}, {"AST", AKST}, {"America/Halifax", AST}, + {"America/Sitka", AKST}, {"America/St_Johns", NST}, {"CNT", NST}, {"Europe/Paris", CET}, @@ -255,10 +264,11 @@ {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, + {"Africa/Juba", EAT}, {"Africa/Kampala", EAT}, {"Africa/Khartoum", EAT}, {"Africa/Kigali", CAT}, @@ -300,7 +310,7 @@ {"America/Argentina/Rio_Gallegos", AGT}, {"America/Argentina/Salta", AGT}, {"America/Argentina/San_Juan", AGT}, - {"America/Argentina/San_Luis", WART}, + {"America/Argentina/San_Luis", AGT}, {"America/Argentina/Tucuman", AGT}, {"America/Argentina/Ushuaia", AGT}, {"America/Aruba", AST}, @@ -309,6 +319,7 @@ {"America/Atikokan", EST}, {"America/Atka", HAST}, {"America/Bahia", BRT}, + {"America/Bahia_Banderas", CST}, {"America/Barbados", AST}, {"America/Belem", BRT}, {"America/Belize", CST}, @@ -328,6 +339,7 @@ "French Guiana Summer Time", "GFST"}}, {"America/Cayman", EST}, {"America/Chihuahua", MST}, + {"America/Creston", MST}, {"America/Coral_Harbour", EST}, {"America/Cordoba", AGT}, {"America/Costa_Rica", CST}, @@ -339,7 +351,7 @@ {"America/Detroit", EST}, {"America/Dominica", AST}, {"America/Edmonton", MST}, - {"America/Eirunepe", AMT}, + {"America/Eirunepe", ACT}, {"America/El_Salvador", CST}, {"America/Ensenada", PST}, {"America/Fort_Wayne", EST}, @@ -348,7 +360,7 @@ {"America/Godthab", new String[] {"Western Greenland Time", "WGT", "Western Greenland Summer Time", "WGST"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -374,11 +386,13 @@ {"America/Kentucky/Louisville", EST}, {"America/Kentucky/Monticello", EST}, {"America/Knox_IN", CST}, + {"America/Kralendijk", AST}, {"America/La_Paz", new String[] {"Bolivia Time", "BOT", "Bolivia Summer Time", "BOST"}}, {"America/Lima", new String[] {"Peru Time", "PET", "Peru Summer Time", "PEST"}}, {"America/Louisville", EST}, + {"America/Lower_Princes", AST}, {"America/Maceio", BRT}, {"America/Managua", CST}, {"America/Manaus", AMT}, @@ -389,6 +403,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Pierre & Miquelon Standard Time", "PMST", "Pierre & Miquelon Daylight Time", "PMDT"}}, @@ -402,6 +417,7 @@ {"America/Nipigon", EST}, {"America/Nome", AKST}, {"America/Noronha", NORONHA}, + {"America/North_Dakota/Beulah", CST}, {"America/North_Dakota/Center", CST}, {"America/North_Dakota/New_Salem", CST}, {"America/Ojinaga", MST}, @@ -411,15 +427,15 @@ "Suriname Summer Time", "SRST"}}, {"America/Port-au-Prince", EST}, {"America/Port_of_Spain", AST}, - {"America/Porto_Acre", AMT}, + {"America/Porto_Acre", ACT}, {"America/Porto_Velho", AMT}, {"America/Puerto_Rico", AST}, {"America/Rainy_River", CST}, {"America/Rankin_Inlet", CST}, {"America/Recife", BRT}, {"America/Regina", CST}, - {"America/Resolute", RST}, - {"America/Rio_Branco", AMT}, + {"America/Resolute", CST}, + {"America/Rio_Branco", ACT}, {"America/Rosario", AGT}, {"America/Santa_Isabel", PST}, {"America/Santarem", BRT}, @@ -451,8 +467,8 @@ "Davis Summer Time", "DAVST"}}, {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville Time", "DDUT", "Dumont-d'Urville Summer Time", "DDUST"}}, - {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", - "Macquarie Island Summer Time", "MIST"}}, + {"Antarctica/Macquarie", new String[] {"Macquarie Island Standard Time", "MIST", + "Macquarie Island Daylight Time", "MIDT"}}, {"Antarctica/Mawson", new String[] {"Mawson Time", "MAWT", "Mawson Summer Time", "MAWST"}}, {"Antarctica/McMurdo", NZST}, @@ -462,6 +478,8 @@ {"Antarctica/South_Pole", NZST}, {"Antarctica/Syowa", new String[] {"Syowa Time", "SYOT", "Syowa Summer Time", "SYOST"}}, + {"Antarctica/Troll", new String[] {"Coordinated Universal Time", "UTC", + "Central European Summer Time", "CEST"}}, {"Antarctica/Vostok", new String[] {"Vostok Time", "VOST", "Vostok Summer Time", "VOSST"}}, {"Arctic/Longyearbyen", CET}, @@ -488,6 +506,7 @@ {"Asia/Brunei", new String[] {"Brunei Time", "BNT", "Brunei Summer Time", "BNST"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"Choibalsan Time", "CHOT", "Choibalsan Summer Time", "CHOST"}}, {"Asia/Chongqing", CTT}, @@ -503,27 +522,28 @@ "Tajikistan Summer Time", "TJST"}}, {"Asia/Gaza", EET}, {"Asia/Harbin", CTT}, + {"Asia/Hebron", EET}, {"Asia/Ho_Chi_Minh", ICT}, {"Asia/Hong_Kong", HKT}, {"Asia/Hovd", new String[] {"Hovd Time", "HOVT", "Hovd Summer Time", "HOVST"}}, - {"Asia/Irkutsk", new String[] {"Irkutsk Time", "IRKT", - "Irkutsk Summer Time", "IRKST"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, - {"Asia/Jayapura", new String[] {"East Indonesia Time", "EIT", + {"Asia/Jayapura", new String[] {"East Indonesia Time", "WIT", "East Indonesia Summer Time", "EIST"}}, {"Asia/Kabul", new String[] {"Afghanistan Time", "AFT", "Afghanistan Summer Time", "AFST"}}, {"Asia/Kamchatka", new String[] {"Petropavlovsk-Kamchatski Time", "PETT", "Petropavlovsk-Kamchatski Summer Time", "PETST"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, + {"Asia/Khandyga", new String[] {"Khandyga Time", "YAKT", + "Khandyga Summer Time", "YAKST"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"Krasnoyarsk Time", "KRAT", - "Krasnoyarsk Summer Time", "KRAST"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -536,7 +556,7 @@ "Philippines Summer Time", "PHST"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"Oral Time", "ORAT", "Oral Summer Time", "ORAST"}}, @@ -557,6 +577,8 @@ {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -568,12 +590,12 @@ {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, + {"Asia/Ust-Nera", new String[] {"Ust-Nera Time", "VLAT", + "Ust-Nera Summer Time", "VLAST"}}, {"Asia/Vientiane", ICT}, - {"Asia/Vladivostok", new String[] {"Vladivostok Time", "VLAT", - "Vladivostok Summer Time", "VLAST"}}, - {"Asia/Yakutsk", new String[] {"Yakutsk Time", "YAKT", - "Yakutsk Summer Time", "YAKST"}}, + {"Asia/Vladivostok", VLAT}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"Yekaterinburg Time", "YEKT", "Yekaterinburg Summer Time", "YEKST"}}, {"Asia/Yerevan", ARMT}, @@ -600,8 +622,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", - "Central Western Summer Time (Australia)", "CWST"}}, + {"Australia/Eucla", new String[] {"Australian Central Western Standard Time", "ACWST", + "Australian Central Western Daylight Time", "ACWDT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -619,7 +641,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, - {"Brazil/Acre", AMT}, + {"Brazil/Acre", ACT}, {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, @@ -657,6 +679,7 @@ {"Europe/Bratislava", CET}, {"Europe/Brussels", CET}, {"Europe/Budapest", CET}, + {"Europe/Busingen", CET}, {"Europe/Chisinau", EET}, {"Europe/Copenhagen", CET}, {"Europe/Dublin", DUBLIN}, @@ -675,7 +698,7 @@ {"Europe/Madrid", CET}, {"Europe/Malta", CET}, {"Europe/Mariehamn", EET}, - {"Europe/Minsk", EET}, + {"Europe/Minsk", MSK}, {"Europe/Monaco", CET}, {"Europe/Moscow", MSK}, {"Europe/Nicosia", EET}, @@ -688,7 +711,7 @@ "Samara Summer Time", "SAMST"}}, {"Europe/San_Marino", CET}, {"Europe/Sarajevo", CET}, - {"Europe/Simferopol", EET}, + {"Europe/Simferopol", MSK}, {"Europe/Skopje", CET}, {"Europe/Sofia", EET}, {"Europe/Stockholm", CET}, @@ -700,8 +723,7 @@ {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"Volgograd Time", "VOLT", - "Volgograd Summer Time", "VOLST"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, @@ -754,7 +776,10 @@ {"PRT", AST}, {"Pacific/Apia", WST_SAMOA}, {"Pacific/Auckland", NZST}, + {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST", + "Bougainville Daylight Time", "BST"}}, {"Pacific/Chatham", CHAST}, + {"Pacific/Chuuk", CHUT}, {"Pacific/Easter", EASTER}, {"Pacific/Efate", new String[] {"Vanuatu Time", "VUT", "Vanuatu Summer Time", "VUST"}}, @@ -793,8 +818,8 @@ {"Pacific/Palau", new String[] {"Palau Time", "PWT", "Palau Summer Time", "PWST"}}, {"Pacific/Pitcairn", PITCAIRN}, - {"Pacific/Ponape", new String[] {"Ponape Time", "PONT", - "Ponape Summer Time", "PONST"}}, + {"Pacific/Pohnpei", PONT}, + {"Pacific/Ponape", PONT}, {"Pacific/Port_Moresby", new String[] {"Papua New Guinea Time", "PGT", "Papua New Guinea Summer Time", "PGST"}}, {"Pacific/Rarotonga", new String[] {"Cook Is. Time", "CKT", @@ -807,12 +832,12 @@ "Gilbert Is. Summer Time", "GILST"}}, {"Pacific/Tongatapu", new String[] {"Tonga Time", "TOT", "Tonga Summer Time", "TOST"}}, - {"Pacific/Truk", TRUT}, + {"Pacific/Truk", CHUT}, {"Pacific/Wake", new String[] {"Wake Time", "WAKT", "Wake Summer Time", "WAKST"}}, {"Pacific/Wallis", new String[] {"Wallis & Futuna Time", "WFT", "Wallis & Futuna Summer Time", "WFST"}}, - {"Pacific/Yap", TRUT}, + {"Pacific/Yap", CHUT}, {"Poland", CET}, {"PRC", CTT}, {"PST8PDT", PST}, diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,8 +45,8 @@ protected final Object[][] getContents() { String ACT[] = new String[] {"\uc5d0\uc774\ucee4 \uc2dc\uac04", "ACT", "\uc5d0\uc774\ucee4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ACST"}; - String ADELAIDE[] = new String[] {"\uc911\ubd80 \ud45c\uc900\uc2dc(\uc0ac\uc6b0\uc2a4 \uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544)", "CST", - "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\uc0ac\uc6b0\uc2a4 \uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544)", "CST"}; + String ADELAIDE[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACST", + "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACDT"}; String AGT[] = new String[] {"\uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "ART", "\uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ARST"}; String AKST[] = new String[] {"\uc54c\ub798\uc2a4\uce74 \ud45c\uc900\uc2dc", "AKST", @@ -61,10 +61,10 @@ "\ub300\uc11c\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ADT"}; String BDT[] = new String[] {"\ubc29\uae00\ub77c\ub370\uc2dc \uc2dc\uac04", "BDT", "\ubc29\uae00\ub77c\ub370\uc2dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BDST"}; - String BRISBANE[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ud038\uc990\ub79c\ub4dc)", "EST", - "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ud038\uc990\ub79c\ub4dc)", "EST"}; - String BROKEN_HILL[] = new String[] {"\uc911\ubd80 \ud45c\uc900\uc2dc(\uc0ac\uc6b0\uc2a4 \uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544/\ub274 \uc0ac\uc6b0\uc2a4 \uc6e8\uc77c\uc988)", "CST", - "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\uc0ac\uc6b0\uc2a4 \uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544/\ub274 \uc0ac\uc6b0\uc2a4 \uc6e8\uc77c\uc988)", "CST"}; + String BRISBANE[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC)", "AEST", + "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD038\uC990\uB79C\uB4DC)", "AEDT"}; + String BROKEN_HILL[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "ACST", + "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "ACDT"}; String BRT[] = new String[] {"\ube0c\ub77c\uc9c8\ub9ac\uc544 \uc2dc\uac04", "BRT", "\ube0c\ub77c\uc9c8\ub9ac\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BRST"}; String BTT[] = new String[] {"\ubd80\ud0c4 \uc2dc\uac04", "BTT", @@ -75,7 +75,11 @@ "\uc911\uc559 \uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CEST"}; String CHAST[] = new String[] {"Chatham \ud45c\uc900\uc2dc", "CHAST", "Chatham \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CHADT"}; - String CIT[] = new String[] {"\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "CIT", + String ChST[] = new String[] {"\ucc28\ubaa8\ub85c \ud45c\uc900\uc2dc", "ChST", + "\ucc28\ubaa8\ub85c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ChDT"}; + String CHUT[] = new String[] {"\uCD94\uD06C \uD45C\uC900\uC2DC", "CHUT", + "\uCD94\uD06C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "CHUST"}; + String CIT[] = new String[] {"\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "WITA", "\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CIST"}; String CLT[] = new String[] {"\uce60\ub808 \uc2dc\uac04", "CLT", "\uce60\ub808 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CLST"}; @@ -83,10 +87,10 @@ "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"}; String CTT[] = new String[] {"\uc911\uad6d \ud45c\uc900\uc2dc", "CST", "\uc911\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"}; - String CUBA[] = new String[] {"Cuba Standard Time", "CST", - "Cuba Daylight Time", "CDT"}; - String DARWIN[] = new String[] {"\uc911\ubd80 \ud45c\uc900\uc2dc(\ub178\ub358 \uc9c0\uc5ed)", "CST", - "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ub178\ub358 \uc9c0\uc5ed)", "CST"}; + String CUBA[] = new String[] {"\ucfe0\ubc14 \ud45c\uc900\uc2dc", "CST", + "\ucfe0\ubc14 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"}; + String DARWIN[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED)", "ACST", + "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBD81\uBD80 \uC9C0\uC5ED)", "ACDT"}; String DUBLIN[] = new String[] {"\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc", "GMT", "\uc544\uc77c\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IST"}; String EAT[] = new String[] {"\ub3d9\ubd80 \uc544\ud504\ub9ac\uce74 \uc2dc\uac04", "EAT", @@ -99,8 +103,10 @@ "\ub3d9\ubd80 \uadf8\ub9b0\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EGST"}; String EST[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc", "EST", "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EDT"}; - String EST_NSW[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ub274 \uc0ac\uc6b0\uc2a4 \uc6e8\uc77c\uc988)", "EST", - "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ub274 \uc0ac\uc6b0\uc2a4 \uc6e8\uc77c\uc988)", "EST"}; + String EST_NSW[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "AEST", + "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "AEDT"}; + String FET[] = new String[] {"\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC", "FET", + "\uADF9\uB3D9 \uC720\uB7FD \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "FEST"}; String GHMT[] = new String[] {"\uac00\ub098 \ud45c\uc900\uc2dc", "GMT", "\uac00\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GHST"}; String GAMBIER[] = new String[] {"\uac10\ube44\uc544 \uc2dc\uac04", "GAMT", @@ -127,10 +133,12 @@ "\uc778\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IDT"}; String JST[] = new String[] {"\uc77c\ubcf8 \ud45c\uc900\uc2dc", "JST", "\uc77c\ubcf8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "JDT"}; + String KRAT[] = new String[] {"\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc2dc\uac04", "KRAT", + "\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KRAST"}; String KST[] = new String[] {"\ud55c\uad6d \ud45c\uc900\uc2dc", "KST", "\ud55c\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KDT"}; String LORD_HOWE[] = new String[] {"\ub85c\ub4dc \ud558\uc6b0 \ud45c\uc900\uc2dc", "LHST", - "\ub85c\ub4dc \ud558\uc6b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "LHST"}; + "\ub85c\ub4dc \ud558\uc6b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "LHDT"}; String MHT[] = new String[] {"\ub9c8\uc15c\uc81c\ub3c4 \uc2dc\uac04", "MHT", "\ub9c8\uc15c\uc81c\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MHST"}; String MSK[] = new String[] {"\ubaa8\uc2a4\ud06c\ubc14 \ud45c\uc900\uc2dc", "MSK", @@ -153,48 +161,48 @@ "Pitcairn \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"}; String PKT[] = new String[] {"\ud30c\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "PKT", "\ud30c\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PKST"}; + String PONT[] = new String[] {"\uD3F0\uD398\uC774 \uD45C\uC900\uC2DC", "PONT", + "\uD3F0\uD398\uC774 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "PONST"}; String PST[] = new String[] {"\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc", "PST", "\ud0dc\ud3c9\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"}; - String RST[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc", "EST", - "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"}; + String SAMOA[] = new String[] {"\uc0ac\ubaa8\uc544 \ud45c\uc900\uc2dc", "SST", + "\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SDT"}; + String IRKT[] = new String[] {"\uc774\ub974\ucfe0\uce20\ud06c \uc2dc\uac04", "IRKT", + "\uc774\ub974\ucfe0\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IRKST"}; String SAST[] = new String[] {"\ub0a8\uc544\ud504\ub9ac\uce74 \ud45c\uc900\uc2dc", "SAST", "\ub0a8\uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SAST"}; String SBT[] = new String[] {"\uc194\ub85c\ubaac \uad70\ub3c4 \uc2dc\uac04", "SBT", "\uc194\ub85c\ubaac \uad70\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SBST"}; String SGT[] = new String[] {"\uc2f1\uac00\ud3ec\ub974 \uc2dc\uac04", "SGT", "\uc2f1\uac00\ud3ec\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SGST"}; - String SLST[] = new String[] {"\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc", "GMT", - "\uc2dc\uc5d0\ub77c\ub9ac\uc628 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SLST"}; - String TASMANIA[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ud0dc\uc988\uba54\uc774\ub2c8\uc544)", "EST", - "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ud0dc\uc988\uba54\uc774\ub2c8\uc544)", "EST"}; + String TASMANIA[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "AEST", + "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "AEDT"}; String TMT[] = new String[] {"\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc2dc\uac04", "TMT", "\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TMST"}; - String TRUT[] = new String[] {"\ud2b8\ub8e8\ud06c \uc2dc\uac04", "TRUT", - "\ud2b8\ub8e8\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TRUST"}; String ULAT[]= new String[] {"\uc6b8\ub780\ubc14\ud0c0\ub974 \uc2dc\uac04", "ULAT", "\uc6b8\ub780\ubc14\ud0c0\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ULAST"}; - String WART[] = new String[] {"\uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "WART", - "\uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WARST"}; + String UTC[] = new String[] {"\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC", + "\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC"}; + String UZT[] = new String[] {"\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "UZT", + "\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "UZST"}; + String VICTORIA[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544)", "AEST", + "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBE45\uD1A0\uB9AC\uC544)", "AEDT"}; + String VLAT[] = new String[] {"\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc2dc\uac04", "VLAT", + "\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VLAST"}; String WAT[] = new String[] {"\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc2dc\uac04", "WAT", "\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WAST"}; String WET[] = new String[] {"\uc11c\uc720\ub7fd \uc2dc\uac04", "WET", "\uc11c\uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WEST"}; - String WIT[] = new String[] {"\uc11c\uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "WIT", + String WIT[] = new String[] {"\uc11c\uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "WIB", "\uc11c\uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WIST"}; - String WST_AUS[] = new String[] {"\uc11c\ubd80 \ud45c\uc900\uc2dc(\ud638\uc8fc)", "WST", - "\uc11c\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ud638\uc8fc)", "WST"}; - String SAMOA[] = new String[] {"\uc0ac\ubaa8\uc544 \ud45c\uc900\uc2dc", "SST", - "\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SDT"}; - String WST_SAMOA[] = new String[] {"\uc11c\uc0ac\ubaa8\uc544 \uc2dc\uac04", "WST", - "\uc11c\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WSST"}; - String ChST[] = new String[] {"\ucc28\ubaa8\ub85c \ud45c\uc900\uc2dc", "ChST", - "\ucc28\ubaa8\ub85c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ChDT"}; - String VICTORIA[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ube45\ud1a0\ub9ac\uc544)", "EST", - "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ube45\ud1a0\ub9ac\uc544)", "EST"}; - String UTC[] = new String[] {"\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC", - "\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC"}; - String UZT[] = new String[] {"\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "UZT", - "\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "UZST"}; + String WST_AUS[] = new String[] {"\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "AWST", + "\uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "AWDT"}; + String WST_SAMOA[] = new String[] {"\uc11c\uc0ac\ubaa8\uc544 \uc2dc\uac04", "WSST", + "\uc11c\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WSDT"}; + String XJT[] = new String[] {"\uc911\uad6d \ud45c\uc900\uc2dc", "XJT", + "\uc911\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "XJDT"}; + String YAKT[] = new String[] {"\uc57c\uce20\ud06c \uc2dc\uac04", "YAKT", + "\uc57c\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YAKST"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -214,6 +222,7 @@ {"America/Anchorage", AKST}, {"AST", AKST}, {"America/Halifax", AST}, + {"America/Sitka", AKST}, {"America/St_Johns", NST}, {"CNT", NST}, {"Europe/Paris", CET}, @@ -255,10 +264,11 @@ {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, + {"Africa/Juba", EAT}, {"Africa/Kampala", EAT}, {"Africa/Khartoum", EAT}, {"Africa/Kigali", CAT}, @@ -300,7 +310,7 @@ {"America/Argentina/Rio_Gallegos", AGT}, {"America/Argentina/Salta", AGT}, {"America/Argentina/San_Juan", AGT}, - {"America/Argentina/San_Luis", WART}, + {"America/Argentina/San_Luis", AGT}, {"America/Argentina/Tucuman", AGT}, {"America/Argentina/Ushuaia", AGT}, {"America/Aruba", AST}, @@ -309,6 +319,7 @@ {"America/Atikokan", EST}, {"America/Atka", HAST}, {"America/Bahia", BRT}, + {"America/Bahia_Banderas", CST}, {"America/Barbados", AST}, {"America/Belem", BRT}, {"America/Belize", CST}, @@ -328,6 +339,7 @@ "\ud504\ub791\uc2a4\ub839 \uae30\uc544\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GFST"}}, {"America/Cayman", EST}, {"America/Chihuahua", MST}, + {"America/Creston", MST}, {"America/Coral_Harbour", EST}, {"America/Cordoba", AGT}, {"America/Costa_Rica", CST}, @@ -339,7 +351,7 @@ {"America/Detroit", EST}, {"America/Dominica", AST}, {"America/Edmonton", MST}, - {"America/Eirunepe", AMT}, + {"America/Eirunepe", ACT}, {"America/El_Salvador", CST}, {"America/Ensenada", PST}, {"America/Fort_Wayne", EST}, @@ -348,7 +360,7 @@ {"America/Godthab", new String[] {"\uc11c\ubd80 \uadf8\ub9b0\ub79c\ub4dc \uc2dc\uac04", "WGT", "\uc11c\ubd80 \uadf8\ub9b0\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WGST"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -374,11 +386,13 @@ {"America/Kentucky/Louisville", EST}, {"America/Kentucky/Monticello", EST}, {"America/Knox_IN", CST}, + {"America/Kralendijk", AST}, {"America/La_Paz", new String[] {"\ubcfc\ub9ac\ube44\uc544 \uc2dc\uac04", "BOT", "\ubcfc\ub9ac\ube44\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BOST"}}, {"America/Lima", new String[] {"\ud398\ub8e8 \uc2dc\uac04", "PET", "\ud398\ub8e8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PEST"}}, {"America/Louisville", EST}, + {"America/Lower_Princes", AST}, {"America/Maceio", BRT}, {"America/Managua", CST}, {"America/Manaus", AMT}, @@ -389,6 +403,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \ud45c\uc900\uc2dc", "PMST", "\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PMDT"}}, @@ -402,6 +417,7 @@ {"America/Nipigon", EST}, {"America/Nome", AKST}, {"America/Noronha", NORONHA}, + {"America/North_Dakota/Beulah", CST}, {"America/North_Dakota/Center", CST}, {"America/North_Dakota/New_Salem", CST}, {"America/Ojinaga", MST}, @@ -411,15 +427,15 @@ "\uc218\ub9ac\ub0a8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SRST"}}, {"America/Port-au-Prince", EST}, {"America/Port_of_Spain", AST}, - {"America/Porto_Acre", AMT}, + {"America/Porto_Acre", ACT}, {"America/Porto_Velho", AMT}, {"America/Puerto_Rico", AST}, {"America/Rainy_River", CST}, {"America/Rankin_Inlet", CST}, {"America/Recife", BRT}, {"America/Regina", CST}, - {"America/Resolute", RST}, - {"America/Rio_Branco", AMT}, + {"America/Resolute", CST}, + {"America/Rio_Branco", ACT}, {"America/Rosario", AGT}, {"America/Santa_Isabel", PST}, {"America/Santarem", BRT}, @@ -446,10 +462,13 @@ {"America/Winnipeg", CST}, {"America/Yakutat", AKST}, {"America/Yellowknife", MST}, + {"Antarctica/Casey", WST_AUS}, {"Antarctica/Davis", new String[] {"Davis \uc2dc\uac04", "DAVT", "Davis \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "DAVST"}}, {"Antarctica/DumontDUrville", new String[] {"\ub4a4\ubabd \ub4a4\ub974\ube4c \uc2dc\uac04", "DDUT", "\ub4a4\ubabd \ub4a4\ub974\ube4c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "DDUST"}}, + {"Antarctica/Macquarie", new String[] {"\uB9E4\uCF70\uB9AC \uC12C \uD45C\uC900\uC2DC", "MIST", + "\uB9E4\uCF70\uB9AC \uC12C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "MIDT"}}, {"Antarctica/Mawson", new String[] {"\ubaa8\uc2a8 \uc2dc\uac04", "MAWT", "\ubaa8\uc2a8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MAWST"}}, {"Antarctica/McMurdo", NZST}, @@ -459,6 +478,8 @@ {"Antarctica/South_Pole", NZST}, {"Antarctica/Syowa", new String[] {"Syowa \uc2dc\uac04", "SYOT", "Syowa \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SYOST"}}, + {"Antarctica/Troll", new String[] {"\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC", + "\uc911\uc559 \uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CEST"}}, {"Antarctica/Vostok", new String[] {"Vostok \uc2dc\uac04", "VOST", "Vostok \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VOSST"}}, {"Arctic/Longyearbyen", CET}, @@ -485,6 +506,7 @@ {"Asia/Brunei", new String[] {"\ube0c\ub8e8\ub098\uc774 \uc2dc\uac04", "BNT", "\ube0c\ub8e8\ub098\uc774 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BNST"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"Choibalsan \uc2dc\uac04", "CHOT", "Choibalsan \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CHOST"}}, {"Asia/Chongqing", CTT}, @@ -500,27 +522,28 @@ "\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TJST"}}, {"Asia/Gaza", EET}, {"Asia/Harbin", CTT}, + {"Asia/Hebron", EET}, {"Asia/Ho_Chi_Minh", ICT}, {"Asia/Hong_Kong", HKT}, {"Asia/Hovd", new String[] {"Hovd \uc2dc\uac04", "HOVT", "Hovd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "HOVST"}}, - {"Asia/Irkutsk", new String[] {"\uc774\ub974\ucfe0\uce20\ud06c \uc2dc\uac04", "IRKT", - "\uc774\ub974\ucfe0\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IRKST"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, - {"Asia/Jayapura", new String[] {"\ub3d9\ubd80 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "EIT", + {"Asia/Jayapura", new String[] {"\ub3d9\ubd80 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "WIT", "\ub3d9\ubd80 \uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EIST"}}, {"Asia/Kabul", new String[] {"\uc544\ud504\uac00\ub2c8\uc2a4\ud0c4 \uc2dc\uac04", "AFT", "\uc544\ud504\uac00\ub2c8\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "AFST"}}, {"Asia/Kamchatka", new String[] {"\ud398\ud2b8\ub85c\ud30c\ube14\ub85c\ud504\uc2a4\ud06c-\uce84\ucc28\uce20\ud0a4 \uc2dc\uac04", "PETT", "\ud398\ud2b8\ub85c\ud30c\ube14\ub85c\ud504\uc2a4\ud06c-\uce84\ucc28\uce20\ud0a4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PETST"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, + {"Asia/Khandyga", new String[] {"\uD55C\uB514\uAC00 \uD45C\uC900\uC2DC", "YAKT", + "\uD55C\uB514\uAC00 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "YAKST"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc2dc\uac04", "KRAT", - "\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KRAST"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -533,7 +556,7 @@ "\ud544\ub9ac\ud540 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PHST"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"Oral \ud45c\uc900\uc2dc", "ORAT", "Oral \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ORAST"}}, @@ -554,6 +577,8 @@ {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -565,12 +590,12 @@ {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, + {"Asia/Ust-Nera", new String[] {"\uC6B0\uC2A4\uD2F0\uB124\uB77C \uD45C\uC900\uC2DC", "VLAT", + "\uC6B0\uC2A4\uD2F0\uB124\uB77C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "VLAST"}}, {"Asia/Vientiane", ICT}, - {"Asia/Vladivostok", new String[] {"\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc2dc\uac04", "VLAT", - "\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VLAST"}}, - {"Asia/Yakutsk", new String[] {"\uc57c\uce20\ud06c \uc2dc\uac04", "YAKT", - "\uc57c\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YAKST"}}, + {"Asia/Vladivostok", VLAT}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"\uc608\uce74\ud14c\ub9b0\ubc84\uadf8 \uc2dc\uac04", "YEKT", "\uc608\uce74\ud14c\ub9b0\ubc84\uadf8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YEKST"}}, {"Asia/Yerevan", ARMT}, @@ -597,8 +622,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", - "Central Western Summer Time (Australia)", "CWST"}}, + {"Australia/Eucla", new String[] {"\uC911\uC559 \uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACWST", + "\uC911\uC559 \uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACWDT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -616,7 +641,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, - {"Brazil/Acre", AMT}, + {"Brazil/Acre", ACT}, {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, @@ -654,6 +679,7 @@ {"Europe/Bratislava", CET}, {"Europe/Brussels", CET}, {"Europe/Budapest", CET}, + {"Europe/Busingen", CET}, {"Europe/Chisinau", EET}, {"Europe/Copenhagen", CET}, {"Europe/Dublin", DUBLIN}, @@ -672,7 +698,7 @@ {"Europe/Madrid", CET}, {"Europe/Malta", CET}, {"Europe/Mariehamn", EET}, - {"Europe/Minsk", EET}, + {"Europe/Minsk", MSK}, {"Europe/Monaco", CET}, {"Europe/Moscow", MSK}, {"Europe/Nicosia", EET}, @@ -685,7 +711,7 @@ "\uc0ac\ub9c8\ub77c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SAMST"}}, {"Europe/San_Marino", CET}, {"Europe/Sarajevo", CET}, - {"Europe/Simferopol", EET}, + {"Europe/Simferopol", MSK}, {"Europe/Skopje", CET}, {"Europe/Sofia", EET}, {"Europe/Stockholm", CET}, @@ -697,8 +723,7 @@ {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"\ubcfc\uace0\uadf8\ub77c\ub4dc \uc2dc\uac04", "VOLT", - "\ubcfc\uace0\uadf8\ub77c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VOLST"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, @@ -751,7 +776,10 @@ {"PRT", AST}, {"Pacific/Apia", WST_SAMOA}, {"Pacific/Auckland", NZST}, + {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST", + "Bougainville Daylight Time", "BST"}}, {"Pacific/Chatham", CHAST}, + {"Pacific/Chuuk", CHUT}, {"Pacific/Easter", EASTER}, {"Pacific/Efate", new String[] {"\ube44\ub204\uc544\ud22c \uc2dc\uac04", "VUT", "\ubc14\ub204\uc544\ud22c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VUST"}}, @@ -790,8 +818,8 @@ {"Pacific/Palau", new String[] {"\ud314\ub77c\uc6b0 \uc2dc\uac04", "PWT", "\ud314\ub77c\uc6b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PWST"}}, {"Pacific/Pitcairn", PITCAIRN}, - {"Pacific/Ponape", new String[] {"\ud3ec\ub098\ud504 \uc2dc\uac04", "PONT", - "\ud3ec\ub098\ud504 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PONST"}}, + {"Pacific/Pohnpei", PONT}, + {"Pacific/Ponape", PONT}, {"Pacific/Port_Moresby", new String[] {"\ud30c\ud478\uc544\ub274\uae30\ub2c8 \uc2dc\uac04", "PGT", "\ud30c\ud478\uc544\ub274\uae30\ub2c8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PGST"}}, {"Pacific/Rarotonga", new String[] {"\ucfe0\ud06c \uad70\ub3c4 \uc2dc\uac04", "CKT", @@ -804,12 +832,12 @@ "\uae38\ubc84\ud2b8 \uad70\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GILST"}}, {"Pacific/Tongatapu", new String[] {"\ud1b5\uac00 \uc2dc\uac04", "TOT", "\ud1b5\uac00 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TOST"}}, - {"Pacific/Truk", TRUT}, + {"Pacific/Truk", CHUT}, {"Pacific/Wake", new String[] {"\uc6e8\uc774\ud06c \uc2dc\uac04", "WAKT", "\uc6e8\uc774\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WAKST"}}, {"Pacific/Wallis", new String[] {"\uc6d4\ub9ac\uc2a4 \ud6c4\ud22c\ub098 \uc2dc\uac04", "WFT", "\uc6d4\ub9ac\uc2a4 \ud6c4\ud2b8\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WFST"}}, - {"Pacific/Yap", TRUT}, + {"Pacific/Yap", CHUT}, {"Poland", CET}, {"PRC", CTT}, {"PST8PDT", PST}, diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,883 @@ +/* + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved + * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved + * + * The original version of this source code and documentation + * is copyrighted and owned by Taligent, Inc., a wholly-owned + * subsidiary of IBM. These materials are provided under terms + * of a License Agreement between Taligent and Sun. This technology + * is protected by multiple US and International patents. + * + * This notice and attribution to Taligent may not be removed. + * Taligent is a registered trademark of Taligent, Inc. + * + */ + +package sun.util.resources; + +public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { + + protected final Object[][] getContents() { + String ACT[] = new String[] {"Fuso hor\u00e1rio do Acre", "ACT", + "Fuso hor\u00e1rio de ver\u00e3o do Acre", "ACST"}; + String ADELAIDE[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul)", "ACST", + "Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul)", "ACDT"}; + String AGT[] = new String[] {"Fuso hor\u00e1rio da Argentina", "ART", + "Fuso hor\u00e1rio de ver\u00e3o da Argentina", "ARST"}; + String AKST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Alaska", "AKST", + "Hor\u00e1rio de luz natural do Alaska", "AKDT"}; + String AMT[] = new String[] {"Fuso hor\u00e1rio do Amazonas", "AMT", + "Fuso hor\u00e1rio de ver\u00e3o do Amazonas", "AMST"}; + String ARAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Ar\u00e1bia", "AST", + "Hor\u00e1rio de luz natural da Ar\u00e1bia", "ADT"}; + String ARMT[] = new String[] {"Fuso hor\u00e1rio da Arm\u00eania", "AMT", + "Fuso hor\u00e1rio de ver\u00e3o da Arm\u00eania", "AMST"}; + String AST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Atl\u00e2ntico", "AST", + "Hor\u00e1rio de luz natural do Atl\u00e2ntico", "ADT"}; + String BDT[] = new String[] {"Fuso hor\u00e1rio de Bangladesh", "BDT", + "Fuso hor\u00e1rio de ver\u00e3o de Bangladesh", "BDST"}; + String BRISBANE[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Queensland)", "AEST", + "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Queensland)", "AEDT"}; + String BROKEN_HILL[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "ACST", + "Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "ACDT"}; + String BRT[] = new String[] {"Fuso hor\u00e1rio de Bras\u00edlia", "BRT", + "Fuso hor\u00e1rio de ver\u00e3o de Bras\u00edlia", "BRST"}; + String BTT[] = new String[] {"Fuso hor\u00e1rio de But\u00e3o", "BTT", + "Fuso hor\u00e1rio de ver\u00e3o de But\u00e3o", "BTST"}; + String CAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Central", "CAT", + "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica Central", "CAST"}; + String CET[] = new String[] {"Fuso hor\u00e1rio da Europa Central", "CET", + "Fuso hor\u00e1rio de ver\u00e3o da Europa Central", "CEST"}; + String CHAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chatham", "CHAST", + "Hor\u00e1rio de luz natural de Chatham", "CHADT"}; + String ChST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chamorro", "ChST", + "Hor\u00e1rio de luz natural de Chamorro", "ChDT"}; + String CIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Central", "WITA", + "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Central", "CIST"}; + String CLT[] = new String[] {"Fuso hor\u00e1rio do Chile", "CLT", + "Fuso hor\u00e1rio de ver\u00e3o do Chile", "CLST"}; + String CST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central", "CST", + "Hor\u00e1rio de luz natural central", "CDT"}; + String CTT[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da China", "CST", + "Hor\u00e1rio de luz natural da China", "CDT"}; + String CUBA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Cuba", "CST", + "Hor\u00e1rio de luz natural de Cuba", "CDT"}; + String DARWIN[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Territ\u00F3rio do Norte)", "ACST", + "Fuso Hor\u00E1rio de Ver\u00E3o Central (Territ\u00F3rio do Norte)", "ACDT"}; + String DUBLIN[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT", + "Fuso hor\u00e1rio de ver\u00e3o da Irlanda", "IST"}; + String EAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Oriental", "EAT", + "Fuso hor\u00e1rio padr\u00e3o da \u00c1frica Oriental", "EAST"}; + String EASTER[] = new String[] {"Fuso hor\u00e1rio da Ilha de P\u00e1scoa", "EAST", + "Fuso hor\u00e1rio de ver\u00e3o da Ilha de P\u00e1scoa", "EASST"}; + String EET[] = new String[] {"Fuso hor\u00e1rio da Europa Oriental", "EET", + "Fuso hor\u00e1rio de ver\u00e3o da Europa Oriental", "EEST"}; + String EGT[] = new String[] {"Fuso hor\u00e1rio da Groenl\u00e2ndia Oriental", "EGT", + "Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Oriental", "EGST"}; + String EST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental", "EST", + "Hor\u00e1rio de luz natural oriental", "EDT"}; + String EST_NSW[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul)", "AEST", + "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul)", "AEDT"}; + String FET[] = new String[] {"Hor\u00E1rio do Extremo Leste Europeu (FET)", "FET", + "Fuso Hor\u00E1rio de Ver\u00E3o do Extremo Leste Europeu", "FEST"}; + String GHMT[] = new String[] {"Fuso hor\u00e1rio do meridiano de Gana", "GMT", + "Fuso hor\u00e1rio de ver\u00e3o de Gana", "GHST"}; + String GAMBIER[] = new String[] {"Fuso hor\u00e1rio de Gambier", "GAMT", + "Fuso hor\u00e1rio de ver\u00e3o de Gambier", "GAMST"}; + String GMT[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT", + "Fuso hor\u00e1rio do meridiano de Greenwich", "GMT"}; + String GMTBST[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT", + "Fuso hor\u00e1rio de ver\u00e3o da Gr\u00e3-Bretanha", "BST"}; + String GST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do golfo", "GST", + "Hor\u00e1rio de luz natural do golfo", "GDT"}; + String HAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Hava\u00ed-Aleutian", "HAST", + "Hor\u00e1rio de luz natural do Hava\u00ed-Aleutian", "HADT"}; + String HKT[] = new String[] {"Fuso hor\u00e1rio de Hong Kong", "HKT", + "Fuso hor\u00e1rio de ver\u00e3o de Hong Kong", "HKST"}; + String HST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Hava\u00ed", "HST", + "Hor\u00e1rio de luz natural do Hava\u00ed", "HDT"}; + String ICT[] = new String[] {"Fuso hor\u00e1rio da Indochina", "ICT", + "Fuso hor\u00e1rio de ver\u00e3o da Indochina", "ICST"}; + String IRT[] = new String[] {"Fuso hor\u00e1rio do Ir\u00e3", "IRST", + "Hor\u00e1rio de luz natural do Ir\u00e3", "IRDT"}; + String ISRAEL[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Israel", "IST", + "Hor\u00e1rio de luz natural de Israel", "IDT"}; + String IST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da \u00cdndia", "IST", + "Hor\u00e1rio de luz natural da \u00cdndia", "IDT"}; + String JST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Jap\u00e3o", "JST", + "Hor\u00e1rio de luz natural do Jap\u00e3o", "JDT"}; + String KRAT[] = new String[] {"Fuso hor\u00e1rio de Krasnoyarsk", "KRAT", + "Fuso hor\u00e1rio de ver\u00e3o de Krasnoyarsk", "KRAST"}; + String KST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Coreia", "KST", + "Hor\u00e1rio de luz natural da Coreia", "KDT"}; + String LORD_HOWE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Lord Howe", "LHST", + "Fuso hor\u00e1rio de ver\u00e3o de Lord Howe", "LHDT"}; + String MHT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Marshall", "MHT", + "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Marshall", "MHST"}; + String MSK[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Moscou", "MSK", + "Hor\u00e1rio de luz natural de Moscou", "MSD"}; + String MST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o das montanhas", "MST", + "Hor\u00e1rio de luz natural das montanhas", "MDT"}; + String MYT[] = new String[] {"Fuso hor\u00e1rio da Mal\u00e1sia", "MYT", + "Fuso hor\u00e1rio de ver\u00e3o da Mal\u00e1sia", "MYST"}; + String NORONHA[] = new String[] {"Fuso hor\u00e1rio de Fernando de Noronha", "FNT", + "Fuso hor\u00e1rio de ver\u00e3o de Fernando de Noronha", "FNST"}; + String NOVT[] = new String[] {"Fuso hor\u00e1rio de Novosibirsk", "NOVT", + "Fuso hor\u00e1rio de ver\u00e3o de Novosibirsk", "NOVST"}; + String NPT[] = new String[] {"Fuso hor\u00e1rio do Nepal", "NPT", + "Fuso hor\u00e1rio de ver\u00e3o do Nepal", "NPST"}; + String NST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Terra Nova", "NST", + "Hor\u00e1rio de luz natural de Terra Nova", "NDT"}; + String NZST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Nova Zel\u00e2ndia", "NZST", + "Hor\u00e1rio de luz natural da Nova Zel\u00e2ndia", "NZDT"}; + String PITCAIRN[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Pitcairn", "PST", + "Hor\u00e1rio de luz natural de Pitcairn", "PDT"}; + String PKT[] = new String[] {"Fuso hor\u00e1rio do Paquist\u00e3o", "PKT", + "Fuso hor\u00e1rio de ver\u00e3o do Paquist\u00e3o", "PKST"}; + String PONT[] = new String[] {"Fuso Hor\u00E1rio de Pohnpei", "PONT", + "Fuso Hor\u00E1rio de Ver\u00E3o de Pohnpei", "PONST"}; + String PST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Pac\u00edfico", "PST", + "Hor\u00e1rio de luz natural do Pac\u00edfico", "PDT"}; + String SAMOA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Samoa", "SST", + "Hor\u00e1rio de luz natural de Samoa", "SDT"}; + String IRKT[] = new String[] {"Fuso hor\u00e1rio de Irkutsk", "IRKT", + "Fuso hor\u00e1rio de ver\u00e3o de Irkutsk", "IRKST"}; + String SAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da \u00c1frica do Sul", "SAST", + "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica do Sul", "SAST"}; + String SBT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Salom\u00e3o", "SBT", + "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Salom\u00e3o", "SBST"}; + String SGT[] = new String[] {"Fuso hor\u00e1rio de Cingapura", "SGT", + "Fuso hor\u00e1rio de ver\u00e1 de Cingapura", "SGST"}; + String TASMANIA[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Tasm\u00E2nia)", "AEST", + "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Tasm\u00E2nia)", "AEDT"}; + String TMT[] = new String[] {"Fuso hor\u00e1rio do Turcomenist\u00e3o", "TMT", + "Fuso hor\u00e1rio de ver\u00e3o do Turcomenist\u00e3o", "TMST"}; + String TRUT[] = new String[] {"Fuso Hor\u00E1rio de Chuuk", "CHUT", + "Fuso Hor\u00E1rio de Ver\u00E3o de Chuuk", "CHUST"}; + String ULAT[]= new String[] {"Fuso hor\u00e1rio de Ulan Bator", "ULAT", + "Fuso hor\u00e1rio de ver\u00e3o de Ulan Bator", "ULAST"}; + String UTC[] = new String[] {"Tempo universal coordenado", "UTC", + "Tempo universal coordenado", "UTC"}; + String UZT[] = new String[] {"Fuso hor\u00e1rio do Uzbequist\u00e3o", "UZT", + "Fuso hor\u00e1rio de ver\u00e3o do Uzbequist\u00e3o", "UZST"}; + String VICTORIA[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Victoria)", "AEST", + "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Victoria)", "AEDT"}; + String VLAT[] = new String[] {"Fuso hor\u00e1rio de Vladivostok", "VLAT", + "Fuso hor\u00e1rio de ver\u00e3o de Vladivostok", "VLAST"}; + String WAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Ocidental", "WAT", + "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica Ocidental", "WAST"}; + String WET[] = new String[] {"Fuso hor\u00e1rio da Europa Ocidental", "WET", + "Fuso hor\u00e1rio de ver\u00e3o da Europa Ocidental", "WEST"}; + String WIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Ocidental", "WIB", + "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Ocidental", "WIST"}; + String WST_AUS[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Ocidental (Austr\u00E1lia)", "AWST", + "Fuso Hor\u00E1rio de Ver\u00E3o Ocidental (Austr\u00E1lia)", "AWDT"}; + String WST_SAMOA[] = new String[] {"Fuso hor\u00e1rio de Samoa Ocidental", "WSST", + "Fuso hor\u00e1rio de ver\u00e3o de Samoa Ocidental", "WSDT"}; + String XJT[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da China", "XJT", + "Hor\u00e1rio de luz natural da China", "XJDT"}; + String YAKT[] = new String[] {"Fuso hor\u00e1rio de Yakutsk", "YAKT", + "Fuso hor\u00e1rio de ver\u00e3o de Yakutsk", "YAKST"}; + + return new Object[][] { + {"America/Los_Angeles", PST}, + {"PST", PST}, + {"America/Denver", MST}, + {"MST", MST}, + {"America/Phoenix", MST}, + {"PNT", MST}, + {"America/Chicago", CST}, + {"CST", CST}, + {"America/New_York", EST}, + {"EST", EST}, + {"America/Indianapolis", EST}, + {"IET", EST}, + {"Pacific/Honolulu", HST}, + {"HST", HST}, + {"America/Anchorage", AKST}, + {"AST", AKST}, + {"America/Halifax", AST}, + {"America/Sitka", AKST}, + {"America/St_Johns", NST}, + {"CNT", NST}, + {"Europe/Paris", CET}, + {"ECT", CET}, + {"GMT", GMT}, + {"Africa/Casablanca", WET}, + {"Asia/Jerusalem", ISRAEL}, + {"Asia/Tokyo", JST}, + {"JST", JST}, + {"Europe/Bucharest", EET}, + {"Asia/Shanghai", CTT}, + {"CTT", CTT}, + /* Don't change the order of the above zones + * to keep compatibility with the previous version. + */ + + {"ACT", DARWIN}, + {"AET", EST_NSW}, + {"AGT", AGT}, + {"ART", EET}, + {"Africa/Abidjan", GMT}, + {"Africa/Accra", GHMT}, + {"Africa/Addis_Ababa", EAT}, + {"Africa/Algiers", CET}, + {"Africa/Asmara", EAT}, + {"Africa/Asmera", EAT}, + {"Africa/Bamako", GMT}, + {"Africa/Bangui", WAT}, + {"Africa/Banjul", GMT}, + {"Africa/Bissau", GMT}, + {"Africa/Blantyre", CAT}, + {"Africa/Brazzaville", WAT}, + {"Africa/Bujumbura", CAT}, + {"Africa/Cairo", EET}, + {"Africa/Ceuta", CET}, + {"Africa/Conakry", GMT}, + {"Africa/Dakar", GMT}, + {"Africa/Dar_es_Salaam", EAT}, + {"Africa/Djibouti", EAT}, + {"Africa/Douala", WAT}, + {"Africa/El_Aaiun", WET}, + {"Africa/Freetown", GMT}, + {"Africa/Gaborone", CAT}, + {"Africa/Harare", CAT}, + {"Africa/Johannesburg", SAST}, + {"Africa/Juba", EAT}, + {"Africa/Kampala", EAT}, + {"Africa/Khartoum", EAT}, + {"Africa/Kigali", CAT}, + {"Africa/Kinshasa", WAT}, + {"Africa/Lagos", WAT}, + {"Africa/Libreville", WAT}, + {"Africa/Lome", GMT}, + {"Africa/Luanda", WAT}, + {"Africa/Lubumbashi", CAT}, + {"Africa/Lusaka", CAT}, + {"Africa/Malabo", WAT}, + {"Africa/Maputo", CAT}, + {"Africa/Maseru", SAST}, + {"Africa/Mbabane", SAST}, + {"Africa/Mogadishu", EAT}, + {"Africa/Monrovia", GMT}, + {"Africa/Nairobi", EAT}, + {"Africa/Ndjamena", WAT}, + {"Africa/Niamey", WAT}, + {"Africa/Nouakchott", GMT}, + {"Africa/Ouagadougou", GMT}, + {"Africa/Porto-Novo", WAT}, + {"Africa/Sao_Tome", GMT}, + {"Africa/Timbuktu", GMT}, + {"Africa/Tripoli", EET}, + {"Africa/Tunis", CET}, + {"Africa/Windhoek", WAT}, + {"America/Adak", HAST}, + {"America/Anguilla", AST}, + {"America/Antigua", AST}, + {"America/Araguaina", BRT}, + {"America/Argentina/Buenos_Aires", AGT}, + {"America/Argentina/Catamarca", AGT}, + {"America/Argentina/ComodRivadavia", AGT}, + {"America/Argentina/Cordoba", AGT}, + {"America/Argentina/Jujuy", AGT}, + {"America/Argentina/La_Rioja", AGT}, + {"America/Argentina/Mendoza", AGT}, + {"America/Argentina/Rio_Gallegos", AGT}, + {"America/Argentina/Salta", AGT}, + {"America/Argentina/San_Juan", AGT}, + {"America/Argentina/San_Luis", AGT}, + {"America/Argentina/Tucuman", AGT}, + {"America/Argentina/Ushuaia", AGT}, + {"America/Aruba", AST}, + {"America/Asuncion", new String[] {"Fuso hor\u00e1rio do Paraguai", "PYT", + "Fuso hor\u00e1rio de ver\u00e3o do Paraguai", "PYST"}}, + {"America/Atikokan", EST}, + {"America/Atka", HAST}, + {"America/Bahia", BRT}, + {"America/Bahia_Banderas", CST}, + {"America/Barbados", AST}, + {"America/Belem", BRT}, + {"America/Belize", CST}, + {"America/Blanc-Sablon", AST}, + {"America/Boa_Vista", AMT}, + {"America/Bogota", new String[] {"Fuso hor\u00e1rio da Col\u00f4mbia", "COT", + "Fuso hor\u00e1rio de ver\u00e3o da Col\u00f4mbia", "COST"}}, + {"America/Boise", MST}, + {"America/Buenos_Aires", AGT}, + {"America/Cambridge_Bay", MST}, + {"America/Campo_Grande", AMT}, + {"America/Cancun", CST}, + {"America/Caracas", new String[] {"Fuso hor\u00e1rio da Venezuela", "VET", + "Fuso hor\u00e1rio de ver\u00e3o da Venezuela", "VEST"}}, + {"America/Catamarca", AGT}, + {"America/Cayenne", new String[] {"Fuso hor\u00e1rio da Guiana Francesa", "GFT", + "Fuso hor\u00e1rio de ver\u00e3o da Guiana Francesa", "GFST"}}, + {"America/Cayman", EST}, + {"America/Chihuahua", MST}, + {"America/Creston", MST}, + {"America/Coral_Harbour", EST}, + {"America/Cordoba", AGT}, + {"America/Costa_Rica", CST}, + {"America/Cuiaba", AMT}, + {"America/Curacao", AST}, + {"America/Danmarkshavn", GMT}, + {"America/Dawson", PST}, + {"America/Dawson_Creek", MST}, + {"America/Detroit", EST}, + {"America/Dominica", AST}, + {"America/Edmonton", MST}, + {"America/Eirunepe", ACT}, + {"America/El_Salvador", CST}, + {"America/Ensenada", PST}, + {"America/Fort_Wayne", EST}, + {"America/Fortaleza", BRT}, + {"America/Glace_Bay", AST}, + {"America/Godthab", new String[] {"Fuso hor\u00e1rio da Groenl\u00e2ndia Ocidental", "WGT", + "Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Ocidental", "WGST"}}, + {"America/Goose_Bay", AST}, + {"America/Grand_Turk", AST}, + {"America/Grenada", AST}, + {"America/Guadeloupe", AST}, + {"America/Guatemala", CST}, + {"America/Guayaquil", new String[] {"Fuso hor\u00e1rio do Equador", "ECT", + "Fuso hor\u00e1rio de ver\u00e3o do Equador", "ECST"}}, + {"America/Guyana", new String[] {"Fuso hor\u00e1rio da Guiana", "GYT", + "Fuso hor\u00e1rio de ver\u00e3o da Guiana", "GYST"}}, + {"America/Havana", CUBA}, + {"America/Hermosillo", MST}, + {"America/Indiana/Indianapolis", EST}, + {"America/Indiana/Knox", CST}, + {"America/Indiana/Marengo", EST}, + {"America/Indiana/Petersburg", EST}, + {"America/Indiana/Tell_City", CST}, + {"America/Indiana/Vevay", EST}, + {"America/Indiana/Vincennes", EST}, + {"America/Indiana/Winamac", EST}, + {"America/Inuvik", MST}, + {"America/Iqaluit", EST}, + {"America/Jamaica", EST}, + {"America/Jujuy", AGT}, + {"America/Juneau", AKST}, + {"America/Kentucky/Louisville", EST}, + {"America/Kentucky/Monticello", EST}, + {"America/Knox_IN", CST}, + {"America/Kralendijk", AST}, + {"America/La_Paz", new String[] {"Fuso hor\u00e1rio da Bol\u00edvia", "BOT", + "Fuso hor\u00e1rio de ver\u00e3o da Bol\u00edvia", "BOST"}}, + {"America/Lima", new String[] {"Fuso hor\u00e1rio do Peru", "PET", + "Fuso hor\u00e1rio de ver\u00e3o do Peru", "PEST"}}, + {"America/Louisville", EST}, + {"America/Lower_Princes", AST}, + {"America/Maceio", BRT}, + {"America/Managua", CST}, + {"America/Manaus", AMT}, + {"America/Marigot", AST}, + {"America/Martinique", AST}, + {"America/Matamoros", CST}, + {"America/Mazatlan", MST}, + {"America/Mendoza", AGT}, + {"America/Menominee", CST}, + {"America/Merida", CST}, + {"America/Metlakatla", PST}, + {"America/Mexico_City", CST}, + {"America/Miquelon", new String[] {"Fuso hor\u00e1rio padr\u00e3o de S\u00e3o Pedro e Miquelon", "PMST", + "Hor\u00e1rio de luz natural de S\u00e3o Pedro e Miquelon", "PMDT"}}, + {"America/Moncton", AST}, + {"America/Montevideo", new String[] {"Fuso hor\u00e1rio do Uruguai", "UYT", + "Fuso hor\u00e1rio de ver\u00e3o do Uruguai", "UYST"}}, + {"America/Monterrey", CST}, + {"America/Montreal", EST}, + {"America/Montserrat", AST}, + {"America/Nassau", EST}, + {"America/Nipigon", EST}, + {"America/Nome", AKST}, + {"America/Noronha", NORONHA}, + {"America/North_Dakota/Beulah", CST}, + {"America/North_Dakota/Center", CST}, + {"America/North_Dakota/New_Salem", CST}, + {"America/Ojinaga", MST}, + {"America/Panama", EST}, + {"America/Pangnirtung", EST}, + {"America/Paramaribo", new String[] {"Fuso hor\u00e1rio do Suriname", "SRT", + "Fuso hor\u00e1rio de ver\u00e3o do Suriname", "SRST"}}, + {"America/Port-au-Prince", EST}, + {"America/Port_of_Spain", AST}, + {"America/Porto_Acre", ACT}, + {"America/Porto_Velho", AMT}, + {"America/Puerto_Rico", AST}, + {"America/Rainy_River", CST}, + {"America/Rankin_Inlet", CST}, + {"America/Recife", BRT}, + {"America/Regina", CST}, + {"America/Resolute", CST}, + {"America/Rio_Branco", ACT}, + {"America/Rosario", AGT}, + {"America/Santa_Isabel", PST}, + {"America/Santarem", BRT}, + {"America/Santiago", CLT}, + {"America/Santo_Domingo", AST}, + {"America/Sao_Paulo", BRT}, + {"America/Scoresbysund", EGT}, + {"America/Shiprock", MST}, + {"America/St_Barthelemy", AST}, + {"America/St_Kitts", AST}, + {"America/St_Lucia", AST}, + {"America/St_Thomas", AST}, + {"America/St_Vincent", AST}, + {"America/Swift_Current", CST}, + {"America/Tegucigalpa", CST}, + {"America/Thule", AST}, + {"America/Thunder_Bay", EST}, + {"America/Tijuana", PST}, + {"America/Toronto", EST}, + {"America/Tortola", AST}, + {"America/Vancouver", PST}, + {"America/Virgin", AST}, + {"America/Whitehorse", PST}, + {"America/Winnipeg", CST}, + {"America/Yakutat", AKST}, + {"America/Yellowknife", MST}, + {"Antarctica/Casey", WST_AUS}, + {"Antarctica/Davis", new String[] {"Fuso hor\u00e1rio de Davis", "DAVT", + "Fuso hor\u00e1rio de ver\u00e3o de Davis", "DAVST"}}, + {"Antarctica/DumontDUrville", new String[] {"Fuso hor\u00e1rio de Dumont-d'Urville", "DDUT", + "Fuso hor\u00e1rio de ver\u00e3o de Dumont-d'Urville", "DDUST"}}, + {"Antarctica/Macquarie", new String[] {"Fuso Hor\u00E1rio da Ilha de Macquarie", "MIST", + "Fuso Hor\u00E1rio de Ver\u00E3o da Ilha de Macquarie", "MIDT"}}, + {"Antarctica/Mawson", new String[] {"Fuso hor\u00e1rio de Mawson", "MAWT", + "Fuso hor\u00e1rio de ver\u00e3o de Mawson", "MAWST"}}, + {"Antarctica/McMurdo", NZST}, + {"Antarctica/Palmer", CLT}, + {"Antarctica/Rothera", new String[] {"Fuso hor\u00e1rio de Rothera", "ROTT", + "Fuso hor\u00e1rio de ver\u00e3o de Rothera", "ROTST"}}, + {"Antarctica/South_Pole", NZST}, + {"Antarctica/Syowa", new String[] {"Fuso hor\u00e1rio de Syowa", "SYOT", + "Fuso hor\u00e1rio de ver\u00e3o de Syowa", "SYOST"}}, + {"Antarctica/Troll", new String[] {"Tempo universal coordenado", "UTC", + "Fuso hor\u00e1rio de ver\u00e3o da Europa Central", "CEST"}}, + {"Antarctica/Vostok", new String[] {"Fuso hor\u00e1rio de Vostok", "VOST", + "Fuso hor\u00e1rio de ver\u00e3o de Vostok", "VOSST"}}, + {"Arctic/Longyearbyen", CET}, + {"Asia/Aden", ARAST}, + {"Asia/Almaty", new String[] {"Fuso hor\u00e1rio de Alma-Ata", "ALMT", + "Fuso hor\u00e1rio de ver\u00e3o de Alma-Ata", "ALMST"}}, + {"Asia/Amman", EET}, + {"Asia/Anadyr", new String[] {"Fuso hor\u00e1rio de Anadyr", "ANAT", + "Fuso hor\u00e1rio de ver\u00e3o de Anadyr", "ANAST"}}, + {"Asia/Aqtau", new String[] {"Fuso hor\u00e1rio de Aqtau", "AQTT", + "Fuso hor\u00e1rio de ver\u00e3o de Aqtau", "AQTST"}}, + {"Asia/Aqtobe", new String[] {"Fuso hor\u00e1rio de Aqtobe", "AQTT", + "Fuso hor\u00e1rio de ver\u00e3o de Aqtobe", "AQTST"}}, + {"Asia/Ashgabat", TMT}, + {"Asia/Ashkhabad", TMT}, + {"Asia/Baghdad", ARAST}, + {"Asia/Bahrain", ARAST}, + {"Asia/Baku", new String[] {"Fuso hor\u00e1rio do Azerbaij\u00e3o", "AZT", + "Fuso hor\u00e1rio de ver\u00e3o do Azerbaij\u00e3o", "AZST"}}, + {"Asia/Bangkok", ICT}, + {"Asia/Beirut", EET}, + {"Asia/Bishkek", new String[] {"Fuso hor\u00e1rio do Quirguist\u00e3o", "KGT", + "Fuso hor\u00e1rio de ver\u00e3o do Quirguist\u00e3o", "KGST"}}, + {"Asia/Brunei", new String[] {"Fuso hor\u00e1rio de Brunei", "BNT", + "Fuso hor\u00e1rio de ver\u00e3o de Brunei", "BNST"}}, + {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, + {"Asia/Choibalsan", new String[] {"Fuso hor\u00e1rio de Choibalsan", "CHOT", + "Fuso hor\u00e1rio de ver\u00e3o de Choibalsan", "CHOST"}}, + {"Asia/Chongqing", CTT}, + {"Asia/Chungking", CTT}, + {"Asia/Colombo", IST}, + {"Asia/Dacca", BDT}, + {"Asia/Dhaka", BDT}, + {"Asia/Dili", new String[] {"Fuso hor\u00e1rio do Timor-Leste", "TLT", + "Fuso hor\u00e1rio de ver\u00e3o do Timor-Leste", "TLST"}}, + {"Asia/Damascus", EET}, + {"Asia/Dubai", GST}, + {"Asia/Dushanbe", new String[] {"Fuso hor\u00e1rio do Tadjiquist\u00e3o", "TJT", + "Fuso hor\u00e1rio de ver\u00e3o do Tadjiquist\u00e3o", "TJST"}}, + {"Asia/Gaza", EET}, + {"Asia/Harbin", CTT}, + {"Asia/Hebron", EET}, + {"Asia/Ho_Chi_Minh", ICT}, + {"Asia/Hong_Kong", HKT}, + {"Asia/Hovd", new String[] {"Fuso hor\u00e1rio de Hovd", "HOVT", + "Fuso hor\u00e1rio de ver\u00e3o de Hovd", "HOVST"}}, + {"Asia/Irkutsk", IRKT}, + {"Asia/Istanbul", EET}, + {"Asia/Jakarta", WIT}, + {"Asia/Jayapura", new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Oriental", "WIT", + "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Oriental", "EIST"}}, + {"Asia/Kabul", new String[] {"Fuso hor\u00e1rio do Afeganist\u00e3o", "AFT", + "Fuso hor\u00e1rio de ver\u00e3o do Afeganist\u00e3o", "AFST"}}, + {"Asia/Kamchatka", new String[] {"Fuso hor\u00e1rio de Petropavlovsk-Kamchatski", "PETT", + "Fuso hor\u00e1rio de ver\u00e3o de Petropavlovsk-Kamchatski", "PETST"}}, + {"Asia/Karachi", PKT}, + {"Asia/Kashgar", XJT}, + {"Asia/Kathmandu", NPT}, + {"Asia/Katmandu", NPT}, + {"Asia/Khandyga", new String[] {"Hor\u00E1rio de Khandyga", "YAKT", + "Hor\u00E1rio de Ver\u00E3o de Khandyga", "YAKST"}}, + {"Asia/Kolkata", IST}, + {"Asia/Krasnoyarsk", KRAT}, + {"Asia/Kuala_Lumpur", MYT}, + {"Asia/Kuching", MYT}, + {"Asia/Kuwait", ARAST}, + {"Asia/Macao", CTT}, + {"Asia/Macau", CTT}, + {"Asia/Magadan", new String[] {"Fuso hor\u00e1rio de Magadan", "MAGT", + "Fuso hor\u00e1rio de ver\u00e3o de Magadan", "MAGST"}}, + {"Asia/Makassar", CIT}, + {"Asia/Manila", new String[] {"Fuso hor\u00e1rio das Filipinas", "PHT", + "Fuso hor\u00e1rio de ver\u00e3o das Filipinas", "PHST"}}, + {"Asia/Muscat", GST}, + {"Asia/Nicosia", EET}, + {"Asia/Novokuznetsk", KRAT}, + {"Asia/Novosibirsk", NOVT}, + {"Asia/Oral", new String[] {"Fuso hor\u00e1rio de Uralsk", "ORAT", + "Fuso hor\u00e1rio de ver\u00e3o de Uralsk", "ORAST"}}, + {"Asia/Omsk", new String[] {"Fuso hor\u00e1rio de Omsk", "OMST", + "Fuso hor\u00e1rio de ver\u00e3o de Omsk", "OMSST"}}, + {"Asia/Phnom_Penh", ICT}, + {"Asia/Pontianak", WIT}, + {"Asia/Pyongyang", KST}, + {"Asia/Qatar", ARAST}, + {"Asia/Qyzylorda", new String[] {"Fuso hor\u00e1rio de Kizil-Orda", "QYZT", + "Fuso hor\u00e1rio de ver\u00e3o de Kizil-Orda", "QYZST"}}, + {"Asia/Rangoon", new String[] {"Fuso hor\u00e1rio de Mianmar", "MMT", + "Fuso hor\u00e1rio de ver\u00e3o de Mianmar", "MMST"}}, + {"Asia/Riyadh", ARAST}, + {"Asia/Saigon", ICT}, + {"Asia/Sakhalin", new String[] {"Fuso hor\u00e1rio de Sakhalina", "SAKT", + "Fuso hor\u00e1rio de ver\u00e3o de Sakhalina", "SAKST"}}, + {"Asia/Samarkand", UZT}, + {"Asia/Seoul", KST}, + {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT"}}, + {"Asia/Taipei", CTT}, + {"Asia/Tel_Aviv", ISRAEL}, + {"Asia/Tashkent", UZT}, + {"Asia/Tbilisi", new String[] {"Fuso hor\u00e1rio da Ge\u00f3rgia", "GET", + "Fuso hor\u00e1rio de ver\u00e3o da Ge\u00f3rgia", "GEST"}}, + {"Asia/Tehran", IRT}, + {"Asia/Thimbu", BTT}, + {"Asia/Thimphu", BTT}, + {"Asia/Ujung_Pandang", CIT}, + {"Asia/Ulaanbaatar", ULAT}, + {"Asia/Ulan_Bator", ULAT}, + {"Asia/Urumqi", XJT}, + {"Asia/Ust-Nera", new String[] {"Hor\u00E1rio de Ust-Nera", "VLAT", + "Hor\u00E1rio de Ver\u00E3o de Ust-Nera", "VLAST"}}, + {"Asia/Vientiane", ICT}, + {"Asia/Vladivostok", VLAT}, + {"Asia/Yakutsk", YAKT}, + {"Asia/Yekaterinburg", new String[] {"Fuso hor\u00e1rio de Yekaterinburgo", "YEKT", + "Fuso hor\u00e1rio de ver\u00e3o de Yekaterinburgo", "YEKST"}}, + {"Asia/Yerevan", ARMT}, + {"Atlantic/Azores", new String[] {"Fuso hor\u00e1rio das A\u00e7ores", "AZOT", + "Fuso hor\u00e1rio de ver\u00e3o das A\u00e7ores", "AZOST"}}, + {"Atlantic/Bermuda", AST}, + {"Atlantic/Canary", WET}, + {"Atlantic/Cape_Verde", new String[] {"Fuso hor\u00e1rio de Cabo Verde", "CVT", + "Fuso hor\u00e1rio de ver\u00e3o de Cabo Verde", "CVST"}}, + {"Atlantic/Faeroe", WET}, + {"Atlantic/Faroe", WET}, + {"Atlantic/Jan_Mayen", CET}, + {"Atlantic/Madeira", WET}, + {"Atlantic/Reykjavik", GMT}, + {"Atlantic/South_Georgia", new String[] {"Fuso hor\u00e1rio padr\u00e3o da Ge\u00f3rgia do Sul", "GST", + "Hor\u00e1rio de luz natural da Ge\u00f3rgia do Sul", "GDT"}}, + {"Atlantic/St_Helena", GMT}, + {"Atlantic/Stanley", new String[] {"Fuso hor\u00e1rio das Ilhas Falkland", "FKT", + "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Falkland", "FKST"}}, + {"Australia/ACT", EST_NSW}, + {"Australia/Adelaide", ADELAIDE}, + {"Australia/Brisbane", BRISBANE}, + {"Australia/Broken_Hill", BROKEN_HILL}, + {"Australia/Canberra", EST_NSW}, + {"Australia/Currie", EST_NSW}, + {"Australia/Darwin", DARWIN}, + {"Australia/Eucla", new String[] {"Fuso Hor\u00E1rio Ocidental Central (Austr\u00E1lia)", "ACWST", + "Fuso Hor\u00E1rio de Ver\u00E3o Ocidental Central (Austr\u00E1lia)", "ACWDT"}}, + {"Australia/Hobart", TASMANIA}, + {"Australia/LHI", LORD_HOWE}, + {"Australia/Lindeman", BRISBANE}, + {"Australia/Lord_Howe", LORD_HOWE}, + {"Australia/Melbourne", VICTORIA}, + {"Australia/North", DARWIN}, + {"Australia/NSW", EST_NSW}, + {"Australia/Perth", WST_AUS}, + {"Australia/Queensland", BRISBANE}, + {"Australia/South", ADELAIDE}, + {"Australia/Sydney", EST_NSW}, + {"Australia/Tasmania", TASMANIA}, + {"Australia/Victoria", VICTORIA}, + {"Australia/West", WST_AUS}, + {"Australia/Yancowinna", BROKEN_HILL}, + {"BET", BRT}, + {"BST", BDT}, + {"Brazil/Acre", ACT}, + {"Brazil/DeNoronha", NORONHA}, + {"Brazil/East", BRT}, + {"Brazil/West", AMT}, + {"Canada/Atlantic", AST}, + {"Canada/Central", CST}, + {"Canada/East-Saskatchewan", CST}, + {"Canada/Eastern", EST}, + {"Canada/Mountain", MST}, + {"Canada/Newfoundland", NST}, + {"Canada/Pacific", PST}, + {"Canada/Yukon", PST}, + {"Canada/Saskatchewan", CST}, + {"CAT", CAT}, + {"CET", CET}, + {"Chile/Continental", CLT}, + {"Chile/EasterIsland", EASTER}, + {"CST6CDT", CST}, + {"Cuba", CUBA}, + {"EAT", EAT}, + {"EET", EET}, + {"Egypt", EET}, + {"Eire", DUBLIN}, + {"EST5EDT", EST}, + {"Etc/Greenwich", GMT}, + {"Etc/UCT", UTC}, + {"Etc/Universal", UTC}, + {"Etc/UTC", UTC}, + {"Etc/Zulu", UTC}, + {"Europe/Amsterdam", CET}, + {"Europe/Andorra", CET}, + {"Europe/Athens", EET}, + {"Europe/Belfast", GMTBST}, + {"Europe/Belgrade", CET}, + {"Europe/Berlin", CET}, + {"Europe/Bratislava", CET}, + {"Europe/Brussels", CET}, + {"Europe/Budapest", CET}, + {"Europe/Busingen", CET}, + {"Europe/Chisinau", EET}, + {"Europe/Copenhagen", CET}, + {"Europe/Dublin", DUBLIN}, + {"Europe/Gibraltar", CET}, + {"Europe/Guernsey", GMTBST}, + {"Europe/Helsinki", EET}, + {"Europe/Isle_of_Man", GMTBST}, + {"Europe/Istanbul", EET}, + {"Europe/Jersey", GMTBST}, + {"Europe/Kaliningrad", EET}, + {"Europe/Kiev", EET}, + {"Europe/Lisbon", WET}, + {"Europe/Ljubljana", CET}, + {"Europe/London", GMTBST}, + {"Europe/Luxembourg", CET}, + {"Europe/Madrid", CET}, + {"Europe/Malta", CET}, + {"Europe/Mariehamn", EET}, + {"Europe/Minsk", MSK}, + {"Europe/Monaco", CET}, + {"Europe/Moscow", MSK}, + {"Europe/Nicosia", EET}, + {"Europe/Oslo", CET}, + {"Europe/Podgorica", CET}, + {"Europe/Prague", CET}, + {"Europe/Riga", EET}, + {"Europe/Rome", CET}, + {"Europe/Samara", new String[] {"Fuso hor\u00e1rio de Samara", "SAMT", + "Fuso hor\u00e1rio de ver\u00e3o de Samara", "SAMST"}}, + {"Europe/San_Marino", CET}, + {"Europe/Sarajevo", CET}, + {"Europe/Simferopol", MSK}, + {"Europe/Skopje", CET}, + {"Europe/Sofia", EET}, + {"Europe/Stockholm", CET}, + {"Europe/Tallinn", EET}, + {"Europe/Tirane", CET}, + {"Europe/Tiraspol", EET}, + {"Europe/Uzhgorod", EET}, + {"Europe/Vaduz", CET}, + {"Europe/Vatican", CET}, + {"Europe/Vienna", CET}, + {"Europe/Vilnius", EET}, + {"Europe/Volgograd", MSK}, + {"Europe/Warsaw", CET}, + {"Europe/Zagreb", CET}, + {"Europe/Zaporozhye", EET}, + {"Europe/Zurich", CET}, + {"GB", GMTBST}, + {"GB-Eire", GMTBST}, + {"Greenwich", GMT}, + {"Hongkong", HKT}, + {"Iceland", GMT}, + {"Iran", IRT}, + {"IST", IST}, + {"Indian/Antananarivo", EAT}, + {"Indian/Chagos", new String[] {"Fuso hor\u00e1rio dos territ\u00f3rios do Oceano \u00cdndico", "IOT", + "Fuso hor\u00e1rio de ver\u00e3o dos territ\u00f3rios do Oceano \u00cdndico", "IOST"}}, + {"Indian/Christmas", new String[] {"Fuso hor\u00e1rio das Ilhas Christmas", "CXT", + "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Christmas", "CXST"}}, + {"Indian/Cocos", new String[] {"Fuso hor\u00e1rio das Ilhas Cocos", "CCT", + "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Cocos", "CCST"}}, + {"Indian/Comoro", EAT}, + {"Indian/Kerguelen", new String[] {"Fuso hor\u00e1rio das Terras Austrais e Ant\u00e1rticas Francesas", "TFT", + "Fuso hor\u00e1rio de ver\u00e3o das Terras Austrais e Ant\u00e1rticas Francesas", "TFST"}}, + {"Indian/Mahe", new String[] {"Fuso hor\u00e1rio das Seychelles", "SCT", + "Fuso hor\u00e1rio de ver\u00e3o das Seychelles", "SCST"}}, + {"Indian/Maldives", new String[] {"Fuso hor\u00e1rio das Maldivas", "MVT", + "Fuso hor\u00e1rio de ver\u00e3o das Maldivas", "MVST"}}, + {"Indian/Mauritius", new String[] {"Fuso hor\u00e1rio das Ilhas Maur\u00edcio", "MUT", + "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Maur\u00edcio", "MUST"}}, + {"Indian/Mayotte", EAT}, + {"Indian/Reunion", new String[] {"Fuso hor\u00e1rio de Reuni\u00e3o", "RET", + "Fuso hor\u00e1rio de ver\u00e3o de Reuni\u00e3o", "REST"}}, + {"Israel", ISRAEL}, + {"Jamaica", EST}, + {"Japan", JST}, + {"Kwajalein", MHT}, + {"Libya", EET}, + {"MET", new String[] {"Fuso hor\u00e1rio da Europa M\u00e9dia", "MET", + "Fuso hor\u00e1rio de ver\u00e3o da Europa M\u00e9dia", "MEST"}}, + {"Mexico/BajaNorte", PST}, + {"Mexico/BajaSur", MST}, + {"Mexico/General", CST}, + {"MIT", WST_SAMOA}, + {"MST7MDT", MST}, + {"Navajo", MST}, + {"NET", ARMT}, + {"NST", NZST}, + {"NZ", NZST}, + {"NZ-CHAT", CHAST}, + {"PLT", PKT}, + {"Portugal", WET}, + {"PRT", AST}, + {"Pacific/Apia", WST_SAMOA}, + {"Pacific/Auckland", NZST}, + {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST", + "Bougainville Daylight Time", "BST"}}, + {"Pacific/Chatham", CHAST}, + {"Pacific/Chuuk", TRUT}, + {"Pacific/Easter", EASTER}, + {"Pacific/Efate", new String[] {"Fuso hor\u00e1rio de Vanuatu", "VUT", + "Fuso hor\u00e1rio de ver\u00e3o de Vanuatu", "VUST"}}, + {"Pacific/Enderbury", new String[] {"Fuso hor\u00e1rio das Ilhas F\u00e9nix", "PHOT", + "Fuso hor\u00e1rio de ver\u00e3o das Ilhas F\u00e9nix", "PHOST"}}, + {"Pacific/Fakaofo", new String[] {"Fuso hor\u00e1rio de Tokelau", "TKT", + "Fuso hor\u00e1rio de ver\u00e3o de Tokelau", "TKST"}}, + {"Pacific/Fiji", new String[] {"Fuso hor\u00e1rio de Fiji", "FJT", + "Fuso hor\u00e1rio de ver\u00e3o de Fiji", "FJST"}}, + {"Pacific/Funafuti", new String[] {"Fuso hor\u00e1rio de Tuvalu", "TVT", + "Fuso hor\u00e1rio de ver\u00e3o de Tuvalu", "TVST"}}, + {"Pacific/Galapagos", new String[] {"Fuso hor\u00e1rio das Ilhas Gal\u00e1pagos", "GALT", + "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Gal\u00e1pagos", "GALST"}}, + {"Pacific/Gambier", GAMBIER}, + {"Pacific/Guadalcanal", SBT}, + {"Pacific/Guam", ChST}, + {"Pacific/Johnston", HST}, + {"Pacific/Kiritimati", new String[] {"Fuso hor\u00e1rio das Esp\u00f3rades Equatoriais", "LINT", + "Fuso hor\u00e1rio de ver\u00e3o das Esp\u00f3rades Equatoriais", "LINST"}}, + {"Pacific/Kosrae", new String[] {"Fuso hor\u00e1rio de Kosrae", "KOST", + "Fuso hor\u00e1rio de ver\u00e3o de Kosrae", "KOSST"}}, + {"Pacific/Kwajalein", MHT}, + {"Pacific/Majuro", MHT}, + {"Pacific/Marquesas", new String[] {"Fuso hor\u00e1rio das Ilhas Marquesas", "MART", + "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Marquesas", "MARST"}}, + {"Pacific/Midway", SAMOA}, + {"Pacific/Nauru", new String[] {"Fuso hor\u00e1rio de Nauru", "NRT", + "Fuso hor\u00e1rio de ver\u00e3o de Nauru", "NRST"}}, + {"Pacific/Niue", new String[] {"Fuso hor\u00e1rio de Niue", "NUT", + "Fuso hor\u00e1rio de ver\u00e3o de Niue", "NUST"}}, + {"Pacific/Norfolk", new String[] {"Fuso hor\u00e1rio da Ilha de Norfolk", "NFT", + "Fuso hor\u00e1rio de ver\u00e3o da Ilha de Norfolk", "NFST"}}, + {"Pacific/Noumea", new String[] {"Fuso hor\u00e1rio da Nova Caled\u00f4nia", "NCT", + "Fuso hor\u00e1rio de ver\u00e3o da Nova Caled\u00f4nia", "NCST"}}, + {"Pacific/Pago_Pago", SAMOA}, + {"Pacific/Palau", new String[] {"Fuso hor\u00e1rio de Palau", "PWT", + "Fuso hor\u00e1rio de ver\u00e3o de Palau", "PWST"}}, + {"Pacific/Pitcairn", PITCAIRN}, + {"Pacific/Pohnpei", PONT}, + {"Pacific/Ponape", PONT}, + {"Pacific/Port_Moresby", new String[] {"Fuso hor\u00e1rio de Papua-Nova Guin\u00e9", "PGT", + "Fuso hor\u00e1rio de ver\u00e3o de Papua-Nova Guin\u00e9", "PGST"}}, + {"Pacific/Rarotonga", new String[] {"Fuso hor\u00e1rio das Ilhas Cook", "CKT", + "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Cook", "CKHST"}}, + {"Pacific/Saipan", ChST}, + {"Pacific/Samoa", SAMOA}, + {"Pacific/Tahiti", new String[] {"Fuso hor\u00e1rio do Taiti", "TAHT", + "Fuso hor\u00e1rio de ver\u00e3o do Taiti", "TAHST"}}, + {"Pacific/Tarawa", new String[] {"Fuso hor\u00e1rio das Ilhas Gilbert", "GILT", + "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Gilbert", "GILST"}}, + {"Pacific/Tongatapu", new String[] {"Fuso hor\u00e1rio de Tonga", "TOT", + "Fuso hor\u00e1rio de ver\u00e3o de Tonga", "TOST"}}, + {"Pacific/Truk", TRUT}, + {"Pacific/Wake", new String[] {"Fuso hor\u00e1rio de Wake", "WAKT", + "Fuso hor\u00e1rio de ver\u00e3o de Wake", "WAKST"}}, + {"Pacific/Wallis", new String[] {"Fuso hor\u00e1rio de Wallis e Futuna", "WFT", + "Fuso hor\u00e1rio de ver\u00e3o de Wallis e Futuna", "WFST"}}, + {"Pacific/Yap", TRUT}, + {"Poland", CET}, + {"PRC", CTT}, + {"PST8PDT", PST}, + {"ROK", KST}, + {"Singapore", SGT}, + {"SST", SBT}, + {"SystemV/AST4", AST}, + {"SystemV/AST4ADT", AST}, + {"SystemV/CST6", CST}, + {"SystemV/CST6CDT", CST}, + {"SystemV/EST5", EST}, + {"SystemV/EST5EDT", EST}, + {"SystemV/HST10", HST}, + {"SystemV/MST7", MST}, + {"SystemV/MST7MDT", MST}, + {"SystemV/PST8", PST}, + {"SystemV/PST8PDT", PST}, + {"SystemV/YST9", AKST}, + {"SystemV/YST9YDT", AKST}, + {"Turkey", EET}, + {"UCT", UTC}, + {"Universal", UTC}, + {"US/Alaska", AKST}, + {"US/Aleutian", HAST}, + {"US/Arizona", MST}, + {"US/Central", CST}, + {"US/Eastern", EST}, + {"US/Hawaii", HST}, + {"US/Indiana-Starke", CST}, + {"US/East-Indiana", EST}, + {"US/Michigan", EST}, + {"US/Mountain", MST}, + {"US/Pacific", PST}, + {"US/Pacific-New", PST}, + {"US/Samoa", SAMOA}, + {"UTC", UTC}, + {"VST", ICT}, + {"W-SU", MSK}, + {"WET", WET}, + {"Zulu", UTC}, + }; + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,8 +45,8 @@ protected final Object[][] getContents() { String ACT[] = new String[] {"Acre, normaltid", "ACT", "Acre, sommartid", "ACST"}; - String ADELAIDE[] = new String[] {"Central Standard Time (S\u00f6dra Australien)", "CST", - "Central Summer Time (S\u00f6dra Australien)", "CST"}; + String ADELAIDE[] = new String[] {"Central standardtid (Sydaustralien)", "ACST", + "Central sommartid (South Australia)", "ACDT"}; String AGT[] = new String[] {"Argentina, normaltid", "ART", "Argentina, sommartid", "ARST"}; String AKST[] = new String[] {"Alaska, normaltid", "AKST", @@ -61,10 +61,10 @@ "Atlantisk sommartid", "ADT"}; String BDT[] = new String[] {"Bangladesh, normaltid", "BDT", "Bangladesh, sommartid", "BDST"}; - String BRISBANE[] = new String[] {"Eastern Standard Time (Queensland)", "EST", - "Eastern Summer Time (Queensland)", "EST"}; - String BROKEN_HILL[] = new String[] {"Central Standard Time (S\u00f6dra Australien/Nya Sydwales)", "CST", - "Central Summer Time (S\u00f6dra Australien/Nya Sydwales)", "CST"}; + String BRISBANE[] = new String[] {"\u00D6stlig standardtid (Queensland)", "AEST", + "\u00D6stlig sommartid (Queensland)", "AEDT"}; + String BROKEN_HILL[] = new String[] {"Central standardtid (Sydaustralien/New South Wales)", "ACST", + "Central sommartid (South Australia/New South Wales)", "ACDT"}; String BRT[] = new String[] {"Brasilien, normaltid", "BRT", "Brasilien, sommartid", "BRST"}; String BTT[] = new String[] {"Bhutan, normaltid", "BTT", @@ -75,7 +75,11 @@ "Centraleuropeisk sommartid", "CEST"}; String CHAST[] = new String[] {"Chatham, normaltid", "CHAST", "Chatham, sommartid", "CHADT"}; - String CIT[] = new String[] {"Centralindonesisk tid", "CIT", + String ChST[] = new String[] {"Chamorro, normaltid", "ChST", + "Chamorro, sommartid", "ChDT"}; + String CHUT[] = new String[] {"Chuuk, normaltid", "CHUT", + "Chuuk, sommartid", "CHUST"}; + String CIT[] = new String[] {"Centralindonesisk tid", "WITA", "Centralindonesisk sommartid", "CIST"}; String CLT[] = new String[] {"Chile, normaltid", "CLT", "Chile, sommartid", "CLST"}; @@ -83,10 +87,10 @@ "Central sommartid", "CDT"}; String CTT[] = new String[] {"Kina, normaltid", "CST", "Kina, sommartid", "CDT"}; - String CUBA[] = new String[] {"Cuba Standard Time", "CST", - "Cuba Daylight Time", "CDT"}; - String DARWIN[] = new String[] {"Central Standard Time (Nordterritoriet)", "CST", - "Central Summer Time (Nordterritoriet)", "CST"}; + String CUBA[] = new String[] {"Kuba, normaltid", "CST", + "Kuba, sommartid", "CDT"}; + String DARWIN[] = new String[] {"Central standardtid (Nordterritoriet)", "ACST", + "Central sommartid (Nordterritoriet)", "ACDT"}; String DUBLIN[] = new String[] {"Greenwichtid", "GMT", "Irland, sommartid", "IST"}; String EAT[] = new String[] {"\u00d6stafrikansk tid", "EAT", @@ -99,8 +103,10 @@ "\u00d6stgr\u00f6nl\u00e4ndsk sommartid", "EGST"}; String EST[] = new String[] {"Eastern, normaltid", "EST", "Eastern, sommartid", "EDT"}; - String EST_NSW[] = new String[] {"Eastern Standard Time (Nya Sydwales)", "EST", - "Eastern Summer Time (Nya Sydwales)", "EST"}; + String EST_NSW[] = new String[] {"\u00D6stlig standardtid (New South Wales)", "AEST", + "\u00D6stlig sommartid (New South Wales)", "AEDT"}; + String FET[] = new String[] {"Kaliningradtid", "FET", + "\u00D6steuropeisk sommartid", "FEST"}; String GHMT[] = new String[] {"Ghana, normaltid", "GMT", "Ghana, sommartid", "GHST"}; String GAMBIER[] = new String[] {"Gambier, normaltid", "GAMT", @@ -127,10 +133,12 @@ "Indien, sommartid", "IDT"}; String JST[] = new String[] {"Japan, normaltid", "JST", "Japan, sommartid", "JDT"}; + String KRAT[] = new String[] {"Krasnojarsk, normaltid", "KRAT", + "Krasnojarsk, sommartid", "KRAST"}; String KST[] = new String[] {"Korea, normaltid", "KST", "Korea, sommartid", "KDT"}; String LORD_HOWE[] = new String[] {"Lord Howe, normaltid", "LHST", - "Lord Howe, sommartid", "LHST"}; + "Lord Howe, sommartid", "LHDT"}; String MHT[] = new String[] {"Marshall\u00f6arna, normaltid", "MHT", "Marshall\u00f6arna, sommartid", "MHST"}; String MSK[] = new String[] {"Moskva, normaltid", "MSK", @@ -153,48 +161,48 @@ "Pitcairn, sommartid", "PDT"}; String PKT[] = new String[] {"Pakistan, normaltid", "PKT", "Pakistan, sommartid", "PKST"}; + String PONT[] = new String[] {"Pohnpei, normaltid", "PONT", + "Pohnpei, sommartid", "PONST"}; String PST[] = new String[] {"Stilla havet, normaltid", "PST", "Stilla havet, sommartid", "PDT"}; - String RST[] = new String[] {"Eastern, normaltid", "EST", - "Central sommartid", "CDT"}; + String SAMOA[] = new String[] {"Samoa, normaltid", "SST", + "Samoa, sommartid", "SDT"}; + String IRKT[] = new String[] {"Irkutsk, normaltid", "IRKT", + "Irkutsk, sommartid", "IRKST"}; String SAST[] = new String[] {"Sydafrika, normaltid", "SAST", "Sydafrika, sommartid", "SAST"}; String SBT[] = new String[] {"Salomon\u00f6arna, normaltid", "SBT", "Salomon\u00f6arna, sommartid", "SBST"}; String SGT[] = new String[] {"Singapore, normaltid", "SGT", "Singapore, sommartid", "SGST"}; - String SLST[] = new String[] {"Greenwich Mean Time", "GMT", - "Sierra Leone, sommartid", "SLST"}; - String TASMANIA[] = new String[] {"Eastern Standard Time (Tasmanien)", "EST", - "Eastern Summer Time (Tasmanien)", "EST"}; + String TASMANIA[] = new String[] {"\u00D6stlig standardtid (Tasmania)", "AEST", + "\u00D6stlig sommartid (Tasmanien)", "AEDT"}; String TMT[] = new String[] {"Turkmenistan, normaltid", "TMT", "Turkmenistan, sommartid", "TMST"}; - String TRUT[] = new String[] {"Truk, normaltid", "TRUT", - "Truk, sommartid", "TRUST"}; String ULAT[]= new String[] {"Ulaanbaatar, normaltid", "ULAT", "Ulaanbaatar, sommartid", "ULAST"}; - String WART[] = new String[] {"Argentina, normaltid", "WART", - "Argentina, sommartid", "WARST"}; + String UTC[] = new String[] {"Koordinerad universell tid", "UTC", + "Koordinerad universell tid", "UTC"}; + String UZT[] = new String[] {"Uzbekistan, normaltid", "UZT", + "Uzbekistan, sommartid", "UZST"}; + String VICTORIA[] = new String[] {"\u00D6stlig standardtid (Victoria)", "AEST", + "\u00D6stlig sommartid (Victoria)", "AEDT"}; + String VLAT[] = new String[] {"Vladivostok, normaltid", "VLAT", + "Vladivostok, sommartid", "VLAST"}; String WAT[] = new String[] {"V\u00e4stafrikansk tid", "WAT", "V\u00e4stafrikansk sommartid", "WAST"}; String WET[] = new String[] {"V\u00e4steuropeisk tid", "WET", "V\u00e4steuropeisk sommartid", "WEST"}; - String WIT[] = new String[] {"V\u00e4stindonesisk tid", "WIT", + String WIT[] = new String[] {"V\u00e4stindonesisk tid", "WIB", "V\u00e4stindonesisk sommartid", "WIST"}; - String WST_AUS[] = new String[] {"Western Standard Time (Australien)", "WST", - "Western Summer Time (Australien)", "WST"}; - String SAMOA[] = new String[] {"Samoa, normaltid", "SST", - "Samoa, sommartid", "SDT"}; - String WST_SAMOA[] = new String[] {"V\u00e4stsamoansk tid", "WST", - "V\u00e4stsamoansk sommartid", "WSST"}; - String ChST[] = new String[] {"Chamorro, normaltid", "ChST", - "Chamorro, sommartid", "ChDT"}; - String VICTORIA[] = new String[] {"Eastern Standard Time (Victoria)", "EST", - "Eastern Summer Time (Victoria)", "EST"}; - String UTC[] = new String[] {"Koordinerad universell tid", "UTC", - "Koordinerad universell tid", "UTC"}; - String UZT[] = new String[] {"Uzbekistan, normaltid", "UZT", - "Uzbekistan, sommartid", "UZST"}; + String WST_AUS[] = new String[] {"Western Standard Time (Australien)", "AWST", + "V\u00E4stlig sommartid (Australien)", "AWDT"}; + String WST_SAMOA[] = new String[] {"V\u00e4stsamoansk tid", "WSST", + "V\u00e4stsamoansk sommartid", "WSDT"}; + String XJT[] = new String[] {"Kina, normaltid", "XJT", + "Kina, sommartid", "XJDT"}; + String YAKT[] = new String[] {"Jakutsk, normaltid", "YAKT", + "Jakutsk, sommartid", "YAKST"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -214,6 +222,7 @@ {"America/Anchorage", AKST}, {"AST", AKST}, {"America/Halifax", AST}, + {"America/Sitka", AKST}, {"America/St_Johns", NST}, {"CNT", NST}, {"Europe/Paris", CET}, @@ -255,10 +264,11 @@ {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, + {"Africa/Juba", EAT}, {"Africa/Kampala", EAT}, {"Africa/Khartoum", EAT}, {"Africa/Kigali", CAT}, @@ -300,7 +310,7 @@ {"America/Argentina/Rio_Gallegos", AGT}, {"America/Argentina/Salta", AGT}, {"America/Argentina/San_Juan", AGT}, - {"America/Argentina/San_Luis", WART}, + {"America/Argentina/San_Luis", AGT}, {"America/Argentina/Tucuman", AGT}, {"America/Argentina/Ushuaia", AGT}, {"America/Aruba", AST}, @@ -309,6 +319,7 @@ {"America/Atikokan", EST}, {"America/Atka", HAST}, {"America/Bahia", BRT}, + {"America/Bahia_Banderas", CST}, {"America/Barbados", AST}, {"America/Belem", BRT}, {"America/Belize", CST}, @@ -328,6 +339,7 @@ "Franska Guyana, sommartid", "GFST"}}, {"America/Cayman", EST}, {"America/Chihuahua", MST}, + {"America/Creston", MST}, {"America/Coral_Harbour", EST}, {"America/Cordoba", AGT}, {"America/Costa_Rica", CST}, @@ -339,7 +351,7 @@ {"America/Detroit", EST}, {"America/Dominica", AST}, {"America/Edmonton", MST}, - {"America/Eirunepe", AMT}, + {"America/Eirunepe", ACT}, {"America/El_Salvador", CST}, {"America/Ensenada", PST}, {"America/Fort_Wayne", EST}, @@ -348,7 +360,7 @@ {"America/Godthab", new String[] {"V\u00e4stra Gr\u00f6nland, normaltid", "WGT", "V\u00e4stra Gr\u00f6nland, sommartid", "WGST"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -374,11 +386,13 @@ {"America/Kentucky/Louisville", EST}, {"America/Kentucky/Monticello", EST}, {"America/Knox_IN", CST}, + {"America/Kralendijk", AST}, {"America/La_Paz", new String[] {"Bolivia, normaltid", "BOT", "Bolivia, sommartid", "BOST"}}, {"America/Lima", new String[] {"Peru, normaltid", "PET", "Peru, sommartid", "PEST"}}, {"America/Louisville", EST}, + {"America/Lower_Princes", AST}, {"America/Maceio", BRT}, {"America/Managua", CST}, {"America/Manaus", AMT}, @@ -389,6 +403,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Saint-Pierre-et-Miquelon, normaltid", "PMST", "Saint-Pierre-et-Miquelon, sommartid", "PMDT"}}, @@ -402,6 +417,7 @@ {"America/Nipigon", EST}, {"America/Nome", AKST}, {"America/Noronha", NORONHA}, + {"America/North_Dakota/Beulah", CST}, {"America/North_Dakota/Center", CST}, {"America/North_Dakota/New_Salem", CST}, {"America/Ojinaga", MST}, @@ -411,15 +427,15 @@ "Surinam, sommartid", "SRST"}}, {"America/Port-au-Prince", EST}, {"America/Port_of_Spain", AST}, - {"America/Porto_Acre", AMT}, + {"America/Porto_Acre", ACT}, {"America/Porto_Velho", AMT}, {"America/Puerto_Rico", AST}, {"America/Rainy_River", CST}, {"America/Rankin_Inlet", CST}, {"America/Recife", BRT}, {"America/Regina", CST}, - {"America/Resolute", RST}, - {"America/Rio_Branco", AMT}, + {"America/Resolute", CST}, + {"America/Rio_Branco", ACT}, {"America/Rosario", AGT}, {"America/Santa_Isabel", PST}, {"America/Santarem", BRT}, @@ -446,10 +462,13 @@ {"America/Winnipeg", CST}, {"America/Yakutat", AKST}, {"America/Yellowknife", MST}, + {"Antarctica/Casey", WST_AUS}, {"Antarctica/Davis", new String[] {"Davis, normaltid", "DAVT", "Davis, sommartid", "DAVST"}}, {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville, normaltid", "DDUT", "Dumont-d'Urville, sommartid", "DDUST"}}, + {"Antarctica/Macquarie", new String[] {"Macquarie\u00F6n, normaltid", "MIST", + "Macquarie\u00F6n, sommartid", "MIDT"}}, {"Antarctica/Mawson", new String[] {"Mawson, normaltid", "MAWT", "Mawson, sommartid", "MAWST"}}, {"Antarctica/McMurdo", NZST}, @@ -459,6 +478,8 @@ {"Antarctica/South_Pole", NZST}, {"Antarctica/Syowa", new String[] {"Syowa, normaltid", "SYOT", "Syowa, sommartid", "SYOST"}}, + {"Antarctica/Troll", new String[] {"Koordinerad universell tid", "UTC", + "Centraleuropeisk sommartid", "CEST"}}, {"Antarctica/Vostok", new String[] {"Vostok, normaltid", "VOST", "Vostok, sommartid", "VOSST"}}, {"Arctic/Longyearbyen", CET}, @@ -489,6 +510,7 @@ "Choibalsan, sommartid", "CHOST"}}, {"Asia/Chongqing", CTT}, {"Asia/Chungking", CTT}, + {"Asia/Chita", IRKT}, {"Asia/Colombo", IST}, {"Asia/Dacca", BDT}, {"Asia/Dhaka", BDT}, @@ -500,27 +522,28 @@ "Tadzjikistan, sommartid", "TJST"}}, {"Asia/Gaza", EET}, {"Asia/Harbin", CTT}, + {"Asia/Hebron", EET}, {"Asia/Ho_Chi_Minh", ICT}, {"Asia/Hong_Kong", HKT}, {"Asia/Hovd", new String[] {"Hovd, normaltid", "HOVT", "Hovd, sommartid", "HOVST"}}, - {"Asia/Irkutsk", new String[] {"Irkutsk, normaltid", "IRKT", - "Irkutsk, sommartid", "IRKST"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, - {"Asia/Jayapura", new String[] {"\u00d6stindonesisk tid", "EIT", + {"Asia/Jayapura", new String[] {"\u00d6stindonesisk tid", "WIT", "\u00d6stindonesisk sommartid", "EIST"}}, {"Asia/Kabul", new String[] {"Afghanistan, normaltid", "AFT", "Afghanistan, sommartid", "AFST"}}, {"Asia/Kamchatka", new String[] {"Petropavlovsk-Kamtjatka, normaltid", "PETT", "Petropavlovsk-Kamtjatka, sommartid", "PETST"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, + {"Asia/Khandyga", new String[] {"Khandyga, normaltid", "YAKT", + "Khandyga, sommartid", "YAKST"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"Krasnojarsk, normaltid", "KRAT", - "Krasnojarsk, sommartid", "KRAST"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -533,7 +556,7 @@ "Filippinerna, sommartid", "PHST"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"Oral, normaltid", "ORAT", "Oral, sommartid", "ORAST"}}, @@ -554,6 +577,8 @@ {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -565,12 +590,12 @@ {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, + {"Asia/Ust-Nera", new String[] {"Ust-Nera, normaltid", "VLAT", + "Ust-Nera, sommartid", "VLAST"}}, {"Asia/Vientiane", ICT}, - {"Asia/Vladivostok", new String[] {"Vladivostok, normaltid", "VLAT", - "Vladivostok, sommartid", "VLAST"}}, - {"Asia/Yakutsk", new String[] {"Jakutsk, normaltid", "YAKT", - "Jakutsk, sommartid", "YAKST"}}, + {"Asia/Vladivostok", VLAT}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"Jekaterinburg, normaltid", "YEKT", "Jekaterinburg, sommartid", "YEKST"}}, {"Asia/Yerevan", ARMT}, @@ -597,8 +622,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", - "Central Western Summer Time (Australia)", "CWST"}}, + {"Australia/Eucla", new String[] {"Central v\u00E4stlig normaltid (Australien)", "ACWST", + "Central v\u00E4stlig sommartid (Australien)", "ACWDT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -616,7 +641,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, - {"Brazil/Acre", AMT}, + {"Brazil/Acre", ACT}, {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, @@ -654,6 +679,7 @@ {"Europe/Bratislava", CET}, {"Europe/Brussels", CET}, {"Europe/Budapest", CET}, + {"Europe/Busingen", CET}, {"Europe/Chisinau", EET}, {"Europe/Copenhagen", CET}, {"Europe/Dublin", DUBLIN}, @@ -672,7 +698,7 @@ {"Europe/Madrid", CET}, {"Europe/Malta", CET}, {"Europe/Mariehamn", EET}, - {"Europe/Minsk", EET}, + {"Europe/Minsk", MSK}, {"Europe/Monaco", CET}, {"Europe/Moscow", MSK}, {"Europe/Nicosia", EET}, @@ -685,7 +711,7 @@ "Samara, sommartid", "SAMST"}}, {"Europe/San_Marino", CET}, {"Europe/Sarajevo", CET}, - {"Europe/Simferopol", EET}, + {"Europe/Simferopol", MSK}, {"Europe/Skopje", CET}, {"Europe/Sofia", EET}, {"Europe/Stockholm", CET}, @@ -697,8 +723,7 @@ {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"Volgograd-tid", "VOLT", - "Volgograd, sommartid", "VOLST"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, @@ -751,7 +776,10 @@ {"PRT", AST}, {"Pacific/Apia", WST_SAMOA}, {"Pacific/Auckland", NZST}, + {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST", + "Bougainville Daylight Time", "BST"}}, {"Pacific/Chatham", CHAST}, + {"Pacific/Chuuk", CHUT}, {"Pacific/Easter", EASTER}, {"Pacific/Efate", new String[] {"Vanuatu, normaltid", "VUT", "Vanuatu, sommartid", "VUST"}}, @@ -790,8 +818,8 @@ {"Pacific/Palau", new String[] {"Palau, normaltid", "PWT", "Palau, sommartid", "PWST"}}, {"Pacific/Pitcairn", PITCAIRN}, - {"Pacific/Ponape", new String[] {"Ponape, normaltid", "PONT", - "Ponape, sommartid", "PONST"}}, + {"Pacific/Pohnpei", PONT}, + {"Pacific/Ponape", PONT}, {"Pacific/Port_Moresby", new String[] {"Papua Nya Guinea, normaltid", "PGT", "Papua Nya Guinea, sommartid", "PGST"}}, {"Pacific/Rarotonga", new String[] {"Cook\u00f6arna, normaltid", "CKT", @@ -804,12 +832,12 @@ "Gilbert\u00f6arna, sommartid", "GILST"}}, {"Pacific/Tongatapu", new String[] {"Tonga, normaltid", "TOT", "Tonga, sommartid", "TOST"}}, - {"Pacific/Truk", TRUT}, + {"Pacific/Truk", CHUT}, {"Pacific/Wake", new String[] {"Wake, normaltid", "WAKT", "Wake, sommartid", "WAKST"}}, {"Pacific/Wallis", new String[] {"Wallis & Futuna, normaltid", "WFT", "Wallis & Futuna, sommartid", "WFST"}}, - {"Pacific/Yap", TRUT}, + {"Pacific/Yap", CHUT}, {"Poland", CET}, {"PRC", CTT}, {"PST8PDT", PST}, diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,8 +45,8 @@ protected final Object[][] getContents() { String ACT[] = new String[] {"Acre \u65f6\u95f4", "ACT", "Acre \u590f\u4ee4\u65f6", "ACST"}; - String ADELAIDE[] = new String[] {"\u4e2d\u592e\u6807\u51c6\u65f6\u95f4\uff08\u5357\u6fb3\u5927\u5229\u4e9a\uff09", "CST", - "\u4e2d\u592e\u590f\u4ee4\u65f6\uff08\u5357\u6fb3\u5927\u5229\u4e9a\uff09", "CST"}; + String ADELAIDE[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A)", "ACST", + "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A)", "ACDT"}; String AGT[] = new String[] {"\u963f\u6839\u5ef7\u65f6\u95f4", "ART", "\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "ARST"}; String AKST[] = new String[] {"\u963f\u62c9\u65af\u52a0\u6807\u51c6\u65f6\u95f4", "AKST", @@ -61,10 +61,10 @@ "\u5927\u897f\u6d0b\u590f\u4ee4\u65f6", "ADT"}; String BDT[] = new String[] {"\u5b5f\u52a0\u62c9\u65f6\u95f4", "BDT", "\u5b5f\u52a0\u62c9\u590f\u4ee4\u65f6", "BDST"}; - String BRISBANE[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u6606\u58eb\u5170\uff09", "EST", - "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u6606\u58eb\u5170\uff09", "EST"}; - String BROKEN_HILL[] = new String[] {"\u4e2d\u592e\u6807\u51c6\u65f6\u95f4\uff08\u5357\u6fb3\u5927\u5229\u4e9a/\u65b0\u5357\u5a01\u5c14\u65af\uff09", "CST", - "\u4e2d\u592e\u590f\u4ee4\u65f6\uff08\u5357\u6fb3\u5927\u5229\u4e9a/\u65b0\u5357\u5a01\u5c14\u65af\uff09", "CST"}; + String BRISBANE[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u6606\u58EB\u5170)", "AEST", + "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u6606\u58EB\u5170)", "AEDT"}; + String BROKEN_HILL[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "ACST", + "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "ACDT"}; String BRT[] = new String[] {"\u5df4\u897f\u5229\u4e9a\u65f6\u95f4", "BRT", "\u5df4\u897f\u5229\u4e9a\u590f\u4ee4\u65f6", "BRST"}; String BTT[] = new String[] {"\u4e0d\u4e39\u65f6\u95f4", "BTT", @@ -75,7 +75,11 @@ "\u4e2d\u6b27\u590f\u4ee4\u65f6", "CEST"}; String CHAST[] = new String[] {"\u67e5\u8428\u59c6\u6807\u51c6\u65f6\u95f4", "CHAST", "\u67e5\u8428\u59c6\u590f\u4ee4\u65f6", "CHADT"}; - String CIT[] = new String[] {"\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "CIT", + String ChST[] = new String[] {"Chamorro \u6807\u51c6\u65f6\u95f4", "ChST", + "Chamorro \u590f\u4ee4\u65f6", "ChDT"}; + String CHUT[] = new String[] {"\u4E18\u514B\u65F6\u95F4", "CHUT", + "\u4E18\u514B\u590F\u4EE4\u65F6", "CHUST"}; + String CIT[] = new String[] {"\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "WITA", "\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "CIST"}; String CLT[] = new String[] {"\u667a\u5229\u65f6\u95f4", "CLT", "\u667a\u5229\u590f\u4ee4\u65f6", "CLST"}; @@ -83,10 +87,10 @@ "\u4e2d\u592e\u590f\u4ee4\u65f6", "CDT"}; String CTT[] = new String[] {"\u4e2d\u56fd\u6807\u51c6\u65f6\u95f4", "CST", "\u4e2d\u56fd\u590f\u4ee4\u65f6", "CDT"}; - String CUBA[] = new String[] {"Cuba Standard Time", "CST", - "Cuba Daylight Time", "CDT"}; - String DARWIN[] = new String[] {"\u4e2d\u592e\u6807\u51c6\u65f6\u95f4\uff08\u5317\u9886\u5730\uff09", "CST", - "\u4e2d\u592e\u590f\u4ee4\u65f6\uff08\u5317\u9886\u5730\uff09", "CST"}; + String CUBA[] = new String[] {"\u53e4\u5df4\u6807\u51c6\u65f6\u95f4", "CST", + "\u53e4\u5df4\u590f\u4ee4\u65f6", "CDT"}; + String DARWIN[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5317\u9886\u5730)", "ACST", + "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5317\u9886\u5730)", "ACDT"}; String DUBLIN[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u65f6\u95f4", "GMT", "\u7231\u5c14\u5170\u590f\u4ee4\u65f6", "IST"}; String EAT[] = new String[] {"\u4e1c\u975e\u65f6\u95f4", "EAT", @@ -99,8 +103,10 @@ "\u4e1c\u683c\u6797\u5c9b\u590f\u4ee4\u65f6", "EGST"}; String EST[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4", "EST", "\u4e1c\u90e8\u590f\u4ee4\u65f6", "EDT"}; - String EST_NSW[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u65b0\u5357\u5a01\u5c14\u65af\uff09", "EST", - "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u65b0\u5357\u5a01\u5c14\u65af\uff09", "EST"}; + String EST_NSW[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)", "AEST", + "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF)", "AEDT"}; + String FET[] = new String[] {"\u8FDC\u4E1C\u6B27\u65F6\u95F4", "FET", + "\u8FDC\u4E1C\u6B27\u590F\u4EE4\u65F6", "FEST"}; String GHMT[] = new String[] {"\u52a0\u7eb3\u65f6\u95f4", "GMT", "\u52a0\u7eb3\u590f\u4ee4\u65f6", "GHST"}; String GAMBIER[] = new String[] {"\u5188\u6bd4\u4e9a\u65f6\u95f4", "GAMT", @@ -127,10 +133,12 @@ "\u5370\u5ea6\u590f\u4ee4\u65f6", "IDT"}; String JST[] = new String[] {"\u65e5\u672c\u6807\u51c6\u65f6\u95f4", "JST", "\u65e5\u672c\u590f\u4ee4\u65f6", "JDT"}; + String KRAT[] = new String[] {"\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u65f6\u95f4", "KRAT", + "\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u590f\u4ee4\u65f6", "KRAST"}; String KST[] = new String[] {"\u97e9\u56fd\u6807\u51c6\u65f6\u95f4", "KST", "\u97e9\u56fd\u590f\u4ee4\u65f6", "KDT"}; String LORD_HOWE[] = new String[] {"\u8c6a\u516c\u6807\u51c6\u65f6\u95f4", "LHST", - "\u8c6a\u516c\u590f\u4ee4\u65f6", "LHST"}; + "\u8c6a\u516c\u590f\u4ee4\u65f6", "LHDT"}; String MHT[] = new String[] {"\u9a6c\u7ecd\u5c14\u7fa4\u5c9b\u65f6\u95f4", "MHT", "\u9a6c\u7ecd\u5c14\u7fa4\u5c9b\u590f\u4ee4\u65f6", "MHST"}; String MSK[] = new String[] {"\u83ab\u65af\u79d1\u6807\u51c6\u65f6\u95f4", "MSK", @@ -153,48 +161,48 @@ "\u76ae\u7279\u5eb7\u5c9b\u590f\u4ee4\u65f6", "PDT"}; String PKT[] = new String[] {"\u5df4\u57fa\u65af\u5766\u65f6\u95f4", "PKT", "\u5df4\u57fa\u65af\u5766\u590f\u4ee4\u65f6", "PKST"}; + String PONT[] = new String[] {"\u6CE2\u7EB3\u4F69\u65F6\u95F4", "PONT", + "\u6CE2\u7EB3\u4F69\u590F\u4EE4\u65F6", "PONST"}; String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4", "PST", "\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6", "PDT"}; - String RST[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4", "EST", - "\u4e2d\u592e\u590f\u4ee4\u65f6", "CDT"}; + String SAMOA[] = new String[] {"\u8428\u6469\u4e9a\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "SST", + "\u8428\u6469\u4e9a\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SDT"}; + String IRKT[] = new String[] {"\u4f0a\u5c14\u5e93\u6b21\u514b\u65f6\u95f4", "IRKT", + "\u4f0a\u5c14\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "IRKST"}; String SAST[] = new String[] {"\u5357\u975e\u6807\u51c6\u65f6\u95f4", "SAST", "\u5357\u975e\u590f\u4ee4\u65f6", "SAST"}; String SBT[] = new String[] {"\u6240\u7f57\u95e8\u7fa4\u5c9b\u65f6\u95f4", "SBT", "\u6240\u7f57\u95e8\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SBST"}; String SGT[] = new String[] {"\u65b0\u52a0\u5761\u65f6\u95f4", "SGT", "\u65b0\u52a0\u5761\u590f\u4ee4\u65f6", "SGST"}; - String SLST[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u65f6\u95f4", "GMT", - "\u585e\u62c9\u5229\u6602\u590f\u4ee4\u65f6", "SLST"}; - String TASMANIA[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u5854\u65af\u9a6c\u5c3c\u4e9a\uff09", "EST", - "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u5854\u65af\u9a6c\u5c3c\u4e9a\uff09", "EST"}; + String TASMANIA[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "AEST", + "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "AEDT"}; String TMT[] = new String[] {"\u571f\u5e93\u66fc\u65f6\u95f4", "TMT", "\u571f\u5e93\u66fc\u590f\u4ee4\u65f6", "TMST"}; - String TRUT[] = new String[] {"\u7279\u9c81\u514b\u65f6\u95f4", "TRUT", - "\u7279\u9c81\u514b\u590f\u4ee4\u65f6", "TRUST"}; String ULAT[]= new String[] {"\u5e93\u4f26\u65f6\u95f4", "ULAT", "\u5e93\u4f26\u590f\u4ee4\u65f6", "ULAST"}; - String WART[] = new String[] {"\u963f\u6839\u5ef7\u65f6\u95f4", "WART", - "\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "WARST"}; + String UTC[] = new String[] {"\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC", + "\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC"}; + String UZT[] = new String[] {"\u4e4c\u5179\u522b\u514b\u65af\u5766\u65f6\u95f4", "UZT", + "\u4e4c\u5179\u522b\u514b\u65af\u5766\u590f\u4ee4\u65f6", "UZST"}; + String VICTORIA[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A)", "AEST", + "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u7EF4\u591A\u5229\u4E9A)", "AEDT"}; + String VLAT[] = new String[] {"\u6d77\u53c2\u5d34\u65f6\u95f4", "VLAT", + "\u6d77\u53c2\u5d34\u590f\u4ee4\u65f6", "VLAST"}; String WAT[] = new String[] {"\u897f\u975e\u65f6\u95f4", "WAT", "\u897f\u975e\u590f\u4ee4\u65f6", "WAST"}; String WET[] = new String[] {"\u897f\u6b27\u65f6\u95f4", "WET", "\u897f\u6b27\u590f\u4ee4\u65f6", "WEST"}; - String WIT[] = new String[] {"\u897f\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "WIT", + String WIT[] = new String[] {"\u897f\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "WIB", "\u897f\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "WIST"}; - String WST_AUS[] = new String[] {"\u897f\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "WST", - "\u897f\u90e8\u590f\u4ee4\u65f6\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "WST"}; - String SAMOA[] = new String[] {"\u8428\u6469\u4e9a\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "SST", - "\u8428\u6469\u4e9a\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SDT"}; - String WST_SAMOA[] = new String[] {"\u897f\u8428\u6469\u4e9a\u65f6\u95f4", "WST", - "\u897f\u8428\u6469\u4e9a\u590f\u4ee4\u65f6", "WSST"}; - String ChST[] = new String[] {"Chamorro \u6807\u51c6\u65f6\u95f4", "ChST", - "Chamorro \u590f\u4ee4\u65f6", "ChDT"}; - String VICTORIA[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST", - "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST"}; - String UTC[] = new String[] {"\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC", - "\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC"}; - String UZT[] = new String[] {"\u4e4c\u5179\u522b\u514b\u65af\u5766\u65f6\u95f4", "UZT", - "\u4e4c\u5179\u522b\u514b\u65af\u5766\u590f\u4ee4\u65f6", "UZST"}; + String WST_AUS[] = new String[] {"\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "AWST", + "\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)", "AWDT"}; + String WST_SAMOA[] = new String[] {"\u897f\u8428\u6469\u4e9a\u65f6\u95f4", "WSST", + "\u897f\u8428\u6469\u4e9a\u590f\u4ee4\u65f6", "WSDT"}; + String XJT[] = new String[] {"\u4e2d\u56fd\u6807\u51c6\u65f6\u95f4", "XJT", + "\u4e2d\u56fd\u590f\u4ee4\u65f6", "XJDT"}; + String YAKT[] = new String[] {"\u4e9a\u5e93\u6b21\u514b\u65f6\u95f4", "YAKT", + "\u4e9a\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "YAKST"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -214,6 +222,7 @@ {"America/Anchorage", AKST}, {"AST", AKST}, {"America/Halifax", AST}, + {"America/Sitka", AKST}, {"America/St_Johns", NST}, {"CNT", NST}, {"Europe/Paris", CET}, @@ -255,10 +264,11 @@ {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, + {"Africa/Juba", EAT}, {"Africa/Kampala", EAT}, {"Africa/Khartoum", EAT}, {"Africa/Kigali", CAT}, @@ -300,7 +310,7 @@ {"America/Argentina/Rio_Gallegos", AGT}, {"America/Argentina/Salta", AGT}, {"America/Argentina/San_Juan", AGT}, - {"America/Argentina/San_Luis", WART}, + {"America/Argentina/San_Luis", AGT}, {"America/Argentina/Tucuman", AGT}, {"America/Argentina/Ushuaia", AGT}, {"America/Aruba", AST}, @@ -309,6 +319,7 @@ {"America/Atikokan", EST}, {"America/Atka", HAST}, {"America/Bahia", BRT}, + {"America/Bahia_Banderas", CST}, {"America/Barbados", AST}, {"America/Belem", BRT}, {"America/Belize", CST}, @@ -328,6 +339,7 @@ "\u6cd5\u5c5e\u572d\u4e9a\u90a3\u590f\u4ee4\u65f6", "GFST"}}, {"America/Cayman", EST}, {"America/Chihuahua", MST}, + {"America/Creston", MST}, {"America/Coral_Harbour", EST}, {"America/Cordoba", AGT}, {"America/Costa_Rica", CST}, @@ -339,7 +351,7 @@ {"America/Detroit", EST}, {"America/Dominica", AST}, {"America/Edmonton", MST}, - {"America/Eirunepe", AMT}, + {"America/Eirunepe", ACT}, {"America/El_Salvador", CST}, {"America/Ensenada", PST}, {"America/Fort_Wayne", EST}, @@ -348,7 +360,7 @@ {"America/Godthab", new String[] {"\u897f\u683c\u6797\u5170\u5c9b\u65f6\u95f4", "WGT", "\u897f\u683c\u6797\u5170\u5c9b\u590f\u4ee4\u65f6", "WGST"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -374,11 +386,13 @@ {"America/Kentucky/Louisville", EST}, {"America/Kentucky/Monticello", EST}, {"America/Knox_IN", CST}, + {"America/Kralendijk", AST}, {"America/La_Paz", new String[] {"\u73bb\u5229\u7ef4\u4e9a\u65f6\u95f4", "BOT", "\u73bb\u5229\u7ef4\u4e9a\u590f\u4ee4\u65f6", "BOST"}}, {"America/Lima", new String[] {"\u79d8\u9c81\u65f6\u95f4", "PET", "\u79d8\u9c81\u590f\u4ee4\u65f6", "PEST"}}, {"America/Louisville", EST}, + {"America/Lower_Princes", AST}, {"America/Maceio", BRT}, {"America/Managua", CST}, {"America/Manaus", AMT}, @@ -389,6 +403,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u6807\u51c6\u65f6\u95f4", "PMST", "\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u590f\u4ee4\u65f6", "PMDT"}}, @@ -402,6 +417,7 @@ {"America/Nipigon", EST}, {"America/Nome", AKST}, {"America/Noronha", NORONHA}, + {"America/North_Dakota/Beulah", CST}, {"America/North_Dakota/Center", CST}, {"America/North_Dakota/New_Salem", CST}, {"America/Ojinaga", MST}, @@ -411,15 +427,15 @@ "\u82cf\u5229\u5357\u590f\u4ee4\u65f6", "SRST"}}, {"America/Port-au-Prince", EST}, {"America/Port_of_Spain", AST}, - {"America/Porto_Acre", AMT}, + {"America/Porto_Acre", ACT}, {"America/Porto_Velho", AMT}, {"America/Puerto_Rico", AST}, {"America/Rainy_River", CST}, {"America/Rankin_Inlet", CST}, {"America/Recife", BRT}, {"America/Regina", CST}, - {"America/Resolute", RST}, - {"America/Rio_Branco", AMT}, + {"America/Resolute", CST}, + {"America/Rio_Branco", ACT}, {"America/Rosario", AGT}, {"America/Santa_Isabel", PST}, {"America/Santarem", BRT}, @@ -446,10 +462,13 @@ {"America/Winnipeg", CST}, {"America/Yakutat", AKST}, {"America/Yellowknife", MST}, + {"Antarctica/Casey", WST_AUS}, {"Antarctica/Davis", new String[] {"\u6234\u7ef4\u65af\u65f6\u95f4", "DAVT", "\u6234\u7ef4\u65af\u590f\u4ee4\u65f6", "DAVST"}}, {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u65f6\u95f4", "DDUT", "Dumont-d'Urville \u590f\u4ee4\u65f6", "DDUST"}}, + {"Antarctica/Macquarie", new String[] {"\u9EA6\u5938\u91CC\u5C9B\u65F6\u95F4", "MIST", + "\u9EA6\u5938\u91CC\u5C9B\u590F\u4EE4\u65F6", "MIDT"}}, {"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u65f6\u95f4", "MAWT", "\u83ab\u68ee\u590f\u4ee4\u65f6", "MAWST"}}, {"Antarctica/McMurdo", NZST}, @@ -459,6 +478,8 @@ {"Antarctica/South_Pole", NZST}, {"Antarctica/Syowa", new String[] {"Syowa \u65f6\u95f4", "SYOT", "Syowa \u590f\u4ee4\u65f6", "SYOST"}}, + {"Antarctica/Troll", new String[] {"\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC", + "\u4e2d\u6b27\u590f\u4ee4\u65f6", "CEST"}}, {"Antarctica/Vostok", new String[] {"\u83ab\u65af\u6258\u514b\u65f6\u95f4", "VOST", "\u83ab\u65af\u6258\u514b\u590f\u4ee4\u65f6", "VOSST"}}, {"Arctic/Longyearbyen", CET}, @@ -485,6 +506,7 @@ {"Asia/Brunei", new String[] {"\u6587\u83b1\u65f6\u95f4", "BNT", "\u6587\u83b1\u590f\u4ee4\u65f6", "BNST"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"Choibalsan \u65f6\u95f4", "CHOT", "Choibalsan \u590f\u4ee4\u65f6", "CHOST"}}, {"Asia/Chongqing", CTT}, @@ -500,27 +522,28 @@ "\u5854\u5409\u514b\u65af\u5766\u590f\u4ee4\u65f6", "TJST"}}, {"Asia/Gaza", EET}, {"Asia/Harbin", CTT}, + {"Asia/Hebron", EET}, {"Asia/Ho_Chi_Minh", ICT}, {"Asia/Hong_Kong", HKT}, {"Asia/Hovd", new String[] {"\u79d1\u5e03\u591a\u65f6\u95f4", "HOVT", "\u79d1\u5e03\u591a\u590f\u4ee4\u65f6", "HOVST"}}, - {"Asia/Irkutsk", new String[] {"\u4f0a\u5c14\u5e93\u6b21\u514b\u65f6\u95f4", "IRKT", - "\u4f0a\u5c14\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "IRKST"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, - {"Asia/Jayapura", new String[] {"\u4e1c\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "EIT", + {"Asia/Jayapura", new String[] {"\u4e1c\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "WIT", "\u4e1c\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "EIST"}}, {"Asia/Kabul", new String[] {"\u963f\u5bcc\u6c57\u65f6\u95f4", "AFT", "\u963f\u5bcc\u6c57\u590f\u4ee4\u65f6", "AFST"}}, {"Asia/Kamchatka", new String[] {"\u5f7c\u5f97\u7f57\u5df4\u752b\u6d1b\u592b\u65af\u514b\u65f6\u95f4", "PETT", "\u5f7c\u5f97\u7f57\u5df4\u752b\u6d1b\u592b\u65af\u514b\u590f\u4ee4\u65f6", "PETST"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, + {"Asia/Khandyga", new String[] {"\u6C49\u5FB7\u52A0\u65F6\u95F4", "YAKT", + "\u6C49\u5FB7\u52A0\u590F\u4EE4\u65F6", "YAKST"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u65f6\u95f4", "KRAT", - "\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u590f\u4ee4\u65f6", "KRAST"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -533,7 +556,7 @@ "\u83f2\u5f8b\u5bbe\u590f\u4ee4\u65f6", "PHST"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"Oral \u65f6\u95f4", "ORAT", "Oral \u590f\u4ee4\u65f6", "ORAST"}}, @@ -554,6 +577,8 @@ {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -565,12 +590,12 @@ {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, + {"Asia/Ust-Nera", new String[] {"\u4E4C\u65AF\u5B63\u6D85\u62C9\u65F6\u95F4", "VLAT", + "\u4E4C\u65AF\u5B63\u6D85\u62C9\u590F\u4EE4\u65F6", "VLAST"}}, {"Asia/Vientiane", ICT}, - {"Asia/Vladivostok", new String[] {"\u6d77\u53c2\u5d34\u65f6\u95f4", "VLAT", - "\u6d77\u53c2\u5d34\u590f\u4ee4\u65f6", "VLAST"}}, - {"Asia/Yakutsk", new String[] {"\u4e9a\u5e93\u6b21\u514b\u65f6\u95f4", "YAKT", - "\u4e9a\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "YAKST"}}, + {"Asia/Vladivostok", VLAT}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"Yekaterinburg \u65f6\u95f4", "YEKT", "Yekaterinburg \u590f\u4ee4\u65f6", "YEKST"}}, {"Asia/Yerevan", ARMT}, @@ -597,8 +622,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", - "Central Western Summer Time (Australia)", "CWST"}}, + {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "ACWST", + "\u4E2D\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)", "ACWDT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -616,7 +641,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, - {"Brazil/Acre", AMT}, + {"Brazil/Acre", ACT}, {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, @@ -654,6 +679,7 @@ {"Europe/Bratislava", CET}, {"Europe/Brussels", CET}, {"Europe/Budapest", CET}, + {"Europe/Busingen", CET}, {"Europe/Chisinau", EET}, {"Europe/Copenhagen", CET}, {"Europe/Dublin", DUBLIN}, @@ -672,7 +698,7 @@ {"Europe/Madrid", CET}, {"Europe/Malta", CET}, {"Europe/Mariehamn", EET}, - {"Europe/Minsk", EET}, + {"Europe/Minsk", MSK}, {"Europe/Monaco", CET}, {"Europe/Moscow", MSK}, {"Europe/Nicosia", EET}, @@ -685,7 +711,7 @@ "\u6c99\u9a6c\u62c9\u590f\u4ee4\u65f6", "SAMST"}}, {"Europe/San_Marino", CET}, {"Europe/Sarajevo", CET}, - {"Europe/Simferopol", EET}, + {"Europe/Simferopol", MSK}, {"Europe/Skopje", CET}, {"Europe/Sofia", EET}, {"Europe/Stockholm", CET}, @@ -697,8 +723,7 @@ {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"\u4f0f\u5c14\u52a0\u683c\u52d2\u65f6\u95f4", "VOLT", - "\u4f0f\u5c14\u52a0\u683c\u52d2\u590f\u4ee4\u65f6", "VOLST"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, @@ -751,7 +776,10 @@ {"PRT", AST}, {"Pacific/Apia", WST_SAMOA}, {"Pacific/Auckland", NZST}, + {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST", + "Bougainville Daylight Time", "BST"}}, {"Pacific/Chatham", CHAST}, + {"Pacific/Chuuk", CHUT}, {"Pacific/Easter", EASTER}, {"Pacific/Efate", new String[] {"\u74e6\u5974\u963f\u56fe\u65f6\u95f4", "VUT", "\u74e6\u5974\u963f\u56fe\u590f\u4ee4\u65f6", "VUST"}}, @@ -790,8 +818,8 @@ {"Pacific/Palau", new String[] {"\u5e1b\u7409\u65f6\u95f4", "PWT", "\u5e1b\u7409\u590f\u4ee4\u65f6", "PWST"}}, {"Pacific/Pitcairn", PITCAIRN}, - {"Pacific/Ponape", new String[] {"Ponape \u65f6\u95f4", "PONT", - "Ponape \u590f\u4ee4\u65f6", "PONST"}}, + {"Pacific/Pohnpei", PONT}, + {"Pacific/Ponape", PONT}, {"Pacific/Port_Moresby", new String[] {"\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a\u65f6\u95f4", "PGT", "\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a\u590f\u4ee4\u65f6", "PGST"}}, {"Pacific/Rarotonga", new String[] {"\u5e93\u514b\u7fa4\u5c9b\u65f6\u95f4", "CKT", @@ -804,12 +832,12 @@ "\u5409\u4f2f\u7279\u7fa4\u5c9b\u590f\u4ee4\u65f6", "GILST"}}, {"Pacific/Tongatapu", new String[] {"\u4e1c\u52a0\u65f6\u95f4", "TOT", "\u4e1c\u52a0\u590f\u4ee4\u65f6", "TOST"}}, - {"Pacific/Truk", TRUT}, + {"Pacific/Truk", CHUT}, {"Pacific/Wake", new String[] {"\u5a01\u514b\u65f6\u95f4", "WAKT", "\u5a01\u514b\u590f\u4ee4\u65f6", "WAKST"}}, {"Pacific/Wallis", new String[] {"\u74e6\u5229\u65af\u53ca\u798f\u675c\u7eb3\u7fa4\u5c9b\u65f6\u95f4", "WFT", "\u74e6\u5229\u65af\u53ca\u798f\u675c\u7eb3\u7fa4\u5c9b\u590f\u4ee4\u65f6", "WFST"}}, - {"Pacific/Yap", TRUT}, + {"Pacific/Yap", CHUT}, {"Poland", CET}, {"PRC", CTT}, {"PST8PDT", PST}, diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java --- openjdk-6-6b33-1.13.5/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ -/* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. +/* + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,8 +45,8 @@ protected final Object[][] getContents() { String ACT[] = new String[] {"Acre \u6642\u9593", "ACT", "Acre \u590f\u4ee4\u6642\u9593", "ACST"}; - String ADELAIDE[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e\u5357\u5340)", "CST", - "\u4e2d\u90e8\u590f\u4ee4\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e\u5357\u5340)", "CST"}; + String ADELAIDE[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8)", "ACST", + "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340)", "ACDT"}; String AGT[] = new String[] {"\u963f\u6839\u5ef7\u6642\u9593", "ART", "\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "ARST"}; String AKST[] = new String[] {"\u963f\u62c9\u65af\u52a0\u6a19\u6e96\u6642\u9593", "AKST", @@ -61,10 +61,10 @@ "\u5927\u897f\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ADT"}; String BDT[] = new String[] {"\u5b5f\u52a0\u62c9\u6642\u9593", "BDT", "\u5b5f\u52a0\u62c9\u590f\u4ee4\u6642\u9593", "BDST"}; - String BRISBANE[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642\u9593 (\u6606\u58eb\u862d)", "EST", - "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u6606\u58eb\u862d)", "EST"}; - String BROKEN_HILL[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e\u5357\u5340/\u65b0\u5357\u5a01\u723e\u65af)", "CST", - "\u4e2d\u90e8\u590f\u4ee4\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e\u5357\u5340/\u65b0\u5357\u5a01\u723e\u65af)", "CST"}; + String BRISBANE[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u6606\u58EB\u862D)", "AEST", + "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u6606\u58EB\u862D)", "AEDT"}; + String BROKEN_HILL[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)", "ACST", + "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)", "ACDT"}; String BRT[] = new String[] {"\u5df4\u897f\u5229\u4e9e\u6642\u9593", "BRT", "\u5df4\u897f\u5229\u4e9e\u590f\u4ee4\u6642\u9593", "BRST"}; String BTT[] = new String[] {"\u4e0d\u4e39\u6642\u9593", "BTT", @@ -75,7 +75,11 @@ "\u4e2d\u6b50\u590f\u4ee4\u6642\u9593", "CEST"}; String CHAST[] = new String[] {"\u67e5\u5766\u6a19\u6e96\u6642\u9593", "CHAST", "\u67e5\u5766\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CHADT"}; - String CIT[] = new String[] {"\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "CIT", + String ChST[] = new String[] {"\u67e5\u83ab\u6d1b\u6a19\u6e96\u6642\u9593", "ChST", + "\u67e5\u83ab\u6d1b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ChDT"}; + String CHUT[] = new String[] {"\u695A\u514B\u6642\u9593", "CHUT", + "\u695A\u514B\u590F\u4EE4\u6642\u9593", "CHUST"}; + String CIT[] = new String[] {"\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "WITA", "\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u590f\u4ee4\u6642\u9593", "CIST"}; String CLT[] = new String[] {"\u667a\u5229\u6642\u9593", "CLT", "\u667a\u5229\u590f\u4ee4\u6642\u9593", "CLST"}; @@ -83,10 +87,10 @@ "\u4e2d\u592e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"}; String CTT[] = new String[] {"\u4e2d\u570b\u6a19\u6e96\u6642\u9593", "CST", "\u4e2d\u570b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"}; - String CUBA[] = new String[] {"Cuba Standard Time", "CST", - "Cuba Daylight Time", "CDT"}; - String DARWIN[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642\u9593 (\u5317\u90e8\u5404\u5730\u5340)", "CST", - "\u4e2d\u90e8\u590f\u4ee4\u6642\u9593 (\u5317\u90e8\u5404\u5730\u5340)", "CST"}; + String CUBA[] = new String[] {"\u53e4\u5df4\u6a19\u6e96\u6642\u9593", "CST", + "\u53e4\u5df4\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"}; + String DARWIN[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)", "ACST", + "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)", "ACDT"}; String DUBLIN[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u5e73\u5747\u6642\u9593", "GMT", "\u611b\u723e\u862d\u590f\u4ee4\u6642\u9593", "IST"}; String EAT[] = new String[] {"\u6771\u975e\u6642\u9593", "EAT", @@ -99,8 +103,10 @@ "\u6771\u683c\u6797\u5cf6\u590f\u4ee4\u6642\u9593", "EGST"}; String EST[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593", "EST", "\u6771\u65b9\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "EDT"}; - String EST_NSW[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593 (\u65b0\u5357\u5a01\u723e\u65af)", "EST", - "\u6771\u65b9\u590f\u4ee4\u6642\u9593 (\u65b0\u5357\u5a01\u723e\u65af)", "EST"}; + String EST_NSW[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "AEST", + "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "AEDT"}; + String FET[] = new String[] {"\u6771\u6B50\u5167\u9678\u6642\u9593", "FET", + "\u6771\u6B50\u5167\u9678\u590F\u4EE4\u6642\u9593", "FEST"}; String GHMT[] = new String[] {"\u8fe6\u7d0d\u5e73\u5747\u6642\u9593", "GMT", "\u8fe6\u7d0d\u590f\u4ee4\u6642\u9593", "GHST"}; String GAMBIER[] = new String[] {"\u7518\u6bd4\u723e\u6642\u9593", "GAMT", @@ -127,10 +133,12 @@ "\u5370\u5ea6\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "IDT"}; String JST[] = new String[] {"\u65e5\u672c\u6a19\u6e96\u6642\u9593", "JST", "\u65e5\u672c\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "JDT"}; + String KRAT[] = new String[] {"\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u6642\u9593", "KRAT", + "\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u590f\u4ee4\u6642\u9593", "KRAST"}; String KST[] = new String[] {"\u97d3\u570b\u6a19\u6e96\u6642\u9593", "KST", "\u97d3\u570b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "KDT"}; String LORD_HOWE[] = new String[] {"\u8c6a\u52f3\u7235\u5cf6\u6a19\u6e96\u6642\u9593", "LHST", - "\u8c6a\u52f3\u7235\u5cf6\u590f\u4ee4\u6642\u9593", "LHST"}; + "\u8c6a\u52f3\u7235\u5cf6\u590f\u4ee4\u6642\u9593", "LHDT"}; String MHT[] = new String[] {"\u99ac\u7d39\u723e\u7fa4\u5cf6\u6642\u9593", "MHT", "\u99ac\u7d39\u723e\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "MHST"}; String MSK[] = new String[] {"\u83ab\u65af\u79d1\u6a19\u6e96\u6642\u9593", "MSK", @@ -153,48 +161,48 @@ "\u76ae\u7279\u5eb7\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"}; String PKT[] = new String[] {"\u5df4\u57fa\u65af\u5766\u6642\u9593", "PKT", "\u5df4\u57fa\u65af\u5766\u590f\u4ee4\u6642\u9593", "PKST"}; + String PONT[] = new String[] {"\u6CE2\u7D0D\u4F69\u6642\u9593", "PONT", + "\u6CE2\u7D0D\u4F69\u590F\u4EE4\u6642\u9593", "PONST"}; String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642\u9593", "PST", "\u592a\u5e73\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"}; - String RST[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593", "EST", - "\u4e2d\u592e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"}; + String SAMOA[] = new String[] {"\u85a9\u6469\u4e9e\u6a19\u6e96\u6642\u9593", "SST", + "\u85a9\u6469\u4e9e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "SDT"}; + String IRKT[] = new String[] {"Irkutsk \u6642\u9593", "IRKT", + "Irkutsk \u590f\u4ee4\u6642\u9593", "IRKST"}; String SAST[] = new String[] {"\u5357\u975e\u6a19\u6e96\u6642\u9593", "SAST", "\u5357\u975e\u590f\u4ee4\u6642\u9593", "SAST"}; String SBT[] = new String[] {"\u6240\u7f85\u9580\u7fa4\u5cf6\u6642\u9593", "SBT", "\u6240\u7f85\u9580\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "SBST"}; String SGT[] = new String[] {"\u65b0\u52a0\u5761\u6642\u9593", "SGT", "\u65b0\u52a0\u5761\u590f\u4ee4\u6642\u9593", "SGST"}; - String SLST[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u5e73\u5747\u6642\u9593", "GMT", - "\u7345\u5b50\u5c71\u590f\u4ee4\u6642\u9593", "SLST"}; - String TASMANIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642\u9593 (\u5854\u65af\u6885\u5c3c\u4e9e\u5cf6)", "EST", - "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u5854\u65af\u6885\u5c3c\u4e9e\u5cf6)", "EST"}; + String TASMANIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)", "AEST", + "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)", "AEDT"}; String TMT[] = new String[] {"\u571f\u5eab\u66fc\u6642\u9593", "TMT", "\u571f\u5eab\u66fc\u590f\u4ee4\u6642\u9593", "TMST"}; - String TRUT[] = new String[] {"\u7279\u9b6f\u514b\u6642\u9593", "TRUT", - "\u7279\u9b6f\u514b\u590f\u4ee4\u6642\u9593", "TRUST"}; String ULAT[]= new String[] {"\u5eab\u502b\u6642\u9593", "ULAT", "\u5eab\u502b\u590f\u4ee4\u6642\u9593", "ULAST"}; - String WART[] = new String[] {"\u963f\u6839\u5ef7\u6642\u9593", "WART", - "\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "WARST"}; + String UTC[] = new String[] {"\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC", + "\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC"}; + String UZT[] = new String[] {"\u70cf\u8332\u5225\u514b\u65af\u5766\u6642\u9593", "UZT", + "\u70cf\u8332\u5225\u514b\u65af\u5766\u590f\u4ee4\u6642\u9593", "UZST"}; + String VICTORIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)", "AEST", + "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)", "AEDT"}; + String VLAT[] = new String[] {"\u6d77\u53c3\u5d34\u6642\u9593", "VLAT", + "\u6d77\u53c3\u5d34\u590f\u4ee4\u6642\u9593", "VLAST"}; String WAT[] = new String[] {"\u897f\u975e\u6642\u9593", "WAT", "\u897f\u975e\u590f\u4ee4\u6642\u9593", "WAST"}; String WET[] = new String[] {"\u897f\u6b50\u6642\u9593", "WET", "\u897f\u6b50\u590f\u4ee4\u6642\u9593", "WEST"}; - String WIT[] = new String[] {"\u897f\u5370\u5c3c\u6642\u9593", "WIT", + String WIT[] = new String[] {"\u897f\u5370\u5c3c\u6642\u9593", "WIB", "\u897f\u5370\u5c3c\u590f\u4ee4\u6642\u9593", "WIST"}; - String WST_AUS[] = new String[] {"\u897f\u65b9\u6a19\u6e96\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "WST", - "\u897f\u65b9\u590f\u4ee4\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "WST"}; - String SAMOA[] = new String[] {"\u85a9\u6469\u4e9e\u6a19\u6e96\u6642\u9593", "SST", - "\u85a9\u6469\u4e9e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "SDT"}; - String WST_SAMOA[] = new String[] {"\u897f\u85a9\u6469\u4e9e\u6642\u9593", "WST", - "\u897f\u85a9\u6469\u4e9e\u590f\u4ee4\u6642\u9593", "WSST"}; - String ChST[] = new String[] {"\u67e5\u83ab\u6d1b\u6a19\u6e96\u6642\u9593", "ChST", - "\u67e5\u83ab\u6d1b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ChDT"}; - String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST", - "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST"}; - String UTC[] = new String[] {"\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC", - "\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC"}; - String UZT[] = new String[] {"\u70cf\u8332\u5225\u514b\u65af\u5766\u6642\u9593", "UZT", - "\u70cf\u8332\u5225\u514b\u65af\u5766\u590f\u4ee4\u6642\u9593", "UZST"}; + String WST_AUS[] = new String[] {"\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "AWST", + "\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "AWDT"}; + String WST_SAMOA[] = new String[] {"\u897f\u85a9\u6469\u4e9e\u6642\u9593", "WSST", + "\u897f\u85a9\u6469\u4e9e\u590f\u4ee4\u6642\u9593", "WSDT"}; + String XJT[] = new String[] {"\u4e2d\u570b\u6a19\u6e96\u6642\u9593", "XJT", + "\u4e2d\u570b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "XJDT"}; + String YAKT[] = new String[] {"\u4e9e\u5eab\u6b21\u514b\u6642\u9593", "YAKT", + "\u4e9e\u5eab\u6b21\u514b\u590f\u4ee4\u6642\u9593", "YAKST"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -214,6 +222,7 @@ {"America/Anchorage", AKST}, {"AST", AKST}, {"America/Halifax", AST}, + {"America/Sitka", AKST}, {"America/St_Johns", NST}, {"CNT", NST}, {"Europe/Paris", CET}, @@ -255,10 +264,11 @@ {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, + {"Africa/Juba", EAT}, {"Africa/Kampala", EAT}, {"Africa/Khartoum", EAT}, {"Africa/Kigali", CAT}, @@ -300,7 +310,7 @@ {"America/Argentina/Rio_Gallegos", AGT}, {"America/Argentina/Salta", AGT}, {"America/Argentina/San_Juan", AGT}, - {"America/Argentina/San_Luis", WART}, + {"America/Argentina/San_Luis", AGT}, {"America/Argentina/Tucuman", AGT}, {"America/Argentina/Ushuaia", AGT}, {"America/Aruba", AST}, @@ -309,6 +319,7 @@ {"America/Atikokan", EST}, {"America/Atka", HAST}, {"America/Bahia", BRT}, + {"America/Bahia_Banderas", CST}, {"America/Barbados", AST}, {"America/Belem", BRT}, {"America/Belize", CST}, @@ -328,6 +339,7 @@ "\u6cd5\u5c6c\u572d\u4e9e\u90a3\u590f\u4ee4\u6642\u9593", "GFST"}}, {"America/Cayman", EST}, {"America/Chihuahua", MST}, + {"America/Creston", MST}, {"America/Coral_Harbour", EST}, {"America/Cordoba", AGT}, {"America/Costa_Rica", CST}, @@ -339,7 +351,7 @@ {"America/Detroit", EST}, {"America/Dominica", AST}, {"America/Edmonton", MST}, - {"America/Eirunepe", AMT}, + {"America/Eirunepe", ACT}, {"America/El_Salvador", CST}, {"America/Ensenada", PST}, {"America/Fort_Wayne", EST}, @@ -348,7 +360,7 @@ {"America/Godthab", new String[] {"\u897f\u683c\u6797\u862d\u5cf6\u6642\u9593", "WGT", "\u897f\u683c\u6797\u862d\u5cf6\u590f\u4ee4\u6642\u9593", "WGST"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -374,11 +386,13 @@ {"America/Kentucky/Louisville", EST}, {"America/Kentucky/Monticello", EST}, {"America/Knox_IN", CST}, + {"America/Kralendijk", AST}, {"America/La_Paz", new String[] {"\u73bb\u5229\u7dad\u4e9e\u6642\u9593", "BOT", "\u73bb\u5229\u7dad\u4e9e\u590f\u4ee4\u6642\u9593", "BOST"}}, {"America/Lima", new String[] {"\u7955\u9b6f\u6642\u9593", "PET", "\u7955\u9b6f\u590f\u4ee4\u6642\u9593", "PEST"}}, {"America/Louisville", EST}, + {"America/Lower_Princes", AST}, {"America/Maceio", BRT}, {"America/Managua", CST}, {"America/Manaus", AMT}, @@ -389,6 +403,7 @@ {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u6a19\u6e96\u6642\u9593", "PMST", "\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PMDT"}}, @@ -402,6 +417,7 @@ {"America/Nipigon", EST}, {"America/Nome", AKST}, {"America/Noronha", NORONHA}, + {"America/North_Dakota/Beulah", CST}, {"America/North_Dakota/Center", CST}, {"America/North_Dakota/New_Salem", CST}, {"America/Ojinaga", MST}, @@ -411,15 +427,15 @@ "\u8607\u5229\u5357\u590f\u4ee4\u6642\u9593", "SRST"}}, {"America/Port-au-Prince", EST}, {"America/Port_of_Spain", AST}, - {"America/Porto_Acre", AMT}, + {"America/Porto_Acre", ACT}, {"America/Porto_Velho", AMT}, {"America/Puerto_Rico", AST}, {"America/Rainy_River", CST}, {"America/Rankin_Inlet", CST}, {"America/Recife", BRT}, {"America/Regina", CST}, - {"America/Resolute", RST}, - {"America/Rio_Branco", AMT}, + {"America/Resolute", CST}, + {"America/Rio_Branco", ACT}, {"America/Rosario", AGT}, {"America/Santa_Isabel", PST}, {"America/Santarem", BRT}, @@ -446,10 +462,13 @@ {"America/Winnipeg", CST}, {"America/Yakutat", AKST}, {"America/Yellowknife", MST}, + {"Antarctica/Casey", WST_AUS}, {"Antarctica/Davis", new String[] {"\u81fa\u7dad\u65af\u6642\u9593", "DAVT", "\u81fa\u7dad\u65af\u590f\u4ee4\u6642\u9593", "DAVST"}}, {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u6642\u9593", "DDUT", "Dumont-d'Urville \u590f\u4ee4\u6642\u9593", "DDUST"}}, + {"Antarctica/Macquarie", new String[] {"\u9EA5\u5938\u5229\u5CF6\u6642\u9593", "MIST", + "\u9EA5\u5938\u5229\u5CF6\u590F\u4EE4\u6642\u9593", "MIDT"}}, {"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u6642\u9593", "MAWT", "\u83ab\u68ee\u590f\u4ee4\u6642\u9593", "MAWST"}}, {"Antarctica/McMurdo", NZST}, @@ -459,6 +478,8 @@ {"Antarctica/South_Pole", NZST}, {"Antarctica/Syowa", new String[] {"\u5915\u6b50\u74e6 (Syowa) \u6642\u9593", "SYOT", "\u5915\u6b50\u74e6 (Syowa) \u590f\u4ee4\u6642\u9593", "SYOST"}}, + {"Antarctica/Troll", new String[] {"\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC", + "\u4e2d\u6b50\u590f\u4ee4\u6642\u9593", "CEST"}}, {"Antarctica/Vostok", new String[] {"\u4f5b\u65af\u6258 (Vostok) \u6642\u9593", "VOST", "\u4f5b\u65af\u6258 (Vostok) \u590f\u4ee4\u6642\u9593", "VOSST"}}, {"Arctic/Longyearbyen", CET}, @@ -485,6 +506,7 @@ {"Asia/Brunei", new String[] {"\u6c76\u840a\u6642\u9593", "BNT", "\u6c76\u840a\u590f\u4ee4\u6642\u9593", "BNST"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"\u5de7\u5df4\u5c71 (Choibalsan) \u6642\u9593", "CHOT", "\u5de7\u5df4\u5c71 (Choibalsan) \u590f\u4ee4\u6642\u9593", "CHOST"}}, {"Asia/Chongqing", CTT}, @@ -500,27 +522,28 @@ "\u5854\u5409\u514b\u590f\u4ee4\u6642\u9593", "TJST"}}, {"Asia/Gaza", EET}, {"Asia/Harbin", CTT}, + {"Asia/Hebron", EET}, {"Asia/Ho_Chi_Minh", ICT}, {"Asia/Hong_Kong", HKT}, {"Asia/Hovd", new String[] {"\u4faf\u5fb7 (Hovd) \u6642\u9593", "HOVT", "\u4faf\u5fb7 (Hovd) \u590f\u4ee4\u6642\u9593", "HOVST"}}, - {"Asia/Irkutsk", new String[] {"Irkutsk \u6642\u9593", "IRKT", - "Irkutsk \u590f\u4ee4\u6642\u9593", "IRKST"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, - {"Asia/Jayapura", new String[] {"\u6771\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "EIT", + {"Asia/Jayapura", new String[] {"\u6771\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "WIT", "\u6771\u5370\u5ea6\u5c3c\u897f\u4e9e\u590f\u65e5\u6642\u9593", "EIST"}}, {"Asia/Kabul", new String[] {"\u963f\u5bcc\u6c57\u6642\u9593", "AFT", "\u963f\u5bcc\u6c57\u590f\u4ee4\u6642\u9593", "AFST"}}, {"Asia/Kamchatka", new String[] {"Petropavlovsk-Kamchatski \u6642\u9593", "PETT", "Petropavlovsk-Kamchatski \u590f\u4ee4\u6642\u9593", "PETST"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, + {"Asia/Khandyga", new String[] {"\u6F22\u5730\u52A0 (Khandyga) \u6642\u9593", "YAKT", + "\u6F22\u5730\u52A0 (Khandyga) \u590F\u4EE4\u6642\u9593", "YAKST"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u6642\u9593", "KRAT", - "\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u590f\u4ee4\u6642\u9593", "KRAST"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -533,7 +556,7 @@ "\u83f2\u5f8b\u8cd3\u590f\u4ee4\u6642\u9593", "PHST"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"\u6b50\u4f5b\u6642\u9593", "ORAT", "\u6b50\u4f5b\u590f\u4ee4\u6642\u9593", "ORAST"}}, @@ -554,7 +577,10 @@ {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, - {"Asia/Taipei", CTT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT"}}, + {"Asia/Taipei", new String[] {"\u53f0\u7063\u6a19\u6e96\u6642\u9593", "TST", + "\u53f0\u7063\u590f\u4ee4\u6642\u9593", "TDT"}}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, {"Asia/Tbilisi", new String[] {"\u55ac\u6cbb\u4e9e\u6642\u9593", "GET", @@ -565,12 +591,12 @@ {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, + {"Asia/Ust-Nera", new String[] {"\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u6642\u9593", "VLAT", + "\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u590F\u4EE4\u6642\u9593", "VLAST"}}, {"Asia/Vientiane", ICT}, - {"Asia/Vladivostok", new String[] {"\u6d77\u53c3\u5d34\u6642\u9593", "VLAT", - "\u6d77\u53c3\u5d34\u590f\u4ee4\u6642\u9593", "VLAST"}}, - {"Asia/Yakutsk", new String[] {"\u4e9e\u5eab\u6b21\u514b\u6642\u9593", "YAKT", - "\u4e9e\u5eab\u6b21\u514b\u590f\u4ee4\u6642\u9593", "YAKST"}}, + {"Asia/Vladivostok", VLAT}, + {"Asia/Yakutsk", YAKT}, {"Asia/Yekaterinburg", new String[] {"Yekaterinburg \u6642\u9593", "YEKT", "Yekaterinburg \u590f\u4ee4\u6642\u9593", "YEKST"}}, {"Asia/Yerevan", ARMT}, @@ -597,8 +623,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", - "Central Western Summer Time (Australia)", "CWST"}}, + {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "ACWST", + "\u4E2D\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "ACWDT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -616,7 +642,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, - {"Brazil/Acre", AMT}, + {"Brazil/Acre", ACT}, {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, @@ -654,6 +680,7 @@ {"Europe/Bratislava", CET}, {"Europe/Brussels", CET}, {"Europe/Budapest", CET}, + {"Europe/Busingen", CET}, {"Europe/Chisinau", EET}, {"Europe/Copenhagen", CET}, {"Europe/Dublin", DUBLIN}, @@ -672,7 +699,7 @@ {"Europe/Madrid", CET}, {"Europe/Malta", CET}, {"Europe/Mariehamn", EET}, - {"Europe/Minsk", EET}, + {"Europe/Minsk", MSK}, {"Europe/Monaco", CET}, {"Europe/Moscow", MSK}, {"Europe/Nicosia", EET}, @@ -685,7 +712,7 @@ "\u6c99\u99ac\u62c9\u590f\u4ee4\u6642\u9593", "SAMST"}}, {"Europe/San_Marino", CET}, {"Europe/Sarajevo", CET}, - {"Europe/Simferopol", EET}, + {"Europe/Simferopol", MSK}, {"Europe/Skopje", CET}, {"Europe/Sofia", EET}, {"Europe/Stockholm", CET}, @@ -697,8 +724,7 @@ {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"\u4f0f\u723e\u52a0\u683c\u52d2\u6642\u9593", "VOLT", - "\u4f0f\u723e\u52a0\u683c\u52d2\u590f\u4ee4\u6642\u9593", "VOLST"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, @@ -751,7 +777,10 @@ {"PRT", AST}, {"Pacific/Apia", WST_SAMOA}, {"Pacific/Auckland", NZST}, + {"Pacific/Bougainville", new String[] {"Bougainville Standard Time", "BST", + "Bougainville Daylight Time", "BST"}}, {"Pacific/Chatham", CHAST}, + {"Pacific/Chuuk", CHUT}, {"Pacific/Easter", EASTER}, {"Pacific/Efate", new String[] {"\u74e6\u5974\u963f\u5716\u6642\u9593", "VUT", "\u74e6\u5974\u963f\u5716\u590f\u4ee4\u6642\u9593", "VUST"}}, @@ -790,8 +819,8 @@ {"Pacific/Palau", new String[] {"\u5e1b\u7409\u6642\u9593", "PWT", "\u5e1b\u7409\u590f\u4ee4\u6642\u9593", "PWST"}}, {"Pacific/Pitcairn", PITCAIRN}, - {"Pacific/Ponape", new String[] {"Ponape \u6642\u9593", "PONT", - "Ponape \u590f\u4ee4\u6642\u9593", "PONST"}}, + {"Pacific/Pohnpei", PONT}, + {"Pacific/Ponape", PONT}, {"Pacific/Port_Moresby", new String[] {"\u5df4\u5e03\u4e9e\u65b0\u5e7e\u5167\u4e9e\u6642\u9593", "PGT", "\u5df4\u5e03\u4e9e\u65b0\u5e7e\u5167\u4e9e\u590f\u4ee4\u6642\u9593", "PGST"}}, {"Pacific/Rarotonga", new String[] {"\u5eab\u514b\u7fa4\u5cf6\u6642\u9593", "CKT", @@ -804,12 +833,12 @@ "\u5409\u4f2f\u7279\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "GILST"}}, {"Pacific/Tongatapu", new String[] {"\u6771\u52a0\u6642\u9593", "TOT", "\u6771\u52a0\u590f\u4ee4\u6642\u9593", "TOST"}}, - {"Pacific/Truk", TRUT}, + {"Pacific/Truk", CHUT}, {"Pacific/Wake", new String[] {"\u5a01\u514b\u6642\u9593", "WAKT", "\u5a01\u514b\u590f\u4ee4\u6642\u9593", "WAKST"}}, {"Pacific/Wallis", new String[] {"\u74e6\u5229\u65af\u53ca\u798f\u675c\u7d0d\u7fa4\u5cf6\u6642\u9593", "WFT", "\u74e6\u5229\u65af\u53ca\u798f\u675c\u7d0d\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "WFST"}}, - {"Pacific/Yap", TRUT}, + {"Pacific/Yap", CHUT}, {"Poland", CET}, {"PRC", CTT}, {"PST8PDT", PST}, diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/lib/security/java.security-linux openjdk-6-6b34-1.13.6/jdk/src/share/lib/security/java.security-linux --- openjdk-6-6b33-1.13.5/jdk/src/share/lib/security/java.security-linux 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/lib/security/java.security-linux 2015-01-20 02:20:42.000000000 +0000 @@ -329,3 +329,100 @@ # Example, # ocsp.responderCertSerialNumber=2A:FF:00 +# Algorithm restrictions for certification path (CertPath) processing +# +# In some environments, certain algorithms or key lengths may be undesirable +# for certification path building and validation. For example, "MD2" is +# generally no longer considered to be a secure hash algorithm. This section +# describes the mechanism for disabling algorithms based on algorithm name +# and/or key length. This includes algorithms used in certificates, as well +# as revocation information such as CRLs and signed OCSP Responses. +# +# The syntax of the disabled algorithm string is described as this Java +# BNF-style: +# DisabledAlgorithms: +# " DisabledAlgorithm { , DisabledAlgorithm } " +# +# DisabledAlgorithm: +# AlgorithmName [Constraint] +# +# AlgorithmName: +# (see below) +# +# Constraint: +# KeySizeConstraint +# +# KeySizeConstraint: +# keySize Operator DecimalInteger +# +# Operator: +# <= | < | == | != | >= | > +# +# DecimalInteger: +# DecimalDigits +# +# DecimalDigits: +# DecimalDigit {DecimalDigit} +# +# DecimalDigit: one of +# 1 2 3 4 5 6 7 8 9 0 +# +# The "AlgorithmName" is the standard algorithm name of the disabled +# algorithm. See "Java Cryptography Architecture Standard Algorithm Name +# Documentation" for information about Standard Algorithm Names. Matching +# is performed using a case-insensitive sub-element matching rule. (For +# example, in "SHA1withECDSA" the sub-elements are "SHA1" for hashing and +# "ECDSA" for signatures.) If the assertion "AlgorithmName" is a +# sub-element of the certificate algorithm name, the algorithm will be +# rejected during certification path building and validation. For example, +# the assertion algorithm name "DSA" will disable all certificate algorithms +# that rely on DSA, such as NONEwithDSA, SHA1withDSA. However, the assertion +# will not disable algorithms related to "ECDSA". +# +# A "Constraint" provides further guidance for the algorithm being specified. +# The "KeySizeConstraint" requires a key of a valid size range if the +# "AlgorithmName" is of a key algorithm. The "DecimalInteger" indicates the +# key size specified in number of bits. For example, "RSA keySize <= 1024" +# indicates that any RSA key with key size less than or equal to 1024 bits +# should be disabled, and "RSA keySize < 1024, RSA keySize > 2048" indicates +# that any RSA key with key size less than 1024 or greater than 2048 should +# be disabled. Note that the "KeySizeConstraint" only makes sense to key +# algorithms. +# +# Note: This property is currently used by Oracle's PKIX implementation. It +# is not guaranteed to be examined and used by other implementations. +# +# Example: +# jdk.certpath.disabledAlgorithms=MD2, DSA, RSA keySize < 2048 +# +# +jdk.certpath.disabledAlgorithms=MD2 + +# Algorithm restrictions for Secure Socket Layer/Transport Layer Security +# (SSL/TLS) processing +# +# In some environments, certain algorithms or key lengths may be undesirable +# when using SSL/TLS. This section describes the mechanism for disabling +# algorithms during SSL/TLS security parameters negotiation, including +# protocol version negotiation, cipher suites selection, peer authentication +# and key exchange mechanisms. +# +# Disabled algorithms will not be negotiated for SSL/TLS connections, even +# if they are enabled explicitly in an application. +# +# For PKI-based peer authentication and key exchange mechanisms, this list +# of disabled algorithms will also be checked during certification path +# building and validation, including algorithms used in certificates, as +# well as revocation information such as CRLs and signed OCSP Responses. +# This is in addition to the jdk.certpath.disabledAlgorithms property above. +# +# See the specification of "jdk.certpath.disabledAlgorithms" for the +# syntax of the disabled algorithm string. +# +# Note: This property is currently used by Oracle's JSSE implementation. +# It is not guaranteed to be examined and used by other implementations. +# +# Example: +# jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048 +jdk.tls.disabledAlgorithms=SSLv3 + diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/lib/security/java.security-solaris openjdk-6-6b34-1.13.6/jdk/src/share/lib/security/java.security-solaris --- openjdk-6-6b33-1.13.5/jdk/src/share/lib/security/java.security-solaris 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/lib/security/java.security-solaris 2015-01-20 02:20:42.000000000 +0000 @@ -55,10 +55,10 @@ # # Select the source of seed data for SecureRandom. By default an -# attempt is made to use the entropy gathering device specified by +# attempt is made to use the entropy gathering device specified by # the securerandom.source property. If an exception occurs when -# accessing the URL then the traditional system/thread activity -# algorithm is used. +# accessing the URL then the traditional system/thread activity +# algorithm is used. # # On Solaris and Linux systems, if file:/dev/urandom is specified and it # exists, a special SecureRandom implementation is activated by default. @@ -72,7 +72,7 @@ # The entropy gathering device is described as a URL and can also # be specified with the system property "java.security.egd". For example, # -Djava.security.egd=file:/dev/urandom -# Specifying this system property will override the securerandom.source +# Specifying this system property will override the securerandom.source # setting. # @@ -204,7 +204,7 @@ security.overridePropertiesFile=true # -# Determines the default key and trust manager factory algorithms for +# Determines the default key and trust manager factory algorithms for # the javax.net.ssl package. # ssl.KeyManagerFactory.algorithm=SunX509 @@ -219,13 +219,14 @@ # # default value is forever (FOREVER). For security reasons, this # caching is made forever when a security manager is set. When a security -# manager is not set, the default behavior is to cache for 30 seconds. +# manager is not set, the default behavior in this implementation +# is to cache for 30 seconds. # # NOTE: setting this to anything other than the default value can have -# serious security implications. Do not set it unless +# serious security implications. Do not set it unless # you are sure you are not exposed to DNS spoofing attack. # -#networkaddress.cache.ttl=-1 +#networkaddress.cache.ttl=-1 # The Java-level namelookup cache policy for failed lookups: # @@ -237,7 +238,7 @@ # the WINS name service in addition to DNS, name service lookups # that fail may take a noticeably long time to return (approx. 5 seconds). # For this reason the default caching policy is to maintain these -# results for 10 seconds. +# results for 10 seconds. # # networkaddress.cache.negative.ttl=10 @@ -246,7 +247,7 @@ # Properties to configure OCSP for certificate revocation checking # -# Enable OCSP +# Enable OCSP # # By default, OCSP is not used for certificate revocation checking. # This property enables the use of OCSP when set to the value "true". @@ -255,7 +256,7 @@ # # Example, # ocsp.enable=true - + # # Location of the OCSP responder # @@ -267,15 +268,15 @@ # # Example, # ocsp.responderURL=http://ocsp.example.net:80 - + # # Subject name of the OCSP responder's certificate # # By default, the certificate of the OCSP responder is that of the issuer # of the certificate being validated. This property identifies the certificate -# of the OCSP responder when the default does not apply. Its value is a string -# distinguished name (defined in RFC 2253) which identifies a certificate in -# the set of certificates supplied during cert path validation. In cases where +# of the OCSP responder when the default does not apply. Its value is a string +# distinguished name (defined in RFC 2253) which identifies a certificate in +# the set of certificates supplied during cert path validation. In cases where # the subject name alone is not sufficient to uniquely identify the certificate # then both the "ocsp.responderCertIssuerName" and # "ocsp.responderCertSerialNumber" properties must be used instead. When this @@ -307,14 +308,111 @@ # of the certificate being validated. This property identifies the certificate # of the OCSP responder when the default does not apply. Its value is a string # distinguished name (defined in RFC 2253) which identifies a certificate in -# the set of certificates supplied during cert path validation. When this -# property is set then the "ocsp.responderCertSerialNumber" property must also -# be set. When the "ocsp.responderCertSubjectName" property is set then this +# the set of certificates supplied during cert path validation. When this +# property is set then the "ocsp.responderCertSerialNumber" property must also +# be set. When the "ocsp.responderCertSubjectName" property is set then this # property is ignored. # # Example, # ocsp.responderCertIssuerName="CN=Enterprise CA, O=XYZ Corp" - + +# Algorithm restrictions for certification path (CertPath) processing +# +# In some environments, certain algorithms or key lengths may be undesirable +# for certification path building and validation. For example, "MD2" is +# generally no longer considered to be a secure hash algorithm. This section +# describes the mechanism for disabling algorithms based on algorithm name +# and/or key length. This includes algorithms used in certificates, as well +# as revocation information such as CRLs and signed OCSP Responses. +# +# The syntax of the disabled algorithm string is described as this Java +# BNF-style: +# DisabledAlgorithms: +# " DisabledAlgorithm { , DisabledAlgorithm } " +# +# DisabledAlgorithm: +# AlgorithmName [Constraint] +# +# AlgorithmName: +# (see below) +# +# Constraint: +# KeySizeConstraint +# +# KeySizeConstraint: +# keySize Operator DecimalInteger +# +# Operator: +# <= | < | == | != | >= | > +# +# DecimalInteger: +# DecimalDigits +# +# DecimalDigits: +# DecimalDigit {DecimalDigit} +# +# DecimalDigit: one of +# 1 2 3 4 5 6 7 8 9 0 +# +# The "AlgorithmName" is the standard algorithm name of the disabled +# algorithm. See "Java Cryptography Architecture Standard Algorithm Name +# Documentation" for information about Standard Algorithm Names. Matching +# is performed using a case-insensitive sub-element matching rule. (For +# example, in "SHA1withECDSA" the sub-elements are "SHA1" for hashing and +# "ECDSA" for signatures.) If the assertion "AlgorithmName" is a +# sub-element of the certificate algorithm name, the algorithm will be +# rejected during certification path building and validation. For example, +# the assertion algorithm name "DSA" will disable all certificate algorithms +# that rely on DSA, such as NONEwithDSA, SHA1withDSA. However, the assertion +# will not disable algorithms related to "ECDSA". +# +# A "Constraint" provides further guidance for the algorithm being specified. +# The "KeySizeConstraint" requires a key of a valid size range if the +# "AlgorithmName" is of a key algorithm. The "DecimalInteger" indicates the +# key size specified in number of bits. For example, "RSA keySize <= 1024" +# indicates that any RSA key with key size less than or equal to 1024 bits +# should be disabled, and "RSA keySize < 1024, RSA keySize > 2048" indicates +# that any RSA key with key size less than 1024 or greater than 2048 should +# be disabled. Note that the "KeySizeConstraint" only makes sense to key +# algorithms. +# +# Note: This property is currently used by Oracle's PKIX implementation. It +# is not guaranteed to be examined and used by other implementations. +# +# Example: +# jdk.certpath.disabledAlgorithms=MD2, DSA, RSA keySize < 2048 +# +# +jdk.certpath.disabledAlgorithms=MD2 + +# Algorithm restrictions for Secure Socket Layer/Transport Layer Security +# (SSL/TLS) processing +# +# In some environments, certain algorithms or key lengths may be undesirable +# when using SSL/TLS. This section describes the mechanism for disabling +# algorithms during SSL/TLS security parameters negotiation, including +# protocol version negotiation, cipher suites selection, peer authentication +# and key exchange mechanisms. +# +# Disabled algorithms will not be negotiated for SSL/TLS connections, even +# if they are enabled explicitly in an application. +# +# For PKI-based peer authentication and key exchange mechanisms, this list +# of disabled algorithms will also be checked during certification path +# building and validation, including algorithms used in certificates, as +# well as revocation information such as CRLs and signed OCSP Responses. +# This is in addition to the jdk.certpath.disabledAlgorithms property above. +# +# See the specification of "jdk.certpath.disabledAlgorithms" for the +# syntax of the disabled algorithm string. +# +# Note: This property is currently used by Oracle's JSSE implementation. +# It is not guaranteed to be examined and used by other implementations. +# +# Example: +# jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048 +jdk.tls.disabledAlgorithms=SSLv3 + # # Serial number of the OCSP responder's certificate # @@ -329,4 +427,5 @@ # # Example, # ocsp.responderCertSerialNumber=2A:FF:00 + diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/lib/security/java.security-windows openjdk-6-6b34-1.13.6/jdk/src/share/lib/security/java.security-windows --- openjdk-6-6b33-1.13.5/jdk/src/share/lib/security/java.security-windows 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/lib/security/java.security-windows 2015-01-20 02:20:42.000000000 +0000 @@ -55,10 +55,10 @@ # # Select the source of seed data for SecureRandom. By default an -# attempt is made to use the entropy gathering device specified by +# attempt is made to use the entropy gathering device specified by # the securerandom.source property. If an exception occurs when -# accessing the URL then the traditional system/thread activity -# algorithm is used. +# accessing the URL then the traditional system/thread activity +# algorithm is used. # # On Solaris and Linux systems, if file:/dev/urandom is specified and it # exists, a special SecureRandom implementation is activated by default. @@ -72,7 +72,7 @@ # The entropy gathering device is described as a URL and can also # be specified with the system property "java.security.egd". For example, # -Djava.security.egd=file:/dev/urandom -# Specifying this system property will override the securerandom.source +# Specifying this system property will override the securerandom.source # setting. # @@ -206,7 +206,7 @@ security.overridePropertiesFile=true # -# Determines the default key and trust manager factory algorithms for +# Determines the default key and trust manager factory algorithms for # the javax.net.ssl package. # ssl.KeyManagerFactory.algorithm=SunX509 @@ -221,13 +221,14 @@ # # default value is forever (FOREVER). For security reasons, this # caching is made forever when a security manager is set. When a security -# manager is not set, the default behavior is to cache for 30 seconds. +# manager is not set, the default behavior in this implementation +# is to cache for 30 seconds. # # NOTE: setting this to anything other than the default value can have -# serious security implications. Do not set it unless +# serious security implications. Do not set it unless # you are sure you are not exposed to DNS spoofing attack. # -#networkaddress.cache.ttl=-1 +#networkaddress.cache.ttl=-1 # The Java-level namelookup cache policy for failed lookups: # @@ -239,7 +240,7 @@ # the WINS name service in addition to DNS, name service lookups # that fail may take a noticeably long time to return (approx. 5 seconds). # For this reason the default caching policy is to maintain these -# results for 10 seconds. +# results for 10 seconds. # # networkaddress.cache.negative.ttl=10 @@ -248,7 +249,7 @@ # Properties to configure OCSP for certificate revocation checking # -# Enable OCSP +# Enable OCSP # # By default, OCSP is not used for certificate revocation checking. # This property enables the use of OCSP when set to the value "true". @@ -257,7 +258,7 @@ # # Example, # ocsp.enable=true - + # # Location of the OCSP responder # @@ -269,15 +270,15 @@ # # Example, # ocsp.responderURL=http://ocsp.example.net:80 - + # # Subject name of the OCSP responder's certificate # # By default, the certificate of the OCSP responder is that of the issuer # of the certificate being validated. This property identifies the certificate -# of the OCSP responder when the default does not apply. Its value is a string -# distinguished name (defined in RFC 2253) which identifies a certificate in -# the set of certificates supplied during cert path validation. In cases where +# of the OCSP responder when the default does not apply. Its value is a string +# distinguished name (defined in RFC 2253) which identifies a certificate in +# the set of certificates supplied during cert path validation. In cases where # the subject name alone is not sufficient to uniquely identify the certificate # then both the "ocsp.responderCertIssuerName" and # "ocsp.responderCertSerialNumber" properties must be used instead. When this @@ -309,14 +310,111 @@ # of the certificate being validated. This property identifies the certificate # of the OCSP responder when the default does not apply. Its value is a string # distinguished name (defined in RFC 2253) which identifies a certificate in -# the set of certificates supplied during cert path validation. When this -# property is set then the "ocsp.responderCertSerialNumber" property must also -# be set. When the "ocsp.responderCertSubjectName" property is set then this +# the set of certificates supplied during cert path validation. When this +# property is set then the "ocsp.responderCertSerialNumber" property must also +# be set. When the "ocsp.responderCertSubjectName" property is set then this # property is ignored. # # Example, # ocsp.responderCertIssuerName="CN=Enterprise CA, O=XYZ Corp" - + +# Algorithm restrictions for certification path (CertPath) processing +# +# In some environments, certain algorithms or key lengths may be undesirable +# for certification path building and validation. For example, "MD2" is +# generally no longer considered to be a secure hash algorithm. This section +# describes the mechanism for disabling algorithms based on algorithm name +# and/or key length. This includes algorithms used in certificates, as well +# as revocation information such as CRLs and signed OCSP Responses. +# +# The syntax of the disabled algorithm string is described as this Java +# BNF-style: +# DisabledAlgorithms: +# " DisabledAlgorithm { , DisabledAlgorithm } " +# +# DisabledAlgorithm: +# AlgorithmName [Constraint] +# +# AlgorithmName: +# (see below) +# +# Constraint: +# KeySizeConstraint +# +# KeySizeConstraint: +# keySize Operator DecimalInteger +# +# Operator: +# <= | < | == | != | >= | > +# +# DecimalInteger: +# DecimalDigits +# +# DecimalDigits: +# DecimalDigit {DecimalDigit} +# +# DecimalDigit: one of +# 1 2 3 4 5 6 7 8 9 0 +# +# The "AlgorithmName" is the standard algorithm name of the disabled +# algorithm. See "Java Cryptography Architecture Standard Algorithm Name +# Documentation" for information about Standard Algorithm Names. Matching +# is performed using a case-insensitive sub-element matching rule. (For +# example, in "SHA1withECDSA" the sub-elements are "SHA1" for hashing and +# "ECDSA" for signatures.) If the assertion "AlgorithmName" is a +# sub-element of the certificate algorithm name, the algorithm will be +# rejected during certification path building and validation. For example, +# the assertion algorithm name "DSA" will disable all certificate algorithms +# that rely on DSA, such as NONEwithDSA, SHA1withDSA. However, the assertion +# will not disable algorithms related to "ECDSA". +# +# A "Constraint" provides further guidance for the algorithm being specified. +# The "KeySizeConstraint" requires a key of a valid size range if the +# "AlgorithmName" is of a key algorithm. The "DecimalInteger" indicates the +# key size specified in number of bits. For example, "RSA keySize <= 1024" +# indicates that any RSA key with key size less than or equal to 1024 bits +# should be disabled, and "RSA keySize < 1024, RSA keySize > 2048" indicates +# that any RSA key with key size less than 1024 or greater than 2048 should +# be disabled. Note that the "KeySizeConstraint" only makes sense to key +# algorithms. +# +# Note: This property is currently used by Oracle's PKIX implementation. It +# is not guaranteed to be examined and used by other implementations. +# +# Example: +# jdk.certpath.disabledAlgorithms=MD2, DSA, RSA keySize < 2048 +# +# +jdk.certpath.disabledAlgorithms=MD2 + +# Algorithm restrictions for Secure Socket Layer/Transport Layer Security +# (SSL/TLS) processing +# +# In some environments, certain algorithms or key lengths may be undesirable +# when using SSL/TLS. This section describes the mechanism for disabling +# algorithms during SSL/TLS security parameters negotiation, including +# protocol version negotiation, cipher suites selection, peer authentication +# and key exchange mechanisms. +# +# Disabled algorithms will not be negotiated for SSL/TLS connections, even +# if they are enabled explicitly in an application. +# +# For PKI-based peer authentication and key exchange mechanisms, this list +# of disabled algorithms will also be checked during certification path +# building and validation, including algorithms used in certificates, as +# well as revocation information such as CRLs and signed OCSP Responses. +# This is in addition to the jdk.certpath.disabledAlgorithms property above. +# +# See the specification of "jdk.certpath.disabledAlgorithms" for the +# syntax of the disabled algorithm string. +# +# Note: This property is currently used by Oracle's JSSE implementation. +# It is not guaranteed to be examined and used by other implementations. +# +# Example: +# jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048 +jdk.tls.disabledAlgorithms=SSLv3 + # # Serial number of the OCSP responder's certificate # @@ -331,4 +429,4 @@ # # Example, # ocsp.responderCertSerialNumber=2A:FF:00 - + diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp openjdk-6-6b34-1.13.6/jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp --- openjdk-6-6b33-1.13.5/jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -583,6 +583,8 @@ LEReferenceTo chainSubClassRuleTable(chainSubClassSetTable, success, chainSubClassRuleTableOffset); le_uint16 backtrackGlyphCount = SWAPW(chainSubClassRuleTable->backtrackGlyphCount); + LEReferenceToArrayOf backtrackClassArray(base, success, chainSubClassRuleTable->backtrackClassArray, backtrackGlyphCount); + if( LE_FAILURE(success) ) { return 0; } le_uint16 inputGlyphCount = SWAPW(chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount]) - 1; LEReferenceToArrayOf inputClassArray(base, success, &chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount + 1],inputGlyphCount+2); // +2 for the lookaheadGlyphCount count le_uint16 lookaheadGlyphCount = SWAPW(inputClassArray.getObject(inputGlyphCount, success)); @@ -599,8 +601,6 @@ } tempIterator.prev(); - LEReferenceToArrayOf backtrackClassArray(base, success, chainSubClassRuleTable->backtrackClassArray, backtrackGlyphCount); - if( LE_FAILURE(success) ) { return 0; } if (! matchGlyphClasses(backtrackClassArray, backtrackGlyphCount, &tempIterator, backtrackClassDefinitionTable, success, TRUE)) { continue; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp openjdk-6-6b34-1.13.6/jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp --- openjdk-6-6b33-1.13.5/jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -45,6 +45,9 @@ le_int32 coverageIndex = getGlyphCoverage(base, glyphID, success); le_uint16 eeCount = SWAPW(entryExitCount); + LEReferenceToArrayOf + entryExitRecordsArrayRef(base, success, entryExitRecords, coverageIndex); + if (coverageIndex < 0 || coverageIndex >= eeCount || LE_FAILURE(success)) { glyphIterator->setCursiveGlyph(); return 0; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/native/sun/font/layout/Features.cpp openjdk-6-6b34-1.13.6/jdk/src/share/native/sun/font/layout/Features.cpp --- openjdk-6-6b33-1.13.5/jdk/src/share/native/sun/font/layout/Features.cpp 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/native/sun/font/layout/Features.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -40,6 +40,9 @@ LEReferenceTo FeatureListTable::getFeatureTable(const LETableReference &base, le_uint16 featureIndex, LETag *featureTag, LEErrorCode &success) const { + LEReferenceToArrayOf + featureRecordArrayRef(base, success, featureRecordArray, featureIndex); + if (featureIndex >= SWAPW(featureCount) || LE_FAILURE(success)) { return LEReferenceTo(); } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/native/sun/font/layout/LETableReference.h openjdk-6-6b34-1.13.6/jdk/src/share/native/sun/font/layout/LETableReference.h --- openjdk-6-6b33-1.13.5/jdk/src/share/native/sun/font/layout/LETableReference.h 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/native/sun/font/layout/LETableReference.h 2015-01-20 02:20:42.000000000 +0000 @@ -472,7 +472,12 @@ #endif const T& getObject(le_uint32 i, LEErrorCode &success) const { - return *getAlias(i,success); + const T *ret = getAlias(i, success); + if (LE_FAILURE(success) || ret==NULL) { + return *(new T(0)); + } else { + return *ret; + } } /** diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp openjdk-6-6b34-1.13.6/jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp --- openjdk-6-6b33-1.13.5/jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -64,6 +64,9 @@ LEReferenceTo ligTable(ligSetTable, success, ligTableOffset); if(LE_FAILURE(success)) { return 0; } le_uint16 compCount = SWAPW(ligTable->compCount) - 1; + LEReferenceToArrayOf + componentArrayRef(base, success, ligTable->componentArray, compCount); + if (LE_FAILURE(success)) { return 0; } le_int32 startPosition = glyphIterator->getCurrStreamPosition(); TTGlyphID ligGlyph = SWAPW(ligTable->ligGlyph); le_uint16 comp; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp openjdk-6-6b34-1.13.6/jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp --- openjdk-6-6b33-1.13.5/jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp 2015-01-20 02:20:42.000000000 +0000 @@ -61,6 +61,8 @@ le_int32 coverageIndex = getGlyphCoverage(base, glyph, success); le_uint16 seqCount = SWAPW(sequenceCount); + LEReferenceToArrayOf + sequenceTableOffsetArrayRef(base, success, sequenceTableOffsetArray, seqCount); if (LE_FAILURE(success)) { return 0; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/solaris/classes/sun/net/www/protocol/http/NTLMAuthentication.java openjdk-6-6b34-1.13.6/jdk/src/solaris/classes/sun/net/www/protocol/http/NTLMAuthentication.java --- openjdk-6-6b33-1.13.5/jdk/src/solaris/classes/sun/net/www/protocol/http/NTLMAuthentication.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/solaris/classes/sun/net/www/protocol/http/NTLMAuthentication.java 2015-01-20 02:20:42.000000000 +0000 @@ -25,18 +25,23 @@ package sun.net.www.protocol.http; -import java.util.Arrays; -import java.util.StringTokenizer; -import java.util.Random; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.InetAddress; +import java.net.PasswordAuthentication; +import java.net.UnknownHostException; +import java.net.URL; +import java.security.GeneralSecurityException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import javax.crypto.Cipher; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.DESKeySpec; import sun.net.www.HeaderParser; -import java.io.*; -import javax.crypto.*; -import javax.crypto.spec.*; -import java.security.*; -import java.net.*; - /** * NTLMAuthentication: * @@ -65,8 +70,6 @@ class NTLMAuthentication extends AuthenticationInfo { - static char NTLM_AUTH = 'N'; - private byte[] type1; private byte[] type3; @@ -141,7 +144,10 @@ * from a system property: "http.auth.ntlm.domain". */ public NTLMAuthentication(boolean isProxy, URL url, PasswordAuthentication pw) { - super(isProxy?PROXY_AUTHENTICATION:SERVER_AUTHENTICATION, NTLM_AUTH, url, ""); + super(isProxy ? PROXY_AUTHENTICATION : SERVER_AUTHENTICATION, + AuthScheme.NTLM, + url, + ""); init (pw); } @@ -165,7 +171,11 @@ */ public NTLMAuthentication(boolean isProxy, String host, int port, PasswordAuthentication pw) { - super(isProxy?PROXY_AUTHENTICATION:SERVER_AUTHENTICATION, NTLM_AUTH,host, port, ""); + super(isProxy ? PROXY_AUTHENTICATION : SERVER_AUTHENTICATION, + AuthScheme.NTLM, + host, + port, + ""); init (pw); } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/Inet4AddressImpl.c openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/Inet4AddressImpl.c --- openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/Inet4AddressImpl.c 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/Inet4AddressImpl.c 2015-01-20 02:20:42.000000000 +0000 @@ -196,7 +196,6 @@ } if (hp != NULL) { struct in_addr **addrp = (struct in_addr **) hp->h_addr_list; - int len = sizeof(struct in_addr); int i = 0; while (*addrp != (struct in_addr *) 0) { diff -Nru openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/Inet6AddressImpl.c openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/Inet6AddressImpl.c --- openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/Inet6AddressImpl.c 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/Inet6AddressImpl.c 2015-01-20 02:20:42.000000000 +0000 @@ -140,7 +140,6 @@ jobjectArray ret = 0; jobject name; int retLen = 0; - jclass byteArrayCls; jboolean preferIPv6Address; int error=0; @@ -212,7 +211,7 @@ } else { int i = 0; int inetCount = 0, inet6Count = 0, inetIndex, inet6Index; - struct addrinfo *itr, *last, *iterator = res; + struct addrinfo *itr, *last = NULL, *iterator = res; while (iterator != NULL) { int skip = 0; itr = resNew; @@ -386,10 +385,7 @@ #ifdef AF_INET6 char host[NI_MAXHOST+1]; - jfieldID fid; int error = 0; - jint family; - struct sockaddr *him ; int len = 0; jbyte caddr[16]; @@ -452,11 +448,10 @@ ping6(JNIEnv *env, jint fd, struct sockaddr_in6* him, jint timeout, struct sockaddr_in6* netif, jint ttl) { jint size; - jint n, len, hlen1, icmplen; + jint n, len; char sendbuf[1500]; unsigned char recvbuf[1500]; struct icmp6_hdr *icmp6; - struct ip6_hdr *ip6; struct sockaddr_in6 sa_recv; jchar pid, seq; jint tmout2; @@ -553,7 +548,6 @@ jbyteArray ifArray, jint ttl, jint if_scope) { #ifdef AF_INET6 - jint addr; jbyte caddr[16]; jint fd, sz; struct sockaddr_in6 him6; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/linux_close.c openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/linux_close.c --- openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/linux_close.c 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/linux_close.c 2015-01-20 02:20:42.000000000 +0000 @@ -281,7 +281,7 @@ int NET_RecvFrom(int s, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen) { - BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, fromlen) ); + BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, (socklen_t)fromlen) ); } int NET_Send(int s, void *msg, int len, unsigned int flags) { @@ -298,7 +298,7 @@ } int NET_Accept(int s, struct sockaddr *addr, int *addrlen) { - BLOCKING_IO_RETURN_INT( s, accept(s, addr, addrlen) ); + BLOCKING_IO_RETURN_INT( s, accept(s, addr, (socklen_t)addrlen) ); } int NET_Connect(int s, struct sockaddr *addr, int addrlen) { @@ -323,7 +323,7 @@ * signal other than our wakeup signal. */ int NET_Timeout(int s, long timeout) { - long prevtime,newtime; + long prevtime = 0, newtime; struct timeval t; fdEntry_t *fdEntry = getFdEntry(s); diff -Nru openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/net_util_md.c openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/net_util_md.c --- openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/net_util_md.c 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/net_util_md.c 2015-01-20 02:20:42.000000000 +0000 @@ -230,7 +230,7 @@ int fd; void *ipv6_fn; SOCKADDR sa; - int sa_len = sizeof(sa); + socklen_t sa_len = sizeof(sa); fd = JVM_Socket(AF_INET6, SOCK_STREAM, 0) ; if (fd < 0) { @@ -448,7 +448,6 @@ char dest_str[40]; struct in6_addr dest_addr; char device[16]; - jboolean match = JNI_FALSE; if (loRoutes != 0) { free (loRoutes); @@ -526,7 +525,7 @@ { /* now find the scope_id for "lo" */ - char addr6[40], devname[20]; + char devname[21]; char addr6p[8][5]; int plen, scope, dad_status, if_idx; @@ -569,7 +568,7 @@ static void initLocalIfs () { FILE *f; unsigned char staddr [16]; - char ifname [32]; + char ifname [33]; struct localinterface *lif=0; int index, x1, x2, x3; unsigned int u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,ua,ub,uc,ud,ue,uf; @@ -578,7 +577,7 @@ return ; } while (fscanf (f, "%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x " - "%d %x %x %x %s",&u0,&u1,&u2,&u3,&u4,&u5,&u6,&u7, + "%d %x %x %x %32s",&u0,&u1,&u2,&u3,&u4,&u5,&u6,&u7, &u8,&u9,&ua,&ub,&uc,&ud,&ue,&uf, &index, &x1, &x2, &x3, ifname) == 21) { staddr[0] = (unsigned char)u0; @@ -1038,7 +1037,7 @@ * index. */ if (match) { - char addr6[40], devname[20]; + char devname[21]; char addr6p[8][5]; int plen, scope, dad_status, if_idx; @@ -1105,7 +1104,7 @@ } #endif - rv = getsockopt(fd, level, opt, result, len); + rv = getsockopt(fd, level, opt, result, (socklen_t)len); if (rv < 0) { return rv; } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/NetworkInterface.c openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/NetworkInterface.c --- openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/NetworkInterface.c 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/NetworkInterface.c 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,7 @@ * questions. */ + #include #include #include @@ -33,23 +34,22 @@ #include #include #include + #ifdef __solaris__ #include #include #include +#include #endif + #ifdef __linux__ #include #include -#include #include #include -#else -#include #endif #ifdef __linux__ -#define ifr_index ifr_ifindex #define _PATH_PROCNET_IFINET6 "/proc/net/if_inet6" #endif @@ -105,20 +105,45 @@ static jfieldID ni_ib4broadcastID; static jfieldID ni_ib4maskID; +/** Private methods declarations **/ static jobject createNetworkInterface(JNIEnv *env, netif *ifs); +static int getFlags0(JNIEnv *env, jstring ifname); + +static netif *enumInterfaces(JNIEnv *env); +static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs); -static netif *enumInterfaces(JNIEnv *env); -static netif *enumIPv4Interfaces(JNIEnv *env, netif *ifs); #ifdef AF_INET6 -static netif *enumIPv6Interfaces(JNIEnv *env, netif *ifs); +static netif *enumIPv6Interfaces(JNIEnv *env, int sock, netif *ifs); +#endif + +static netif *addif(JNIEnv *env, int sock, const char * if_name, netif *ifs, struct sockaddr* ifr_addrP, int family, short prefix); +static void freeif(netif *ifs); + +static int openSocket(JNIEnv *env, int proto); +static int openSocketWithFallback(JNIEnv *env, const char *ifname); + + +static struct sockaddr *getBroadcast(JNIEnv *env, int sock, const char *name, struct sockaddr *brdcast_store); +static short getSubnet(JNIEnv *env, int sock, const char *ifname); +static int getIndex(int sock, const char *ifname); + +static int getFlags(int sock, const char *ifname); +static int getMacAddress(JNIEnv *env, int sock, const char* ifname, const struct in_addr* addr, unsigned char *buf); +static int getMTU(JNIEnv *env, int sock, const char *ifname); + + + +#ifdef __solaris__ +static netif *enumIPvXInterfaces(JNIEnv *env, int sock, netif *ifs, int family); +static int getMacFromDevice(JNIEnv *env, const char* ifname, unsigned char* retbuf); + +#ifndef SIOCGLIFHWADDR +#define SIOCGLIFHWADDR _IOWR('i', 192, struct lifreq) +#endif + #endif -static netif *addif(JNIEnv *env, netif *ifs, char *if_name, int index, - int family, struct sockaddr *new_addrP, int new_addrlen, - short prefix); -static void freeif(netif *ifs); -static struct sockaddr *getBroadcast(JNIEnv *env, const char *ifname); -static short getSubnet(JNIEnv *env, const char *ifname); +/******************* Java entry points *****************************/ /* * Class: java_net_NetworkInterface @@ -166,7 +191,7 @@ netif *ifs, *curr; jboolean isCopy; - const char* name_utf = (*env)->GetStringUTFChars(env, name, &isCopy); + const char* name_utf; jobject obj = NULL; ifs = enumInterfaces(env); @@ -174,6 +199,8 @@ return NULL; } + name_utf = (*env)->GetStringUTFChars(env, name, &isCopy); + /* * Search the list of interface based on name */ @@ -377,19 +404,178 @@ return netIFArr; } + +/* + * Class: java_net_NetworkInterface + * Method: isUp0 + * Signature: (Ljava/lang/String;I)Z + */ +JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isUp0(JNIEnv *env, jclass cls, jstring name, jint index) { + int ret = getFlags0(env, name); + return ((ret & IFF_UP) && (ret & IFF_RUNNING)) ? JNI_TRUE : JNI_FALSE; +} + +/* + * Class: java_net_NetworkInterface + * Method: isP2P0 + * Signature: (Ljava/lang/String;I)Z + */ +JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isP2P0(JNIEnv *env, jclass cls, jstring name, jint index) { + int ret = getFlags0(env, name); + return (ret & IFF_POINTOPOINT) ? JNI_TRUE : JNI_FALSE; +} + +/* + * Class: java_net_NetworkInterface + * Method: isLoopback0 + * Signature: (Ljava/lang/String;I)Z + */ +JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isLoopback0(JNIEnv *env, jclass cls, jstring name, jint index) { + int ret = getFlags0(env, name); + return (ret & IFF_LOOPBACK) ? JNI_TRUE : JNI_FALSE; +} + +/* + * Class: java_net_NetworkInterface + * Method: supportsMulticast0 + * Signature: (Ljava/lang/String;I)Z + */ +JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_supportsMulticast0(JNIEnv *env, jclass cls, jstring name, jint index) { + int ret = getFlags0(env, name); + return (ret & IFF_MULTICAST) ? JNI_TRUE : JNI_FALSE; +} + +/* + * Class: java_net_NetworkInterface + * Method: getMacAddr0 + * Signature: ([bLjava/lang/String;I)[b + */ +JNIEXPORT jbyteArray JNICALL Java_java_net_NetworkInterface_getMacAddr0(JNIEnv *env, jclass class, jbyteArray addrArray, jstring name, jint index) { + jint addr; + jbyte caddr[4]; + struct in_addr iaddr; + jbyteArray ret = NULL; + unsigned char mac[16]; + int len; + int sock; + jboolean isCopy; + const char* name_utf; + + name_utf = (*env)->GetStringUTFChars(env, name, &isCopy); + + if ((sock =openSocketWithFallback(env, name_utf)) < 0) { + (*env)->ReleaseStringUTFChars(env, name, name_utf); + return JNI_FALSE; + } + + + if (!IS_NULL(addrArray)) { + (*env)->GetByteArrayRegion(env, addrArray, 0, 4, caddr); + addr = ((caddr[0]<<24) & 0xff000000); + addr |= ((caddr[1] <<16) & 0xff0000); + addr |= ((caddr[2] <<8) & 0xff00); + addr |= (caddr[3] & 0xff); + iaddr.s_addr = htonl(addr); + len = getMacAddress(env, sock, name_utf, &iaddr, mac); + } else { + len = getMacAddress(env, sock, name_utf,NULL, mac); + } + if (len > 0) { + ret = (*env)->NewByteArray(env, len); + if (IS_NULL(ret)) { + /* we may have memory to free at the end of this */ + goto fexit; + } + (*env)->SetByteArrayRegion(env, ret, 0, len, (jbyte *) (mac)); + } + fexit: + /* release the UTF string and interface list */ + (*env)->ReleaseStringUTFChars(env, name, name_utf); + + close(sock); + return ret; +} + +/* + * Class: java_net_NetworkInterface + * Method: getMTU0 + * Signature: ([bLjava/lang/String;I)I + */ + +JNIEXPORT jint JNICALL Java_java_net_NetworkInterface_getMTU0(JNIEnv *env, jclass class, jstring name, jint index) { + jboolean isCopy; + int ret = -1; + int sock; + const char* name_utf = NULL; + + if (name != NULL) { + name_utf = (*env)->GetStringUTFChars(env, name, &isCopy); + } else { + JNU_ThrowNullPointerException(env, "network interface name is NULL"); + return ret; + } + + if ((sock =openSocketWithFallback(env, name_utf)) < 0) { + (*env)->ReleaseStringUTFChars(env, name, name_utf); + return JNI_FALSE; + } + + ret = getMTU(env, sock, name_utf); + + (*env)->ReleaseStringUTFChars(env, name, name_utf); + + close(sock); + return ret; +} + +/*** Private methods definitions ****/ + +static int getFlags0(JNIEnv *env, jstring name) { + jboolean isCopy; + int ret, sock; + const char* name_utf; + + if (name != NULL) { + name_utf = (*env)->GetStringUTFChars(env, name, &isCopy); + } else { + JNU_ThrowNullPointerException(env, "network interface name is NULL"); + return -1; + } + + if ((sock = openSocketWithFallback(env, name_utf)) < 0) { + (*env)->ReleaseStringUTFChars(env, name, name_utf); + return -1; + } + + name_utf = (*env)->GetStringUTFChars(env, name, &isCopy); + + ret = getFlags(sock, name_utf); + + close(sock); + (*env)->ReleaseStringUTFChars(env, name, name_utf); + + if (ret < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGLIFFLAGS failed"); + return -1; + } + + return ret; +} + + + + /* * Create a NetworkInterface object, populate the name and index, and * populate the InetAddress array based on the IP addresses for this * interface. */ -jobject createNetworkInterface(JNIEnv *env, netif *ifs) -{ +jobject createNetworkInterface(JNIEnv *env, netif *ifs) { jobject netifObj; jobject name; jobjectArray addrArr; jobjectArray bindArr; jobjectArray childArr; - netaddr *addrs; jint addr_index, addr_count, bind_index; jint child_count, child_index; netaddr *addrP; @@ -429,7 +615,7 @@ bindArr = (*env)->NewObjectArray(env, addr_count, ni_ibcls, NULL); if (bindArr == NULL) { - return NULL; + return NULL; } addrP = ifs->addr; addr_index = 0; @@ -445,17 +631,17 @@ } ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); if (ibObj) { - (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); - if (addrP->brdcast) { - jobject ia2Obj = NULL; - ia2Obj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); - if (ia2Obj) { - setInetAddress_addr(env, ia2Obj, htonl(((struct sockaddr_in*)addrP->brdcast)->sin_addr.s_addr)); - (*env)->SetObjectField(env, ibObj, ni_ib4broadcastID, ia2Obj); - (*env)->SetShortField(env, ibObj, ni_ib4maskID, addrP->mask); - } - } - (*env)->SetObjectArrayElement(env, bindArr, bind_index++, ibObj); + (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); + if (addrP->brdcast) { + jobject ia2Obj = NULL; + ia2Obj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); + if (ia2Obj) { + setInetAddress_addr(env, ia2Obj, htonl(((struct sockaddr_in*)addrP->brdcast)->sin_addr.s_addr)); + (*env)->SetObjectField(env, ibObj, ni_ib4broadcastID, ia2Obj); + (*env)->SetShortField(env, ibObj, ni_ib4maskID, addrP->mask); + } + } + (*env)->SetObjectArrayElement(env, bindArr, bind_index++, ibObj); } } @@ -468,13 +654,9 @@ if (ret == JNI_FALSE) { return NULL; } -#ifdef __linux__ - if (!kernelIsV22()) { - scope = ((struct sockaddr_in6*)addrP->addr)->sin6_scope_id; - } -#else + scope = ((struct sockaddr_in6*)addrP->addr)->sin6_scope_id; -#endif + if (scope != 0) { /* zero is default value, no need to set */ setInet6Address_scopeid(env, iaObj, scope); setInet6Address_scopeifname(env, iaObj, netifObj); @@ -482,9 +664,9 @@ } ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); if (ibObj) { - (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); - (*env)->SetShortField(env, ibObj, ni_ib4maskID, addrP->mask); - (*env)->SetObjectArrayElement(env, bindArr, bind_index++, ibObj); + (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); + (*env)->SetShortField(env, ibObj, ni_ib4maskID, addrP->mask); + (*env)->SetObjectArrayElement(env, bindArr, bind_index++, ibObj); } } #endif @@ -503,13 +685,13 @@ child_count = 0; childP = ifs->childs; while (childP) { - child_count++; - childP = childP->next; + child_count++; + childP = childP->next; } childArr = (*env)->NewObjectArray(env, child_count, ni_class, NULL); if (childArr == NULL) { - return NULL; + return NULL; } /* @@ -521,7 +703,7 @@ while(childP) { tmp = createNetworkInterface(env, childP); if (tmp == NULL) { - return NULL; + return NULL; } (*env)->SetObjectField(env, tmp, ni_parentID, netifObj); (*env)->SetObjectArrayElement(env, childArr, child_index++, tmp); @@ -540,282 +722,402 @@ */ static netif *enumInterfaces(JNIEnv *env) { netif *ifs; + int sock; /* * Enumerate IPv4 addresses */ - ifs = enumIPv4Interfaces(env, NULL); - if (ifs == NULL) { - if ((*env)->ExceptionOccurred(env)) { - return NULL; - } + + sock = openSocket(env, AF_INET); + if (sock < 0 && (*env)->ExceptionOccurred(env)) { + return NULL; + } + + ifs = enumIPv4Interfaces(env, sock, NULL); + close(sock); + + if (ifs == NULL && (*env)->ExceptionOccurred(env)) { + return NULL; } + /* return partial list if exception occure in the middle of process ???*/ + /* * If IPv6 is available then enumerate IPv6 addresses. */ #ifdef AF_INET6 - if (ipv6_available()) { - ifs = enumIPv6Interfaces(env, ifs); - if ((*env)->ExceptionOccurred(env)) { - freeif(ifs); - return NULL; - } - } + /* User can disable ipv6 expicitly by -Djava.net.preferIPv4Stack=true, + * so we have to call ipv6_available() + */ + if (ipv6_available()) { + + sock = openSocket(env, AF_INET6); + if (sock < 0 && (*env)->ExceptionOccurred(env)) { + freeif(ifs); + return NULL; + } + + ifs = enumIPv6Interfaces(env, sock, ifs); + close(sock); + + if ((*env)->ExceptionOccurred(env)) { + freeif(ifs); + return NULL; + } + + } #endif return ifs; } +#define CHECKED_MALLOC3(_pointer,_type,_size) \ + do{ \ + _pointer = (_type)malloc( _size ); \ + if (_pointer == NULL) { \ + JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); \ + return ifs; /* return untouched list */ \ + } \ + } while(0) + /* - * Enumerates and returns all IPv4 interfaces + * Free an interface list (including any attached addresses) */ -static netif *enumIPv4Interfaces(JNIEnv *env, netif *ifs) { - int sock; - struct ifconf ifc; - struct ifreq *ifreqP; - char *buf; - int numifs; - unsigned i; - unsigned bufsize; +void freeif(netif *ifs) { + netif *currif = ifs; - sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0); - if (sock < 0) { - /* - * If EPROTONOSUPPORT is returned it means we don't have - * IPv4 support so don't throw an exception. - */ - if (errno != EPROTONOSUPPORT) { - NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", - "Socket creation failed"); - } - return ifs; - } + while (currif != NULL) { + netaddr *addrP = currif->addr; + while (addrP != NULL) { + netaddr *next = addrP->next; + free(addrP); + addrP = next; + } -#ifdef __linux__ - /* need to do a dummy SIOCGIFCONF to determine the buffer size. - * SIOCGIFCOUNT doesn't work - */ - ifc.ifc_buf = NULL; - if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) { - NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFCONF failed"); - close(sock); - return ifs; - } - bufsize = ifc.ifc_len; -#else - if (ioctl(sock, SIOCGIFNUM, (char *)&numifs) < 0) { - NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFNUM failed"); - close(sock); - return ifs; - } - bufsize = numifs * sizeof (struct ifreq); -#endif /* __linux__ */ + /* + * Don't forget to free the sub-interfaces. + */ + if (currif->childs != NULL) { + freeif(currif->childs); + } - buf = (char *)malloc(bufsize); - if (!buf) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); - (void) close(sock); - return ifs; - } - ifc.ifc_len = bufsize; - ifc.ifc_buf = buf; - if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) { - NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFCONF failed"); - (void) close(sock); - (void) free(buf); - return ifs; + ifs = currif->next; + free(currif); + currif = ifs; } +} - /* - * Iterate through each interface - */ - ifreqP = ifc.ifc_req; - for (i=0; iifr_name); +netif *addif(JNIEnv *env, int sock, const char * if_name, netif *ifs, struct sockaddr* ifr_addrP, int family, short prefix) { + netif *currif = ifs, *parent; + netaddr *addrP; - /* - * Try to get the interface index - * (Not supported on Solaris 2.6 or 7) - */ - if (ioctl(sock, SIOCGIFINDEX, (char *)&if2) >= 0) { - index = if2.ifr_index; - } else { - index = -1; - } + #ifdef __solaris__ + char name[LIFNAMSIZ], vname[LIFNAMSIZ]; + #else + char name[IFNAMSIZ], vname[IFNAMSIZ]; + #endif - /* - * Add to the list - */ - ifs = addif(env, ifs, ifreqP->ifr_name, index, AF_INET, - (struct sockaddr *)&(ifreqP->ifr_addr), - sizeof(struct sockaddr_in), 0); + char *name_colonP; + int mask; + int isVirtual = 0; + int addr_size; - /* - * If an exception occurred then free the list - */ - if ((*env)->ExceptionOccurred(env)) { - close(sock); - free(buf); - freeif(ifs); - return NULL; - } - } + /* + * If the interface name is a logical interface then we + * remove the unit number so that we have the physical + * interface (eg: hme0:1 -> hme0). NetworkInterface + * currently doesn't have any concept of physical vs. + * logical interfaces. + */ + strcpy(name, if_name); + *vname = 0; /* - * Free socket and buffer + * Create and populate the netaddr node. If allocation fails + * return an un-updated list. */ - close(sock); - free(buf); - return ifs; -} + /*Allocate for addr and brdcast at once*/ +#ifdef AF_INET6 + addr_size = (family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6); +#else + addr_size = sizeof(struct sockaddr_in); +#endif -#if defined(__solaris__) && defined(AF_INET6) -/* - * Enumerates and returns all IPv6 interfaces on Solaris - */ -static netif *enumIPv6Interfaces(JNIEnv *env, netif *ifs) { - int sock; - struct lifconf ifc; - struct lifreq *ifr; - int n; - char *buf; - struct lifnum numifs; - unsigned bufsize; + CHECKED_MALLOC3(addrP, netaddr *, sizeof(netaddr)+2*addr_size); + addrP->addr = (struct sockaddr *)( (char *) addrP+sizeof(netaddr) ); + memcpy(addrP->addr, ifr_addrP, addr_size); - sock = JVM_Socket(AF_INET6, SOCK_DGRAM, 0); - if (sock < 0) { - NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", - "Failed to create IPv6 socket"); - return ifs; - } + addrP->family = family; + addrP->brdcast = NULL; + addrP->mask = prefix; + addrP->next = 0; + if (family == AF_INET) { + /* + * Deal with brodcast addr & subnet mask + */ + struct sockaddr * brdcast_to = (struct sockaddr *) ((char *) addrP + sizeof(netaddr) + addr_size); + addrP->brdcast = getBroadcast(env, sock, name, brdcast_to ); - /* - * Get the interface count + if (addrP->brdcast && (mask = getSubnet(env, sock, name)) != -1) { + addrP->mask = mask; + } + } + + /** + * Deal with virtual interface with colon notaion e.g. eth0:1 */ - numifs.lifn_family = AF_UNSPEC; - numifs.lifn_flags = 0; - if (ioctl(sock, SIOCGLIFNUM, (char *)&numifs) < 0) { - NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", - "ioctl SIOCGLIFNUM failed"); - close(sock); - return ifs; + name_colonP = strchr(name, ':'); + if (name_colonP != NULL) { + /** + * This is a virtual interface. If we are able to access the parent + * we need to create a new entry if it doesn't exist yet *and* update + * the 'parent' interface with the new records. + */ + *name_colonP = 0; + if (getFlags(sock, name) < 0) { + // failed to access parent interface do not create parent. + // We are a virtual interface with no parent. + isVirtual = 1; + *name_colonP = ':'; + } + else{ + // Got access to parent, so create it if necessary. + // Save original name to vname and truncate name by ':' + memcpy(vname, name, sizeof(vname) ); + vname[name_colonP - name] = ':'; + } } /* - * Enumerate the interface configurations + * Check if this is a "new" interface. Use the interface + * name for matching because index isn't supported on + * Solaris 2.6 & 7. */ - bufsize = numifs.lifn_count * sizeof (struct lifreq); - buf = (char *)malloc(bufsize); - if (!buf) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); - (void) close(sock); - return ifs; + while (currif != NULL) { + if (strcmp(name, currif->name) == 0) { + break; + } + currif = currif->next; } - ifc.lifc_family = AF_UNSPEC; - ifc.lifc_flags = 0; - ifc.lifc_len = bufsize; - ifc.lifc_buf = buf; - if (ioctl(sock, SIOCGLIFCONF, (char *)&ifc) < 0) { - NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", - "ioctl SIOCGLIFCONF failed"); - close(sock); - free(buf); - return ifs; + + /* + * If "new" then create an netif structure and + * insert it onto the list. + */ + if (currif == NULL) { + CHECKED_MALLOC3(currif, netif *, sizeof(netif)+IFNAMSIZ ); + currif->name = (char *) currif+sizeof(netif); + strcpy(currif->name, name); + currif->index = getIndex(sock, name); + currif->addr = NULL; + currif->childs = NULL; + currif->virtual = isVirtual; + currif->next = ifs; + ifs = currif; } /* - * Iterate through each interface + * Finally insert the address on the interface */ - ifr = ifc.lifc_req; - for (n=0; nnext = currif->addr; + currif->addr = addrP; - /* - * Ignore non-IPv6 addresses - */ - if (ifr->lifr_addr.ss_family != AF_INET6) { - continue; + parent = currif; + + /** + * Let's deal with the virtual interface now. + */ + if (vname[0]) { + netaddr *tmpaddr; + + currif = parent->childs; + + while (currif != NULL) { + if (strcmp(vname, currif->name) == 0) { + break; + } + currif = currif->next; + } + + if (currif == NULL) { + CHECKED_MALLOC3(currif, netif *, sizeof(netif)+ IFNAMSIZ ); + currif->name = (char *) currif + sizeof(netif); + strcpy(currif->name, vname); + currif->index = getIndex(sock, vname); + currif->addr = NULL; + /* Need to duplicate the addr entry? */ + currif->virtual = 1; + currif->childs = NULL; + currif->next = parent->childs; + parent->childs = currif; + } + + CHECKED_MALLOC3(tmpaddr, netaddr *, sizeof(netaddr)+2*addr_size); + memcpy(tmpaddr, addrP, sizeof(netaddr)); + if (addrP->addr != NULL) { + tmpaddr->addr = (struct sockaddr *) ( (char*)tmpaddr + sizeof(netaddr) ) ; + memcpy(tmpaddr->addr, addrP->addr, addr_size); + } + + if (addrP->brdcast != NULL) { + tmpaddr->brdcast = (struct sockaddr *) ((char *) tmpaddr + sizeof(netaddr)+addr_size); + memcpy(tmpaddr->brdcast, addrP->brdcast, addr_size); } + tmpaddr->next = currif->addr; + currif->addr = tmpaddr; + } + + return ifs; +} + +/* Open socket for further ioct calls + * proto is AF_INET/AF_INET6 + */ +static int openSocket(JNIEnv *env, int proto){ + int sock; + + if ((sock = JVM_Socket(proto, SOCK_DGRAM, 0)) < 0) { /* - * Get the index + * If EPROTONOSUPPORT is returned it means we don't have + * support for this proto so don't throw an exception. */ - memset((char *)&if2, 0, sizeof(if2)); - strcpy(if2.lifr_name, ifr->lifr_name); - if (ioctl(sock, SIOCGLIFINDEX, (char *)&if2) >= 0) { - struct sockaddr_in6 *s6= (struct sockaddr_in6 *)&(ifr->lifr_addr); - index = if2.lifr_index; - s6->sin6_scope_id = index; + if (errno != EPROTONOSUPPORT) { + NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "Socket creation failed"); } + return -1; + } - /* add to the list */ - ifs = addif(env, ifs, ifr->lifr_name, index, AF_INET6, - (struct sockaddr *)&(ifr->lifr_addr), - sizeof(struct sockaddr_in6), (short) ifr->lifr_addrlen); + return sock; +} + + +/** Linux **/ +#ifdef __linux__ +/* Open socket for further ioct calls, try v4 socket first and + * if it falls return v6 socket + */ + +#ifdef AF_INET6 +// unused arg ifname and struct if2 +static int openSocketWithFallback(JNIEnv *env, const char *ifname){ + int sock; + struct ifreq if2; + + if ((sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0)) < 0) { + if (errno == EPROTONOSUPPORT){ + if ( (sock = JVM_Socket(AF_INET6, SOCK_DGRAM, 0)) < 0 ){ + NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed"); + return -1; + } + } + else{ // errno is not NOSUPPORT + NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed"); + return -1; + } + } + + /* Linux starting from 2.6.? kernel allows ioctl call with either IPv4 or IPv6 socket regardless of type + of address of an interface */ + + return sock; +} + +#else +static int openSocketWithFallback(JNIEnv *env, const char *ifname){ + return openSocket(env,AF_INET); +} +#endif + +static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) { + struct ifconf ifc; + struct ifreq *ifreqP; + char *buf; + int numifs; + unsigned i; + + + /* need to do a dummy SIOCGIFCONF to determine the buffer size. + * SIOCGIFCOUNT doesn't work + */ + ifc.ifc_buf = NULL; + if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) { + NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGIFCONF failed"); + return ifs; + } + + CHECKED_MALLOC3(buf,char *, ifc.ifc_len); + + ifc.ifc_buf = buf; + if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) { + NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGIFCONF failed"); + (void) free(buf); + return ifs; + } + + /* + * Iterate through each interface + */ + ifreqP = ifc.ifc_req; + for (i=0; iifr_name, ifs, (struct sockaddr *) & (ifreqP->ifr_addr), AF_INET, 0); /* - * If an exception occurred we return + * If an exception occurred then free the list */ if ((*env)->ExceptionOccurred(env)) { - close(sock); free(buf); - return ifs; + freeif(ifs); + return NULL; } - } - close(sock); + /* + * Free socket and buffer + */ free(buf); return ifs; - } -#endif -#if defined(__linux__) && defined(AF_INET6) /* * Enumerates and returns all IPv6 interfaces on Linux */ -static netif *enumIPv6Interfaces(JNIEnv *env, netif *ifs) { + +#ifdef AF_INET6 +static netif *enumIPv6Interfaces(JNIEnv *env, int sock, netif *ifs) { FILE *f; - char addr6[40], devname[20]; + char addr6[40], devname[21]; char addr6p[8][5]; int plen, scope, dad_status, if_idx; uint8_t ipv6addr[16]; if ((f = fopen(_PATH_PROCNET_IFINET6, "r")) != NULL) { while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n", - addr6p[0], addr6p[1], addr6p[2], addr6p[3], - addr6p[4], addr6p[5], addr6p[6], addr6p[7], - &if_idx, &plen, &scope, &dad_status, devname) != EOF) { + addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6], addr6p[7], + &if_idx, &plen, &scope, &dad_status, devname) != EOF) { + struct netif *ifs_ptr = NULL; struct netif *last_ptr = NULL; struct sockaddr_in6 addr; sprintf(addr6, "%s:%s:%s:%s:%s:%s:%s:%s", - addr6p[0], addr6p[1], addr6p[2], addr6p[3], - addr6p[4], addr6p[5], addr6p[6], addr6p[7]); + addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6], addr6p[7]); inet_pton(AF_INET6, addr6, ipv6addr); memset(&addr, 0, sizeof(struct sockaddr_in6)); memcpy((void*)addr.sin6_addr.s6_addr, (const void*)ipv6addr, 16); + addr.sin6_scope_id = if_idx; - ifs = addif(env, ifs, devname, if_idx, AF_INET6, - (struct sockaddr *)&addr, - sizeof(struct sockaddr_in6), plen); + ifs = addif(env, sock, devname, ifs, (struct sockaddr *)&addr, AF_INET6, plen); + /* * If an exception occurred then return the list as is. @@ -824,373 +1126,377 @@ fclose(f); return ifs; } - } - fclose(f); + } + fclose(f); } return ifs; } #endif -/* - * Free an interface list (including any attached addresses) +static int getIndex(int sock, const char *name){ + /* + * Try to get the interface index + * (Not supported on Solaris 2.6 or 7) + */ + struct ifreq if2; + strcpy(if2.ifr_name, name); + + if (ioctl(sock, SIOCGIFINDEX, (char *)&if2) < 0) { + return -1; + } + + return if2.ifr_ifindex; +} + +/** + * Returns the IPv4 broadcast address of a named interface, if it exists. + * Returns 0 if it doesn't have one. */ -void freeif(netif *ifs) { - netif *currif = ifs; - netif *child = NULL; +static struct sockaddr *getBroadcast(JNIEnv *env, int sock, const char *ifname, struct sockaddr *brdcast_store) { + struct sockaddr *ret = NULL; + struct ifreq if2; - while (currif != NULL) { - netaddr *addrP = currif->addr; - while (addrP != NULL) { - netaddr *next = addrP->next; - if (addrP->addr != NULL) - free(addrP->addr); - if (addrP->brdcast != NULL) - free(addrP->brdcast); - free(addrP); - addrP = next; - } + memset((char *) &if2, 0, sizeof(if2)); + strcpy(if2.ifr_name, ifname); - free(currif->name); + /* Let's make sure the interface does have a broadcast address */ + if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFFLAGS failed"); + return ret; + } - /* - * Don't forget to free the sub-interfaces. - */ - if (currif->childs != NULL) { - freeif(currif->childs); - } + if (if2.ifr_flags & IFF_BROADCAST) { + /* It does, let's retrieve it*/ + if (ioctl(sock, SIOCGIFBRDADDR, (char *)&if2) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFBRDADDR failed"); + return ret; + } + + ret = brdcast_store; + memcpy(ret, &if2.ifr_broadaddr, sizeof(struct sockaddr)); + } + + return ret; +} - ifs = currif->next; - free(currif); - currif = ifs; +/** + * Returns the IPv4 subnet prefix length (aka subnet mask) for the named + * interface, if it has one, otherwise return -1. + */ +static short getSubnet(JNIEnv *env, int sock, const char *ifname) { + unsigned int mask; + short ret; + struct ifreq if2; + + memset((char *) &if2, 0, sizeof(if2)); + strcpy(if2.ifr_name, ifname); + + if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFNETMASK failed"); + return -1; } + + mask = ntohl(((struct sockaddr_in*)&(if2.ifr_addr))->sin_addr.s_addr); + ret = 0; + while (mask) { + mask <<= 1; + ret++; + } + + return ret; } -/* - * Add an interface to the list. If known interface just link - * a new netaddr onto the list. If new interface create new - * netif structure. - */ -netif *addif(JNIEnv *env, netif *ifs, char *if_name, int index, int family, - struct sockaddr *new_addrP, int new_addrlen, short prefix) { - netif *currif = ifs, *parent; - netaddr *addrP; -#ifdef LIFNAMSIZ - char name[LIFNAMSIZ]; - char vname[LIFNAMSIZ]; -#else - char name[IFNAMSIZ]; - char vname[IFNAMSIZ]; -#endif - char *unit; - int isVirtual = 0; +/** + * Get the Hardware address (usually MAC address) for the named interface. + * return puts the data in buf, and returns the length, in byte, of the + * MAC address. Returns -1 if there is no hardware address on that interface. + */ +static int getMacAddress(JNIEnv *env, int sock, const char* ifname, const struct in_addr* addr, unsigned char *buf) { + static struct ifreq ifr; + int i; - /* - * If the interface name is a logical interface then we - * remove the unit number so that we have the physical - * interface (eg: hme0:1 -> hme0). NetworkInterface - * currently doesn't have any concept of physical vs. - * logical interfaces. - */ - strcpy(name, if_name); + strcpy(ifr.ifr_name, ifname); + if (ioctl(sock, SIOCGIFHWADDR, &ifr) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFHWADDR failed"); + return -1; + } - /* - * Create and populate the netaddr node. If allocation fails - * return an un-updated list. - */ - addrP = (netaddr *)malloc(sizeof(netaddr)); - if (addrP) { - addrP->addr = (struct sockaddr *)malloc(new_addrlen); - if (addrP->addr == NULL) { - free(addrP); - addrP = NULL; - } + memcpy(buf, &ifr.ifr_hwaddr.sa_data, IFHWADDRLEN); + + /* + * All bytes to 0 means no hardware address. + */ + + for (i = 0; i < IFHWADDRLEN; i++) { + if (buf[i] != 0) + return IFHWADDRLEN; } - if (addrP == NULL) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); - return ifs; /* return untouched list */ + + return -1; +} + +static int getMTU(JNIEnv *env, int sock, const char *ifname) { + struct ifreq if2; + memset((char *) &if2, 0, sizeof(if2)); + + if (ifname != NULL) { + strcpy(if2.ifr_name, ifname); + } else { + JNU_ThrowNullPointerException(env, "network interface name is NULL"); + return -1; } - memcpy(addrP->addr, new_addrP, new_addrlen); - addrP->family = family; - addrP->brdcast = NULL; - addrP->mask = prefix; - if (family == AF_INET) { - /* - * Deal with brodcast addr & subnet mask - */ - addrP->brdcast = getBroadcast(env, name); - if (addrP->brdcast) { - addrP->mask = getSubnet(env, name); - } + if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFMTU failed"); + return -1; } - vname[0] = 0; - unit = strchr(name, ':'); - if (unit != NULL) { - /** - * This is a virtual interface. If we are able to access the parent - * we need to create a new entry if it doesn't exist yet *and* update - * the 'parent' interface with the new records. - */ - struct ifreq if2; - int sock; - int len; - - sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0); - if (sock < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Socket creation failed"); - return ifs; /* return untouched list */ - } + return if2.ifr_mtu; +} - len = unit - name; - if (len > 0) { - // temporarily use vname to hold the parent name of the interface - // instead of creating another buffer. - memcpy(&vname, name, len); - vname[len] = '\0'; +static int getFlags(int sock, const char *ifname) { + struct ifreq if2; + int ret = -1; - memset((char *) &if2, 0, sizeof(if2)); - strcpy(if2.ifr_name, vname); + memset((char *) &if2, 0, sizeof(if2)); + strcpy(if2.ifr_name, ifname); - if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) >= 0) { - // Got access to parent, so create it if necessary. - strcpy(vname, name); - *unit = '\0'; - } - else { - // failed to access parent interface do not create parent. - // We are a virtual interface with no parent. - isVirtual = 1; + if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0){ + return -1; + } + + return if2.ifr_flags; +} - vname[0] = 0; +#endif + +/** Solaris **/ +#ifdef __solaris__ +/* Open socket for further ioct calls, try v4 socket first and + * if it falls return v6 socket + */ + +#ifdef AF_INET6 +static int openSocketWithFallback(JNIEnv *env, const char *ifname){ + int sock, alreadyV6 = 0; + struct lifreq if2; + + if ((sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0)) < 0) { + if (errno == EPROTONOSUPPORT){ + if ( (sock = JVM_Socket(AF_INET6, SOCK_DGRAM, 0)) < 0 ){ + NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed"); + return -1; + } + + alreadyV6=1; + } + else{ // errno is not NOSUPPORT + NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed"); + return -1; + } + } + + /** + * Solaris requires that we have IPv6 socket to query an + * interface without IPv4 address - check it here + * POSIX 1 require the kernell to return ENOTTY if the call is + * unappropriate for device e.g. NETMASK for device having IPv6 + * only address but not all devices follows the standart so + * fallback on any error. It's not an ecology friendly but more + * reliable. + */ + + if (! alreadyV6 ){ + memset((char *) &if2, 0, sizeof(if2)); + strcpy(if2.lifr_name, ifname); + if (ioctl(sock, SIOCGLIFNETMASK, (char *)&if2) < 0) { + close(sock); + if ( (sock = JVM_Socket(AF_INET6, SOCK_DGRAM, 0)) < 0 ){ + NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed"); + return -1; + } } - } - close(sock); } + return sock; +} + +#else +static int openSocketWithFallback(JNIEnv *env, const char *ifname){ + return openSocket(env,AF_INET); +} +#endif + +/* + * Enumerates and returns all IPv4 interfaces + * (linux verison) + */ + +static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) { + return enumIPvXInterfaces(env,sock, ifs, AF_INET); +} + +#ifdef AF_INET6 +static netif *enumIPv6Interfaces(JNIEnv *env, int sock, netif *ifs) { + return enumIPvXInterfaces(env,sock, ifs, AF_INET6); +} +#endif + +/* + Enumerates and returns all interfaces on Solaris + use the same code for IPv4 and IPv6 + */ +static netif *enumIPvXInterfaces(JNIEnv *env, int sock, netif *ifs, int family) { + struct lifconf ifc; + struct lifreq *ifr; + int n; + char *buf; + struct lifnum numifs; + unsigned bufsize; + /* - * Check if this is a "new" interface. Use the interface - * name for matching because index isn't supported on - * Solaris 2.6 & 7. + * Get the interface count */ - while (currif != NULL) { - if (strcmp(name, currif->name) == 0) { - break; - } - currif = currif->next; + numifs.lifn_family = family; + numifs.lifn_flags = 0; + if (ioctl(sock, SIOCGLIFNUM, (char *)&numifs) < 0) { + NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGLIFNUM failed"); + return ifs; } /* - * If "new" then create an netif structure and - * insert it onto the list. + * Enumerate the interface configurations */ - if (currif == NULL) { - currif = (netif *)malloc(sizeof(netif)); - if (currif) { - currif->name = strdup(name); - if (currif->name == NULL) { - free(currif); - currif = NULL; - } - } - if (currif == NULL) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); - return ifs; - } - currif->index = index; - currif->addr = NULL; - currif->childs = NULL; - currif->virtual = isVirtual; - currif->next = ifs; - ifs = currif; + bufsize = numifs.lifn_count * sizeof (struct lifreq); + CHECKED_MALLOC3(buf, char *, bufsize); + + ifc.lifc_family = family; + ifc.lifc_flags = 0; + ifc.lifc_len = bufsize; + ifc.lifc_buf = buf; + if (ioctl(sock, SIOCGLIFCONF, (char *)&ifc) < 0) { + NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGLIFCONF failed"); + free(buf); + return ifs; } /* - * Finally insert the address on the interface + * Iterate through each interface */ - addrP->next = currif->addr; - currif->addr = addrP; + ifr = ifc.lifc_req; + for (n=0; nlifr_addr.ss_family != family) { + continue; + } - /** - * Let's deal with the virtual interface now. - */ - if (vname[0]) { - netaddr *tmpaddr; +#ifdef AF_INET6 + if (ifr->lifr_addr.ss_family == AF_INET6) { + struct sockaddr_in6 *s6= (struct sockaddr_in6 *)&(ifr->lifr_addr); + s6->sin6_scope_id = getIndex(sock, ifr->lifr_name); + } +#endif - currif = parent->childs; + /* add to the list */ + ifs = addif(env, sock,ifr->lifr_name, ifs, (struct sockaddr *)&(ifr->lifr_addr),family, (short) ifr->lifr_addrlen); - while (currif != NULL) { - if (strcmp(vname, currif->name) == 0) { - break; - } - currif = currif->next; - } - if (currif == NULL) { - currif = (netif *)malloc(sizeof(netif)); - if (currif) { - currif->name = strdup(vname); - if (currif->name == NULL) { - free(currif); - currif = NULL; - } - } - if (currif == NULL) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); - return ifs; + /* + * If an exception occurred we return immediately + */ + if ((*env)->ExceptionOccurred(env)) { + free(buf); + return ifs; } - currif->index = index; - currif->addr = NULL; - /* Need to duplicate the addr entry? */ - currif->virtual = 1; - currif->childs = NULL; - currif->next = parent->childs; - parent->childs = currif; - } - tmpaddr = (netaddr *) malloc(sizeof(netaddr)); - if (tmpaddr == NULL) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); - return ifs; - } - memcpy(tmpaddr, addrP, sizeof(netaddr)); - /** - * Let's duplicate the address and broadcast address structures - * if there are any. - */ - if (addrP->addr != NULL) { - tmpaddr->addr = malloc(new_addrlen); - if (tmpaddr->addr != NULL) - memcpy(tmpaddr->addr, addrP->addr, new_addrlen); - } - if (addrP->brdcast != NULL) { - tmpaddr->brdcast = malloc(new_addrlen); - if (tmpaddr->brdcast != NULL) - memcpy(tmpaddr->brdcast, addrP->brdcast, new_addrlen); - } - tmpaddr->next = currif->addr; - currif->addr = tmpaddr; - } + } + free(buf); return ifs; } -/** - * Get flags from a NetworkInterface. - */ -static short getFlags(JNIEnv *env, jstring name) { - int sock; - struct ifreq if2; - jboolean isCopy; - const char* name_utf; - short ret = -1; - - sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0); - if (sock < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Socket creation failed"); - return -1; - } - - name_utf = (*env)->GetStringUTFChars(env, name, &isCopy); - memset((char *) &if2, 0, sizeof(if2)); - strcpy(if2.ifr_name, name_utf); +static int getIndex(int sock, const char *name){ + /* + * Try to get the interface index + * (Not supported on Solaris 2.6 or 7) + */ + struct lifreq if2; + strcpy(if2.lifr_name, name); - if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) >= 0) { - ret = if2.ifr_flags; - } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IOCTL failed"); - ret = -1; - } - close(sock); - /* release the UTF string and interface list */ - (*env)->ReleaseStringUTFChars(env, name, name_utf); + if (ioctl(sock, SIOCGLIFINDEX, (char *)&if2) < 0) { + return -1; + } - return ret; + return if2.lifr_index; } /** * Returns the IPv4 broadcast address of a named interface, if it exists. * Returns 0 if it doesn't have one. */ -static struct sockaddr *getBroadcast(JNIEnv *env, const char *ifname) { - int sock; - unsigned int mask; - struct sockaddr *ret = NULL; - struct ifreq if2; - short flag; +static struct sockaddr *getBroadcast(JNIEnv *env, int sock, const char *ifname, struct sockaddr *brdcast_store) { + struct sockaddr *ret = NULL; + struct lifreq if2; - sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0); - if (sock < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Socket creation failed"); - return ret; - } + memset((char *) &if2, 0, sizeof(if2)); + strcpy(if2.lifr_name, ifname); - memset((char *) &if2, 0, sizeof(if2)); - strcpy(if2.ifr_name, ifname); - /* Let's make sure the interface does have a broadcast address */ - if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) >= 0) { - flag = if2.ifr_flags; - } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IOCTL failed"); - } - if (flag & IFF_BROADCAST) { - /* It does, let's retrieve it*/ - if (ioctl(sock, SIOCGIFBRDADDR, (char *)&if2) >= 0) { - ret = (struct sockaddr*) malloc(sizeof(struct sockaddr)); - memcpy(ret, &if2.ifr_broadaddr, sizeof(struct sockaddr)); - } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IOCTL failed"); + /* Let's make sure the interface does have a broadcast address */ + if (ioctl(sock, SIOCGLIFFLAGS, (char *)&if2) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGLIFFLAGS failed"); + return ret; } - } - close(sock); - return ret; + + if (if2.lifr_flags & IFF_BROADCAST) { + /* It does, let's retrieve it*/ + if (ioctl(sock, SIOCGLIFBRDADDR, (char *)&if2) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGLIFBRDADDR failed"); + return ret; + } + + ret = brdcast_store; + memcpy(ret, &if2.lifr_broadaddr, sizeof(struct sockaddr)); + } + + return ret; } /** * Returns the IPv4 subnet prefix length (aka subnet mask) for the named * interface, if it has one, otherwise return -1. */ -static short getSubnet(JNIEnv *env, const char *ifname) { - int sock; - unsigned int mask; - short ret; - struct ifreq if2; +static short getSubnet(JNIEnv *env, int sock, const char *ifname) { + unsigned int mask; + short ret; + struct lifreq if2; - sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0); - if (sock < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Socket creation failed"); - return -1; - } + memset((char *) &if2, 0, sizeof(if2)); + strcpy(if2.lifr_name, ifname); - memset((char *) &if2, 0, sizeof(if2)); - strcpy(if2.ifr_name, ifname); - if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) >= 0) { - mask = ntohl(((struct sockaddr_in*)&(if2.ifr_addr))->sin_addr.s_addr); + if (ioctl(sock, SIOCGLIFNETMASK, (char *)&if2) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGLIFNETMASK failed"); + return -1; + } + + mask = ntohl(((struct sockaddr_in*)&(if2.lifr_addr))->sin_addr.s_addr); ret = 0; + while (mask) { - mask <<= 1; - ret++; + mask <<= 1; + ret++; } - close(sock); + return ret; - } - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IOCTL failed"); - close(sock); - return -1; } -#ifdef __solaris__ -#define DEV_PREFIX "/dev/" + + +#define DEV_PREFIX "/dev/" /** * Solaris specific DLPI code to get hardware address from a device. @@ -1198,284 +1504,155 @@ * privileges (i.e. be root). */ static int getMacFromDevice(JNIEnv *env, const char* ifname, unsigned char* retbuf) { - char style1dev[MAXPATHLEN]; - int fd; - dl_phys_addr_req_t dlpareq; - dl_phys_addr_ack_t *dlpaack; - struct strbuf msg; - char buf[128]; - int flags = 0; - - /** - * Device is in /dev - * e.g.: /dev/bge0 - */ - strcpy(style1dev, DEV_PREFIX); - strcat(style1dev, ifname); - if ((fd = open(style1dev, O_RDWR)) == -1) { - /* - * Can't open it. We probably are missing the privilege. - * We'll have to try something else - */ - return 0; - } - dlpareq.dl_primitive = DL_PHYS_ADDR_REQ; - dlpareq.dl_addr_type = DL_CURR_PHYS_ADDR; - msg.buf = (char *)&dlpareq; - msg.len = DL_PHYS_ADDR_REQ_SIZE; - if (putmsg(fd, &msg, NULL, 0) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "putmsg failed"); - return -1; - } - dlpaack = (dl_phys_addr_ack_t *)buf; - msg.buf = (char *)buf; - msg.len = 0; - msg.maxlen = sizeof (buf); - if (getmsg(fd, &msg, NULL, &flags) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "getmsg failed"); - return -1; - } - if (msg.len < DL_PHYS_ADDR_ACK_SIZE || - dlpaack->dl_primitive != DL_PHYS_ADDR_ACK) { - JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", - "Couldn't obtain phys addr\n"); - return -1; - } + char style1dev[MAXPATHLEN]; + int fd; + dl_phys_addr_req_t dlpareq; + dl_phys_addr_ack_t *dlpaack; + struct strbuf msg; + char buf[128]; + int flags = 0; + + /** + * Device is in /dev + * e.g.: /dev/bge0 + */ + strcpy(style1dev, DEV_PREFIX); + strcat(style1dev, ifname); + if ((fd = open(style1dev, O_RDWR)) < 0) { + /* + * Can't open it. We probably are missing the privilege. + * We'll have to try something else + */ + return 0; + } + + dlpareq.dl_primitive = DL_PHYS_ADDR_REQ; + dlpareq.dl_addr_type = DL_CURR_PHYS_ADDR; + + msg.buf = (char *)&dlpareq; + msg.len = DL_PHYS_ADDR_REQ_SIZE; + + if (putmsg(fd, &msg, NULL, 0) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "putmsg failed"); + return -1; + } + + dlpaack = (dl_phys_addr_ack_t *)buf; + + msg.buf = (char *)buf; + msg.len = 0; + msg.maxlen = sizeof (buf); + if (getmsg(fd, &msg, NULL, &flags) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "getmsg failed"); + return -1; + } - memcpy(retbuf, &buf[dlpaack->dl_addr_offset], dlpaack->dl_addr_length); - return dlpaack->dl_addr_length; + if (msg.len < DL_PHYS_ADDR_ACK_SIZE || dlpaack->dl_primitive != DL_PHYS_ADDR_ACK) { + JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Couldn't obtain phys addr\n"); + return -1; + } + + memcpy(retbuf, &buf[dlpaack->dl_addr_offset], dlpaack->dl_addr_length); + return dlpaack->dl_addr_length; } -#endif /** * Get the Hardware address (usually MAC address) for the named interface. * return puts the data in buf, and returns the length, in byte, of the * MAC address. Returns -1 if there is no hardware address on that interface. */ -int getMacAddress(JNIEnv *env, const struct in_addr* addr, const char* ifname, - unsigned char *buf) { - int sock; -#ifdef __linux__ - static struct ifreq ifr; - int i; +static int getMacAddress(JNIEnv *env, int sock, const char *ifname, const struct in_addr* addr, unsigned char *buf) { + struct arpreq arpreq; + struct sockaddr_in* sin; + struct sockaddr_in ipAddr; + int len, i; + struct lifreq lif; + + /* First, try the new (S11) SIOCGLIFHWADDR ioctl(). If that fails + * try the old way. + */ + memset(&lif, 0, sizeof(lif)); + strlcpy(lif.lifr_name, ifname, sizeof(lif.lifr_name)); + + if (ioctl(sock, SIOCGLIFHWADDR, &lif) != -1) { + struct sockaddr_dl *sp; + sp = (struct sockaddr_dl *)&lif.lifr_addr; + memcpy(buf, &sp->sdl_data[0], sp->sdl_alen); + return sp->sdl_alen; + } + + /** + * On Solaris we have to use DLPI, but it will only work if we have + * privileged access (i.e. root). If that fails, we try a lookup + * in the ARP table, which requires an IPv4 address. + */ + if ((len = getMacFromDevice(env, ifname, buf)) == 0) { + /*DLPI failed - trying to do arp lookup*/ + + if (addr == NULL) { + /** + * No IPv4 address for that interface, so can't do an ARP lookup. + */ + return -1; + } - sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0); + len = 6; //??? - if (sock < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Socket creation failed"); - return -1; - } + sin = (struct sockaddr_in *) &arpreq.arp_pa; + memset((char *) &arpreq, 0, sizeof(struct arpreq)); + ipAddr.sin_port = 0; + ipAddr.sin_family = AF_INET; + memcpy(&ipAddr.sin_addr, addr, sizeof(struct in_addr)); + memcpy(&arpreq.arp_pa, &ipAddr, sizeof(struct sockaddr_in)); + arpreq.arp_flags= ATF_PUBL; - strcpy(ifr.ifr_name, ifname); + if (ioctl(sock, SIOCGARP, &arpreq) < 0) { + return -1; + } - if (ioctl(sock, SIOCGIFHWADDR, &ifr) < 0) { - fprintf(stderr, "SIOCIFHWADDR: %s\n", - strerror(errno)); - close(sock); - return -1; - } - memcpy(buf, &ifr.ifr_hwaddr.sa_data, IFHWADDRLEN); - close(sock); - for (i = 0; i < IFHWADDRLEN; i++) { - if (buf[i] != 0) - return IFHWADDRLEN; - } - /* - * All bytes to 0 means no hardware address. - */ - return -1; -#else - struct arpreq arpreq; - struct sockaddr_in* sin; - struct sockaddr_in ipAddr; - int len; - - /** - * On Solaris we have to use DLPI, but it will only work if we have - * privileged access (i.e. root). If that fails, we try a lookup - * in the ARP table, which requires an IPv4 address. - */ - if ((len = getMacFromDevice(env, ifname, buf)) > 0) { - return len; - } - if (addr == NULL) { - /** - * No IPv4 address for that interface, so can't do an ARP lookup. + memcpy(buf, &arpreq.arp_ha.sa_data[0], len ); + } + + /* + * All bytes to 0 means no hardware address. */ - return -1; - } - sin = (struct sockaddr_in *) &arpreq.arp_pa; - memset((char *) &arpreq, 0, sizeof(struct arpreq)); - ipAddr.sin_port = 0; - ipAddr.sin_family = AF_INET; - memcpy(&ipAddr.sin_addr, addr, sizeof(struct in_addr)); - memcpy(&arpreq.arp_pa, &ipAddr, sizeof(struct sockaddr_in)); - arpreq.arp_flags= ATF_PUBL; - sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0); - - if (sock < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Socket creation failed"); - return -1; - } - if (ioctl(sock, SIOCGARP, &arpreq) >= 0) { - close(sock); - memcpy(buf, &arpreq.arp_ha.sa_data[0], 6); - return 6; - } + for (i = 0; i < len; i++) { + if (buf[i] != 0) + return len; + } - if (errno != ENXIO) { - // "No such device or address" means no hardware address, so it's - // normal don't throw an exception - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IOCTL failed"); - } - close(sock); -#endif - return -1; + return -1; } -/* - * Class: java_net_NetworkInterface - * Method: isUp0 - * Signature: (Ljava/lang/String;I)Z - */ -JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isUp0 - (JNIEnv *env, jclass cls, jstring name, jint index) { - short val; - - val = getFlags(env, name); - if ( (val & IFF_UP) && (val & IFF_RUNNING)) - return JNI_TRUE; - return JNI_FALSE; -} +static int getMTU(JNIEnv *env, int sock, const char *ifname) { + struct lifreq if2; -/* - * Class: java_net_NetworkInterface - * Method: isP2P0 - * Signature: (Ljava/lang/String;I)Z - */ -JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isP2P0 - (JNIEnv *env, jclass cls, jstring name, jint index) { - if (getFlags(env, name) & IFF_POINTOPOINT) - return JNI_TRUE; - return JNI_FALSE; -} + memset((char *) &if2, 0, sizeof(if2)); + strcpy(if2.lifr_name, ifname); -/* - * Class: java_net_NetworkInterface - * Method: isLoopback0 - * Signature: (Ljava/lang/String;I)Z - */ -JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isLoopback0 - (JNIEnv *env, jclass cls, jstring name, jint index) { - if (getFlags(env, name) & IFF_LOOPBACK) - return JNI_TRUE; - return JNI_FALSE; -} + if (ioctl(sock, SIOCGLIFMTU, (char *)&if2) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGLIFMTU failed"); + return -1; + } -/* - * Class: java_net_NetworkInterface - * Method: supportsMulticast0 - * Signature: (Ljava/lang/String;I)Z - */ -JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_supportsMulticast0 -(JNIEnv *env, jclass cls, jstring name, jint index) { - short val; - - val = getFlags(env, name); - if (val & IFF_MULTICAST) - return JNI_TRUE; - return JNI_FALSE; + return if2.lifr_mtu; } -/* - * Class: java_net_NetworkInterface - * Method: getMacAddr0 - * Signature: ([bLjava/lang/String;I)[b - */ -JNIEXPORT jbyteArray JNICALL Java_java_net_NetworkInterface_getMacAddr0(JNIEnv *env, jclass class, jbyteArray addrArray, jstring name, jint index) { - jint addr; - jbyte caddr[4]; - struct in_addr iaddr; - jbyteArray ret = NULL; - unsigned char mac[16]; - int len; - jboolean isCopy; - const char* name_utf = (*env)->GetStringUTFChars(env, name, &isCopy); - - if (!IS_NULL(addrArray)) { - (*env)->GetByteArrayRegion(env, addrArray, 0, 4, caddr); - addr = ((caddr[0]<<24) & 0xff000000); - addr |= ((caddr[1] <<16) & 0xff0000); - addr |= ((caddr[2] <<8) & 0xff00); - addr |= (caddr[3] & 0xff); - iaddr.s_addr = htonl(addr); - len = getMacAddress(env, &iaddr, name_utf, mac); - } else { - len = getMacAddress(env, NULL, name_utf, mac); - } - if (len > 0) { - ret = (*env)->NewByteArray(env, len); - if (IS_NULL(ret)) { - /* we may have memory to free at the end of this */ - goto fexit; - } - (*env)->SetByteArrayRegion(env, ret, 0, len, (jbyte *) (mac)); - } - fexit: - /* release the UTF string and interface list */ - (*env)->ReleaseStringUTFChars(env, name, name_utf); - return ret; -} -/* - * Class: java_net_NetworkInterface - * Method: getMTU0 - * Signature: ([bLjava/lang/String;I)I - */ +static int getFlags(int sock, const char *ifname) { + struct lifreq lifr; + memset((caddr_t)&lifr, 0, sizeof(lifr)); + strcpy((caddr_t)&(lifr.lifr_name), ifname); -JNIEXPORT jint JNICALL Java_java_net_NetworkInterface_getMTU0(JNIEnv *env, jclass class, jstring name, jint index) { - jboolean isCopy; - int sock; - struct ifreq if2; - int ret = -1; - const char* name_utf = (*env)->GetStringUTFChars(env, name, &isCopy); + if (ioctl(sock, SIOCGLIFFLAGS, (char *)&lifr) < 0) { + return -1; + } - sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0); - if (sock < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Socket creation failed"); - } else { + return lifr.lifr_flags; +} -#ifdef __linux__ - memset((char *) &if2, 0, sizeof(if2)); - strcpy(if2.ifr_name, name_utf); - if (ioctl(sock, SIOCGIFMTU, (char *)&if2) >= 0) { - ret= if2.ifr_mtu; - } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IOCTL failed"); - } -#else /* Solaris */ - struct lifreq lifr; - memset((caddr_t)&lifr, 0, sizeof(lifr)); - strcpy((caddr_t)&(lifr.lifr_name), name_utf); - if (ioctl(sock, SIOCGLIFMTU, (caddr_t)&lifr) >= 0) { - ret = lifr.lifr_mtu; - } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IOCTL failed"); - } #endif - close(sock); - } - /* release the UTF string and interface list */ - (*env)->ReleaseStringUTFChars(env, name, name_utf); - return ret; -} + + diff -Nru openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c --- openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,8 +34,8 @@ #include #endif #ifdef __linux__ -#include -#include +#include +#include #include #include @@ -89,7 +89,6 @@ static jobject createInteger(JNIEnv *env, int i) { static jclass i_class; static jmethodID i_ctrID; - static jfieldID i_valueID; if (i_class == NULL) { jclass c = (*env)->FindClass(env, "java/lang/Integer"); @@ -109,7 +108,6 @@ static jobject createBoolean(JNIEnv *env, int b) { static jclass b_class; static jmethodID b_ctrID; - static jfieldID b_valueID; if (b_class == NULL) { jclass c = (*env)->FindClass(env, "java/lang/Boolean"); @@ -148,8 +146,6 @@ #ifdef __linux__ struct utsname sysinfo; #endif - char *s; - pdsi_fdID = (*env)->GetFieldID(env, cls, "fd", "Ljava/io/FileDescriptor;"); CHECK_NULL(pdsi_fdID); @@ -373,7 +369,7 @@ if (JVM_GetSockName(fd, (struct sockaddr *)&addr, &len) == -1) { return; } - localPort = NET_GetPortFromSockaddr(&addr); + localPort = NET_GetPortFromSockaddr((struct sockaddr *)&addr); if (localPort == 0) { localPort = (*env)->GetIntField(env, this, pdsi_localPortID); #ifdef AF_INET6 @@ -416,7 +412,6 @@ /* The fdObj'fd */ jint fd; - ssize_t n = -1; SOCKADDR rmtaddr, *rmtaddrP=&rmtaddr; int len; @@ -632,9 +627,7 @@ jint packetBufferOffset, packetBufferLen; int fd; - jbyteArray data; - int datalen; int n; SOCKADDR remote_addr; int len; @@ -811,9 +804,7 @@ jint packetBufferOffset, packetBufferLen; int fd; - jbyteArray data; - int datalen; int n; SOCKADDR remote_addr; int len; @@ -1058,7 +1049,6 @@ jobject fdObj = (*env)->GetObjectField(env, this, pdsi_fdID); int fd; - int arg = -1; int t = 1; if (IS_NULL(fdObj)) { @@ -1574,10 +1564,12 @@ static jmethodID ni_ctrID; static jfieldID ni_indexID; static jfieldID ni_addrsID; + static jfieldID ni_nameID; jobjectArray addrArray; jobject addr; jobject ni; + jobject ni_name; struct in_addr in; struct in_addr *inP = ∈ @@ -1640,6 +1632,8 @@ ni_addrsID = (*env)->GetFieldID(env, c, "addrs", "[Ljava/net/InetAddress;"); CHECK_NULL_RETURN(ni_addrsID, NULL); + ni_nameID = (*env)->GetFieldID(env, c,"name", "Ljava/lang/String;"); + CHECK_NULL_RETURN(ni_nameID, NULL); ni_class = (*env)->NewGlobalRef(env, c); CHECK_NULL_RETURN(ni_class, NULL); } @@ -1661,6 +1655,9 @@ CHECK_NULL_RETURN(addrArray, NULL); (*env)->SetObjectArrayElement(env, addrArray, 0, addr); (*env)->SetObjectField(env, ni, ni_addrsID, addrArray); + if (ni_name != NULL) { + (*env)->SetObjectField(env, ni, ni_nameID, ni_name); + } return ni; } @@ -1677,14 +1674,16 @@ static jfieldID ni_indexID; static jfieldID ni_addrsID; static jclass ia_class; + static jfieldID ni_nameID; static jmethodID ia_anyLocalAddressID; - int index; + int index = 0; int len = sizeof(index); jobjectArray addrArray; jobject addr; jobject ni; + jobject ni_name; #ifdef __linux__ /* @@ -1724,6 +1723,8 @@ "anyLocalAddress", "()Ljava/net/InetAddress;"); CHECK_NULL_RETURN(ia_anyLocalAddressID, NULL); + ni_nameID = (*env)->GetFieldID(env, c,"name", "Ljava/lang/String;"); + CHECK_NULL_RETURN(ni_nameID, NULL); ni_class = (*env)->NewGlobalRef(env, c); CHECK_NULL_RETURN(ni_class, NULL); } @@ -1784,6 +1785,10 @@ CHECK_NULL_RETURN(addrArray, NULL); (*env)->SetObjectArrayElement(env, addrArray, 0, addr); (*env)->SetObjectField(env, ni, ni_addrsID, addrArray); + ni_name = (*env)->NewStringUTF(env, ""); + if (ni_name != NULL) { + (*env)->SetObjectField(env, ni, ni_nameID, ni_name); + } return ni; } #endif diff -Nru openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/PlainSocketImpl.c openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/PlainSocketImpl.c --- openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/PlainSocketImpl.c 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/PlainSocketImpl.c 2015-01-20 02:20:42.000000000 +0000 @@ -42,8 +42,8 @@ #include #endif #ifdef __linux__ -#include -#include +#include +#include #endif #include "jvm.h" @@ -206,8 +206,6 @@ */ JNIEXPORT void JNICALL Java_java_net_PlainSocketImpl_initProto(JNIEnv *env, jclass cls) { - char *s; - psi_fdID = (*env)->GetFieldID(env, cls , "fd", "Ljava/io/FileDescriptor;"); CHECK_NULL(psi_fdID); @@ -253,7 +251,6 @@ jboolean stream) { jobject fdObj, ssObj; int fd; - int arg = -1; if (socketExceptionCls == NULL) { jclass c = (*env)->FindClass(env, "java/net/SocketException"); @@ -730,8 +727,6 @@ /* accepted fd */ jint newfd; - jthrowable error; - SOCKADDR him; int len; @@ -1144,7 +1139,6 @@ JNIEXPORT void JNICALL Java_java_net_PlainSocketImpl_socketSendUrgentData(JNIEnv *env, jobject this, jint data) { - char *buf; /* The fd field */ jobject fdObj = (*env)->GetObjectField(env, this, psi_fdID); int n, fd; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/SocketInputStream.c openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/SocketInputStream.c --- openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/SocketInputStream.c 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/SocketInputStream.c 2015-01-20 02:20:42.000000000 +0000 @@ -65,7 +65,6 @@ char BUF[MAX_BUFFER_LEN]; char *bufP; jint fd, nread; - jint n; if (IS_NULL(fdObj)) { /* should't this be a NullPointerException? -br */ diff -Nru openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/SocketOutputStream.c openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/SocketOutputStream.c --- openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/net/SocketOutputStream.c 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/net/SocketOutputStream.c 2015-01-20 02:20:42.000000000 +0000 @@ -67,7 +67,6 @@ char BUF[MAX_BUFFER_LEN]; int buflen; int fd; - jint n = 0; if (IS_NULL(fdObj)) { JNU_ThrowByName(env, "java/net/SocketException", "Socket closed"); diff -Nru openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/util/FileSystemPreferences.c openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/util/FileSystemPreferences.c --- openjdk-6-6b33-1.13.5/jdk/src/solaris/native/java/util/FileSystemPreferences.c 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/solaris/native/java/util/FileSystemPreferences.c 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,12 +38,14 @@ JNIEXPORT jint JNICALL Java_java_util_prefs_FileSystemPreferences_chmod(JNIEnv *env, jclass thisclass, jstring java_fname, jint permission) { - const char *fname = JNU_GetStringPlatformChars(env, java_fname, JNI_FALSE); - int result; - result = chmod(fname, permission); - if (result != 0) - result = errno; - JNU_ReleaseStringPlatformChars(env, java_fname, fname); + const char *fname = JNU_GetStringPlatformChars(env, java_fname, NULL); + int result = -1; + if (fname) { + result = chmod(fname, permission); + if (result != 0) + result = errno; + JNU_ReleaseStringPlatformChars(env, java_fname, fname); + } return (jint) result; } @@ -58,13 +60,16 @@ JNIEXPORT jintArray JNICALL Java_java_util_prefs_FileSystemPreferences_lockFile0(JNIEnv *env, jclass thisclass, jstring java_fname, jint permission, jboolean shared) { - const char *fname = JNU_GetStringPlatformChars(env, java_fname, JNI_FALSE); + const char *fname = JNU_GetStringPlatformChars(env, java_fname, NULL); int fd, rc; int result[2]; - jintArray javaResult; + jintArray javaResult = NULL; int old_umask; FLOCK fl; + if (!fname) + return javaResult; + fl.l_whence = SEEK_SET; fl.l_len = 0; fl.l_start = 0; @@ -97,7 +102,8 @@ } JNU_ReleaseStringPlatformChars(env, java_fname, fname); javaResult = (*env)->NewIntArray(env,2); - (*env)->SetIntArrayRegion(env, javaResult, 0, 2, result); + if (javaResult) + (*env)->SetIntArrayRegion(env, javaResult, 0, 2, result); return javaResult; } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java openjdk-6-6b34-1.13.6/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java --- openjdk-6-6b33-1.13.5/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java 2015-01-20 02:20:42.000000000 +0000 @@ -210,7 +210,7 @@ if (file == null) { file = getDesktop(); } - return file; + return checkFile(file); } else if (key.equals("roots")) { // Should be "History" and "Desktop" ? if (roots == null) { @@ -221,11 +221,11 @@ roots = (File[])super.get(key); } } - return roots; + return checkFiles(roots); } else if (key.equals("fileChooserComboBoxFolders")) { Win32ShellFolder2 desktop = getDesktop(); - if (desktop != null) { + if (desktop != null && checkFile(desktop) != null) { ArrayList folders = new ArrayList(); Win32ShellFolder2 drives = getDrives(); @@ -236,7 +236,7 @@ folders.add(desktop); // Add all second level folders - File[] secondLevelFolders = desktop.listFiles(); + File[] secondLevelFolders = checkFiles(desktop.listFiles()); Arrays.sort(secondLevelFolders); for (File secondLevelFolder : secondLevelFolders) { Win32ShellFolder2 folder = (Win32ShellFolder2) secondLevelFolder; @@ -244,7 +244,7 @@ folders.add(folder); // Add third level for "My Computer" if (folder.equals(drives)) { - File[] thirdLevelFolders = folder.listFiles(); + File[] thirdLevelFolders = checkFiles(folder.listFiles()); if (thirdLevelFolders != null) { Arrays.sort(thirdLevelFolders, driveComparator); for (File thirdLevelFolder : thirdLevelFolders) { @@ -254,7 +254,7 @@ } } } - return folders.toArray(new File[folders.size()]); + return checkFiles(folders); } else { return super.get(key); } @@ -288,7 +288,7 @@ } } } - return folders.toArray(new File[folders.size()]); + return checkFiles(folders); } else if (key.startsWith("fileChooserIcon ")) { int i = -1; String name = key.substring(key.indexOf(" ")+1); @@ -338,6 +338,47 @@ return null; } + private File checkFile(File file) { + SecurityManager sm = System.getSecurityManager(); + return (sm == null || file == null) ? file : checkFile(file, sm); + } + + private File checkFile(File file, SecurityManager sm) { + try { + sm.checkRead(file.getPath()); + return file; + } catch (SecurityException se) { + return null; + } + } + + private File[] checkFiles(File[] files) { + SecurityManager sm = System.getSecurityManager(); + if (sm == null || files == null || files.length == 0) { + return files; + } + return checkFiles(Arrays.asList(files), sm); + } + + private File[] checkFiles(List files) { + SecurityManager sm = System.getSecurityManager(); + if (sm == null || files.isEmpty()) { + return files.toArray(new File[files.size()]); + } + return checkFiles(files, sm); + } + + private File[] checkFiles(List files, SecurityManager sm) { + List checkedFiles = new ArrayList(files.size()); + for (File file: files) { + if(checkFile(file, sm) != null){ + checkedFiles.add(file); + } + } + + return checkedFiles.toArray(new File[checkedFiles.size()]); + } + /** * Does dir represent a "computer" such as a node on the network, or * "My Computer" on the desktop. diff -Nru openjdk-6-6b33-1.13.5/jdk/src/windows/classes/sun/awt/windows/awtLocalization_pt_BR.properties openjdk-6-6b34-1.13.6/jdk/src/windows/classes/sun/awt/windows/awtLocalization_pt_BR.properties --- openjdk-6-6b33-1.13.5/jdk/src/windows/classes/sun/awt/windows/awtLocalization_pt_BR.properties 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/windows/classes/sun/awt/windows/awtLocalization_pt_BR.properties 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,10 @@ + +# +# AWT Localization Properties +# + +# Default font size for Menus and MenuItems +menuFont=SansSerif-plain-11 + +# Value for "All files" for FileDialog +allFiles=Todos os arquivos diff -Nru openjdk-6-6b33-1.13.5/jdk/src/windows/classes/sun/net/www/protocol/http/NTLMAuthentication.java openjdk-6-6b34-1.13.6/jdk/src/windows/classes/sun/net/www/protocol/http/NTLMAuthentication.java --- openjdk-6-6b33-1.13.5/jdk/src/windows/classes/sun/net/www/protocol/http/NTLMAuthentication.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/windows/classes/sun/net/www/protocol/http/NTLMAuthentication.java 2015-01-20 02:20:42.000000000 +0000 @@ -25,18 +25,13 @@ package sun.net.www.protocol.http; -import java.util.Arrays; -import java.util.StringTokenizer; -import java.util.Random; - +import java.io.IOException; +import java.net.InetAddress; +import java.net.PasswordAuthentication; +import java.net.UnknownHostException; +import java.net.URL; import sun.net.www.HeaderParser; -import java.io.*; -import javax.crypto.*; -import javax.crypto.spec.*; -import java.security.*; -import java.net.*; - /** * NTLMAuthentication: * @@ -47,7 +42,6 @@ private static final long serialVersionUID = 100L; - static final char NTLM_AUTH = 'N'; private String hostname; private static String defaultDomain; /* Domain to use if not specified by user */ @@ -88,7 +82,10 @@ * from a system property: "http.auth.ntlm.domain". */ public NTLMAuthentication(boolean isProxy, URL url, PasswordAuthentication pw) { - super(isProxy?PROXY_AUTHENTICATION:SERVER_AUTHENTICATION, NTLM_AUTH, url, ""); + super(isProxy ? PROXY_AUTHENTICATION : SERVER_AUTHENTICATION, + AuthScheme.NTLM, + url, + ""); init (pw); } @@ -119,7 +116,11 @@ */ public NTLMAuthentication(boolean isProxy, String host, int port, PasswordAuthentication pw) { - super(isProxy?PROXY_AUTHENTICATION:SERVER_AUTHENTICATION, NTLM_AUTH,host, port, ""); + super(isProxy?PROXY_AUTHENTICATION:SERVER_AUTHENTICATION, + AuthScheme.NTLM, + host, + port, + ""); init (pw); } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/windows/classes/sun/security/mscapi/JarVerifier.java openjdk-6-6b34-1.13.6/jdk/src/windows/classes/sun/security/mscapi/JarVerifier.java --- openjdk-6-6b33-1.13.5/jdk/src/windows/classes/sun/security/mscapi/JarVerifier.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/windows/classes/sun/security/mscapi/JarVerifier.java 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - - -package sun.security.mscapi; - -// NOTE: this class is duplicated amongst SunJCE, SunPKCS11, and SunMSCAPI. -// All files should be kept in sync. - -import java.io.*; -import java.util.*; -import java.util.jar.*; -import java.net.URL; -import java.net.JarURLConnection; -import java.net.MalformedURLException; - -import java.security.*; -import java.security.cert.*; -import java.security.cert.Certificate; - -/** - * This class verifies JAR files (and any supporting JAR files), and - * determines whether they may be used in this implementation. - * - * The JCE in OpenJDK has an open cryptographic interface, meaning it - * does not restrict which providers can be used. Compliance with - * United States export controls and with local law governing the - * import/export of products incorporating the JCE in the OpenJDK is - * the responsibility of the licensee. - * - * @since 1.7 - */ -final class JarVerifier { - - private static final boolean debug = false; - - /** - * Verify the JAR file is signed by an entity which has a certificate - * issued by a trusted CA. - * - * Note: this is a temporary method and will change soon to use the - * exception chaining mechanism, which can provide more details - * as to why the verification failed. - * - * @param c the class to be verified. - * @return true if verification is successful. - */ - static boolean verify(final Class c) { - return true; - } -} diff -Nru openjdk-6-6b33-1.13.5/jdk/src/windows/classes/sun/security/mscapi/RSACipher.java openjdk-6-6b34-1.13.6/jdk/src/windows/classes/sun/security/mscapi/RSACipher.java --- openjdk-6-6b33-1.13.5/jdk/src/windows/classes/sun/security/mscapi/RSACipher.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/windows/classes/sun/security/mscapi/RSACipher.java 2015-01-20 02:17:22.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -103,7 +103,6 @@ private SecureRandom random; public RSACipher() { - SunMSCAPI.verifySelfIntegrity(getClass()); paddingType = PAD_PKCS1; } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/windows/classes/sun/security/mscapi/SunMSCAPI.java openjdk-6-6b34-1.13.6/jdk/src/windows/classes/sun/security/mscapi/SunMSCAPI.java --- openjdk-6-6b33-1.13.5/jdk/src/windows/classes/sun/security/mscapi/SunMSCAPI.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/windows/classes/sun/security/mscapi/SunMSCAPI.java 2015-01-20 02:17:22.000000000 +0000 @@ -117,22 +117,4 @@ AccessController.doPrivileged(new PutAllAction(this, map)); } } - - // set to true once self verification is complete - private static volatile boolean integrityVerified; - - static void verifySelfIntegrity(Class c) { - if (integrityVerified) { - return; - } - doVerifySelfIntegrity(c); - } - - private static synchronized void doVerifySelfIntegrity(Class c) { - integrityVerified = JarVerifier.verify(c); - if (integrityVerified == false) { - throw new ProviderException - ("The SunMSCAPI provider may have been tampered with."); - } - } } diff -Nru openjdk-6-6b33-1.13.5/jdk/src/windows/native/java/net/net_util_md.h openjdk-6-6b34-1.13.6/jdk/src/windows/native/java/net/net_util_md.h --- openjdk-6-6b33-1.13.5/jdk/src/windows/native/java/net/net_util_md.h 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/windows/native/java/net/net_util_md.h 2015-01-20 02:20:42.000000000 +0000 @@ -308,6 +308,15 @@ void NET_ThrowSocketException(JNIEnv *env, char* msg); +int NET_Socket(int domain, int type, int protocol); + +void NET_ThrowByNameWithLastError(JNIEnv *env, const char *name, + const char *defaultDetail); + +void NET_ThrowSocketException(JNIEnv *env, char* msg); + +jboolean NET_addrtransAvailable(); + /* * differs from NET_Timeout() as follows: * diff -Nru openjdk-6-6b33-1.13.5/jdk/src/windows/native/java/net/NetworkInterface_win9x.c openjdk-6-6b34-1.13.6/jdk/src/windows/native/java/net/NetworkInterface_win9x.c --- openjdk-6-6b33-1.13.5/jdk/src/windows/native/java/net/NetworkInterface_win9x.c 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/windows/native/java/net/NetworkInterface_win9x.c 2015-01-20 02:20:42.000000000 +0000 @@ -417,8 +417,8 @@ return -1; } curr->index = ++adapterCount; - curr->name = strdup("lo"); - curr->displayName = strdup("TCP Loopback interface"); + curr->name = _strdup("lo"); + curr->displayName = _strdup("TCP Loopback interface"); curr->next = adapterP; *adapterPP = curr; @@ -513,12 +513,11 @@ HKEY enumKey, bindingKey; DWORD dwLen; ULONG ulType; - TCHAR driver[MAX_STR_LEN]; char addresses[MAX_STR_LEN]; unsigned long addr; /* IPv4 address */ unsigned char byte; netaddr *netaddrP, *curr; - int i, addrCount, if_count; + int i, addrCount; /* * Open the HKEY_LOCAL_MACHINE\Enum\%s\%s\%s key @@ -1055,8 +1054,8 @@ return -1; } - ifs->name = strdup(adapterP->name); - ifs->displayName = strdup(adapterP->displayName); + ifs->name = _strdup(adapterP->name); + ifs->displayName = _strdup(adapterP->displayName); ifs->dwIndex = adapterP->index; ifs->index = adapterP->index; ifs->next = netifP; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/windows/native/java/net/NetworkInterface_winXP.c openjdk-6-6b34-1.13.6/jdk/src/windows/native/java/net/NetworkInterface_winXP.c --- openjdk-6-6b33-1.13.5/jdk/src/windows/native/java/net/NetworkInterface_winXP.c 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/windows/native/java/net/NetworkInterface_winXP.c 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -151,8 +151,12 @@ ptr = adapterInfo; ret = NULL; while (ptr != NULL) { - // IPv4 interface - if (ptr->Ipv6IfIndex == index) { + // in theory the IPv4 index and the IPv6 index can be the same + // where an interface is enabled for v4 and v6 + // IfIndex == 0 IPv4 not available on this interface + // Ipv6IfIndex == 0 IPv6 not available on this interface + if (((ptr->IfIndex != 0)&&(ptr->IfIndex == index)) || + ((ptr->Ipv6IfIndex !=0) && (ptr->Ipv6IfIndex == index))) { ret = (IP_ADAPTER_ADDRESSES *) malloc(sizeof(IP_ADAPTER_ADDRESSES)); memcpy(ret, ptr, sizeof(IP_ADAPTER_ADDRESSES)); } @@ -248,7 +252,7 @@ * set the index to the IPv6 index and add the * IPv6 addresses */ - nif->index = ptr->Ipv6IfIndex; + nif->ipv6Index = ptr->Ipv6IfIndex; c = getAddrsFromAdapter(ptr, &nif->addrs); nif->naddrs += c; break; @@ -293,6 +297,9 @@ strcpy (nif->name, newname); wcscpy ((PWCHAR)nif->displayName, ptr->FriendlyName); nif->dNameIsUnicode = TRUE; + + // the java.net.NetworkInterface abstraction only has index + // so the Ipv6IfIndex needs to map onto index nif->index = ptr->Ipv6IfIndex; nif->ipv6Index = ptr->Ipv6IfIndex; nif->hasIpv6Address = TRUE; @@ -449,7 +456,6 @@ (*env)->SetObjectField(env, netifObj, ni_nameID, name); (*env)->SetObjectField(env, netifObj, ni_displayNameID, displayName); (*env)->SetIntField(env, netifObj, ni_indexID, ifs->index); - /* * Get the IP addresses for this interface if necessary * Note that 0 is a valid number of addresses. diff -Nru openjdk-6-6b33-1.13.5/jdk/src/windows/native/sun/font/lcdglyph.c openjdk-6-6b34-1.13.6/jdk/src/windows/native/sun/font/lcdglyph.c --- openjdk-6-6b33-1.13.5/jdk/src/windows/native/sun/font/lcdglyph.c 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/windows/native/sun/font/lcdglyph.c 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/jdk/src/windows/native/sun/net/dns/ResolverConfigurationImpl.c openjdk-6-6b34-1.13.6/jdk/src/windows/native/sun/net/dns/ResolverConfigurationImpl.c --- openjdk-6-6b33-1.13.5/jdk/src/windows/native/sun/net/dns/ResolverConfigurationImpl.c 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/windows/native/sun/net/dns/ResolverConfigurationImpl.c 2015-01-20 02:20:42.000000000 +0000 @@ -159,7 +159,6 @@ DWORD dwLen; ULONG ulType; char result[MAX_STR_LEN]; - int index; int sts = STS_NO_CONFIG; ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, @@ -275,7 +274,7 @@ * the DHCP packet - see RFC 2132). */ if (ret == ERROR_SUCCESS) { - int pos = 0; + unsigned int pos = 0; while (pos < dwLen) { int code, len; diff -Nru openjdk-6-6b33-1.13.5/jdk/src/windows/native/sun/net/www/protocol/http/NTLMAuthSequence.c openjdk-6-6b34-1.13.6/jdk/src/windows/native/sun/net/www/protocol/http/NTLMAuthSequence.c --- openjdk-6-6b33-1.13.5/jdk/src/windows/native/sun/net/www/protocol/http/NTLMAuthSequence.c 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/windows/native/sun/net/www/protocol/http/NTLMAuthSequence.c 2015-01-20 02:20:42.000000000 +0000 @@ -38,7 +38,6 @@ #define SECURITY_WIN32 #include "sspi.h" -#include "issperr.h" /* diff -Nru openjdk-6-6b33-1.13.5/jdk/src/windows/native/sun/security/krb5/NativeCreds.c openjdk-6-6b34-1.13.6/jdk/src/windows/native/sun/security/krb5/NativeCreds.c --- openjdk-6-6b33-1.13.5/jdk/src/windows/native/sun/security/krb5/NativeCreds.c 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/src/windows/native/sun/security/krb5/NativeCreds.c 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -73,6 +73,7 @@ * Function prototypes for internal routines * */ +BOOL native_debug = 0; BOOL PackageConnectLookup(PHANDLE,PULONG); @@ -88,9 +89,9 @@ VOID InitUnicodeString( - PUNICODE_STRING DestinationString, + PUNICODE_STRING DestinationString, PCWSTR SourceString OPTIONAL - ); +); jobject BuildTicket(JNIEnv *env, PUCHAR encodedTicket, ULONG encodedTicketSize); @@ -108,215 +109,228 @@ */ JNIEXPORT jint JNICALL JNI_OnLoad( - JavaVM *jvm, - void *reserved) { + JavaVM *jvm, + void *reserved) { - jclass cls; - JNIEnv *env; + jclass cls; + JNIEnv *env; + jfieldID fldDEBUG; - if ((*jvm)->GetEnv(jvm, (void **)&env, JNI_VERSION_1_2)) { - return JNI_EVERSION; /* JNI version not supported */ - } + if ((*jvm)->GetEnv(jvm, (void **)&env, JNI_VERSION_1_2)) { + return JNI_EVERSION; /* JNI version not supported */ + } - cls = (*env)->FindClass(env,"sun/security/krb5/internal/Ticket"); + cls = (*env)->FindClass(env,"sun/security/krb5/internal/Krb5"); + if (cls == NULL) { + printf("LSA: Couldn't find Krb5\n"); + return JNI_ERR; + } + fldDEBUG = (*env)->GetStaticFieldID(env, cls, "DEBUG", "Z"); + if (fldDEBUG == NULL) { + printf("LSA: Krb5 has no DEBUG field\n"); + return JNI_ERR; + } + native_debug = (*env)->GetStaticBooleanField(env, cls, fldDEBUG); - if (cls == NULL) { - printf("Couldn't find Ticket\n"); - return JNI_ERR; - } - #ifdef DEBUG - printf("Found Ticket\n"); - #endif /* DEBUG */ + cls = (*env)->FindClass(env,"sun/security/krb5/internal/Ticket"); - ticketClass = (*env)->NewWeakGlobalRef(env,cls); - if (ticketClass == NULL) { - return JNI_ERR; - } - #ifdef DEBUG - printf("Made NewWeakGlobalRef\n"); - #endif /* DEBUG */ + if (cls == NULL) { + printf("LSA: Couldn't find Ticket\n"); + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Found Ticket\n"); + } - cls = (*env)->FindClass(env, "sun/security/krb5/PrincipalName"); + ticketClass = (*env)->NewWeakGlobalRef(env,cls); + if (ticketClass == NULL) { + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Made NewWeakGlobalRef\n"); + } - if (cls == NULL) { - printf("Couldn't find PrincipalName\n"); - return JNI_ERR; - } - #ifdef DEBUG - printf("Found PrincipalName\n"); - #endif /* DEBUG */ + cls = (*env)->FindClass(env, "sun/security/krb5/PrincipalName"); - principalNameClass = (*env)->NewWeakGlobalRef(env,cls); - if (principalNameClass == NULL) { - return JNI_ERR; - } - #ifdef DEBUG - printf("Made NewWeakGlobalRef\n"); - #endif /* DEBUG */ + if (cls == NULL) { + printf("LSA: Couldn't find PrincipalName\n"); + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Found PrincipalName\n"); + } - cls = (*env)->FindClass(env,"sun/security/util/DerValue"); + principalNameClass = (*env)->NewWeakGlobalRef(env,cls); + if (principalNameClass == NULL) { + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Made NewWeakGlobalRef\n"); + } - if (cls == NULL) { - printf("Couldn't find DerValue\n"); - return JNI_ERR; - } - #ifdef DEBUG - printf("Found DerValue\n"); - #endif /* DEBUG */ + cls = (*env)->FindClass(env,"sun/security/util/DerValue"); - derValueClass = (*env)->NewWeakGlobalRef(env,cls); - if (derValueClass == NULL) { - return JNI_ERR; - } - #ifdef DEBUG - printf("Made NewWeakGlobalRef\n"); - #endif /* DEBUG */ + if (cls == NULL) { + printf("LSA: Couldn't find DerValue\n"); + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Found DerValue\n"); + } - cls = (*env)->FindClass(env,"sun/security/krb5/EncryptionKey"); + derValueClass = (*env)->NewWeakGlobalRef(env,cls); + if (derValueClass == NULL) { + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Made NewWeakGlobalRef\n"); + } - if (cls == NULL) { - printf("Couldn't find EncryptionKey\n"); - return JNI_ERR; - } - #ifdef DEBUG - printf("Found EncryptionKey\n"); - #endif /* DEBUG */ + cls = (*env)->FindClass(env,"sun/security/krb5/EncryptionKey"); - encryptionKeyClass = (*env)->NewWeakGlobalRef(env,cls); - if (encryptionKeyClass == NULL) { - return JNI_ERR; - } - #ifdef DEBUG - printf("Made NewWeakGlobalRef\n"); - #endif /* DEBUG */ + if (cls == NULL) { + printf("LSA: Couldn't find EncryptionKey\n"); + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Found EncryptionKey\n"); + } - cls = (*env)->FindClass(env,"sun/security/krb5/internal/TicketFlags"); + encryptionKeyClass = (*env)->NewWeakGlobalRef(env,cls); + if (encryptionKeyClass == NULL) { + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Made NewWeakGlobalRef\n"); + } - if (cls == NULL) { - printf("Couldn't find TicketFlags\n"); - return JNI_ERR; - } - #ifdef DEBUG - printf("Found TicketFlags\n"); - #endif /* DEBUG */ + cls = (*env)->FindClass(env,"sun/security/krb5/internal/TicketFlags"); - ticketFlagsClass = (*env)->NewWeakGlobalRef(env,cls); - if (ticketFlagsClass == NULL) { - return JNI_ERR; - } - #ifdef DEBUG - printf("Made NewWeakGlobalRef\n"); - #endif /* DEBUG */ + if (cls == NULL) { + printf("LSA: Couldn't find TicketFlags\n"); + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Found TicketFlags\n"); + } - cls = (*env)->FindClass(env,"sun/security/krb5/internal/KerberosTime"); + ticketFlagsClass = (*env)->NewWeakGlobalRef(env,cls); + if (ticketFlagsClass == NULL) { + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Made NewWeakGlobalRef\n"); + } - if (cls == NULL) { - printf("Couldn't find KerberosTime\n"); - return JNI_ERR; - } - #ifdef DEBUG - printf("Found KerberosTime\n"); - #endif /* DEBUG */ + cls = (*env)->FindClass(env,"sun/security/krb5/internal/KerberosTime"); - kerberosTimeClass = (*env)->NewWeakGlobalRef(env,cls); - if (kerberosTimeClass == NULL) { - return JNI_ERR; - } - #ifdef DEBUG - printf("Made NewWeakGlobalRef\n"); - #endif /* DEBUG */ + if (cls == NULL) { + printf("LSA: Couldn't find KerberosTime\n"); + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Found KerberosTime\n"); + } - cls = (*env)->FindClass(env,"java/lang/String"); + kerberosTimeClass = (*env)->NewWeakGlobalRef(env,cls); + if (kerberosTimeClass == NULL) { + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Made NewWeakGlobalRef\n"); + } - if (cls == NULL) { - printf("Couldn't find String\n"); - return JNI_ERR; - } - #ifdef DEBUG - printf("Found String\n"); - #endif /* DEBUG */ + cls = (*env)->FindClass(env,"java/lang/String"); - javaLangStringClass = (*env)->NewWeakGlobalRef(env,cls); - if (javaLangStringClass == NULL) { - return JNI_ERR; - } - #ifdef DEBUG - printf("Made NewWeakGlobalRef\n"); - #endif /* DEBUG */ + if (cls == NULL) { + printf("LSA: Couldn't find String\n"); + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Found String\n"); + } - derValueConstructor = (*env)->GetMethodID(env, derValueClass, - "", "([B)V"); - if (derValueConstructor == 0) { - printf("Couldn't find DerValue constructor\n"); - return JNI_ERR; - } - #ifdef DEBUG - printf("Found DerValue constructor\n"); - #endif /* DEBUG */ + javaLangStringClass = (*env)->NewWeakGlobalRef(env,cls); + if (javaLangStringClass == NULL) { + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Made NewWeakGlobalRef\n"); + } - ticketConstructor = (*env)->GetMethodID(env, ticketClass, - "", "(Lsun/security/util/DerValue;)V"); - if (ticketConstructor == 0) { - printf("Couldn't find Ticket constructor\n"); - return JNI_ERR; - } - #ifdef DEBUG - printf("Found Ticket constructor\n"); - #endif /* DEBUG */ + derValueConstructor = (*env)->GetMethodID(env, derValueClass, + "", "([B)V"); + if (derValueConstructor == 0) { + printf("LSA: Couldn't find DerValue constructor\n"); + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Found DerValue constructor\n"); + } - principalNameConstructor = (*env)->GetMethodID(env, principalNameClass, - "", "([Ljava/lang/String;)V"); - if (principalNameConstructor == 0) { - printf("Couldn't find PrincipalName constructor\n"); - return JNI_ERR; - } - #ifdef DEBUG - printf("Found PrincipalName constructor\n"); - #endif /* DEBUG */ + ticketConstructor = (*env)->GetMethodID(env, ticketClass, + "", "(Lsun/security/util/DerValue;)V"); + if (ticketConstructor == 0) { + printf("LSA: Couldn't find Ticket constructor\n"); + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Found Ticket constructor\n"); + } - encryptionKeyConstructor = (*env)->GetMethodID(env, encryptionKeyClass, - "", "(I[B)V"); - if (encryptionKeyConstructor == 0) { - printf("Couldn't find EncryptionKey constructor\n"); - return JNI_ERR; - } - #ifdef DEBUG - printf("Found EncryptionKey constructor\n"); - #endif /* DEBUG */ + principalNameConstructor = (*env)->GetMethodID(env, principalNameClass, + "", "([Ljava/lang/String;)V"); + if (principalNameConstructor == 0) { + printf("LSA: Couldn't find PrincipalName constructor\n"); + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Found PrincipalName constructor\n"); + } - ticketFlagsConstructor = (*env)->GetMethodID(env, ticketFlagsClass, - "", "(I[B)V"); - if (ticketFlagsConstructor == 0) { - printf("Couldn't find TicketFlags constructor\n"); - return JNI_ERR; - } - #ifdef DEBUG - printf("Found TicketFlags constructor\n"); - #endif /* DEBUG */ + encryptionKeyConstructor = (*env)->GetMethodID(env, encryptionKeyClass, + "", "(I[B)V"); + if (encryptionKeyConstructor == 0) { + printf("LSA: Couldn't find EncryptionKey constructor\n"); + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Found EncryptionKey constructor\n"); + } - kerberosTimeConstructor = (*env)->GetMethodID(env, kerberosTimeClass, - "", "(Ljava/lang/String;)V"); - if (kerberosTimeConstructor == 0) { - printf("Couldn't find KerberosTime constructor\n"); - return JNI_ERR; - } - #ifdef DEBUG - printf("Found KerberosTime constructor\n"); - #endif /* DEBUG */ + ticketFlagsConstructor = (*env)->GetMethodID(env, ticketFlagsClass, + "", "(I[B)V"); + if (ticketFlagsConstructor == 0) { + printf("LSA: Couldn't find TicketFlags constructor\n"); + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Found TicketFlags constructor\n"); + } - // load the setRealm method in PrincipalName - setRealmMethod = (*env)->GetMethodID(env, principalNameClass, - "setRealm", "(Ljava/lang/String;)V"); - if (setRealmMethod == 0) { - printf("Couldn't find setRealm in PrincipalName\n"); - return JNI_ERR; - } + kerberosTimeConstructor = (*env)->GetMethodID(env, kerberosTimeClass, + "", "(Ljava/lang/String;)V"); + if (kerberosTimeConstructor == 0) { + printf("LSA: Couldn't find KerberosTime constructor\n"); + return JNI_ERR; + } + if (native_debug) { + printf("LSA: Found KerberosTime constructor\n"); + } - #ifdef DEBUG - printf("Finished OnLoad processing\n"); - #endif /* DEBUG */ + // load the setRealm method in PrincipalName + setRealmMethod = (*env)->GetMethodID(env, principalNameClass, + "setRealm", "(Ljava/lang/String;)V"); + if (setRealmMethod == 0) { + printf("LSA: Couldn't find setRealm in PrincipalName\n"); + return JNI_ERR; + } - return JNI_VERSION_1_2; + if (native_debug) { + printf("LSA: Finished OnLoad processing\n"); + } + + return JNI_VERSION_1_2; } /* @@ -325,38 +339,38 @@ */ JNIEXPORT void JNICALL JNI_OnUnload( - JavaVM *jvm, - void *reserved) { + JavaVM *jvm, + void *reserved) { - JNIEnv *env; + JNIEnv *env; - if ((*jvm)->GetEnv(jvm, (void **)&env, JNI_VERSION_1_2)) { - return; /* Nothing else we can do */ - } + if ((*jvm)->GetEnv(jvm, (void **)&env, JNI_VERSION_1_2)) { + return; /* Nothing else we can do */ + } - if (ticketClass != NULL) { - (*env)->DeleteWeakGlobalRef(env,ticketClass); - } - if (derValueClass != NULL) { - (*env)->DeleteWeakGlobalRef(env,derValueClass); - } - if (principalNameClass != NULL) { - (*env)->DeleteWeakGlobalRef(env,principalNameClass); - } - if (encryptionKeyClass != NULL) { - (*env)->DeleteWeakGlobalRef(env,encryptionKeyClass); - } - if (ticketFlagsClass != NULL) { - (*env)->DeleteWeakGlobalRef(env,ticketFlagsClass); - } - if (kerberosTimeClass != NULL) { - (*env)->DeleteWeakGlobalRef(env,kerberosTimeClass); - } - if (javaLangStringClass != NULL) { - (*env)->DeleteWeakGlobalRef(env,javaLangStringClass); - } + if (ticketClass != NULL) { + (*env)->DeleteWeakGlobalRef(env,ticketClass); + } + if (derValueClass != NULL) { + (*env)->DeleteWeakGlobalRef(env,derValueClass); + } + if (principalNameClass != NULL) { + (*env)->DeleteWeakGlobalRef(env,principalNameClass); + } + if (encryptionKeyClass != NULL) { + (*env)->DeleteWeakGlobalRef(env,encryptionKeyClass); + } + if (ticketFlagsClass != NULL) { + (*env)->DeleteWeakGlobalRef(env,ticketFlagsClass); + } + if (kerberosTimeClass != NULL) { + (*env)->DeleteWeakGlobalRef(env,kerberosTimeClass); + } + if (javaLangStringClass != NULL) { + (*env)->DeleteWeakGlobalRef(env,javaLangStringClass); + } - return; + return; } /* @@ -365,40 +379,53 @@ * Signature: ()Lsun/security/krb5/Credentials; */ JNIEXPORT jobject JNICALL Java_sun_security_krb5_Credentials_acquireDefaultNativeCreds( - JNIEnv *env, - jclass krbcredsClass) { + JNIEnv *env, + jclass krbcredsClass, + jintArray jetypes) { + + KERB_QUERY_TKT_CACHE_REQUEST CacheRequest; + PKERB_RETRIEVE_TKT_RESPONSE TktCacheResponse = NULL; + PKERB_RETRIEVE_TKT_REQUEST pTicketRequest = NULL; + PKERB_RETRIEVE_TKT_RESPONSE pTicketResponse = NULL; + NTSTATUS Status, SubStatus; + ULONG requestSize = 0; + ULONG responseSize = 0; + ULONG rspSize = 0; + HANDLE LogonHandle = NULL; + ULONG PackageId; + jobject ticket, clientPrincipal, targetPrincipal, encryptionKey; + jobject ticketFlags, startTime, endTime, krbCreds = NULL; + jobject authTime, renewTillTime, hostAddresses = NULL; + KERB_EXTERNAL_TICKET *msticket; + int found = 0; + FILETIME Now, EndTime, LocalEndTime; - KERB_QUERY_TKT_CACHE_REQUEST CacheRequest; - PKERB_RETRIEVE_TKT_RESPONSE TktCacheResponse = NULL; - PKERB_RETRIEVE_TKT_REQUEST pTicketRequest = NULL; - PKERB_RETRIEVE_TKT_RESPONSE pTicketResponse = NULL; - NTSTATUS Status, SubStatus; - ULONG requestSize = 0; - ULONG responseSize = 0; - ULONG rspSize = 0; - HANDLE LogonHandle = NULL; - ULONG PackageId; - jobject ticket, clientPrincipal, targetPrincipal, encryptionKey; - jobject ticketFlags, startTime, endTime, krbCreds = NULL; - jobject authTime, renewTillTime, hostAddresses = NULL; - KERB_EXTERNAL_TICKET *msticket; - int ignore_cache = 0; - FILETIME Now, EndTime, LocalEndTime; + int i, netypes; + jint *etypes = NULL; - while (TRUE) { + while (TRUE) { if (krbcredsConstructor == 0) { - krbcredsConstructor = (*env)->GetMethodID(env, krbcredsClass, "", - "(Lsun/security/krb5/internal/Ticket;Lsun/security/krb5/PrincipalName;Lsun/security/krb5/PrincipalName;Lsun/security/krb5/EncryptionKey;Lsun/security/krb5/internal/TicketFlags;Lsun/security/krb5/internal/KerberosTime;Lsun/security/krb5/internal/KerberosTime;Lsun/security/krb5/internal/KerberosTime;Lsun/security/krb5/internal/KerberosTime;Lsun/security/krb5/internal/HostAddresses;)V"); + krbcredsConstructor = (*env)->GetMethodID(env, krbcredsClass, "", + "(Lsun/security/krb5/internal/Ticket;" + "Lsun/security/krb5/PrincipalName;" + "Lsun/security/krb5/PrincipalName;" + "Lsun/security/krb5/EncryptionKey;" + "Lsun/security/krb5/internal/TicketFlags;" + "Lsun/security/krb5/internal/KerberosTime;" + "Lsun/security/krb5/internal/KerberosTime;" + "Lsun/security/krb5/internal/KerberosTime;" + "Lsun/security/krb5/internal/KerberosTime;" + "Lsun/security/krb5/internal/HostAddresses;)V"); if (krbcredsConstructor == 0) { - printf("Couldn't find sun.security.krb5.Credentials constructor\n"); + printf("LSA: Couldn't find sun.security.krb5.Credentials constructor\n"); break; } } - #ifdef DEBUG - printf("Found KrbCreds constructor\n"); - #endif + if (native_debug) { + printf("LSA: Found KrbCreds constructor\n"); + } // // Get the logon handle and package ID from the @@ -407,9 +434,9 @@ if (!PackageConnectLookup(&LogonHandle, &PackageId)) break; - #ifdef DEBUG - printf("Got handle to Kerberos package\n"); - #endif /* DEBUG */ + if (native_debug) { + printf("LSA: Got handle to Kerberos package\n"); + } // Get the MS TGT from cache CacheRequest.MessageType = KerbRetrieveTicketMessage; @@ -426,9 +453,9 @@ &SubStatus ); - #ifdef DEBUG - printf("Response size is %d\n", rspSize); - #endif + if (native_debug) { + printf("LSA: Response size is %d\n", rspSize); + } if (!LSA_SUCCESS(Status) || !LSA_SUCCESS(SubStatus)) { if (!LSA_SUCCESS(Status)) { @@ -442,34 +469,36 @@ // got the native MS TGT msticket = &(TktCacheResponse->Ticket); + netypes = (*env)->GetArrayLength(env, jetypes); + etypes = (jint *) (*env)->GetIntArrayElements(env, jetypes, NULL); + // check TGT validity - switch (msticket->SessionKey.KeyType) { - case KERB_ETYPE_DES_CBC_CRC: - case KERB_ETYPE_DES_CBC_MD5: - case KERB_ETYPE_NULL: - case KERB_ETYPE_RC4_HMAC_NT: - GetSystemTimeAsFileTime(&Now); - EndTime.dwLowDateTime = msticket->EndTime.LowPart; - EndTime.dwHighDateTime = msticket->EndTime.HighPart; - FileTimeToLocalFileTime(&EndTime, &LocalEndTime); - if (CompareFileTime(&Now, &LocalEndTime) >= 0) { - ignore_cache = 1; - } - if (msticket->TicketFlags & KERB_TICKET_FLAGS_invalid) { - ignore_cache = 1; + if (native_debug) { + printf("LSA: TICKET SessionKey KeyType is %d\n", msticket->SessionKey.KeyType); + } + + if ((msticket->TicketFlags & KERB_TICKET_FLAGS_invalid) == 0) { + GetSystemTimeAsFileTime(&Now); + EndTime.dwLowDateTime = msticket->EndTime.LowPart; + EndTime.dwHighDateTime = msticket->EndTime.HighPart; + FileTimeToLocalFileTime(&EndTime, &LocalEndTime); + if (CompareFileTime(&Now, &LocalEndTime) < 0) { + for (i=0; iSessionKey.KeyType) { + found = 1; + if (native_debug) { + printf("LSA: Valid etype found: %d\n", etypes[i]); + } + break; + } } - break; - case KERB_ETYPE_RC4_MD4: - default: - // not supported - ignore_cache = 1; - break; + } } - if (ignore_cache) { - #ifdef DEBUG - printf("MS TGT in cache is invalid/not supported; request new ticket\n"); - #endif /* DEBUG */ + if (!found) { + if (native_debug) { + printf("LSA: MS TGT in cache is invalid/not supported; request new ticket\n"); + } // use domain to request Ticket Status = ConstructTicketRequest(msticket->TargetDomainName, @@ -480,118 +509,135 @@ } pTicketRequest->MessageType = KerbRetrieveEncodedTicketMessage; - pTicketRequest->EncryptionType = KERB_ETYPE_DES_CBC_MD5; pTicketRequest->CacheOptions = KERB_RETRIEVE_TICKET_DONT_USE_CACHE; - Status = LsaCallAuthenticationPackage( - LogonHandle, - PackageId, - pTicketRequest, - requestSize, - &pTicketResponse, - &responseSize, - &SubStatus - ); + for (i=0; iEncryptionType = etypes[i]; + Status = LsaCallAuthenticationPackage( + LogonHandle, + PackageId, + pTicketRequest, + requestSize, + &pTicketResponse, + &responseSize, + &SubStatus + ); + + if (native_debug) { + printf("LSA: Response size is %d for %d\n", responseSize, etypes[i]); + } - #ifdef DEBUG - printf("Response size is %d\n", responseSize); - #endif /* DEBUG */ - - if (!LSA_SUCCESS(Status) || !LSA_SUCCESS(SubStatus)) { - if (!LSA_SUCCESS(Status)) { - ShowNTError("LsaCallAuthenticationPackage", Status); - } else { - ShowNTError("Protocol status", SubStatus); + if (!LSA_SUCCESS(Status) || !LSA_SUCCESS(SubStatus)) { + if (!LSA_SUCCESS(Status)) { + ShowNTError("LsaCallAuthenticationPackage", Status); + } else { + ShowNTError("Protocol status", SubStatus); + } + continue; } + + // got the native MS Kerberos TGT + msticket = &(pTicketResponse->Ticket); + if (msticket->SessionKey.KeyType != etypes[i]) { + if (native_debug) { + printf("LSA: Response etype is %d for %d. Retry.\n", msticket->SessionKey.KeyType, etypes[i]); + } + continue; + } + found = 1; break; } - - // got the native MS Kerberos TGT - msticket = &(pTicketResponse->Ticket); + } + if (etypes != NULL) { + (*env)->ReleaseIntArrayElements(env, jetypes, etypes, 0); } -/* - -typedef struct _KERB_RETRIEVE_TKT_RESPONSE { - KERB_EXTERNAL_TICKET Ticket; -} KERB_RETRIEVE_TKT_RESPONSE, *PKERB_RETRIEVE_TKT_RESPONSE; - -typedef struct _KERB_EXTERNAL_TICKET { - PKERB_EXTERNAL_NAME ServiceName; - PKERB_EXTERNAL_NAME TargetName; - PKERB_EXTERNAL_NAME ClientName; - UNICODE_STRING DomainName; - UNICODE_STRING TargetDomainName; - UNICODE_STRING AltTargetDomainName; - KERB_CRYPTO_KEY SessionKey; - ULONG TicketFlags; - ULONG Flags; - LARGE_INTEGER KeyExpirationTime; - LARGE_INTEGER StartTime; - LARGE_INTEGER EndTime; - LARGE_INTEGER RenewUntil; - LARGE_INTEGER TimeSkew; - ULONG EncodedTicketSize; - PUCHAR EncodedTicket; <========== Here's the good stuff -} KERB_EXTERNAL_TICKET, *PKERB_EXTERNAL_TICKET; - -typedef struct _KERB_EXTERNAL_NAME { - SHORT NameType; - USHORT NameCount; - UNICODE_STRING Names[ANYSIZE_ARRAY]; -} KERB_EXTERNAL_NAME, *PKERB_EXTERNAL_NAME; - -typedef struct _LSA_UNICODE_STRING { - USHORT Length; - USHORT MaximumLength; - PWSTR Buffer; -} LSA_UNICODE_STRING, *PLSA_UNICODE_STRING; + /* -typedef LSA_UNICODE_STRING UNICODE_STRING, *PUNICODE_STRING; + typedef struct _KERB_RETRIEVE_TKT_RESPONSE { + KERB_EXTERNAL_TICKET Ticket; + } KERB_RETRIEVE_TKT_RESPONSE, *PKERB_RETRIEVE_TKT_RESPONSE; + + typedef struct _KERB_EXTERNAL_TICKET { + PKERB_EXTERNAL_NAME ServiceName; + PKERB_EXTERNAL_NAME TargetName; + PKERB_EXTERNAL_NAME ClientName; + UNICODE_STRING DomainName; + UNICODE_STRING TargetDomainName; + UNICODE_STRING AltTargetDomainName; + KERB_CRYPTO_KEY SessionKey; + ULONG TicketFlags; + ULONG Flags; + LARGE_INTEGER KeyExpirationTime; + LARGE_INTEGER StartTime; + LARGE_INTEGER EndTime; + LARGE_INTEGER RenewUntil; + LARGE_INTEGER TimeSkew; + ULONG EncodedTicketSize; + PUCHAR EncodedTicket; <========== Here's the good stuff + } KERB_EXTERNAL_TICKET, *PKERB_EXTERNAL_TICKET; + + typedef struct _KERB_EXTERNAL_NAME { + SHORT NameType; + USHORT NameCount; + UNICODE_STRING Names[ANYSIZE_ARRAY]; + } KERB_EXTERNAL_NAME, *PKERB_EXTERNAL_NAME; + + typedef struct _LSA_UNICODE_STRING { + USHORT Length; + USHORT MaximumLength; + PWSTR Buffer; + } LSA_UNICODE_STRING, *PLSA_UNICODE_STRING; + + typedef LSA_UNICODE_STRING UNICODE_STRING, *PUNICODE_STRING; + + typedef struct KERB_CRYPTO_KEY { + LONG KeyType; + ULONG Length; + PUCHAR Value; + } KERB_CRYPTO_KEY, *PKERB_CRYPTO_KEY; -typedef struct KERB_CRYPTO_KEY { - LONG KeyType; - ULONG Length; - PUCHAR Value; -} KERB_CRYPTO_KEY, *PKERB_CRYPTO_KEY; + if (!found) { + break; + } -*/ + */ // Build a com.sun.security.krb5.Ticket ticket = BuildTicket(env, msticket->EncodedTicket, msticket->EncodedTicketSize); if (ticket == NULL) { - break; + break; } // OK, have a Ticket, now need to get the client name clientPrincipal = BuildPrincipal(env, msticket->ClientName, msticket->TargetDomainName); // mdu if (clientPrincipal == NULL) { - break; + break; } // and the "name" of tgt targetPrincipal = BuildPrincipal(env, msticket->ServiceName, msticket->DomainName); if (targetPrincipal == NULL) { - break; + break; } // Get the encryption key encryptionKey = BuildEncryptionKey(env, &(msticket->SessionKey)); if (encryptionKey == NULL) { - break; + break; } // and the ticket flags ticketFlags = BuildTicketFlags(env, &(msticket->TicketFlags)); if (ticketFlags == NULL) { - break; + break; } // Get the start time startTime = BuildKerberosTime(env, &(msticket->StartTime)); if (startTime == NULL) { - break; + break; } /* @@ -604,13 +650,13 @@ // and the end time endTime = BuildKerberosTime(env, &(msticket->EndTime)); if (endTime == NULL) { - break; + break; } // Get the renew till time renewTillTime = BuildKerberosTime(env, &(msticket->RenewUntil)); if (renewTillTime == NULL) { - break; + break; } // and now go build a KrbCreds object @@ -630,87 +676,87 @@ hostAddresses); break; - } // end of WHILE + } // end of WHILE. This WHILE will never loop. - // clean up resources - if (TktCacheResponse != NULL) { - LsaFreeReturnBuffer(TktCacheResponse); - } - if (pTicketRequest) { - LocalFree(pTicketRequest); - } - if (pTicketResponse != NULL) { - LsaFreeReturnBuffer(pTicketResponse); - } + // clean up resources + if (TktCacheResponse != NULL) { + LsaFreeReturnBuffer(TktCacheResponse); + } + if (pTicketRequest) { + LocalFree(pTicketRequest); + } + if (pTicketResponse != NULL) { + LsaFreeReturnBuffer(pTicketResponse); + } - return krbCreds; + return krbCreds; } static NTSTATUS ConstructTicketRequest(UNICODE_STRING DomainName, PKERB_RETRIEVE_TKT_REQUEST *outRequest, ULONG *outSize) { - NTSTATUS Status; - UNICODE_STRING TargetPrefix; - USHORT TargetSize; - ULONG RequestSize; - ULONG Length; - PKERB_RETRIEVE_TKT_REQUEST pTicketRequest = NULL; + NTSTATUS Status; + UNICODE_STRING TargetPrefix; + USHORT TargetSize; + ULONG RequestSize; + ULONG Length; + PKERB_RETRIEVE_TKT_REQUEST pTicketRequest = NULL; - *outRequest = NULL; - *outSize = 0; + *outRequest = NULL; + *outSize = 0; - // - // Set up the "krbtgt/" target prefix into a UNICODE_STRING so we - // can easily concatenate it later. - // + // + // Set up the "krbtgt/" target prefix into a UNICODE_STRING so we + // can easily concatenate it later. + // - TargetPrefix.Buffer = L"krbtgt/"; - Length = (ULONG)wcslen(TargetPrefix.Buffer) * sizeof(WCHAR); - TargetPrefix.Length = (USHORT)Length; - TargetPrefix.MaximumLength = TargetPrefix.Length; + TargetPrefix.Buffer = L"krbtgt/"; + Length = (ULONG)wcslen(TargetPrefix.Buffer) * sizeof(WCHAR); + TargetPrefix.Length = (USHORT)Length; + TargetPrefix.MaximumLength = TargetPrefix.Length; - // - // We will need to concatenate the "krbtgt/" prefix and the - // Logon Session's DnsDomainName into our request's target name. - // - // Therefore, first compute the necessary buffer size for that. - // - // Note that we might theoretically have integer overflow. - // + // + // We will need to concatenate the "krbtgt/" prefix and the + // Logon Session's DnsDomainName into our request's target name. + // + // Therefore, first compute the necessary buffer size for that. + // + // Note that we might theoretically have integer overflow. + // - TargetSize = TargetPrefix.Length + DomainName.Length; + TargetSize = TargetPrefix.Length + DomainName.Length; - // - // The ticket request buffer needs to be a single buffer. That buffer - // needs to include the buffer for the target name. - // + // + // The ticket request buffer needs to be a single buffer. That buffer + // needs to include the buffer for the target name. + // - RequestSize = sizeof (*pTicketRequest) + TargetSize; + RequestSize = sizeof (*pTicketRequest) + TargetSize; - // - // Allocate the request buffer and make sure it's zero-filled. - // + // + // Allocate the request buffer and make sure it's zero-filled. + // - pTicketRequest = (PKERB_RETRIEVE_TKT_REQUEST) - LocalAlloc(LMEM_ZEROINIT, RequestSize); - if (!pTicketRequest) - return GetLastError(); + pTicketRequest = (PKERB_RETRIEVE_TKT_REQUEST) + LocalAlloc(LMEM_ZEROINIT, RequestSize); + if (!pTicketRequest) + return GetLastError(); - // - // Concatenate the target prefix with the previous reponse's - // target domain. - // + // + // Concatenate the target prefix with the previous reponse's + // target domain. + // - pTicketRequest->TargetName.Length = 0; - pTicketRequest->TargetName.MaximumLength = TargetSize; - pTicketRequest->TargetName.Buffer = (PWSTR) (pTicketRequest + 1); - Status = ConcatenateUnicodeStrings(&(pTicketRequest->TargetName), - TargetPrefix, - DomainName); - *outRequest = pTicketRequest; - *outSize = RequestSize; - return Status; + pTicketRequest->TargetName.Length = 0; + pTicketRequest->TargetName.MaximumLength = TargetSize; + pTicketRequest->TargetName.Buffer = (PWSTR) (pTicketRequest + 1); + Status = ConcatenateUnicodeStrings(&(pTicketRequest->TargetName), + TargetPrefix, + DomainName); + *outRequest = pTicketRequest; + *outSize = RequestSize; + return Status; } DWORD @@ -720,22 +766,22 @@ UNICODE_STRING Source2 ) { - // - // The buffers for Source1 and Source2 cannot overlap pTarget's - // buffer. Source1.Length + Source2.Length must be <= 0xFFFF, - // otherwise we overflow... - // + // + // The buffers for Source1 and Source2 cannot overlap pTarget's + // buffer. Source1.Length + Source2.Length must be <= 0xFFFF, + // otherwise we overflow... + // - USHORT TotalSize = Source1.Length + Source2.Length; - PBYTE buffer = (PBYTE) pTarget->Buffer; + USHORT TotalSize = Source1.Length + Source2.Length; + PBYTE buffer = (PBYTE) pTarget->Buffer; - if (TotalSize > pTarget->MaximumLength) - return ERROR_INSUFFICIENT_BUFFER; + if (TotalSize > pTarget->MaximumLength) + return ERROR_INSUFFICIENT_BUFFER; - pTarget->Length = TotalSize; - memcpy(buffer, Source1.Buffer, Source1.Length); - memcpy(buffer + Source1.Length, Source2.Buffer, Source2.Length); - return ERROR_SUCCESS; + pTarget->Length = TotalSize; + memcpy(buffer, Source1.Buffer, Source1.Length); + memcpy(buffer + Source1.Length, Source2.Buffer, Source2.Length); + return ERROR_SUCCESS; } BOOL @@ -783,27 +829,31 @@ DWORD dwError ) { - #define MAX_MSG_SIZE 256 + #define MAX_MSG_SIZE 256 - static WCHAR szMsgBuf[MAX_MSG_SIZE]; - DWORD dwRes; + static WCHAR szMsgBuf[MAX_MSG_SIZE]; + DWORD dwRes; - printf("Error calling function %s: %lu\n", szAPI, dwError); + if (native_debug) { + printf("LSA: Error calling function %s: %lu\n", szAPI, dwError); + } - dwRes = FormatMessage ( - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - dwError, - 0, - szMsgBuf, - MAX_MSG_SIZE, - NULL); - if (0 == dwRes) { - printf("FormatMessage failed with %d\n", GetLastError()); - // ExitProcess(EXIT_FAILURE); - } else { - printf("%S",szMsgBuf); - } + dwRes = FormatMessage ( + FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + dwError, + 0, + szMsgBuf, + MAX_MSG_SIZE, + NULL); + if (native_debug) { + if (0 == dwRes) { + printf("LSA: FormatMessage failed with %d\n", GetLastError()); + // ExitProcess(EXIT_FAILURE); + } else { + printf("LSA: %S",szMsgBuf); + } + } } VOID @@ -831,189 +881,202 @@ Length = (ULONG)wcslen( SourceString ) * sizeof( WCHAR ); DestinationString->Length = (USHORT)Length; DestinationString->MaximumLength = (USHORT)(Length + sizeof(UNICODE_NULL)); - } + } else { DestinationString->MaximumLength = 0; DestinationString->Length = 0; - } + } } jobject BuildTicket(JNIEnv *env, PUCHAR encodedTicket, ULONG encodedTicketSize) { - /* To build a Ticket, we first need to build a DerValue out of the EncodedTicket. - * But before we can do that, we need to make a byte array out of the ET. - */ - - jobject derValue, ticket; - jbyteArray ary; - - ary = (*env)->NewByteArray(env,encodedTicketSize); - if ((*env)->ExceptionOccurred(env)) { - return (jobject) NULL; - } - - (*env)->SetByteArrayRegion(env, ary, (jsize) 0, encodedTicketSize, - (jbyte *)encodedTicket); - if ((*env)->ExceptionOccurred(env)) { - (*env)->DeleteLocalRef(env, ary); - return (jobject) NULL; - } + /* To build a Ticket, we first need to build a DerValue out of the EncodedTicket. + * But before we can do that, we need to make a byte array out of the ET. + */ + + jobject derValue, ticket; + jbyteArray ary; + + ary = (*env)->NewByteArray(env,encodedTicketSize); + if ((*env)->ExceptionOccurred(env)) { + return (jobject) NULL; + } - derValue = (*env)->NewObject(env, derValueClass, derValueConstructor, ary); - if ((*env)->ExceptionOccurred(env)) { - (*env)->DeleteLocalRef(env, ary); - return (jobject) NULL; - } + (*env)->SetByteArrayRegion(env, ary, (jsize) 0, encodedTicketSize, + (jbyte *)encodedTicket); + if ((*env)->ExceptionOccurred(env)) { + (*env)->DeleteLocalRef(env, ary); + return (jobject) NULL; + } + derValue = (*env)->NewObject(env, derValueClass, derValueConstructor, ary); + if ((*env)->ExceptionOccurred(env)) { (*env)->DeleteLocalRef(env, ary); - ticket = (*env)->NewObject(env, ticketClass, ticketConstructor, derValue); - if ((*env)->ExceptionOccurred(env)) { - (*env)->DeleteLocalRef(env, derValue); - return (jobject) NULL; - } + return (jobject) NULL; + } + + (*env)->DeleteLocalRef(env, ary); + ticket = (*env)->NewObject(env, ticketClass, ticketConstructor, derValue); + if ((*env)->ExceptionOccurred(env)) { (*env)->DeleteLocalRef(env, derValue); - return ticket; + return (jobject) NULL; + } + (*env)->DeleteLocalRef(env, derValue); + return ticket; } // mdu jobject BuildPrincipal(JNIEnv *env, PKERB_EXTERNAL_NAME principalName, UNICODE_STRING domainName) { - /* - * To build the Principal, we need to get the names out of - * this goofy MS structure - */ - jobject principal = NULL; - jobject realmStr = NULL; - jobjectArray stringArray; - jstring tempString; - int nameCount,i; - PUNICODE_STRING scanner; - WCHAR *realm; - ULONG realmLen; - - realm = (WCHAR *) LocalAlloc(LMEM_ZEROINIT, - ((domainName.Length)*sizeof(WCHAR) + sizeof(UNICODE_NULL))); - wcsncpy(realm, domainName.Buffer, domainName.Length/sizeof(WCHAR)); - - #ifdef DEBUG - printf("Principal domain is %S\n", realm); - printf("Name type is %x\n", principalName->NameType); - printf("Name count is %x\n", principalName->NameCount); - #endif - - nameCount = principalName->NameCount; - stringArray = (*env)->NewObjectArray(env, nameCount, - javaLangStringClass, NULL); - if (stringArray == NULL) { - printf("Can't allocate String array for Principal\n"); - LocalFree(realm); - return principal; - } - - for (i=0; iNames[i]); - - // OK, got a Char array, so construct a String - tempString = (*env)->NewString(env, (const jchar*)scanner->Buffer, - scanner->Length/sizeof(WCHAR)); - // Set the String into the StringArray - (*env)->SetObjectArrayElement(env, stringArray, i, tempString); - - // Do I have to worry about storage reclamation here? - } - principal = (*env)->NewObject(env, principalNameClass, - principalNameConstructor, stringArray); - - // now set the realm in the principal - realmLen = (ULONG)wcslen((PWCHAR)realm); - realmStr = (*env)->NewString(env, (PWCHAR)realm, (USHORT)realmLen); - (*env)->CallVoidMethod(env, principal, setRealmMethod, realmStr); + /* + * To build the Principal, we need to get the names out of + * this goofy MS structure + */ + jobject principal = NULL; + jobject realmStr = NULL; + jobjectArray stringArray; + jstring tempString; + int nameCount,i; + PUNICODE_STRING scanner; + WCHAR *realm; + ULONG realmLen; + + realm = (WCHAR *) LocalAlloc(LMEM_ZEROINIT, + ((domainName.Length)*sizeof(WCHAR) + sizeof(UNICODE_NULL))); + wcsncpy(realm, domainName.Buffer, domainName.Length/sizeof(WCHAR)); + + if (native_debug) { + printf("LSA: Principal domain is %S\n", realm); + printf("LSA: Name type is %x\n", principalName->NameType); + printf("LSA: Name count is %x\n", principalName->NameCount); + } - // free local resources + nameCount = principalName->NameCount; + stringArray = (*env)->NewObjectArray(env, nameCount, + javaLangStringClass, NULL); + if (stringArray == NULL) { + if (native_debug) { + printf("LSA: Can't allocate String array for Principal\n"); + } LocalFree(realm); - return principal; + } + + for (i=0; iNames[i]); + + // OK, got a Char array, so construct a String + tempString = (*env)->NewString(env, (const jchar*)scanner->Buffer, + scanner->Length/sizeof(WCHAR)); + // Set the String into the StringArray + (*env)->SetObjectArrayElement(env, stringArray, i, tempString); + + // Do I have to worry about storage reclamation here? + } + principal = (*env)->NewObject(env, principalNameClass, + principalNameConstructor, stringArray); + + // now set the realm in the principal + realmLen = (ULONG)wcslen((PWCHAR)realm); + realmStr = (*env)->NewString(env, (PWCHAR)realm, (USHORT)realmLen); + (*env)->CallVoidMethod(env, principal, setRealmMethod, realmStr); + + // free local resources + LocalFree(realm); + + return principal; } jobject BuildEncryptionKey(JNIEnv *env, PKERB_CRYPTO_KEY cryptoKey) { - // First, need to build a byte array - jbyteArray ary; - jobject encryptionKey = NULL; - - ary = (*env)->NewByteArray(env,cryptoKey->Length); - (*env)->SetByteArrayRegion(env, ary, (jsize) 0, cryptoKey->Length, - (jbyte *)cryptoKey->Value); - if ((*env)->ExceptionOccurred(env)) { - (*env)->DeleteLocalRef(env, ary); - } else { - encryptionKey = (*env)->NewObject(env, encryptionKeyClass, - encryptionKeyConstructor, cryptoKey->KeyType, ary); + // First, need to build a byte array + jbyteArray ary; + jobject encryptionKey = NULL; + unsigned int i; + + for (i=0; iLength; i++) { + if (cryptoKey->Value[i]) break; + } + if (i == cryptoKey->Length) { + if (native_debug) { + printf("LSA: Session key all zero. Stop.\n"); } + return NULL; + } - return encryptionKey; + ary = (*env)->NewByteArray(env,cryptoKey->Length); + (*env)->SetByteArrayRegion(env, ary, (jsize) 0, cryptoKey->Length, + (jbyte *)cryptoKey->Value); + if ((*env)->ExceptionOccurred(env)) { + (*env)->DeleteLocalRef(env, ary); + } else { + encryptionKey = (*env)->NewObject(env, encryptionKeyClass, + encryptionKeyConstructor, cryptoKey->KeyType, ary); + } + + return encryptionKey; } jobject BuildTicketFlags(JNIEnv *env, PULONG flags) { - jobject ticketFlags = NULL; - jbyteArray ary; - /* - * mdu: Convert the bytes to nework byte order before copying - * them to a Java byte array. - */ - ULONG nlflags = htonl(*flags); - - ary = (*env)->NewByteArray(env, sizeof(*flags)); - (*env)->SetByteArrayRegion(env, ary, (jsize) 0, sizeof(*flags), - (jbyte *)&nlflags); - if ((*env)->ExceptionOccurred(env)) { - (*env)->DeleteLocalRef(env, ary); - } else { - ticketFlags = (*env)->NewObject(env, ticketFlagsClass, - ticketFlagsConstructor, sizeof(*flags)*8, ary); - } + jobject ticketFlags = NULL; + jbyteArray ary; + /* + * mdu: Convert the bytes to nework byte order before copying + * them to a Java byte array. + */ + ULONG nlflags = htonl(*flags); + + ary = (*env)->NewByteArray(env, sizeof(*flags)); + (*env)->SetByteArrayRegion(env, ary, (jsize) 0, sizeof(*flags), + (jbyte *)&nlflags); + if ((*env)->ExceptionOccurred(env)) { + (*env)->DeleteLocalRef(env, ary); + } else { + ticketFlags = (*env)->NewObject(env, ticketFlagsClass, + ticketFlagsConstructor, sizeof(*flags)*8, ary); + } - return ticketFlags; + return ticketFlags; } jobject BuildKerberosTime(JNIEnv *env, PLARGE_INTEGER kerbtime) { - jobject kerberosTime = NULL; - jstring stringTime = NULL; - SYSTEMTIME systemTime; - WCHAR timeString[16]; - WCHAR month[3]; - WCHAR day[3]; - WCHAR hour[3]; - WCHAR minute[3]; - WCHAR second[3]; - - if (FileTimeToSystemTime((FILETIME *)kerbtime, &systemTime)) { -// XXX Cannot use %02.2ld, because the leading 0 is ignored for integers. -// So, print them to strings, and then print them to the master string with a -// format pattern that makes it two digits and prefix with a 0 if necessary. - swprintf( (wchar_t *)month, L"%2.2d", systemTime.wMonth); - swprintf( (wchar_t *)day, L"%2.2d", systemTime.wDay); - swprintf( (wchar_t *)hour, L"%2.2d", systemTime.wHour); - swprintf( (wchar_t *)minute, L"%2.2d", systemTime.wMinute); - swprintf( (wchar_t *)second, L"%2.2d", systemTime.wSecond); - swprintf( (wchar_t *)timeString, - L"%ld%02.2s%02.2s%02.2s%02.2s%02.2sZ", + jobject kerberosTime = NULL; + jstring stringTime = NULL; + SYSTEMTIME systemTime; + WCHAR timeString[16]; + WCHAR month[3]; + WCHAR day[3]; + WCHAR hour[3]; + WCHAR minute[3]; + WCHAR second[3]; + + if (FileTimeToSystemTime((FILETIME *)kerbtime, &systemTime)) { + // XXX Cannot use %02.2ld, because the leading 0 is ignored for integers. + // So, print them to strings, and then print them to the master string with a + // format pattern that makes it two digits and prefix with a 0 if necessary. + swprintf( (wchar_t *)month, L"%2.2d", systemTime.wMonth); + swprintf( (wchar_t *)day, L"%2.2d", systemTime.wDay); + swprintf( (wchar_t *)hour, L"%2.2d", systemTime.wHour); + swprintf( (wchar_t *)minute, L"%2.2d", systemTime.wMinute); + swprintf( (wchar_t *)second, L"%2.2d", systemTime.wSecond); + swprintf( (wchar_t *)timeString, + L"%ld%02.2s%02.2s%02.2s%02.2s%02.2sZ", systemTime.wYear, month, day, hour, minute, second ); - #ifdef DEBUG - printf("%S\n", (wchar_t *)timeString); - #endif /* DEBUG */ - stringTime = (*env)->NewString(env, timeString, - (sizeof(timeString)/sizeof(WCHAR))-1); - if (stringTime != NULL) { // everything's OK so far - kerberosTime = (*env)->NewObject(env, kerberosTimeClass, - kerberosTimeConstructor, stringTime); - } + if (native_debug) { + printf("LSA: %S\n", (wchar_t *)timeString); + } + stringTime = (*env)->NewString(env, timeString, + (sizeof(timeString)/sizeof(WCHAR))-1); + if (stringTime != NULL) { // everything's OK so far + kerberosTime = (*env)->NewObject(env, kerberosTimeClass, + kerberosTimeConstructor, stringTime); } - return kerberosTime; + } + return kerberosTime; } diff -Nru openjdk-6-6b33-1.13.5/jdk/test/com/sun/jdi/PopAndInvokeTest.java openjdk-6-6b34-1.13.6/jdk/test/com/sun/jdi/PopAndInvokeTest.java --- openjdk-6-6b33-1.13.5/jdk/test/com/sun/jdi/PopAndInvokeTest.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/com/sun/jdi/PopAndInvokeTest.java 2015-01-20 02:20:42.000000000 +0000 @@ -24,6 +24,7 @@ /** * @test * @bug 6517249 + * @ignore 6951287 * @summary JDWP: Cannot do an invokeMethod after a popFrames operation * * @author jjh diff -Nru openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/AgentSetup.sh openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/AgentSetup.sh --- openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/AgentSetup.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/AgentSetup.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -#!/bin/sh - -# -# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - - -# -# -# Agent set - creates Agent.jar, BadAgent.jar and RedefineAgent.jar in ${TESTCLASSES} - -$JAVAC -d "${TESTCLASSES}" "${TESTSRC}"/Agent.java "${TESTSRC}"/BadAgent.java "${TESTSRC}"/RedefineAgent.java - -$JAR -cfm "${TESTCLASSES}"/Agent.jar "${TESTSRC}"/agent.mf \ - -C "${TESTCLASSES}" Agent.class - -$JAR -cfm "${TESTCLASSES}"/BadAgent.jar "${TESTSRC}"/badagent.mf \ - -C "${TESTCLASSES}" BadAgent.class - -$JAR -cfm "${TESTCLASSES}"/RedefineAgent.jar "${TESTSRC}"/redefineagent.mf \ - -C "${TESTCLASSES}" RedefineAgent.class - -agent="${TESTCLASSES}${FS}Agent.jar" -badagent="${TESTCLASSES}${FS}BadAgent.jar" -redefineagent="${TESTCLASSES}${FS}RedefineAgent.jar" - diff -Nru openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/Application.java openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/Application.java --- openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/Application.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/Application.java 2015-01-20 02:20:42.000000000 +0000 @@ -22,25 +22,39 @@ */ /* - * - * * A simple "Application" used by the Attach API unit tests. This application is * launched by the test. It binds to a random port and shuts down when somebody * connects to that port. + * Used port and pid are written both to stdout and to a specified file. */ import java.net.Socket; import java.net.ServerSocket; +import java.io.PrintWriter; +import jdk.testlibrary.ProcessTools; public class Application { public static void main(String args[]) throws Exception { // bind to a random port + if (args.length < 1) { + System.err.println("First argument should be path to output file."); + } + String outFileName = args[0]; + ServerSocket ss = new ServerSocket(0); int port = ss.getLocalPort(); + int pid = ProcessTools.getProcessId(); - // signal test that we are started - do not remove this line!! - System.out.println(port); + System.out.println("shutdownPort=" + port); + System.out.println("pid=" + pid); System.out.flush(); + try (PrintWriter writer = new PrintWriter(outFileName)) { + writer.println("shutdownPort=" + port); + writer.println("pid=" + pid); + writer.println("done"); + writer.flush(); + } + // wait for test harness to connect Socket s = ss.accept(); s.close(); diff -Nru openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/ApplicationSetup.sh openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/ApplicationSetup.sh --- openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/ApplicationSetup.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/ApplicationSetup.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,78 +0,0 @@ -#!/bin/sh - -# -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - - -# -# -# Application Setup - creates ${TESTCLASSES}/Application.jar and the following -# procedures: -# startApplication - starts target application -# stopApplication $1 - stops application via TCP shutdown port $1 - -$JAVAC -d "${TESTCLASSES}" "${TESTSRC}"/Application.java "${TESTSRC}"/Shutdown.java -$JAR -cfm "${TESTCLASSES}"/Application.jar "${TESTSRC}"/application.mf \ - -C "${TESTCLASSES}" Application.class - -OUTPUTFILE=${TESTCLASSES}/Application.out -rm -f ${OUTPUTFILE} - -startApplication() -{ - ${JAVA} $1 $2 $3 -jar "${TESTCLASSES}"/Application.jar > ${OUTPUTFILE} & - pid="$!" - - # MKS creates an intermediate shell to launch ${JAVA} so - # ${pid} is not the actual pid. We have put in a small sleep - # to give the intermediate shell process time to launch the - # "java" process. - if [ "$OS" = "Windows" ]; then - sleep 2 - realpid=`ps -o pid,ppid,comm|grep ${pid}|grep "java"|cut -c1-6` - pid=${realpid} - fi - - echo "Waiting for Application to initialize..." - attempts=0 - while true; do - sleep 1 - port=`tail -1 ${OUTPUTFILE}` - if [ ! -z "$port" ]; then - # In case of errors wait time for output to be flushed - sleep 1 - cat ${OUTPUTFILE} - break - fi - attempts=`expr $attempts + 1` - echo "Waiting $attempts second(s) ..." - done - echo "Application is process $pid, shutdown port is $port" - return $port -} - -stopApplication() -{ - $JAVA -classpath "${TESTCLASSES}" Shutdown $1 -} - diff -Nru openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/BasicTests.java openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/BasicTests.java --- openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/BasicTests.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/BasicTests.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2011, 2013 Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,151 +21,257 @@ * questions. */ -/* - * - * - * Unit test for Attach API. Attaches to the given VM and performs a number - * unit tests. - */ import com.sun.tools.attach.*; import java.net.ServerSocket; import java.net.Socket; import java.io.IOException; import java.util.Properties; import java.util.List; +import java.io.File; +import jdk.testlibrary.OutputAnalyzer; +import jdk.testlibrary.JDKToolLauncher; +import jdk.testlibrary.ProcessTools; +import jdk.testlibrary.ProcessThread; +/* + * @test + * @bug 6173612 6273707 6277253 6335921 6348630 6342019 6381757 + * @summary Basic unit tests for the VM attach mechanism. + * @library /lib/testlibrary + * @run build Agent BadAgent RedefineAgent Application Shutdown RedefineDummy + * @run main BasicTests + * + * This test will perform a number of basic attach tests. + */ public class BasicTests { - public static void main(String args[]) throws Exception { - String pid = args[0]; - String agent = args[1]; - String badagent = args[2]; - String redefineagent = args[3]; - - System.out.println(" - Attaching to application ..."); - VirtualMachine vm = VirtualMachine.attach(pid); - - // Test 1 - read the system properties from the target VM and - // check that property is set - System.out.println(" - Test: system properties in target VM"); - Properties props = vm.getSystemProperties(); - String value = props.getProperty("attach.test"); - if (value == null || !value.equals("true")) { - throw new RuntimeException("attach.test property not set"); - } - System.out.println(" - attach.test property set as expected"); - - // Test 1a - read the agent properties from the target VM. - // By default, the agent property contains "sun.java.command", - // "sun.jvm.flags", and "sun.jvm.args". - // Just sanity check - make sure not empty. - System.out.println(" - Test: agent properties in target VM"); - props = vm.getAgentProperties(); - if (props == null || props.size() == 0) { - throw new RuntimeException("Agent properties is empty"); - } - System.out.println(" - agent properties non-empty as expected"); - // Test 2 - attempt to load an agent that does not exist - System.out.println(" - Test: Load an agent that does not exist"); + /* + * The actual test is in the nested class TestMain. + * The responsibility of this class is to: + * 1. Build all needed jars. + * 2. Start the Application class in a separate process. + * 3. Find the pid and shutdown port of the running Application. + * 4. Launches the tests in nested class TestMain that will attach to the Application. + * 5. Shut down the Application. + */ + public static void main(String args[]) throws Throwable { + final String pidFile = "TestsBasic.Application.pid"; + ProcessThread processThread = null; + RunnerUtil.ProcessInfo info = null; try { - vm.loadAgent("SilverBullet.jar"); - } catch (AgentLoadException x) { - System.out.println(" - AgentLoadException thrown as expected!"); + buildJars(); + processThread = RunnerUtil.startApplication(pidFile); + info = RunnerUtil.readProcessInfo(pidFile); + runTests(info.pid); + } catch (Throwable t) { + System.out.println("TestBasic got unexpected exception: " + t); + t.printStackTrace(); + throw t; + } finally { + // Make sure the Application process is stopped. + RunnerUtil.stopApplication(info.shutdownPort, processThread); } + } - // Test 3 - load an "bad" agent (agentmain throws an exception) - System.out.println(" - Test: Load a bad agent"); - try { - vm.loadAgent(badagent); - } catch (AgentInitializationException x) { - System.out.println(" - AgentInitializationException throws as expected!"); - } + /** + * Runs the actual tests in nested class TestMain. + * The reason for running the tests in a separate process + * is that we need to modify the class path. + */ + private static void runTests(int pid) throws Throwable { + final String sep = File.separator; + + // Need to add jdk/lib/tools.jar to classpath. + String classpath = + System.getProperty("test.class.path", "") + File.pathSeparator + + System.getProperty("test.jdk", ".") + sep + "lib" + sep + "tools.jar"; + String testClassDir = System.getProperty("test.classes", "") + sep; + + // Argumenta : -classpath cp BasicTests$TestMain pid agent badagent redefineagent + String[] args = { + "-classpath", + classpath, + "BasicTests$TestMain", + Integer.toString(pid), + testClassDir + "Agent.jar", + testClassDir + "BadAgent.jar", + testClassDir + "RedefineAgent.jar" }; + OutputAnalyzer output = ProcessTools.executeTestJvm(args); + output.shouldHaveExitValue(0); + } - // Test 4 - detach from the VM and attempt a load (should throw IOE) - System.out.println(" - Test: Detach from VM"); - vm.detach(); - try { - vm.loadAgent(agent); - throw new RuntimeException("loadAgent did not throw an exception!!"); - } catch (IOException ioe) { - System.out.println(" - IOException as expected"); + /** + * Will build all jars needed by the tests. + */ + private static void buildJars() throws Throwable { + String[] jars = {"Agent", "BadAgent", "RedefineAgent", "Application" }; + for (String jar : jars) { + buildJar(jar); } + } - // Test 5 - functional "end-to-end" test. - // Create a listener socket. Load Agent.jar into the target VM passing - // it the port number of our listener. When agent loads it should connect - // back to the tool. - - System.out.println(" - Re-attaching to application ..."); - vm = VirtualMachine.attach(pid); - - System.out.println(" - Test: End-to-end connection with agent"); - - ServerSocket ss = new ServerSocket(0); - int port = ss.getLocalPort(); - - System.out.println(" - Loading Agent.jar into target VM ..."); - vm.loadAgent(agent, Integer.toString(port)); + /** + * Will build a jar with the given name. + * Class file and manifest must already exist. + * @param jarName Name of the jar. + */ + private static void buildJar(String jarName) throws Throwable { + String testClasses = System.getProperty("test.classes", "?"); + String testSrc = System.getProperty("test.src", "?"); + String jar = String.format("%s/%s.jar", testClasses, jarName); + String manifest = String.format("%s/%s.mf", testSrc, jarName.toLowerCase()); + String clazz = String.format("%s.class", jarName); + + // Arguments to the jar command has this format: + // "-cfm TESTCLASSES/Agent.jar TESTSRC/agent.mf -C TESTCLASSES Agent.class" + RunnerUtil.createJar("-cfm", jar, manifest, "-C", testClasses, clazz); + } - System.out.println(" - Waiting for agent to connect back to tool ..."); - Socket s = ss.accept(); - System.out.println(" - Connected to agent."); + /** + * This is the actual test. It will attach to the running Application + * and perform a number of basic attach tests. + */ + public static class TestMain { + public static void main(String args[]) throws Exception { + String pid = args[0]; + String agent = args[1]; + String badagent = args[2]; + String redefineagent = args[3]; + + System.out.println(" - Attaching to application ..."); + VirtualMachine vm = VirtualMachine.attach(pid); + + // Test 1 - read the system properties from the target VM and + // check that property is set + System.out.println(" - Test: system properties in target VM"); + Properties props = vm.getSystemProperties(); + String value = props.getProperty("attach.test"); + if (value == null || !value.equals("true")) { + throw new RuntimeException("attach.test property not set"); + } + System.out.println(" - attach.test property set as expected"); - // Test 5b - functional "end-to-end" test. - // Now with an agent that does redefine. + // Test 1a - read the agent properties from the target VM. + // By default, the agent property contains "sun.java.command", + // "sun.jvm.flags", and "sun.jvm.args". + // Just sanity check - make sure not empty. + System.out.println(" - Test: agent properties in target VM"); + props = vm.getAgentProperties(); + if (props == null || props.size() == 0) { + throw new RuntimeException("Agent properties is empty"); + } + System.out.println(" - agent properties non-empty as expected"); - System.out.println(" - Re-attaching to application ..."); - vm = VirtualMachine.attach(pid); + // Test 2 - attempt to load an agent that does not exist + System.out.println(" - Test: Load an agent that does not exist"); + try { + vm.loadAgent("SilverBullet.jar"); + } catch (AgentLoadException x) { + System.out.println(" - AgentLoadException thrown as expected!"); + } - System.out.println(" - Test: End-to-end connection with RedefineAgent"); + // Test 3 - load an "bad" agent (agentmain throws an exception) + System.out.println(" - Test: Load a bad agent"); + System.out.println("INFO: This test will cause error messages " + + "to appear in the application log about SilverBullet.jar " + + "not being found and an agent failing to start."); + try { + vm.loadAgent(badagent); + throw new RuntimeException( + "AgentInitializationException not thrown as expected!"); + } catch (AgentInitializationException x) { + System.out.println( + " - AgentInitializationException thrown as expected!"); + } - ServerSocket ss2 = new ServerSocket(0); - int port2 = ss2.getLocalPort(); + // Test 4 - detach from the VM and attempt a load (should throw IOE) + System.out.println(" - Test: Detach from VM"); + System.out.println("INFO: This test will cause error messages " + + "to appear in the application log about a BadAgent including " + + "a RuntimeException and an InvocationTargetException."); + vm.detach(); + try { + vm.loadAgent(agent); + throw new RuntimeException("loadAgent did not throw an exception!!"); + } catch (IOException ioe) { + System.out.println(" - IOException as expected"); + } - System.out.println(" - Loading RedefineAgent.jar into target VM ..."); - vm.loadAgent(redefineagent, Integer.toString(port2)); + // Test 5 - functional "end-to-end" test. + // Create a listener socket. Load Agent.jar into the target VM passing + // it the port number of our listener. When agent loads it should connect + // back to the tool. + + System.out.println(" - Re-attaching to application ..."); + vm = VirtualMachine.attach(pid); + + System.out.println(" - Test: End-to-end connection with agent"); + + ServerSocket ss = new ServerSocket(0); + int port = ss.getLocalPort(); + + System.out.println(" - Loading Agent.jar into target VM ..."); + vm.loadAgent(agent, Integer.toString(port)); + + System.out.println(" - Waiting for agent to connect back to tool ..."); + Socket s = ss.accept(); + System.out.println(" - Connected to agent."); + + // Test 5b - functional "end-to-end" test. + // Now with an agent that does redefine. + + System.out.println(" - Re-attaching to application ..."); + vm = VirtualMachine.attach(pid); + + System.out.println(" - Test: End-to-end connection with RedefineAgent"); + + ServerSocket ss2 = new ServerSocket(0); + int port2 = ss2.getLocalPort(); + + System.out.println(" - Loading RedefineAgent.jar into target VM ..."); + vm.loadAgent(redefineagent, Integer.toString(port2)); + + System.out.println(" - Waiting for RedefineAgent to connect back to tool ..."); + Socket s2 = ss2.accept(); + System.out.println(" - Connected to RedefineAgent."); + + // Test 6 - list method should list the target VM + System.out.println(" - Test: VirtualMachine.list"); + List l = VirtualMachine.list(); + if (!l.isEmpty()) { + boolean found = false; + for (VirtualMachineDescriptor vmd: l) { + if (vmd.id().equals(pid)) { + found = true; + break; + } + } + if (found) { + System.out.println(" - " + pid + " found."); + } else { + throw new RuntimeException(pid + " not found in VM list"); + } + } - System.out.println(" - Waiting for RedefineAgent to connect back to tool ..."); - Socket s2 = ss2.accept(); - System.out.println(" - Connected to RedefineAgent."); + // test 7 - basic hashCode/equals tests + System.out.println(" - Test: hashCode/equals"); - // Test 6 - list method should list the target VM - System.out.println(" - Test: VirtualMachine.list"); - List l = VirtualMachine.list(); - if (!l.isEmpty()) { - boolean found = false; - for (VirtualMachineDescriptor vmd: l) { - if (vmd.id().equals(pid)) { - found = true; - break; - } + VirtualMachine vm1 = VirtualMachine.attach(pid); + VirtualMachine vm2 = VirtualMachine.attach(pid); + if (!vm1.equals(vm2)) { + throw new RuntimeException("virtual machines are not equal"); } - if (found) { - System.out.println(" - " + pid + " found."); - } else { - throw new RuntimeException(pid + " not found in VM list"); + if (vm.hashCode() != vm.hashCode()) { + throw new RuntimeException("virtual machine hashCodes not equal"); } - } + System.out.println(" - hashCode/equals okay"); - // test 7 - basic hashCode/equals tests - System.out.println(" - Test: hashCode/equals"); - - VirtualMachine vm1 = VirtualMachine.attach(pid); - VirtualMachine vm2 = VirtualMachine.attach(pid); - if (!vm1.equals(vm2)) { - throw new RuntimeException("virtual machines are not equal"); - } - if (vm.hashCode() != vm.hashCode()) { - throw new RuntimeException("virtual machine hashCodes not equal"); + // --- + System.out.println(" - Cleaning up..."); + s.close(); + ss.close(); + s2.close(); + ss2.close(); } - System.out.println(" - hashCode/equals okay"); - - - // --- - System.out.println(" - Cleaning up..."); - s.close(); - ss.close(); - s2.close(); - ss2.close(); } } diff -Nru openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/BasicTests.sh openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/BasicTests.sh --- openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/BasicTests.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/BasicTests.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -#!/bin/sh - -# -# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - - -# @test -# @bug 6173612 6273707 6277253 6335921 6348630 6342019 6381757 -# @summary Basic unit tests for the VM attach mechanism. -# -# @build BasicTests -# @run shell BasicTests.sh - -if [ "${TESTSRC}" = "" ] -then - echo "TESTSRC not set. Test cannot execute. Failed." - exit 1 -fi - -. ${TESTSRC}/CommonSetup.sh -. ${TESTSRC}/ApplicationSetup.sh -. ${TESTSRC}/AgentSetup.sh - -startApplication -Dattach.test=true -# pid = process-id, port = shutdown port - -failures=0 - -echo "Running tests ..." - -$JAVA -classpath ${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar \ - BasicTests $pid $agent $badagent $redefineagent 2>&1 -if [ $? != 0 ]; then failures=`expr $failures + 1`; fi - -stopApplication $port - -if [ $failures = 0 ]; - then echo "All tests passed."; - else echo "$failures test(s) failed:"; cat ${OUTPUTFILE}; -fi -exit $failures diff -Nru openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/CommonSetup.sh openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/CommonSetup.sh --- openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/CommonSetup.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/CommonSetup.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,79 +0,0 @@ -#!/bin/sh - -# -# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - - -# -# -# Common setup for the Attach API unit tests. Setups up the following variables: -# -# PS - path sep. -# FS - file sep. -# JAVA - java cmd. -# JAVAC - javac cmd. -# JAR - jar cmd. - -OS=`uname -s` -case "$OS" in - SunOS ) - PS=":" - FS="/" - ;; - Linux ) - PS=":" - FS="/" - ;; - Windows* ) - PS=";" - OS="Windows" - FS="\\" - ;; - * ) - echo "Unrecognized system!" - exit 1; - ;; -esac - -if [ "${TESTJAVA}" = "" ] -then - echo "TESTJAVA not set. Test cannot execute. Failed." - exit 1 -fi - -if [ "${TESTSRC}" = "" ] -then - echo "TESTSRC not set. Test cannot execute. Failed." - exit 1 -fi - -if [ "${TESTCLASSES}" = "" ] -then - echo "TESTCLASSES not set. Test cannot execute. Failed." - exit 1 -fi - -JAVA="${TESTJAVA}/bin/java" -JAVAC="${TESTJAVA}/bin/javac" -JAR="${TESTJAVA}/bin/jar" - diff -Nru openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/PermissionTest.java openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/PermissionTest.java --- openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/PermissionTest.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/PermissionTest.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013 Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,39 +21,119 @@ * questions. */ -/* - * - * - * Unit test for Attach API - this checks that a SecurityException is thrown as - * expected. - */ import com.sun.tools.attach.VirtualMachine; import com.sun.tools.attach.AttachNotSupportedException; import java.util.Properties; +import java.io.File; +import jdk.testlibrary.OutputAnalyzer; +import jdk.testlibrary.ProcessTools; +import jdk.testlibrary.ProcessThread; +/* + * @test + * @bug 6173612 6273707 6277253 6335921 6348630 6342019 6381757 + * @summary Basic unit tests for the VM attach mechanism. + * @library /lib/testlibrary + * @run build Application Shutdown + * @run main PermissionTest + * + * Unit test for Attach API - + * this checks that a SecurityException is thrown as expected. + */ public class PermissionTest { - public static void main(String args[]) throws Exception { - SecurityManager sm = System.getSecurityManager(); - if (sm == null) { - throw new RuntimeException("Test configuration error - no security manager set"); + + /* + * The actual test is in the nested class TestMain. + * The responsibility of this class is to: + * 1. Start the Application class in a separate process. + * 2. Find the pid and shutdown port of the running Application. + * 3. Run the tests in TstMain that will attach to the Application. + * 4. Shut down the Application. + */ + public static void main(String args[]) throws Throwable { + final String pidFile ="TestPermission.Application.pid"; + ProcessThread processThread = null; + RunnerUtil.ProcessInfo info = null; + try { + processThread = RunnerUtil.startApplication(pidFile); + info = RunnerUtil.readProcessInfo(pidFile); + runTests(info.pid); + } catch (Throwable t) { + System.out.println("TestPermission got unexpected exception: " + t); + t.printStackTrace(); + throw t; + } finally { + // Make sure the Application process is stopped. + RunnerUtil.stopApplication(info.shutdownPort, processThread); } + } - String pid = args[0]; - boolean shouldFail = Boolean.parseBoolean(args[1]); + /** + * Runs the actual test the nested class TestMain. + * The test is run in a separate process because we need to add to the classpath. + */ + private static void runTests(int pid) throws Throwable { + final String sep = File.separator; - try { - VirtualMachine.attach(pid).detach(); - if (shouldFail) { - throw new RuntimeException("SecurityException should be thrown"); + // Need to add jdk/lib/tools.jar to classpath. + String classpath = + System.getProperty("test.class.path", "") + File.pathSeparator + + System.getProperty("test.jdk", ".") + sep + "lib" + sep + "tools.jar"; + String testSrc = System.getProperty("test.src", "") + sep; + + // Use a policy that will NOT allow attach. Test will verify exception. + String[] args = { + "-classpath", + classpath, + "-Djava.security.manager", + String.format("-Djava.security.policy=%sjava.policy.deny", testSrc), + "PermissionTest$TestMain", + Integer.toString(pid), + "true" }; + OutputAnalyzer output = ProcessTools.executeTestJvm(args); + output.shouldHaveExitValue(0); + + // Use a policy that will allow attach. + args = new String[] { + "-classpath", + classpath, + "-Djava.security.manager", + String.format("-Djava.security.policy=%sjava.policy.allow", testSrc), + "PermissionTest$TestMain", + Integer.toString(pid), + "false" }; + output = ProcessTools.executeTestJvm(args); + output.shouldHaveExitValue(0); + } + + /** + * This is the actual test code. It will attach to the Application and verify + * that we get a SecurityException when that is expected. + */ + public static class TestMain { + public static void main(String args[]) throws Exception { + SecurityManager sm = System.getSecurityManager(); + if (sm == null) { + throw new RuntimeException("Test configuration error - no security manager set"); } - System.out.println(" - attached to target VM as expected."); - } catch (Exception x) { - // AttachNotSupportedException thrown when no providers can be loaded - if (shouldFail && ((x instanceof AttachNotSupportedException) || - (x instanceof SecurityException))) { - System.out.println(" - exception thrown as expected."); - } else { - throw x; + + String pid = args[0]; + boolean shouldFail = Boolean.parseBoolean(args[1]); + + try { + VirtualMachine.attach(pid).detach(); + if (shouldFail) { + throw new RuntimeException("SecurityException should be thrown"); + } + System.out.println(" - attached to target VM as expected."); + } catch (Exception x) { + // AttachNotSupportedException thrown when no providers can be loaded + if (shouldFail && ((x instanceof AttachNotSupportedException) || + (x instanceof SecurityException))) { + System.out.println(" - exception thrown as expected."); + } else { + throw x; + } } } } diff -Nru openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/PermissionTests.sh openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/PermissionTests.sh --- openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/PermissionTests.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/PermissionTests.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -#!/bin/sh - -# -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - - -# @test -# @bug 6173612 -# @summary Security manager and permission tests for Attach API -# -# @build PermissionTest -# @run shell PermissionTests.sh - -if [ "${TESTSRC}" = "" ] -then - echo "TESTSRC not set. Test cannot execute. Failed." - exit 1 -fi - -. ${TESTSRC}/CommonSetup.sh -. ${TESTSRC}/ApplicationSetup.sh - -failures=0 - -# Start target VM -startApplication -# pid = process-id, port = shutdown port - -echo "Deny test" -# deny -$JAVA -classpath ${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar \ - -Djava.security.manager \ - -Djava.security.policy=${TESTSRC}/java.policy.deny \ - PermissionTest $pid true 2>&1 -if [ $? != 0 ]; then failures=`expr $failures + 1`; fi - -# allow -echo "Allow test" -$JAVA -classpath ${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar \ - -Djava.security.manager \ - -Djava.security.policy=${TESTSRC}/java.policy.allow \ - PermissionTest $pid false 2>&1 -if [ $? != 0 ]; then failures=`expr $failures + 1`; fi - -# Stop target VM -stopApplication $port - -if [ $failures = 0 ]; - then echo "All tests passed."; - else echo "$failures test(s) failed:"; cat ${OUTPUTFILE}; -fi -exit $failures diff -Nru openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/ProviderTest.java openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/ProviderTest.java --- openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/ProviderTest.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/ProviderTest.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2013 Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,24 +21,98 @@ * questions. */ -/* - * - * - * Unit test for Attach API. Attaches to the given VM and performs a number - * unit tests. - */ +import java.io.File; +import jdk.testlibrary.OutputAnalyzer; +import jdk.testlibrary.JDKToolLauncher; +import jdk.testlibrary.ProcessTools; import com.sun.tools.attach.VirtualMachine; import com.sun.tools.attach.spi.AttachProvider; +/* + * @test + * @bug 6173612 6273707 6277253 6335921 6348630 6342019 6381757 + * @summary Basic unit tests for the VM attach mechanism. + * @library /lib/testlibrary + * @run build SimpleProvider + * @run main ProviderTest + * + * The test will attach and detach to/from the running Application. + */ public class ProviderTest { - public static void main(String args[]) throws Exception { - // deal with internal builds where classes are loaded from the - // 'classes' directory rather than rt.jar - ClassLoader cl = AttachProvider.class.getClassLoader(); - if (cl != ClassLoader.getSystemClassLoader()) { - System.out.println("Attach API not loaded by system class loader - test skipped"); - return; + + /* + * The actual tests are in the nested class TestMain below. + * The responsibility of this class is to: + * 1. Build the needed jar. + * 2. Run tests in ProviderTest.TestMain. + */ + public static void main(String args[]) throws Throwable { + try { + buildJar(); + runTests(); + } catch (Throwable t) { + System.out.println("TestProvider got unexpected exception: " + t); + t.printStackTrace(); + throw t; + } + } + + /** + * Runs the actual tests in the nested class TestMain. + * We need to run the tests in a separate process, + * because we need to add to the classpath. + */ + private static void runTests() throws Throwable { + final String sep = File.separator; + String testClassPath = System.getProperty("test.class.path", ""); + String testClasses = System.getProperty("test.classes", "") + sep; + String jdkLib = System.getProperty("test.jdk", ".") + sep + "lib" + sep; + + // Need to add SimpleProvider.jar and tools.jar to classpath. + String classpath = + testClassPath + File.pathSeparator + + testClasses + "SimpleProvider.jar" + File.pathSeparator + + jdkLib + "tools.jar"; + + String[] args = { + "-classpath", + classpath, + "ProviderTest$TestMain" }; + OutputAnalyzer output = ProcessTools.executeTestJvm(args); + output.shouldHaveExitValue(0); + } + + /** + * Will build the SimpleProvider.jar. + */ + private static void buildJar() throws Throwable { + final String sep = File.separator; + String testClasses = System.getProperty("test.classes", "?") + sep; + String testSrc = System.getProperty("test.src", "?") + sep; + String serviceDir = "META-INF" + sep + "services" + sep; + + RunnerUtil.createJar( + "-cf", testClasses + "SimpleProvider.jar", + "-C", testClasses, "SimpleProvider.class", + "-C", testClasses, "SimpleVirtualMachine.class", + "-C", testSrc, + serviceDir + "com.sun.tools.attach.spi.AttachProvider"); + } + + /** + * This is the actual test code that attaches to the running Application. + * This class is run in a separate process. + */ + public static class TestMain { + public static void main(String args[]) throws Exception { + // deal with internal builds where classes are loaded from the + // 'classes' directory rather than rt.jar + ClassLoader cl = AttachProvider.class.getClassLoader(); + if (cl != ClassLoader.getSystemClassLoader()) { + System.out.println("Attach API not loaded by system class loader - test skipped"); + return; + } + VirtualMachine.attach("simple:1234").detach(); } - VirtualMachine.attach("simple:1234").detach(); } } diff -Nru openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/ProviderTests.sh openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/ProviderTests.sh --- openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/ProviderTests.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/ProviderTests.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -# -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# @test -# @bug 6173612 -# @summary AttachProvider unit tests -# -# @build ProviderTest SimpleProvider -# @run shell ProviderTests.sh - -if [ "${TESTSRC}" = "" ] -then - echo "TESTSRC not set. Test cannot execute. Failed." - exit 1 -fi - -. ${TESTSRC}/CommonSetup.sh - -echo "Creating JAR file ..." - -$JAR -cf ${TESTCLASSES}/SimpleProvider.jar \ - -C ${TESTCLASSES} SimpleProvider.class \ - -C ${TESTCLASSES} SimpleVirtualMachine.class \ - -C "${TESTSRC}" META-INF/services/com.sun.tools.attach.spi.AttachProvider - -echo "Running test ..." - -$JAVA -classpath \ - ${TESTCLASSES}${PS}${TESTCLASSES}/SimpleProvider.jar${PS}${TESTJAVA}/lib/tools.jar \ - ProviderTest - diff -Nru openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/RedefineAgent.java openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/RedefineAgent.java --- openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/RedefineAgent.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/RedefineAgent.java 2015-01-20 02:20:42.000000000 +0000 @@ -43,15 +43,15 @@ public class RedefineAgent implements ClassFileTransformer { static byte[] classfilebytes; - static final String targetName = "java.math.BigInteger"; - static final String targetNameSlashes = "java/math/BigInteger"; + static final String targetName = "RedefineDummy"; + static final String targetNameSlashes = "RedefineDummy"; static boolean gotRedefineTransform = false; // test transform and capture class bytes for redefine public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, - ProtectionDomain protectionDomain, + ProtectionDomain protectionDomain, byte[] classfileBuffer) { if (className.equals(targetNameSlashes)) { if (classBeingRedefined == null) { diff -Nru openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/RedefineDummy.java openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/RedefineDummy.java --- openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/RedefineDummy.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/RedefineDummy.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * Simple dummy class used to test class retransform. + */ +public class RedefineDummy { + public String toString() { + return "RedefineDummy"; + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/RunnerUtil.java openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/RunnerUtil.java --- openjdk-6-6b33-1.13.5/jdk/test/com/sun/tools/attach/RunnerUtil.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/com/sun/tools/attach/RunnerUtil.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.IOException; +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.regex.Pattern; +import java.util.regex.Matcher; +import jdk.testlibrary.OutputAnalyzer; +import jdk.testlibrary.JDKToolLauncher; +import jdk.testlibrary.ProcessTools; +import jdk.testlibrary.Utils; +import jdk.testlibrary.ProcessThread; + +/* + * Utility functions for test runners. + * (Test runner = class that launch a test) + */ +public class RunnerUtil { + /** + * The Application process must be run concurrently with our tests since + * the tests will attach to the Application. + * We will run the Application process in a separate thread. + * + * The Application must be started with flag "-Xshare:off" for the Retransform + * test in TestBasics to pass on all platforms. + * + * The Application will write its pid and shutdownPort in the given outFile. + */ + public static ProcessThread startApplication(String outFile) throws Throwable { + String classpath = System.getProperty("test.class.path", "."); + String[] args = Utils.addTestJavaOpts( + "-Dattach.test=true", "-classpath", classpath, "Application", outFile); + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(args); + ProcessThread pt = new ProcessThread("runApplication", pb); + pt.start(); + return pt; + } + + /** + * Will stop the running Application. + * First tries to shutdown nicely by connecting to the shut down port. + * If that fails, the process will be killed hard with stopProcess(). + * + * If the nice shutdown fails, then an Exception is thrown and the test should fail. + * + * @param port The shut down port. + * @param processThread The process to stop. + */ + public static void stopApplication(int port, ProcessThread processThread) throws Throwable { + if (processThread == null) { + System.out.println("RunnerUtil.stopApplication ignored since proc is null"); + return; + } + try { + System.out.println("RunnerUtil.stopApplication waiting to for shutdown"); + OutputAnalyzer output = ProcessTools.executeTestJvm( + "-classpath", + System.getProperty("test.class.path", "."), + "Shutdown", + Integer.toString(port)); + // Verify that both the Shutdown command and the Application finished ok. + output.shouldHaveExitValue(0); + processThread.joinAndThrow(); + processThread.getOutput().shouldHaveExitValue(0); + } catch (Throwable t) { + System.out.println("RunnerUtil.stopApplication failed. Will kill it hard: " + t); + processThread.stopProcess(); + throw t; + } + } + + /** + * Creates a jar file. + * @param args Command to the jar tool. + */ + public static void createJar(String... args) { + System.out.println("Running: jar " + Arrays.toString(args)); + sun.tools.jar.Main jar = new sun.tools.jar.Main(System.out, System.err, "jar"); + if (!jar.run(args)) { + throw new RuntimeException("jar failed: args=" + Arrays.toString(args)); + } + } + + /** + * Read process info for the running Application. + * The Application writes its info to a file with this format: + * shutdownPort=42994 + * pid=19597 + * done + * + * The final "done" is used to make sure the complete file has been written + * before we try to read it. + * This function will wait until the file is available. + * + * @param filename Path to file to read. + * @return The ProcessInfo containing pid and shutdownPort. + */ + public static ProcessInfo readProcessInfo(String filename) throws Throwable { + System.out.println("Reading port and pid from file: " + filename); + File file = new File(filename); + String content = null; + + // Read file or wait for it to be created. + while (true) { + content = readFile(file); + if (content != null && content.indexOf("done") >= 0) { + break; + } + Thread.sleep(100); + } + + ProcessInfo info = new ProcessInfo(); + // search for a line with format: key=nnn + Pattern pattern = Pattern.compile("(\\w*)=([0-9]+)\\r?\\n"); + Matcher matcher = pattern.matcher(content); + while (matcher.find()) { + String key = matcher.group(1); + int value = Integer.parseInt(matcher.group(2)); + if ("pid".equals(key)) { + info.pid = value; + } else if ("shutdownPort".equals(key)) { + info.shutdownPort = value; + } + } + System.out.println("processInfo.pid:" + info.pid); + System.out.println("processInfo.shutdownPort:" + info.shutdownPort); + return info; + } + + /** + * Read the content of a file. + * @param file The file to read. + * @return The file content or null if file does not exists. + */ + public static String readFile(File file) throws IOException { + if (!file.exists()) { + return null; + } + try { + byte[] bytes = Files.readAllBytes(file.toPath()); + String content = new String(bytes); + return content; + } catch (IOException e) { + e.printStackTrace(); + throw e; + } + } + + /** + * Helper class with info of the running Application. + */ + public static class ProcessInfo { + public int pid = -1; + public int shutdownPort = -1; + } + +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/awt/Focus/NoAutotransferToDisabledCompTest/NoAutotransferToDisabledCompTest.java openjdk-6-6b34-1.13.6/jdk/test/java/awt/Focus/NoAutotransferToDisabledCompTest/NoAutotransferToDisabledCompTest.java --- openjdk-6-6b33-1.13.5/jdk/test/java/awt/Focus/NoAutotransferToDisabledCompTest/NoAutotransferToDisabledCompTest.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/awt/Focus/NoAutotransferToDisabledCompTest/NoAutotransferToDisabledCompTest.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/awt/Focus/RequestFocusToDisabledCompTest/RequestFocusToDisabledCompTest.java openjdk-6-6b34-1.13.6/jdk/test/java/awt/Focus/RequestFocusToDisabledCompTest/RequestFocusToDisabledCompTest.java --- openjdk-6-6b33-1.13.5/jdk/test/java/awt/Focus/RequestFocusToDisabledCompTest/RequestFocusToDisabledCompTest.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/awt/Focus/RequestFocusToDisabledCompTest/RequestFocusToDisabledCompTest.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/awt/Graphics2D/DrawString/ScaledLCDTextMetrics.java openjdk-6-6b34-1.13.6/jdk/test/java/awt/Graphics2D/DrawString/ScaledLCDTextMetrics.java --- openjdk-6-6b33-1.13.5/jdk/test/java/awt/Graphics2D/DrawString/ScaledLCDTextMetrics.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/awt/Graphics2D/DrawString/ScaledLCDTextMetrics.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /** diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/awt/im/8041990/bug8041990.java openjdk-6-6b34-1.13.6/jdk/test/java/awt/im/8041990/bug8041990.java --- openjdk-6-6b33-1.13.5/jdk/test/java/awt/im/8041990/bug8041990.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/awt/im/8041990/bug8041990.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + @test + @bug 8041990 + @summary Language specific keys does not work in applets when opened outside the browser + @author Petr Pchelko +*/ + +import sun.awt.SunToolkit; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.InputMethodEvent; +import java.awt.font.TextHitInfo; +import java.text.AttributedString; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.atomic.AtomicReference; + +public class bug8041990 { + private static JFrame frame; + private static JComponent component; + + public static void main(String[] args) throws Exception { + ThreadGroup stubTG = new ThreadGroup(getRootThreadGroup(), "Stub Thread Group"); + ThreadGroup swingTG = new ThreadGroup(getRootThreadGroup(), "SwingTG"); + try { + Thread stubThread = new Thread(stubTG, new Runnable() { + public void run() { + SunToolkit.createNewAppContext(); + } + }); + stubThread.start(); + stubThread.join(); + + final CountDownLatch startSwingLatch = new CountDownLatch(1); + new Thread(swingTG, new Runnable() { + public void run() { + SunToolkit.createNewAppContext(); + SwingUtilities.invokeLater(new Runnable() { + public void run() { + frame = new JFrame(); + component = new JLabel("Test Text"); + frame.add(component); + frame.setBounds(100, 100, 100, 100); + frame.setVisible(true); + startSwingLatch.countDown(); + } + }); + } + }).start(); + startSwingLatch.await(); + + final AtomicReference caughtException = new AtomicReference<>(); + Thread checkThread = new Thread(getRootThreadGroup(), new Runnable() { + public void run() { + try { + // If the bug is present this will throw exception + new InputMethodEvent(component, + InputMethodEvent.CARET_POSITION_CHANGED, + TextHitInfo.leading(0), + TextHitInfo.trailing(0)); + } catch (Exception e) { + caughtException.set(e); + } + } + }); + checkThread.start(); + checkThread.join(); + + if (caughtException.get() != null) { + throw new RuntimeException("Failed. Caught exception!", caughtException.get()); + } + } finally { + new Thread(swingTG, new Runnable() { + public void run() { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + if (frame != null) { + frame.dispose(); + } + } + }); + } + }).start(); + } + } + + private static ThreadGroup getRootThreadGroup() { + ThreadGroup currentTG = Thread.currentThread().getThreadGroup(); + ThreadGroup parentTG = currentTG.getParent(); + while (parentTG != null) { + currentTG = parentTG; + parentTG = currentTG.getParent(); + } + return currentTG; + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/awt/image/ImageIconHang.java openjdk-6-6b34-1.13.6/jdk/test/java/awt/image/ImageIconHang.java --- openjdk-6-6b33-1.13.5/jdk/test/java/awt/image/ImageIconHang.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/awt/image/ImageIconHang.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.*; + +/* + * @test + * @bug 8032788 + * @summary Checks that null filename argument is processed correctly + * + * @run main ImageIconHang + */ +public class ImageIconHang { + public static void main(String[] args) throws Exception { + Image image = Toolkit.getDefaultToolkit().getImage((String) null); + MediaTracker mt = new MediaTracker(new Component() {}); + mt.addImage(image, 1); + mt.waitForID(1, 5000); + + int status = mt.statusID(1, false); + + System.out.println("Status: " + status); + + if (status != MediaTracker.ERRORED) { + throw new RuntimeException("MediaTracker.waitForID() hung."); + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/awt/Modal/WsDisabledStyle/CloseBlocker/CloseBlocker.java openjdk-6-6b34-1.13.6/jdk/test/java/awt/Modal/WsDisabledStyle/CloseBlocker/CloseBlocker.java --- openjdk-6-6b33-1.13.5/jdk/test/java/awt/Modal/WsDisabledStyle/CloseBlocker/CloseBlocker.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/awt/Modal/WsDisabledStyle/CloseBlocker/CloseBlocker.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/awt/Modal/WsDisabledStyle/OverBlocker/OverBlocker.java openjdk-6-6b34-1.13.6/jdk/test/java/awt/Modal/WsDisabledStyle/OverBlocker/OverBlocker.java --- openjdk-6-6b33-1.13.5/jdk/test/java/awt/Modal/WsDisabledStyle/OverBlocker/OverBlocker.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/awt/Modal/WsDisabledStyle/OverBlocker/OverBlocker.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/awt/Modal/WsDisabledStyle/Winkey/Winkey.java openjdk-6-6b34-1.13.6/jdk/test/java/awt/Modal/WsDisabledStyle/Winkey/Winkey.java --- openjdk-6-6b33-1.13.5/jdk/test/java/awt/Modal/WsDisabledStyle/Winkey/Winkey.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/awt/Modal/WsDisabledStyle/Winkey/Winkey.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/beans/Beans/6669869/TestDesignTime.java openjdk-6-6b34-1.13.6/jdk/test/java/beans/Beans/6669869/TestDesignTime.java --- openjdk-6-6b33-1.13.5/jdk/test/java/beans/Beans/6669869/TestDesignTime.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/beans/Beans/6669869/TestDesignTime.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/beans/Beans/6669869/TestGuiAvailable.java openjdk-6-6b34-1.13.6/jdk/test/java/beans/Beans/6669869/TestGuiAvailable.java --- openjdk-6-6b33-1.13.5/jdk/test/java/beans/Beans/6669869/TestGuiAvailable.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/beans/Beans/6669869/TestGuiAvailable.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/beans/Introspector/Test5102804.java openjdk-6-6b34-1.13.6/jdk/test/java/beans/Introspector/Test5102804.java --- openjdk-6-6b33-1.13.5/jdk/test/java/beans/Introspector/Test5102804.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/beans/Introspector/Test5102804.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/lang/annotation/AnnotationType/AnnotationTypeDeadlockTest.java openjdk-6-6b34-1.13.6/jdk/test/java/lang/annotation/AnnotationType/AnnotationTypeDeadlockTest.java --- openjdk-6-6b33-1.13.5/jdk/test/java/lang/annotation/AnnotationType/AnnotationTypeDeadlockTest.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/lang/annotation/AnnotationType/AnnotationTypeDeadlockTest.java 2015-01-20 02:17:20.000000000 +0000 @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7122142 + * @summary Test deadlock situation when recursive annotations are parsed + */ + +import java.lang.annotation.Retention; +import java.lang.management.ManagementFactory; +import java.lang.management.ThreadInfo; +import java.lang.management.ThreadMXBean; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.atomic.AtomicInteger; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +public class AnnotationTypeDeadlockTest { + + @Retention(RUNTIME) + @AnnB + public @interface AnnA { + } + + @Retention(RUNTIME) + @AnnA + public @interface AnnB { + } + + static class Task extends Thread { + final CountDownLatch prepareLatch; + final AtomicInteger goLatch; + final Class clazz; + + Task(CountDownLatch prepareLatch, AtomicInteger goLatch, Class clazz) { + super(clazz.getSimpleName()); + setDaemon(true); // in case it deadlocks + this.prepareLatch = prepareLatch; + this.goLatch = goLatch; + this.clazz = clazz; + } + + @Override + public void run() { + prepareLatch.countDown(); // notify we are prepared + while (goLatch.get() > 0); // spin-wait before go + clazz.getDeclaredAnnotations(); + } + } + + public static void main(String[] args) throws Exception { + CountDownLatch prepareLatch = new CountDownLatch(2); + AtomicInteger goLatch = new AtomicInteger(1); + Task taskA = new Task(prepareLatch, goLatch, AnnA.class); + Task taskB = new Task(prepareLatch, goLatch, AnnB.class); + taskA.start(); + taskB.start(); + // wait until both threads start-up + prepareLatch.await(); + // let them go + goLatch.set(0); + // obtain ThreadMXBean + ThreadMXBean threadBean = ManagementFactory.getThreadMXBean(); + // wait for threads to finish or dead-lock + while (taskA.isAlive() || taskB.isAlive()) { + // attempt to join threads + taskA.join(500L); + taskB.join(500L); + // detect dead-lock + long[] deadlockedIds = threadBean.findMonitorDeadlockedThreads(); + if (deadlockedIds != null && deadlockedIds.length > 0) { + StringBuilder sb = new StringBuilder("deadlock detected:\n\n"); + for (ThreadInfo ti : threadBean.getThreadInfo(deadlockedIds, Integer.MAX_VALUE)) { + sb.append(ti); + } + throw new IllegalStateException(sb.toString()); + } + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/lang/annotation/AnnotationType/AnnotationTypeRuntimeAssumptionTest.java openjdk-6-6b34-1.13.6/jdk/test/java/lang/annotation/AnnotationType/AnnotationTypeRuntimeAssumptionTest.java --- openjdk-6-6b33-1.13.5/jdk/test/java/lang/annotation/AnnotationType/AnnotationTypeRuntimeAssumptionTest.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/lang/annotation/AnnotationType/AnnotationTypeRuntimeAssumptionTest.java 2015-01-20 02:17:20.000000000 +0000 @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7122142 + * @summary Test consistent parsing of ex-RUNTIME annotations that + * were changed and separately compiled to have CLASS retention + */ + +import sun.misc.IOUtils; + +import java.io.IOException; +import java.io.InputStream; +import java.lang.annotation.Annotation; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import static java.lang.annotation.RetentionPolicy.CLASS; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * This test simulates a situation where there are two mutually recursive + * {@link RetentionPolicy#RUNTIME RUNTIME} annotations {@link AnnA_v1 AnnA_v1} + * and {@link AnnB AnnB} and then the first is changed to have + * {@link RetentionPolicy#CLASS CLASS} retention and separately compiled. + * When {@link AnnA_v1 AnnA_v1} annotation is looked-up on {@link AnnB AnnB} + * it still appears to have {@link RetentionPolicy#RUNTIME RUNTIME} retention. + */ +public class AnnotationTypeRuntimeAssumptionTest { + + @Retention(RUNTIME) + @AnnB + public @interface AnnA_v1 { + } + + // An alternative version of AnnA_v1 with CLASS retention instead. + // Used to simulate separate compilation (see AltClassLoader below). + @Retention(CLASS) + @AnnB + public @interface AnnA_v2 { + } + + @Retention(RUNTIME) + @AnnA_v1 + public @interface AnnB { + } + + @AnnA_v1 + public static class TestTask implements Runnable { + @Override + public void run() { + AnnA_v1 ann1 = getDeclaredAnnotation(TestTask.class, AnnA_v1.class); + if (ann1 != null) { + throw new IllegalStateException( + "@" + ann1.annotationType().getSimpleName() + + " found on: " + TestTask.class.getName() + + " should not be visible at runtime"); + } + AnnA_v1 ann2 = getDeclaredAnnotation(AnnB.class, AnnA_v1.class); + if (ann2 != null) { + throw new IllegalStateException( + "@" + ann2.annotationType().getSimpleName() + + " found on: " + AnnB.class.getName() + + " should not be visible at runtime"); + } + } + + private static A getDeclaredAnnotation(Class clazz, Class annotationClass) { + for (Annotation ann : clazz.getDeclaredAnnotations()) { + if (ann.annotationType() == annotationClass) { + return annotationClass.cast(ann); + } + } + return null; + } + } + + public static void main(String[] args) throws Exception { + ClassLoader altLoader = new AltClassLoader( + AnnotationTypeRuntimeAssumptionTest.class.getClassLoader()); + + Runnable altTask = (Runnable) Class.forName( + TestTask.class.getName(), + true, + altLoader).newInstance(); + + altTask.run(); + } + + /** + * A ClassLoader implementation that loads alternative implementations of + * classes. If class name ends with "_v1" it locates instead a class with + * name ending with "_v2" and loads that class instead. + */ + static class AltClassLoader extends ClassLoader { + AltClassLoader(ClassLoader parent) { + super(parent); + } + + @Override + protected Class loadClass(String name, boolean resolve) + throws ClassNotFoundException { + if (name.indexOf('.') < 0) { // root package is our class + synchronized (getClassLoadingLock(name)) { + // First, check if the class has already been loaded + Class c = findLoadedClass(name); + if (c == null) { + c = findClass(name); + } + if (resolve) { + resolveClass(c); + } + return c; + } + } + else { // not our class + return super.loadClass(name, resolve); + } + } + + @Override + protected Class findClass(String name) + throws ClassNotFoundException { + // special class name -> replace it with alternative name + if (name.endsWith("_v1")) { + String altName = name.substring(0, name.length() - 3) + "_v2"; + String altPath = altName.replace('.', '/').concat(".class"); + try (InputStream is = getResourceAsStream(altPath)) { + if (is != null) { + byte[] bytes = IOUtils.readFully(is, -1, true); + // patch class bytes to contain original name + for (int i = 0; i < bytes.length - 2; i++) { + if (bytes[i] == '_' && + bytes[i + 1] == 'v' && + bytes[i + 2] == '2') { + bytes[i + 2] = '1'; + } + } + return defineClass(name, bytes, 0, bytes.length); + } + else { + throw new ClassNotFoundException(name); + } + } + catch (IOException e) { + throw new ClassNotFoundException(name, e); + } + } + else { // not special class name -> just load the class + String path = name.replace('.', '/').concat(".class"); + try (InputStream is = getResourceAsStream(path)) { + if (is != null) { + byte[] bytes = IOUtils.readFully(is, -1, true); + return defineClass(name, bytes, 0, bytes.length); + } + else { + throw new ClassNotFoundException(name); + } + } + catch (IOException e) { + throw new ClassNotFoundException(name, e); + } + } + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/net/CookieHandler/CookieManagerTest.java openjdk-6-6b34-1.13.6/jdk/test/java/net/CookieHandler/CookieManagerTest.java --- openjdk-6-6b33-1.13.5/jdk/test/java/net/CookieHandler/CookieManagerTest.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/net/CookieHandler/CookieManagerTest.java 2015-01-20 02:20:42.000000000 +0000 @@ -132,17 +132,17 @@ ), new CookieTestCase("Set-Cookie", "PART_NUMBER=ROCKET_LAUNCHER_0001; path=/;" + "domain=." + localHostAddr, - "CUSTOMER=WILE:BOB;PART_NUMBER=ROCKET_LAUNCHER_0001", + "CUSTOMER=WILE:BOB; PART_NUMBER=ROCKET_LAUNCHER_0001", "/" ), new CookieTestCase("Set-Cookie", "SHIPPING=FEDEX; path=/foo;" + "domain=." + localHostAddr, - "CUSTOMER=WILE:BOB;PART_NUMBER=ROCKET_LAUNCHER_0001", + "CUSTOMER=WILE:BOB; PART_NUMBER=ROCKET_LAUNCHER_0001", "/" ), new CookieTestCase("Set-Cookie", "SHIPPING=FEDEX; path=/foo;" + "domain=." + localHostAddr, - "CUSTOMER=WILE:BOB;PART_NUMBER=ROCKET_LAUNCHER_0001;SHIPPING=FEDEX", + "CUSTOMER=WILE:BOB; PART_NUMBER=ROCKET_LAUNCHER_0001; SHIPPING=FEDEX", "/foo" ) }; @@ -157,7 +157,7 @@ ), new CookieTestCase("Set-Cookie", "PART_NUMBER=RIDING_ROCKET_0023; path=/ammo;" + "domain=." + localHostAddr, - "PART_NUMBER=RIDING_ROCKET_0023;PART_NUMBER=ROCKET_LAUNCHER_0001", + "PART_NUMBER=RIDING_ROCKET_0023; PART_NUMBER=ROCKET_LAUNCHER_0001", "/ammo" ) }; @@ -167,17 +167,17 @@ testCases[count++] = new CookieTestCase[]{ new CookieTestCase("Set-Cookie2", "Customer=\"WILE_E_COYOTE\"; Version=\"1\"; Path=\"/acme\";" + "domain=." + localHostAddr, - "$Version=\"1\";Customer=\"WILE_E_COYOTE\";$Path=\"/acme\";$Domain=\"." + localHostAddr + "\"", + "$Version=\"1\"; Customer=\"WILE_E_COYOTE\";$Path=\"/acme\";$Domain=\"." + localHostAddr + "\"", "/acme/login" ), new CookieTestCase("Set-Cookie2", "Part_Number=\"Rocket_Launcher_0001\"; Version=\"1\";Path=\"/acme\";" + "domain=." + localHostAddr, - "$Version=\"1\";Customer=\"WILE_E_COYOTE\";$Path=\"/acme\";" + "$Domain=\"." + localHostAddr + "\"" + ";Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";" + "$Domain=\"." + localHostAddr + "\"", + "$Version=\"1\"; Customer=\"WILE_E_COYOTE\";$Path=\"/acme\";" + "$Domain=\"." + localHostAddr + "\"" + "; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";" + "$Domain=\"." + localHostAddr + "\"", "/acme/pickitem" ), new CookieTestCase("Set-Cookie2", "Shipping=\"FedEx\"; Version=\"1\"; Path=\"/acme\";" + "domain=." + localHostAddr, - "$Version=\"1\";Customer=\"WILE_E_COYOTE\";$Path=\"/acme\";" + "$Domain=\"." + localHostAddr + "\"" + ";Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";" + "$Domain=\"." + localHostAddr + "\"" + ";Shipping=\"FedEx\";$Path=\"/acme\";" + "$Domain=\"." + localHostAddr + "\"", + "$Version=\"1\"; Customer=\"WILE_E_COYOTE\";$Path=\"/acme\";" + "$Domain=\"." + localHostAddr + "\"" + "; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";" + "$Domain=\"." + localHostAddr + "\"" + "; Shipping=\"FedEx\";$Path=\"/acme\";" + "$Domain=\"." + localHostAddr + "\"", "/acme/shipping" ) }; @@ -187,17 +187,17 @@ testCases[count++] = new CookieTestCase[]{ new CookieTestCase("Set-Cookie2", "Part_Number=\"Rocket_Launcher_0001\"; Version=\"1\"; Path=\"/acme\";" + "domain=." + localHostAddr, - "$Version=\"1\";Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";$Domain=\"." + localHostAddr + "\"", + "$Version=\"1\"; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";$Domain=\"." + localHostAddr + "\"", "/acme/ammo" ), new CookieTestCase("Set-Cookie2", "Part_Number=\"Riding_Rocket_0023\"; Version=\"1\"; Path=\"/acme/ammo\";" + "domain=." + localHostAddr, - "$Version=\"1\";Part_Number=\"Riding_Rocket_0023\";$Path=\"/acme/ammo\";$Domain=\"." + localHostAddr + "\"" + ";Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";" + "$Domain=\"." + localHostAddr + "\"", + "$Version=\"1\"; Part_Number=\"Riding_Rocket_0023\";$Path=\"/acme/ammo\";$Domain=\"." + localHostAddr + "\"" + "; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";" + "$Domain=\"." + localHostAddr + "\"", "/acme/ammo" ), new CookieTestCase("", "", - "$Version=\"1\";Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";" + "$Domain=\"." + localHostAddr + "\"", + "$Version=\"1\"; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";" + "$Domain=\"." + localHostAddr + "\"", "/acme/parts" ) }; @@ -207,12 +207,12 @@ testCases[count++] = new CookieTestCase[]{ new CookieTestCase("Set-Cookie2", "Part_Number=\"Rocket_Launcher_0001\"; Version=\"1\"; Path=\"/acme\";" + "domain=." + localHostAddr, - "$Version=\"1\";Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";$Domain=\"." + localHostAddr + "\"", + "$Version=\"1\"; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\";$Domain=\"." + localHostAddr + "\"", "/acme" ), new CookieTestCase("Set-Cookie2", "Part_Number=\"Rocket_Launcher_2000\"; Version=\"1\"; Path=\"/acme\";" + "domain=." + localHostAddr, - "$Version=\"1\";Part_Number=\"Rocket_Launcher_2000\";$Path=\"/acme\";$Domain=\"." + localHostAddr + "\"", + "$Version=\"1\"; Part_Number=\"Rocket_Launcher_2000\";$Path=\"/acme\";$Domain=\"." + localHostAddr + "\"", "/acme" ) }; @@ -222,17 +222,17 @@ testCases[count++] = new CookieTestCase[]{ new CookieTestCase("Set-Cookie2", "Customer=\"WILE_E_COYOTE\"; Version=\"1\"; Path=\"/acme\"", - "$Version=\"1\";Customer=\"WILE_E_COYOTE\";$Path=\"/acme\"", + "$Version=\"1\"; Customer=\"WILE_E_COYOTE\";$Path=\"/acme\"", "/acme/login" ), new CookieTestCase("Set-Cookie2", "Part_Number=\"Rocket_Launcher_0001\"; Version=\"1\";Path=\"/acme\"", - "$Version=\"1\";Customer=\"WILE_E_COYOTE\";$Path=\"/acme\"" + ";Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\"", + "$Version=\"1\"; Customer=\"WILE_E_COYOTE\";$Path=\"/acme\"" + "; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\"", "/acme/pickitem" ), new CookieTestCase("Set-Cookie2", "Shipping=\"FedEx\"; Version=\"1\"; Path=\"/acme\"", - "$Version=\"1\";Customer=\"WILE_E_COYOTE\";$Path=\"/acme\"" + ";Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\"" + ";Shipping=\"FedEx\";$Path=\"/acme\"", + "$Version=\"1\"; Customer=\"WILE_E_COYOTE\";$Path=\"/acme\"" + "; Part_Number=\"Rocket_Launcher_0001\";$Path=\"/acme\"" + "; Shipping=\"FedEx\";$Path=\"/acme\"", "/acme/shipping" ) }; diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/net/Inet6Address/B6214234.java openjdk-6-6b34-1.13.6/jdk/test/java/net/Inet6Address/B6214234.java --- openjdk-6-6b33-1.13.5/jdk/test/java/net/Inet6Address/B6214234.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/net/Inet6Address/B6214234.java 2015-01-20 02:20:42.000000000 +0000 @@ -23,7 +23,7 @@ /** * @test - * @bug 6214234 + * @bug 6214234 6967937 * @summary IPv6 scope_id for local addresses not set in Solaris 10 */ @@ -51,6 +51,7 @@ return; } if (addr.getScopeId() == 0) { + System.out.println("addr: "+ addr); throw new RuntimeException ("Non zero scope_id expected"); } } diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/net/NetworkInterface/IPv4Only.java openjdk-6-6b34-1.13.6/jdk/test/java/net/NetworkInterface/IPv4Only.java --- openjdk-6-6b33-1.13.5/jdk/test/java/net/NetworkInterface/IPv4Only.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/net/NetworkInterface/IPv4Only.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @bug 6964714 + * @run main/othervm NetworkInterfaceV6List + * @summary Test the networkinterface listing with java.net.preferIPv4Stack=true. + */ + + +import java.net.*; +import java.util.*; + + +public class IPv4Only { + public static void main(String[] args) throws Exception { + System.setProperty("java.net.preferIPv4Stack","true"); + + Enumeration nifs = NetworkInterface.getNetworkInterfaces(); + while (nifs.hasMoreElements()) { + NetworkInterface nif = nifs.nextElement(); + Enumeration addrs = nif.getInetAddresses(); + while (addrs.hasMoreElements()) { + InetAddress hostAddr = addrs.nextElement(); + if ( hostAddr instanceof Inet6Address ){ + throw new RuntimeException( "NetworkInterfaceV6List failed - found v6 address " + hostAddr.getHostAddress() ); + } + } + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/net/NetworkInterface/UniqueMacAddressesTest.java openjdk-6-6b34-1.13.6/jdk/test/java/net/NetworkInterface/UniqueMacAddressesTest.java --- openjdk-6-6b33-1.13.5/jdk/test/java/net/NetworkInterface/UniqueMacAddressesTest.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/net/NetworkInterface/UniqueMacAddressesTest.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Enumeration; +import java.util.List; + + +/* + * @test + * @bug 8021372 + * @summary Tests that the MAC addresses returned by NetworkInterface.getNetworkInterfaces are unique for each adapter. + * + */ +public class UniqueMacAddressesTest { + + public static void main(String[] args) throws Exception { + new UniqueMacAddressesTest().execute(); + System.out.println("UniqueMacAddressesTest: OK"); + } + + public UniqueMacAddressesTest() { + System.out.println("UniqueMacAddressesTest: start "); + } + + public void execute() throws Exception { + Enumeration networkInterfaces; + boolean areMacAddressesUnique = false; + List networkInterfaceList = new ArrayList(); + networkInterfaces = NetworkInterface.getNetworkInterfaces(); + + // build a list of NetworkInterface objects to test MAC address + // uniqueness + createNetworkInterfaceList(networkInterfaces, networkInterfaceList); + areMacAddressesUnique = checkMacAddressesAreUnique(networkInterfaceList); + if (!areMacAddressesUnique) { + throw new RuntimeException("mac address uniqueness test failed"); + } + } + + private boolean checkMacAddressesAreUnique ( + List networkInterfaces) throws Exception { + boolean uniqueMacAddresses = true; + for (NetworkInterface networkInterface : networkInterfaces) { + for (NetworkInterface comparisonNetIf : networkInterfaces) { + System.out.println("Comparing netif " + + networkInterface.getName() + " and netif " + + comparisonNetIf.getName()); + if (testMacAddressesEqual(networkInterface, comparisonNetIf)) { + uniqueMacAddresses = false; + break; + } + } + if (uniqueMacAddresses != true) + break; + } + return uniqueMacAddresses; + } + + private boolean testMacAddressesEqual(NetworkInterface netIf1, + NetworkInterface netIf2) throws Exception { + + byte[] rawMacAddress1 = null; + byte[] rawMacAddress2 = null; + boolean macAddressesEqual = false; + if (!netIf1.getName().equals(netIf2.getName())) { + System.out.println("compare hardware addresses " + + createMacAddressString(netIf1) + " and " + createMacAddressString(netIf2)); + rawMacAddress1 = netIf1.getHardwareAddress(); + rawMacAddress2 = netIf2.getHardwareAddress(); + macAddressesEqual = Arrays.equals(rawMacAddress1, rawMacAddress2); + } else { + // same interface + macAddressesEqual = false; + } + return macAddressesEqual; + } + + private String createMacAddressString (NetworkInterface netIf) throws Exception { + byte[] macAddr = netIf.getHardwareAddress(); + StringBuilder sb = new StringBuilder(); + if (macAddr != null) { + for (int i = 0; i < macAddr.length; i++) { + sb.append(String.format("%02X%s", macAddr[i], + (i < macAddr.length - 1) ? "-" : "")); + } + } + return sb.toString(); + } + + private void createNetworkInterfaceList(Enumeration nis, + List networkInterfaceList) throws Exception { + byte[] macAddr = null; + NetworkInterface netIf = null; + while (nis.hasMoreElements()) { + netIf = (NetworkInterface) nis.nextElement(); + macAddr = netIf.getHardwareAddress(); + if (macAddr != null) { + System.out + .println("Adding NetworkInterface " + netIf.getName()); + networkInterfaceList.add(netIf); + } + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/util/Currency/tablea1.txt openjdk-6-6b34-1.13.6/jdk/test/java/util/Currency/tablea1.txt --- openjdk-6-6b33-1.13.5/jdk/test/java/util/Currency/tablea1.txt 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/util/Currency/tablea1.txt 2015-01-20 02:17:36.000000000 +0000 @@ -1,12 +1,12 @@ # # -# Based on BSi's ISO4217 data - "TABLE A1.doc" + amendments up until MA139.doc -# (As of 18 June 2007) +# Amendments up until ISO 4217 AMENDMENT NUMBER 159 +# (As of 15 August 2014) # # Version FILEVERSION=1 -DATAVERSION=139 +DATAVERSION=159 # ISO 4217 currency data AF AFN 971 2 @@ -23,7 +23,7 @@ AU AUD 36 2 AT EUR 978 2 # MA 129 -AZ AZM 31 2 2005-12-31-20-00-00 AZN 944 2 +AZ AZN 944 2 BS BSD 44 2 BH BHD 48 3 BD BDT 50 2 @@ -33,6 +33,7 @@ BZ BZD 84 2 BJ XOF 952 0 BM BMD 60 2 +BQ USD 840 2 #BT INR 356 2 BT BTN 64 2 BO BOB 68 2 @@ -68,7 +69,8 @@ CI XOF 952 0 HR HRK 191 2 CU CUP 192 2 -CY CYP 196 2 +CW ANG 532 2 +CY EUR 978 2 CZ CZK 203 2 DK DKK 208 2 DJ DJF 262 0 @@ -80,7 +82,7 @@ #SV USD 840 2 GQ XAF 950 0 ER ERN 232 2 -EE EEK 233 2 +EE EUR 978 2 ET ETB 230 2 FK FKP 238 2 FO DKK 208 2 @@ -94,7 +96,7 @@ GM GMD 270 2 GE GEL 981 2 DE EUR 978 2 -GH GHC 288 2 2007-07-01-00-00-00 GHS 936 2 +GH GHS 936 2 GI GIP 292 2 GR EUR 978 2 GL DKK 208 2 @@ -133,14 +135,14 @@ KW KWD 414 3 KG KGS 417 2 LA LAK 418 2 -LV LVL 428 2 +LV LVL 428 2 2013-12-31-22-00-00 EUR 978 2 LB LBP 422 2 #LS ZAR 710 2 LS LSL 426 2 LR LRD 430 2 LY LYD 434 3 LI CHF 756 2 -LT LTL 440 2 +LT LTL 440 2 2014-12-31-22-00-00 EUR 978 2 LU EUR 978 2 MO MOP 446 2 MK MKD 807 2 @@ -149,7 +151,7 @@ MY MYR 458 2 MV MVR 462 2 ML XOF 952 0 -MT MTL 470 2 +MT EUR 978 2 MH USD 840 2 MQ EUR 978 2 MR MRO 478 2 @@ -164,7 +166,7 @@ MS XCD 951 2 MA MAD 504 2 # MA 130 -MZ MZM 508 2 2006-06-30-22-00-00 MZN 943 2 +MZ MZN 943 2 MM MMK 104 2 # MA 134 ME EUR 978 2 @@ -198,7 +200,7 @@ PR USD 840 2 QA QAR 634 2 RE EUR 978 2 -RO ROL 946 2 2005-06-30-21-00-00 RON 946 2 +RO RON 946 2 RU RUB 643 2 RW RWF 646 0 SH SHP 654 2 @@ -218,18 +220,20 @@ SC SCR 690 2 SL SLL 694 2 SG SGD 702 2 -SK SKK 703 2 +SK EUR 978 2 # MA 131 #SI SIT 705 2 SI EUR 978 2 SB SBD 90 2 SO SOS 706 2 ZA ZAR 710 2 +SS SSP 728 2 ES EUR 978 2 LK LKR 144 2 SD SDG 938 2 SR SRD 968 2 SJ NOK 578 2 +SX ANG 532 2 SZ SZL 748 2 SE SEK 752 2 CH CHF 756 2 @@ -249,10 +253,10 @@ # MA 128 #TR TRL 792 0 TR TRY 949 2 -TM TMM 795 2 +TM TMT 934 2 TC USD 840 2 TV AUD 36 2 -UG UGX 800 2 +UG UGX 800 0 UA UAH 980 2 AE AED 784 2 GB GBP 826 2 @@ -263,15 +267,15 @@ UY UYU 858 2 UZ UZS 860 2 VU VUV 548 0 -VE VEB 862 2 2008-01-01-04-00-00 VEF 937 2 -VN VND 704 2 +VE VEF 937 2 +VN VND 704 0 VG USD 840 2 VI USD 840 2 WF XPF 953 0 EH MAD 504 2 YE YER 886 2 -ZM ZMK 894 2 -ZW ZWD 716 2 +ZM ZMW 967 2 +ZW ZWL 932 2 #XAU XAU 959 #XBA XBA 955 #XBB XBB 956 diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/util/Currency/ValidateISO4217.java openjdk-6-6b34-1.13.6/jdk/test/java/util/Currency/ValidateISO4217.java --- openjdk-6-6b33-1.13.5/jdk/test/java/util/Currency/ValidateISO4217.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/util/Currency/ValidateISO4217.java 2015-01-20 02:17:36.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ */ /* * @test - * @bug 4819436 4942982 5104960 6544471 + * @bug 4819436 4942982 5104960 6544471 6627549 7066203 7195759 * @summary Validate ISO 4217 data for Currency class. */ @@ -86,11 +86,13 @@ {"JE", "GBP", "826", "2"}, // Jersey {"GG", "GBP", "826", "2"}, // Guernsey {"IM", "GBP", "826", "2"}, // Isle of Man + {"BL", "EUR", "978", "2"}, // Saint Barthelemy + {"MF", "EUR", "978", "2"}, // Saint Martin }; /* Codes that are obsolete, do not have related country */ static final String otherCodes = - "ADP-AFA-ATS-AYM-BEF-BGL-BOV-BYB-CLF-DEM-ESP-FIM-FRF-GRD-GWP-IEP-ITL-LUF-MGF-MXV-NLG-PTE-RUR-SDD-SIT-SRG-TPE-TRL-VEF-USN-USS-XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XTS-XXX-YUM-ZWN"; + "ADP-AFA-ATS-AYM-AZM-BEF-BGL-BOV-BYB-CLF-CUC-CYP-DEM-EEK-ESP-FIM-FRF-GHC-GRD-GWP-IEP-ITL-LUF-MGF-MTL-MXV-MZM-NLG-PTE-ROL-RUR-SDD-SIT-SKK-SRG-TMM-TPE-TRL-VEF-USN-USS-VEB-XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XSU-XTS-XUA-XXX-YUM-ZMK-ZWD-ZWN-ZWR"; static boolean err = false; diff -Nru openjdk-6-6b33-1.13.5/jdk/test/java/util/Locale/LocaleTest.java openjdk-6-6b34-1.13.6/jdk/test/java/util/Locale/LocaleTest.java --- openjdk-6-6b33-1.13.5/jdk/test/java/util/Locale/LocaleTest.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/java/util/Locale/LocaleTest.java 2015-01-20 02:17:38.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,7 +24,8 @@ * @test * @bug 4052404 4052440 4084688 4092475 4101316 4105828 4107014 4107953 4110613 * 4118587 4118595 4122371 4126371 4126880 4135316 4135752 4139504 4139940 4143951 - * 4147315 4147317 4147552 4335196 4778440 5010672 6475525 6544471 + * 4147315 4147317 4147552 4335196 4778440 5010672 6475525 6544471 6627549 6786276 + * 7066203 7085757 * @summary test Locales */ /* @@ -399,7 +400,7 @@ } /** - * @bug 4106155 4118587 + * @bug 4106155 4118587 7066203 */ public void TestGetLangsAndCountries() { // It didn't seem right to just do an exhaustive test of everything here, so I check @@ -439,8 +440,8 @@ String[] spotCheck2 = { "US", "CA", "GB", "FR", "DE", "IT", "JP", "KR", "CN", "TW", "TH" }; - if (test.length != 245) - errln("Expected getISOCountries to return 245 countries; it returned " + test.length); + if (test.length != 250) + errln("Expected getISOCountries to return 250 countries; it returned " + test.length); else { for (int i = 0; i < spotCheck2.length; i++) { int j; diff -Nru openjdk-6-6b33-1.13.5/jdk/test/javax/swing/JFileChooser/7036025/bug7036025.java openjdk-6-6b34-1.13.6/jdk/test/javax/swing/JFileChooser/7036025/bug7036025.java --- openjdk-6-6b33-1.13.5/jdk/test/javax/swing/JFileChooser/7036025/bug7036025.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/javax/swing/JFileChooser/7036025/bug7036025.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @bug 7036025 + @summary java.security.AccessControlException when creating JFileChooser in signed applet + @author Pavel Porvatov + @run main/othervm/policy=security.policy bug7036025 +*/ + +import javax.swing.*; +import java.io.File; + +public class bug7036025 { + public static final String DIR = "c:/temp"; + + public static void main(String[] args) throws Exception { + String systemLookAndFeelClassName = UIManager.getSystemLookAndFeelClassName(); + + if (!systemLookAndFeelClassName.toLowerCase().contains("windows")) { + System.out.println("The test is only for Windows OS."); + + return; + } + + File file = new File(DIR); + + if (!file.exists()) { + if (!file.mkdir()) { + throw new RuntimeException("Cannot create " + DIR); + } + + file.deleteOnExit(); + } + + UIManager.setLookAndFeel(systemLookAndFeelClassName); + + new JFileChooser(file); + + System.out.println("Test passed for LookAndFeel " + UIManager.getLookAndFeel().getName()); + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/javax/swing/JFileChooser/7036025/security.policy openjdk-6-6b34-1.13.6/jdk/test/javax/swing/JFileChooser/7036025/security.policy --- openjdk-6-6b33-1.13.5/jdk/test/javax/swing/JFileChooser/7036025/security.policy 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/javax/swing/JFileChooser/7036025/security.policy 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,5 @@ +grant { + permission java.io.FilePermission "C:\\temp\\*", "read"; + permission java.io.FilePermission "C:\\temp", "read,write,delete"; + permission java.util.PropertyPermission "*", "read"; +}; diff -Nru openjdk-6-6b33-1.13.5/jdk/test/javax/swing/system/6799345/TestShutdown.java openjdk-6-6b34-1.13.6/jdk/test/javax/swing/system/6799345/TestShutdown.java --- openjdk-6-6b33-1.13.5/jdk/test/javax/swing/system/6799345/TestShutdown.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/javax/swing/system/6799345/TestShutdown.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* @test diff -Nru openjdk-6-6b33-1.13.5/jdk/test/javax/xml/jaxp/parsers/8027359/XML11EntityScannerTest.java openjdk-6-6b34-1.13.6/jdk/test/javax/xml/jaxp/parsers/8027359/XML11EntityScannerTest.java --- openjdk-6-6b33-1.13.5/jdk/test/javax/xml/jaxp/parsers/8027359/XML11EntityScannerTest.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/javax/xml/jaxp/parsers/8027359/XML11EntityScannerTest.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8027359 + * @summary test that the XML11EntityScanner refreshes cache when it loads new data + * @run main XML11EntityScannerTest + */ + +import java.io.*; +import java.util.regex.Pattern; +import javax.xml.parsers.DocumentBuilderFactory; +import org.w3c.dom.*; + + +/** + * XML11EntityScanner functions similarly as XMLEntityScanner in handling data + * cache + */ +public class XML11EntityScannerTest { + static final String rawXML = + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + ""; + + /** + * main method. + * + * @param args Standard args. + */ + public static void main(String[] args) { + try { + final Document xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(rawXML.getBytes("UTF-8"))); + final Element identityElement = (Element) xmlDoc.getElementsByTagName("Identity").item(0); + final Element trustListElement = (Element) identityElement.getElementsByTagName("TrustList").item(0); + final NodeList trustList = trustListElement.getElementsByTagName("Trust"); + final Pattern keyPattern = Pattern.compile("USK@[%,~" + "*-_./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz" + "]+"); + for (int i = 0; i < trustList.getLength(); ++i) { + Element trustElement = (Element) trustList.item(i); + final String identity = trustElement.getAttribute("Identity"); + if (!keyPattern.matcher(identity).matches()) { + throw new RuntimeException("Parsing failure: Instead of USK URI I got: " + identity); + } + } + } catch (Exception ex) { + throw new RuntimeException(ex.getMessage()); + } + } + +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/javax/xml/jaxp/parsers/8032909/a_utf8.xml openjdk-6-6b34-1.13.6/jdk/test/javax/xml/jaxp/parsers/8032909/a_utf8.xml --- openjdk-6-6b33-1.13.5/jdk/test/javax/xml/jaxp/parsers/8032909/a_utf8.xml 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/javax/xml/jaxp/parsers/8032909/a_utf8.xml 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,5 @@ + + +UTF-8_Element + + diff -Nru openjdk-6-6b33-1.13.5/jdk/test/javax/xml/jaxp/parsers/8032909/a_utf8.xsl openjdk-6-6b34-1.13.6/jdk/test/javax/xml/jaxp/parsers/8032909/a_utf8.xsl --- openjdk-6-6b33-1.13.5/jdk/test/javax/xml/jaxp/parsers/8032909/a_utf8.xsl 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/javax/xml/jaxp/parsers/8032909/a_utf8.xsl 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff -Nru openjdk-6-6b33-1.13.5/jdk/test/javax/xml/jaxp/parsers/8032909/a_windows1252.xml openjdk-6-6b34-1.13.6/jdk/test/javax/xml/jaxp/parsers/8032909/a_windows1252.xml --- openjdk-6-6b33-1.13.5/jdk/test/javax/xml/jaxp/parsers/8032909/a_windows1252.xml 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/javax/xml/jaxp/parsers/8032909/a_windows1252.xml 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,5 @@ + + +Windows-1252_Element + + diff -Nru openjdk-6-6b33-1.13.5/jdk/test/javax/xml/jaxp/parsers/8032909/a_windows1252.xsl openjdk-6-6b34-1.13.6/jdk/test/javax/xml/jaxp/parsers/8032909/a_windows1252.xsl --- openjdk-6-6b33-1.13.5/jdk/test/javax/xml/jaxp/parsers/8032909/a_windows1252.xsl 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/javax/xml/jaxp/parsers/8032909/a_windows1252.xsl 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff -Nru openjdk-6-6b33-1.13.5/jdk/test/javax/xml/jaxp/parsers/8032909/XSLT.java openjdk-6-6b34-1.13.6/jdk/test/javax/xml/jaxp/parsers/8032909/XSLT.java --- openjdk-6-6b33-1.13.5/jdk/test/javax/xml/jaxp/parsers/8032909/XSLT.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/javax/xml/jaxp/parsers/8032909/XSLT.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8032909 + * @summary Test for XSLT string-length function with complementary chars + * @compile XSLT.java + * @run main/othervm XSLT a_utf16.xml a_utf16.xsl 1270 + * @run main/othervm XSLT a_utf8.xml a_utf8.xsl 130 + * @run main/othervm XSLT a_windows1252.xml a_windows1252.xsl 200 + */ + +import java.io.ByteArrayOutputStream; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; + +public class XSLT { + public static void main(String[] args) throws Exception { + + ByteArrayOutputStream resStream = new ByteArrayOutputStream(); + TransformerFactory trf = TransformerFactory.newInstance(); + Transformer tr = trf.newTransformer(new StreamSource(System.getProperty("test.src", ".")+"/"+args[1])); + String res, expectedRes; + tr.transform( new StreamSource(System.getProperty("test.src", ".")+"/"+args[0]), new StreamResult(resStream)); + res = resStream.toString(); + System.out.println("Transformation completed. Result:"+res); + + if (!res.replaceAll("\\s","").equals(args[2])) + throw new RuntimeException("Incorrect transformation result. Expected:"+args[2]+" Observed:"+res); + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/Makefile openjdk-6-6b34-1.13.6/jdk/test/Makefile --- openjdk-6-6b33-1.13.5/jdk/test/Makefile 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/Makefile 2015-01-20 02:20:42.000000000 +0000 @@ -551,7 +551,7 @@ JDK_ALL_TARGETS += jdk_tools2 jdk_tools2: com/sun/tools sun/jvmstat sun/tools tools vm $(call SharedLibraryPermissions,tools/launcher) - $(call RunOthervmBatch) + $(call RunSamevmBatch) # All tools tests jdk_tools: jdk_tools1 jdk_tools2 diff -Nru openjdk-6-6b33-1.13.5/jdk/test/ProblemList.txt openjdk-6-6b34-1.13.6/jdk/test/ProblemList.txt --- openjdk-6-6b33-1.13.5/jdk/test/ProblemList.txt 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/ProblemList.txt 2015-01-20 02:20:42.000000000 +0000 @@ -432,10 +432,16 @@ # Windows X64, RuntimeException: MyThread expected to have RUNNABLE but got WAITING java/lang/Thread/ThreadStateTest.java generic-all +# 8026772: test/sun/util/resources/TimeZone/Bug6317929.java failing +sun/util/resources/TimeZone/Bug6317929.java generic-all + ############################################################################ # jdk_management +# Failing, bug was filed: 6959636 +javax/management/loading/LibraryLoader/LibraryLoaderTest.java generic-all + # Fails on windows: TEST RESULT: Error. failed to clean up files after test javax/management/loading/LibraryLoader/LibraryLoaderTest.java windows-all @@ -1132,65 +1138,11 @@ # jdk_tools -# Some of the tools tests kind of require "othervm" or if they don't will -# always be firing up another VM anyway due to the nature of tools testing. -# So most if not all tools tests are now being run with "othervm" mode. -# Some of these tools tests have a tendency to use fixed ports, bad idea. - -# Failed 6963102, unreliable testcase -sun/tools/jstatd/jstatdDefaults.sh generic-all - # Native allocation errors on windows tools/pack200/MemoryAllocatorTest.java generic-all -# Output of jps differs from expected output. -# Invalid argument count on solaris-sparc and x64 -sun/tools/jstatd/jstatdPort.sh generic-all - -# othervm mode, Could not synchronize with target -sun/tools/jps/jps-l_1.sh generic-all -sun/tools/jps/jps-l_2.sh generic-all -sun/tools/jps/jps-lm.sh generic-all -sun/tools/jps/jps-Vvml_2.sh generic-all -sun/tools/jps/jps-m_2.sh generic-all - # Fails with othervm on OpenSolaris -sun/tools/jps/jps-Defaults.sh generic-all -sun/tools/jps/jps-V_2.sh generic-all -sun/tools/jps/jps-Vm_2.sh generic-all -sun/tools/jps/jps-Vvml.sh generic-all -sun/tools/jps/jps-v_1.sh generic-all sun/tools/jps/jps-vm_1.sh generic-all -sun/tools/jps/jps-Vvm.sh generic-all -sun/tools/jps/jps-m.sh generic-all - -# Server name error, port 2098 problem? -sun/tools/jstatd/jstatdServerName.sh generic-all - -# Problems on windows, jmap.exe hangs? -com/sun/tools/attach/BasicTests.sh windows-all - -# Unexpected Monitor Exception, solaris sparc -client -sun/jvmstat/monitor/MonitoredVm/MonitorVmStartTerminate.sh generic-all - -# Problems on windows, jmap.exe hangs? (these run jmap) -sun/tools/jmap/Basic.sh windows-all - -# Invalid argument count on solaris-sparc and x64 -sun/tools/jstatd/jstatdDefaults.sh solaris-all - -# Solaris sparcv9, jps output does not match, x64 different -sun/tools/jstatd/jstatdExternalRegistry.sh solaris-all - -# Solaris 10 sparc 32bit -client, java.lang.AssertionError: Some tests failed -tools/jar/JarEntryTime.java generic-all - -# These tests fail on solaris sparc, all the time -tools/jar/ChangeDir.java generic-all - -# Cannot write jar, on OpenSolaris and windows -# Also, possible problems on windows, jmap.exe hangs? -tools/jar/index/MetaInf.java generic-all # Cannot compile on OpenSolaris? com/sun/tools/extcheck/TestExtcheckArgs.java generic-all diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/awt/font/ClassLoaderLeakTest.java openjdk-6-6b34-1.13.6/jdk/test/sun/awt/font/ClassLoaderLeakTest.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/awt/font/ClassLoaderLeakTest.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/awt/font/ClassLoaderLeakTest.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2010 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /** * @test diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/java2d/OpenGL/DrawHugeImageTest.java openjdk-6-6b34-1.13.6/jdk/test/sun/java2d/OpenGL/DrawHugeImageTest.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/java2d/OpenGL/DrawHugeImageTest.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/java2d/OpenGL/DrawHugeImageTest.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +/* + * @test + * @bug 8040617 + * @summary Test verifies that an attempt to get an accelerated copy of + * a huge buffered image does not result in an OOME. + * + * @run main DrawHugeImageTest + */ + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsEnvironment; +import java.awt.image.BufferedImage; +import java.awt.image.VolatileImage; + +public class DrawHugeImageTest { + // we have to render the BI source several times in order + // to get an accelerated copy to be used. + static { + System.setProperty("sun.java2d.accthreshold", "1"); + } + private static final int max_rendering_count = 5; + + private static final Color srcColor = Color.red; + private static final Color dstColor = Color.blue; + + public static void main(String[] args) { + BufferedImage src = createSrc(); + + VolatileImage dst = createDst(); + System.out.println("Dst: " + dst); + boolean status; + int count = max_rendering_count; + + do { + System.out.println("render image: " + (max_rendering_count - count)); + status = render(src, dst); + + } while (status && count-- > 0); + + if (!status || count > 0) { + throw new RuntimeException("Test failed: " + count); + } + } + + private static boolean render(BufferedImage src, VolatileImage dst) { + int cnt = 5; + do { + Graphics2D g = dst.createGraphics(); + g.setColor(dstColor); + g.fillRect(0, 0, dst.getWidth(), dst.getHeight()); + g.drawImage(src, 0, 0, null); + g.dispose(); + } while (dst.contentsLost() && (--cnt > 0)); + + if (cnt == 0) { + System.err.println("Test failed: unable to render to volatile destination"); + return false; + } + + BufferedImage s = dst.getSnapshot(); + + return s.getRGB(1,1) == srcColor.getRGB(); + } + + private static BufferedImage createSrc() { + final int w = 20000; + final int h = 5; + + BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_3BYTE_BGR); + Graphics2D g = img.createGraphics(); + g.setColor(srcColor); + g.fillRect(0, 0, w, h); + g.dispose(); + + return img; + } + + private static VolatileImage createDst() { + GraphicsConfiguration gc = + GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(); + + return gc.createCompatibleVolatileImage(200, 200); + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/jvmstat/testlibrary/utils.sh openjdk-6-6b34-1.13.6/jdk/test/sun/jvmstat/testlibrary/utils.sh --- openjdk-6-6b33-1.13.5/jdk/test/sun/jvmstat/testlibrary/utils.sh 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/jvmstat/testlibrary/utils.sh 2015-01-20 02:20:42.000000000 +0000 @@ -40,7 +40,7 @@ OS=`uname -s` case ${OS} in - Windows_*) + Windows_* | CYGWIN*) PS=";" FS="\\" ;; @@ -54,7 +54,7 @@ verify_os() { OS=`uname -s` case ${OS} in - Windows_95 | Windows_98 | Windows_ME) + Windows_95 | Windows_98 | Windows_ME | CYGWIN* ) echo "Test bypassed: jvmstat feature not supported on ${OS}" exit 0 ;; @@ -189,3 +189,37 @@ echo "Error sending term signal to ${kpid}!" fi } + +# check to see if a port is free +checkPort() # port +{ + inuse=`netstat -a | egrep "\.$1"` + if [ "${inuse}" = "" ] ; then + echo "free" + else + echo "inuse" + fi +} + +# Get a free port, where port+1 is also free, return 0 when giving up +freePort() +{ + start=3000 + while [ ${start} -lt 3030 ] ; do + port1=`expr ${start} '+' $$ '%' 1000` + port2=`expr ${port1} '+' 1` + if [ "`checkPort ${port1}`" = "inuse" \ + -o "`checkPort ${port2}`" = "inuse" ] ; then + start=`expr ${start} '+' 1` + else + break + fi + done + if [ "`checkPort ${port1}`" = "inuse" \ + -o "`checkPort ${port2}`" = "inuse" ] ; then + port1="0" + fi + echo "${port1}" +} + + diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/net/www/http/ChunkedOutputStream/Test.java openjdk-6-6b34-1.13.6/jdk/test/sun/net/www/http/ChunkedOutputStream/Test.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/net/www/http/ChunkedOutputStream/Test.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/net/www/http/ChunkedOutputStream/Test.java 2015-01-20 02:20:42.000000000 +0000 @@ -23,7 +23,7 @@ /** * @test - * @bug 5026745 + * @bug 5026745 6631048 * @run main/othervm/timeout=500 Test * @summary Cannot flush output stream when writing to an HttpUrlConnection */ @@ -158,6 +158,50 @@ exchange.sendResponseHeaders(200, 0); } break; + case 10: /* test11 */ + printRequestURI(exchange); + is = exchange.getRequestBody(); + s = read (is, str1.length()); + + error = false; + for (int i=10; i< 30 * 1024; i++) { + byte c = (byte)is.read(); + + if (c != (byte)i) { + error = true; + System.out.println ("error at position " + i); + } + } + if (!s.equals(str1) ) { + System.out.println ("received string : " + s); + exchange.sendResponseHeaders(500, 0); + } else if (error) { + System.out.println ("error"); + exchange.sendResponseHeaders(500, 0); + } else { + exchange.sendResponseHeaders(200, 0); + } + break; + case 11: /* test12 */ + printRequestURI(exchange); + is = exchange.getRequestBody(); + + error = false; + for (int i=10; i< 30 * 1024; i++) { + byte c = (byte)is.read(); + + if (c != (byte)i) { + error = true; + System.out.println ("error at position " + i); + } + } + if (error) { + System.out.println ("error"); + exchange.sendResponseHeaders(500, 0); + } else { + exchange.sendResponseHeaders(200, 0); + } + break; } exchange.close(); count ++; @@ -390,6 +434,56 @@ } } + static void test11 (String u) throws Exception { + URL url = new URL (u); + System.out.println ("client opening connection to: " + u); + HttpURLConnection urlc = (HttpURLConnection)url.openConnection (); + urlc.setChunkedStreamingMode (36 * 1024); + urlc.setDoOutput(true); + urlc.setRequestMethod ("POST"); + OutputStream os = urlc.getOutputStream (); + byte[] buf = new byte [30 * 1024]; + for (int i=0; i< 30 * 1024; i++) { + buf[i] = (byte) i; + } + /* write a small bit first, and then the large buffer */ + os.write (str1.getBytes()); + //os.write (buf, 10, buf.length - 10); /* skip 10 bytes to test offset */ + os.write (buf, 10, (10 * 1024) - 10); + os.write (buf, (10 * 1024), (10 * 1024)); + os.write (buf, (20 * 1024), (10 * 1024)); + os.close(); + InputStream is = urlc.getInputStream(); + is.close(); + int ret = urlc.getResponseCode(); + if (ret != 200) { + throw new Exception ("Expected 200: got " + ret); + } + } + + static void test12 (String u) throws Exception { + URL url = new URL (u); + System.out.println ("client opening connection to: " + u); + HttpURLConnection urlc = (HttpURLConnection)url.openConnection (); + urlc.setChunkedStreamingMode (36 * 1024); + urlc.setDoOutput(true); + urlc.setRequestMethod ("POST"); + OutputStream os = urlc.getOutputStream (); + byte[] buf = new byte [30 * 1024]; + for (int i=0; i< 30 * 1024; i++) { + buf[i] = (byte) i; + } + os.write (buf, 10, buf.length - 10); /* skip 10 bytes to test offset */ + os.close(); + InputStream is = urlc.getInputStream(); + is.close(); + int ret = urlc.getResponseCode(); + if (ret != 200) { + throw new Exception ("Expected 200: got " + ret); + } + } + + static com.sun.net.httpserver.HttpServer httpserver; public static void main (String[] args) throws Exception { @@ -411,6 +505,8 @@ test8("http://localhost:"+ port + "/test/test8"); test9("http://localhost:"+ port + "/test/test9"); test10("http://localhost:"+ port + "/test/test10"); + test11("http://localhost:"+ port + "/test/test11"); + test12("http://localhost:"+ port + "/test/test12"); } finally { if (httpserver != null) httpserver.stop(0); diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/net/www/http/HttpClient/B6726695.java openjdk-6-6b34-1.13.6/jdk/test/sun/net/www/http/HttpClient/B6726695.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/net/www/http/HttpClient/B6726695.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/net/www/http/HttpClient/B6726695.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,218 @@ +/* + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6726695 + * @summary HttpURLConnection shoul support 'Expect: 100-contimue' headers for PUT +*/ + +import java.net.*; +import java.io.*; + +public class B6726695 extends Thread { + private ServerSocket server = null; + private int port = 0; + private byte[] data = new byte[512]; + private String boundary = "----------------7774563516523621"; + + public static void main(String[] args) throws Exception { + B6726695 test = new B6726695(); + // Exit even if server is still running + test.setDaemon(true); + // start server + test.start(); + // run test + test.test(); + } + + public B6726695() { + try { + server = new ServerSocket(0); + port = server.getLocalPort(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void test() throws Exception { + /** + * This is a hardcoded test. The server side expects 3 requests with a + * Expect: 100-continue header. It will reject the 1st one and accept + * the second one. Thus allowing us to test both scenarios. + * The 3rd case is the simulation of a server that just plains ignore + * the Expect: 100-Continue header. So the POST should proceed after + * a timeout. + */ + URL url = new URL("http://localhost:" + port + "/foo"); + + // 1st Connection. Should be rejected. I.E. get a ProtocolException + URLConnection con = url.openConnection(); + HttpURLConnection http = (HttpURLConnection) con; + http.setRequestMethod("POST"); + http.setRequestProperty("Expect", "100-Continue"); + http.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); + http.setDoOutput(true); + http.setFixedLengthStreamingMode(512); + OutputStream out = null; + int errorCode = -1; + try { + out = http.getOutputStream(); + } catch (ProtocolException e) { + errorCode = http.getResponseCode(); + } + if (errorCode != 417) { + throw new RuntimeException("Didn't get the ProtocolException"); + } + + // 2nd connection. Should be accepted by server. + http = (HttpURLConnection) url.openConnection(); + http.setRequestMethod("POST"); + http.setRequestProperty("Expect", "100-Continue"); + http.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); + http.setDoOutput(true); + http.setFixedLengthStreamingMode(data.length); + out = null; + try { + out = http.getOutputStream(); + } catch (ProtocolException e) { + } + if (out == null) { + throw new RuntimeException("Didn't get an OutputStream"); + } + out.write(data); + out.flush(); + errorCode = http.getResponseCode(); + if (errorCode != 200) { + throw new RuntimeException("Response code is " + errorCode); + } + out.close(); + + // 3rd connection. Simulate a server that doesn't implement 100-continue + http = (HttpURLConnection) url.openConnection(); + http.setRequestMethod("POST"); + http.setRequestProperty("Expect", "100-Continue"); + http.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); + http.setDoOutput(true); + http.setFixedLengthStreamingMode(data.length); + out = null; + try { + out = http.getOutputStream(); + } catch (ProtocolException e) { + } + if (out == null) { + throw new RuntimeException("Didn't get an OutputStream"); + } + out.write(data); + out.flush(); + out.close(); + errorCode = http.getResponseCode(); + if (errorCode != 200) { + throw new RuntimeException("Response code is " + errorCode); + } + } + + + @Override + public void run() { + try { + // Fist connection: don't accetpt the request + Socket s = server.accept(); + serverReject(s); + // Second connection: accept the request (send 100-continue) + s = server.accept(); + serverAccept(s); + // 3rd connection: just ignore the 'Expect:' header + s = server.accept(); + serverIgnore(s); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void serverReject(Socket s) throws IOException { + BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream())); + PrintStream out = new PrintStream(new BufferedOutputStream(s.getOutputStream())); + String line = null; + do { + line = in.readLine(); + } while (line != null && line.length() != 0); + + out.print("HTTP/1.1 417 Expectation Failed\r\n"); + out.print("Server: Sun-Java-System-Web-Server/7.0\r\n"); + out.print("Connection: close\r\n"); + out.print("Content-Length: 0\r\n"); + out.print("\r\n"); + out.flush(); + out.close(); + in.close(); + } + + public void serverAccept(Socket s) throws IOException { + BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream())); + PrintStream out = new PrintStream(new BufferedOutputStream(s.getOutputStream())); + String line = null; + do { + line = in.readLine(); + } while (line != null && line.length() != 0); + + // Send 100-Continue + out.print("HTTP/1.1 100 Continue\r\n"); + out.print("\r\n"); + out.flush(); + // Then read the body + char[] cbuf = new char[512]; + int l = in.read(cbuf); + // finally send the 200 OK + out.print("HTTP/1.1 200 OK"); + out.print("Server: Sun-Java-System-Web-Server/7.0\r\n"); + out.print("Connection: close\r\n"); + out.print("Content-Length: 0\r\n"); + out.print("\r\n"); + out.flush(); + out.close(); + in.close(); + } + + public void serverIgnore(Socket s) throws IOException { + BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream())); + PrintStream out = new PrintStream(new BufferedOutputStream(s.getOutputStream())); + String line = null; + do { + line = in.readLine(); + } while (line != null && line.length() != 0); + + // Then read the body + char[] cbuf = new char[512]; + int l = in.read(cbuf); + // finally send the 200 OK + out.print("HTTP/1.1 200 OK"); + out.print("Server: Sun-Java-System-Web-Server/7.0\r\n"); + out.print("Content-Length: 0\r\n"); + out.print("Connection: close\r\n"); + out.print("\r\n"); + out.flush(); + out.close(); + in.close(); + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/net/www/protocol/http/B6641309.java openjdk-6-6b34-1.13.6/jdk/test/sun/net/www/protocol/http/B6641309.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/net/www/protocol/http/B6641309.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/net/www/protocol/http/B6641309.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6641309 + * @summary Wrong Cookie separator used in HttpURLConnection + */ + +import java.net.*; +import java.util.*; +import java.io.*; +import com.sun.net.httpserver.*; +import java.util.concurrent.Executors; +import java.util.concurrent.ExecutorService; + +public class B6641309 +{ + com.sun.net.httpserver.HttpServer httpServer; + ExecutorService executorService; + + public static void main(String[] args) + { + new B6641309(); + } + + public B6641309() + { + try { + startHttpServer(); + doClient(); + } catch (IOException ioe) { + System.err.println(ioe); + } + } + + void doClient() { + CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL)); + try { + InetSocketAddress address = httpServer.getAddress(); + + // GET Request + URL url = new URL("http://localhost:" + address.getPort() + "/test/"); + CookieHandler ch = CookieHandler.getDefault(); + Map> header = new HashMap>(); + List values = new LinkedList(); + values.add("Test1Cookie=TEST1; path=/test/"); + values.add("Test2Cookie=TEST2; path=/test/"); + header.put("Set-Cookie", values); + + // preload the CookieHandler with a cookie for our URL + // so that it will be sent during the first request + ch.put(url.toURI(), header); + HttpURLConnection uc = (HttpURLConnection)url.openConnection(); + int resp = uc.getResponseCode(); + if (resp != 200) + throw new RuntimeException("Failed: Response code from GET is not 200"); + + System.out.println("Response code from GET = 200 OK"); + + } catch (IOException e) { + e.printStackTrace(); + } catch (URISyntaxException e) { + e.printStackTrace(); + } finally { + httpServer.stop(1); + executorService.shutdown(); + } + } + + /** + * Http Server + */ + public void startHttpServer() throws IOException { + httpServer = com.sun.net.httpserver.HttpServer.create(new InetSocketAddress(0), 0); + + // create HttpServer context + HttpContext ctx = httpServer.createContext("/test/", new MyHandler()); + + executorService = Executors.newCachedThreadPool(); + httpServer.setExecutor(executorService); + httpServer.start(); + } + + class MyHandler implements HttpHandler { + public void handle(HttpExchange t) throws IOException { + InputStream is = t.getRequestBody(); + Headers reqHeaders = t.getRequestHeaders(); + int i = 0; + // Read till end of stream + do { + i = is.read(); + } while (i != -1); + is.close(); + + List cookies = reqHeaders.get("Cookie"); + if (cookies != null) { + for (String str : cookies) { + // The separator between the 2 cookies should be + // a semi-colon AND a space + if (str.equals("Test1Cookie=TEST1; Test2Cookie=TEST2")) + t.sendResponseHeaders(200, -1); + } + } + t.sendResponseHeaders(400, -1); + t.close(); + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/jgss/DefaultGssConfig.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/jgss/DefaultGssConfig.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/jgss/DefaultGssConfig.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/jgss/DefaultGssConfig.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,6 +34,7 @@ import java.security.URIParameter; import javax.security.auth.login.Configuration; import sun.security.jgss.GSSUtil; +import sun.security.jgss.GSSCaller; import sun.security.jgss.LoginConfigImpl; public class DefaultGssConfig { @@ -56,11 +57,11 @@ Configuration.getConfiguration(); // 3. Make sure there're default entries for GSS krb5 client/server - LoginConfigImpl lc = new LoginConfigImpl(GSSUtil.CALLER_INITIATE, GSSUtil.GSS_KRB5_MECH_OID); + LoginConfigImpl lc = new LoginConfigImpl(GSSCaller.CALLER_INITIATE, GSSUtil.GSS_KRB5_MECH_OID); if (lc.getAppConfigurationEntry("").length == 0) { throw new Exception("No default config for GSS krb5 client"); } - lc = new LoginConfigImpl(GSSUtil.CALLER_ACCEPT, GSSUtil.GSS_KRB5_MECH_OID); + lc = new LoginConfigImpl(GSSCaller.CALLER_ACCEPT, GSSUtil.GSS_KRB5_MECH_OID); if (lc.getAppConfigurationEntry("").length == 0) { throw new Exception("No default config for GSS krb5 server"); } diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/jgss/GssNPE.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/jgss/GssNPE.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/jgss/GssNPE.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/jgss/GssNPE.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,6 @@ * @summary GSS throws NPE when the JAAS config file does not exist */ -import org.ietf.jgss.*; import sun.security.jgss.*; public class GssNPE { @@ -40,7 +39,7 @@ // not exist. New caller-enabled JGSS changed this. this bug fix will // revert to the old behavior. try { - GSSUtil.login(GSSUtil.CALLER_INITIATE, GSSUtil.GSS_KRB5_MECH_OID); + GSSUtil.login(GSSCaller.CALLER_INITIATE, GSSUtil.GSS_KRB5_MECH_OID); } catch (SecurityException se) { if (se.getCause() instanceof java.io.IOException) { // what had been and should be... diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/Action.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/Action.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/Action.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/Action.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * Action used in Context.doAs + */ +public interface Action { + /** + * This method always reads a byte block and emits another one + */ + byte[] run(Context s, byte[] input) throws Exception; +} + diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/BasicKrb5Test.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/BasicKrb5Test.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/BasicKrb5Test.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/BasicKrb5Test.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6706974 + * @summary Add krb5 test infrastructure + */ + +import org.ietf.jgss.GSSName; +import sun.security.jgss.GSSUtil; +import sun.security.krb5.Config; +import sun.security.krb5.internal.crypto.EType; + +/** + * Basic JGSS/krb5 test with 3 parties: client, server, backend server. Each + * party uses JAAS login to get subjects and executes JGSS calls using + * Subject.doAs. + */ +public class BasicKrb5Test { + + /** + * @param args empty or etype + */ + public static void main(String[] args) + throws Exception { + + String etype = null; + if (args.length > 0) { + etype = args[0]; + } + + // Creates and starts the KDC. This line must be put ahead of etype check + // since the check needs a krb5.conf. + new OneKDC(etype).writeJAASConf(); + + System.out.println("Testing etype " + etype); + if (etype != null && !EType.isSupported(Config.getInstance().getType(etype))) { + System.out.println("Not supported."); + System.exit(0); + } + + new BasicKrb5Test().go(OneKDC.SERVER, OneKDC.BACKEND); + } + + void go(final String server, final String backend) throws Exception { + Context c, s, s2, b; + c = Context.fromJAAS("client"); + s = Context.fromJAAS("server"); + b = Context.fromJAAS("backend"); + + c.startAsClient(server, GSSUtil.GSS_KRB5_MECH_OID); + c.x().requestCredDeleg(true); + s.startAsServer(GSSUtil.GSS_KRB5_MECH_OID); + + c.status(); + s.status(); + + Context.handshake(c, s); + GSSName client = c.x().getSrcName(); + + c.status(); + s.status(); + + Context.transmit("i say high --", c, s); + Context.transmit(" you say low", s, c); + + s2 = s.delegated(); + s.dispose(); + s = null; + + s2.startAsClient(backend, GSSUtil.GSS_KRB5_MECH_OID); + b.startAsServer(GSSUtil.GSS_KRB5_MECH_OID); + + s2.status(); + b.status(); + + Context.handshake(s2, b); + GSSName client2 = b.x().getSrcName(); + + if (!client.equals(client2)) { + throw new Exception("Delegation failed"); + } + + s2.status(); + b.status(); + + Context.transmit("you say hello --", s2, b); + Context.transmit(" i say goodbye", b, s2); + + s2.dispose(); + b.dispose(); + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/basic.sh openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/basic.sh --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/basic.sh 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/basic.sh 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,65 @@ +# +# Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# @test +# @bug 6706974 +# @summary Add krb5 test infrastructure +# @run shell/timeout=300 basic.sh +# + +if [ "${TESTSRC}" = "" ] ; then + TESTSRC="." +fi +if [ "${TESTJAVA}" = "" ] ; then + echo "TESTJAVA not set. Test cannot execute." + echo "FAILED!!!" + exit 1 +fi + +# set platform-dependent variables +OS=`uname -s` +case "$OS" in + Windows_* ) + FS="\\" + ;; + * ) + FS="/" + ;; +esac + +${TESTJAVA}${FS}bin${FS}javac -d . \ + ${TESTSRC}${FS}BasicKrb5Test.java \ + ${TESTSRC}${FS}KDC.java \ + ${TESTSRC}${FS}OneKDC.java \ + ${TESTSRC}${FS}Action.java \ + ${TESTSRC}${FS}Context.java \ + || exit 10 +${TESTJAVA}${FS}bin${FS}java -Dtest.src=$TESTSRC BasicKrb5Test || exit 100 +${TESTJAVA}${FS}bin${FS}java -Dtest.src=$TESTSRC BasicKrb5Test des-cbc-crc || exit 1 +${TESTJAVA}${FS}bin${FS}java -Dtest.src=$TESTSRC BasicKrb5Test des-cbc-md5 || exit 3 +${TESTJAVA}${FS}bin${FS}java -Dtest.src=$TESTSRC BasicKrb5Test des3-cbc-sha1 || exit 16 +${TESTJAVA}${FS}bin${FS}java -Dtest.src=$TESTSRC BasicKrb5Test aes128-cts || exit 17 +${TESTJAVA}${FS}bin${FS}java -Dtest.src=$TESTSRC BasicKrb5Test aes256-cts || exit 18 +${TESTJAVA}${FS}bin${FS}java -Dtest.src=$TESTSRC BasicKrb5Test rc4-hmac || exit 23 + +exit 0 diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/CleanState.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/CleanState.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/CleanState.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/CleanState.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6716534 + * @summary Krb5LoginModule has not cleaned temp info between authentication attempts + */ +import com.sun.security.auth.module.Krb5LoginModule; +import java.util.HashMap; +import java.util.Map; +import javax.security.auth.Subject; +import javax.security.auth.callback.Callback; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.callback.NameCallback; +import javax.security.auth.callback.PasswordCallback; + +public class CleanState { + public static void main(String[] args) throws Exception { + CleanState x = new CleanState(); + new OneKDC(null); + x.go(); + } + + void go() throws Exception { + Krb5LoginModule krb5 = new Krb5LoginModule(); + + final String name = OneKDC.USER; + final char[] password = OneKDC.PASS; + char[] badpassword = "hellokitty".toCharArray(); + + Map map = new HashMap(); + map.put("useTicketCache", "false"); + map.put("doNotPrompt", "false"); + map.put("tryFirstPass", "true"); + Map shared = new HashMap(); + shared.put("javax.security.auth.login.name", name); + shared.put("javax.security.auth.login.password", badpassword); + + krb5.initialize(new Subject(), new CallbackHandler() { + @Override + public void handle(Callback[] callbacks) { + for(Callback callback: callbacks) { + if (callback instanceof NameCallback) { + ((NameCallback)callback).setName(name); + } + if (callback instanceof PasswordCallback) { + ((PasswordCallback)callback).setPassword(password); + } + } + } + }, shared, map); + krb5.login(); + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/Context.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/Context.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/Context.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/Context.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,395 @@ +/* + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.sun.security.auth.module.Krb5LoginModule; +import java.security.PrivilegedActionException; +import java.security.PrivilegedExceptionAction; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import javax.security.auth.Subject; +import javax.security.auth.kerberos.KerberosKey; +import javax.security.auth.kerberos.KerberosTicket; +import javax.security.auth.login.LoginContext; +import org.ietf.jgss.GSSContext; +import org.ietf.jgss.GSSCredential; +import org.ietf.jgss.GSSException; +import org.ietf.jgss.GSSManager; +import org.ietf.jgss.GSSName; +import org.ietf.jgss.MessageProp; +import org.ietf.jgss.Oid; + +/** + * Context of a JGSS subject, encapsulating Subject and GSSContext. + * + * Three "constructors", which acquire the (private) credentials and fill + * it into the Subject: + * + * 1. static fromJAAS(): Creates a Context using a JAAS login config entry + * 2. static fromUserPass(): Creates a Context using a username and a password + * 3. delegated(): A new context which uses the delegated credentials from a + * previously established acceptor Context + * + * Two context initiators, which create the GSSContext object inside: + * + * 1. startAsClient() + * 2. startAsServer() + * + * Privileged action: + * doAs(): Performs an action in the name of the Subject + * + * Handshake process: + * static handShake(initiator, acceptor) + * + * A four-phase typical data communication which includes all four GSS + * actions (wrap, unwrap, getMic and veryfyMiC): + * static transmit(message, from, to) + */ +public class Context { + + private Subject s; + private GSSContext x; + private boolean f; // context established? + private String name; + private GSSCredential cred; // see static method delegated(). + + private Context() {} + + /** + * Using the delegated credentials from a previous acceptor + * @param c + */ + public Context delegated() throws Exception { + Context out = new Context(); + out.s = s; + out.cred = x.getDelegCred(); + out.name = name + " as " + out.cred.getName().toString(); + return out; + } + + /** + * Logins with a JAAS login config entry name + */ + public static Context fromJAAS(final String name) throws Exception { + Context out = new Context(); + out.name = name; + LoginContext lc = new LoginContext(name); + lc.login(); + out.s = lc.getSubject(); + return out; + } + + /** + * Logins with a username and a password, using Krb5LoginModule directly + * @param storeKey true if key should be saved, used on acceptor side + */ + public static Context fromUserPass(String user, char[] pass, boolean storeKey) throws Exception { + Context out = new Context(); + out.name = user; + out.s = new Subject(); + Krb5LoginModule krb5 = new Krb5LoginModule(); + Map map = new HashMap(); + Map shared = new HashMap(); + + if (pass != null) { + map.put("useFirstPass", "true"); + shared.put("javax.security.auth.login.name", user); + shared.put("javax.security.auth.login.password", pass); + } else { + map.put("doNotPrompt", "true"); + map.put("useTicketCache", "true"); + if (user != null) { + map.put("principal", user); + } + } + if (storeKey) { + map.put("storeKey", "true"); + } + + krb5.initialize(out.s, null, shared, map); + krb5.login(); + krb5.commit(); + return out; + } + + /** + * Starts as a client + * @param target communication peer + * @param mech GSS mech + * @throws java.lang.Exception + */ + public void startAsClient(final String target, final Oid mech) throws Exception { + doAs(new Action() { + @Override + public byte[] run(Context me, byte[] dummy) throws Exception { + GSSManager m = GSSManager.getInstance(); + me.x = m.createContext( + target.indexOf('@') < 0 ? + m.createName(target, null) : + m.createName(target, GSSName.NT_HOSTBASED_SERVICE), + mech, + cred, + GSSContext.DEFAULT_LIFETIME); + return null; + } + }, null); + f = false; + } + + /** + * Starts as a server + * @param mech GSS mech + * @throws java.lang.Exception + */ + public void startAsServer(final Oid mech) throws Exception { + doAs(new Action() { + @Override + public byte[] run(Context me, byte[] dummy) throws Exception { + GSSManager m = GSSManager.getInstance(); + me.x = m.createContext(m.createCredential( + null, + GSSCredential.INDEFINITE_LIFETIME, + mech, + GSSCredential.ACCEPT_ONLY)); + return null; + } + }, null); + f = false; + } + + /** + * Accesses the internal GSSContext object. Currently it's used for -- + * + * 1. calling requestXXX() before handshake + * 2. accessing source name + * + * Note: If the application needs to do any privileged call on this + * object, please use doAs(). Otherwise, it can be done directly. The + * methods listed above are all non-privileged calls. + * + * @return the GSSContext object + */ + public GSSContext x() { + return x; + } + + /** + * Disposes the GSSContext within + * @throws org.ietf.jgss.GSSException + */ + public void dispose() throws GSSException { + x.dispose(); + } + + /** + * Does something using the Subject inside + * @param action the action + * @param in the input byte + * @return the output byte + * @throws java.lang.Exception + */ + public byte[] doAs(final Action action, final byte[] in) throws Exception { + try { + return Subject.doAs(s, new PrivilegedExceptionAction() { + + @Override + public byte[] run() throws Exception { + return action.run(Context.this, in); + } + }); + } catch (PrivilegedActionException pae) { + throw pae.getException(); + } + } + + /** + * Prints status of GSSContext and Subject + * @throws java.lang.Exception + */ + public void status() throws Exception { + System.out.println("STATUS OF " + name.toUpperCase()); + try { + StringBuffer sb = new StringBuffer(); + if (x.getAnonymityState()) { + sb.append("anon, "); + } + if (x.getConfState()) { + sb.append("conf, "); + } + if (x.getCredDelegState()) { + sb.append("deleg, "); + } + if (x.getIntegState()) { + sb.append("integ, "); + } + if (x.getMutualAuthState()) { + sb.append("mutual, "); + } + if (x.getReplayDetState()) { + sb.append("rep det, "); + } + if (x.getSequenceDetState()) { + sb.append("seq det, "); + } + System.out.println("Context status of " + name + ": " + sb.toString()); + System.out.println(x.getSrcName() + " -> " + x.getTargName()); + } catch (Exception e) { + ;// Don't care + } + System.out.println("====================================="); + for (Object o : s.getPrivateCredentials()) { + System.out.println(" " + o.getClass()); + if (o instanceof KerberosTicket) { + KerberosTicket kt = (KerberosTicket) o; + System.out.println(" " + kt.getServer() + " for " + kt.getClient()); + } else if (o instanceof KerberosKey) { + KerberosKey kk = (KerberosKey) o; + System.out.print(" " + kk.getKeyType() + " " + kk.getVersionNumber() + " " + kk.getAlgorithm() + " "); + for (byte b : kk.getEncoded()) { + System.out.printf("%02X", b & 0xff); + } + System.out.println(); + } else if (o instanceof Map) { + Map map = (Map) o; + for (Object k : map.keySet()) { + System.out.println(" " + k + ": " + map.get(k)); + } + } + } + } + + /** + * Transmits a message from one Context to another. The sender wraps the + * message and sends it to the receiver. The receiver unwraps it, creates + * a MIC of the clear text and sends it back to the sender. The sender + * verifies the MIC against the message sent earlier. + * @param message the message + * @param s1 the sender + * @param s2 the receiver + * @throws java.lang.Exception If anything goes wrong + */ + static public void transmit(final String message, final Context s1, + final Context s2) throws Exception { + final byte[] messageBytes = message.getBytes(); + System.out.printf("-------------------- TRANSMIT from %s to %s------------------------\n", + s1.name, s2.name); + + byte[] t = s1.doAs(new Action() { + @Override + public byte[] run(Context me, byte[] dummy) throws Exception { + System.out.println("wrap"); + MessageProp p1 = new MessageProp(0, true); + byte[] out = me.x.wrap(messageBytes, 0, messageBytes.length, p1); + System.out.println(printProp(p1)); + return out; + } + }, null); + + t = s2.doAs(new Action() { + @Override + public byte[] run(Context me, byte[] input) throws Exception { + MessageProp p1 = new MessageProp(0, true); + byte[] bytes = me.x.unwrap(input, 0, input.length, p1); + if (!Arrays.equals(messageBytes, bytes)) + throw new Exception("wrap/unwrap mismatch"); + System.out.println("unwrap"); + System.out.println(printProp(p1)); + p1 = new MessageProp(0, true); + System.out.println("getMIC"); + bytes = me.x.getMIC(bytes, 0, bytes.length, p1); + System.out.println(printProp(p1)); + return bytes; + } + }, t); + // Re-unwrap should make p2.isDuplicateToken() returns true + s1.doAs(new Action() { + @Override + public byte[] run(Context me, byte[] input) throws Exception { + MessageProp p1 = new MessageProp(0, true); + System.out.println("verifyMIC"); + me.x.verifyMIC(input, 0, input.length, + messageBytes, 0, messageBytes.length, + p1); + System.out.println(printProp(p1)); + return null; + } + }, t); + } + + /** + * Returns a string description of a MessageProp object + * @param prop the object + * @return the description + */ + static public String printProp(MessageProp prop) { + StringBuffer sb = new StringBuffer(); + sb.append("MessagePop: "); + sb.append("QOP="+ prop.getQOP() + ", "); + sb.append(prop.getPrivacy()?"privacy, ":""); + sb.append(prop.isDuplicateToken()?"dup, ":""); + sb.append(prop.isGapToken()?"gap, ":""); + sb.append(prop.isOldToken()?"old, ":""); + sb.append(prop.isUnseqToken()?"unseq, ":""); + sb.append(prop.getMinorString()+ "(" + prop.getMinorStatus()+")"); + return sb.toString(); + } + + /** + * Handshake (security context establishment process) between two Contexts + * @param c the initiator + * @param s the acceptor + * @throws java.lang.Exception + */ + static public void handshake(final Context c, final Context s) throws Exception { + byte[] t = new byte[0]; + while (!c.f || !s.f) { + t = c.doAs(new Action() { + @Override + public byte[] run(Context me, byte[] input) throws Exception { + if (me.x.isEstablished()) { + me.f = true; + System.out.println(c.name + " side established"); + return null; + } else { + System.out.println(c.name + " call initSecContext"); + return me.x.initSecContext(input, 0, input.length); + } + } + }, t); + + t = s.doAs(new Action() { + @Override + public byte[] run(Context me, byte[] input) throws Exception { + if (me.x.isEstablished()) { + me.f = true; + System.out.println(s.name + " side established"); + return null; + } else { + System.out.println(s.name + " called acceptSecContext"); + return me.x.acceptSecContext(input, 0, input.length); + } + } + }, t); + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/CrossRealm.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/CrossRealm.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/CrossRealm.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/CrossRealm.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6706974 + * @summary Add krb5 test infrastructure + */ +import java.io.FileOutputStream; +import java.io.IOException; +import java.security.Security; +import javax.security.auth.callback.Callback; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.callback.NameCallback; +import javax.security.auth.callback.PasswordCallback; +import javax.security.auth.callback.UnsupportedCallbackException; +import org.ietf.jgss.GSSContext; +import org.ietf.jgss.GSSManager; +import org.ietf.jgss.GSSName; +import sun.security.jgss.GSSUtil; + +public class CrossRealm implements CallbackHandler { + public static void main(String[] args) throws Exception { + startKDCs(); + xRealmAuth(); + } + + static void startKDCs() throws Exception { + // Create and start the KDC + KDC kdc1 = KDC.create("RABBIT.HOLE"); + kdc1.addPrincipal("dummy", "bogus".toCharArray()); + kdc1.addPrincipalRandKey("krbtgt/RABBIT.HOLE"); + kdc1.addPrincipal("krbtgt/SNAKE.HOLE", "sharedsec".toCharArray()); + + KDC kdc2 = KDC.create("SNAKE.HOLE"); + kdc2.addPrincipalRandKey("krbtgt/SNAKE.HOLE"); + kdc2.addPrincipal("krbtgt/RABBIT.HOLE", "sharedsec".toCharArray()); + kdc2.addPrincipalRandKey("host/www.snake.hole"); + + KDC.saveConfig("krb5-localkdc.conf", kdc1, kdc2, + "forwardable=true", + "[domain_realm]", + ".snake.hole=SNAKE.HOLE"); + System.setProperty("java.security.krb5.conf", "krb5-localkdc.conf"); + } + + static void xRealmAuth() throws Exception { + Security.setProperty("auth.login.defaultCallbackHandler", "CrossRealm"); + System.setProperty("java.security.auth.login.config", "jaas-localkdc.conf"); + System.setProperty("javax.security.auth.useSubjectCredsOnly", "false"); + FileOutputStream fos = new FileOutputStream("jaas-localkdc.conf"); + fos.write(("com.sun.security.jgss.krb5.initiate {\n" + + " com.sun.security.auth.module.Krb5LoginModule\n" + + " required\n" + + " principal=dummy\n" + + " doNotPrompt=false\n" + + " useTicketCache=false\n" + + " ;\n" + + "};").getBytes()); + fos.close(); + + GSSManager m = GSSManager.getInstance(); + m.createContext( + m.createName("host@www.snake.hole", GSSName.NT_HOSTBASED_SERVICE), + GSSUtil.GSS_KRB5_MECH_OID, + null, + GSSContext.DEFAULT_LIFETIME).initSecContext(new byte[0], 0, 0); + } + + @Override + public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { + for (Callback callback : callbacks) { + if (callback instanceof NameCallback) { + ((NameCallback) callback).setName("dummy"); + } + if (callback instanceof PasswordCallback) { + ((PasswordCallback) callback).setPassword("bogus".toCharArray()); + } + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/HttpNegotiateServer.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/HttpNegotiateServer.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/HttpNegotiateServer.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/HttpNegotiateServer.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,341 @@ +/* + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6578647 + * @summary Undefined requesting URL in java.net.Authenticator.getPasswordAuthentication() + * @run main/othervm -Dsun.net.spi.nameservice.provider.1=ns,mock HttpNegotiateServer + */ + +import com.sun.net.httpserver.Headers; +import com.sun.net.httpserver.HttpContext; +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; +import com.sun.net.httpserver.HttpServer; +import com.sun.net.httpserver.HttpPrincipal; +import com.sun.security.auth.module.Krb5LoginModule; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.InetSocketAddress; +import java.net.InetAddress; +import java.net.PasswordAuthentication; +import java.net.Proxy; +import java.net.URL; +import java.security.PrivilegedExceptionAction; +import java.net.UnknownHostException; +import java.util.HashMap; +import java.util.Map; +import javax.security.auth.Subject; +import org.ietf.jgss.GSSContext; +import org.ietf.jgss.GSSCredential; +import org.ietf.jgss.GSSManager; +import sun.security.jgss.GSSUtil; +import sun.net.spi.nameservice.NameService; +import sun.net.spi.nameservice.NameServiceDescriptor; +import sun.security.krb5.Config; + +/** + * Basic JGSS/krb5 test with 3 parties: client, server, backend server. Each + * party uses JAAS login to get subjects and executes JGSS calls using + * Subject.doAs. + */ +public class HttpNegotiateServer implements NameServiceDescriptor { + + // Two realm, web server in one, proxy server in another + final static String REALM_WEB = "WEB.DOMAIN"; + final static String REALM_PROXY = "PROXY.DOMAIN"; + final static String KRB5_CONF = "web.conf"; + final static String KRB5_TAB = "web.ktab"; + + // user principals + final static String WEB_USER = "web"; + final static char[] WEB_PASS = "webby".toCharArray(); + final static String PROXY_USER = "pro"; + final static char[] PROXY_PASS = "proxy".toCharArray(); + final static int WEB_PORT = 17840; + + final static String WEB_HOST = "host.web.domain"; + final static String PROXY_HOST = "host.proxy.domain"; + final static int PROXY_PORT = 17841; + + // web page content + final static String CONTENT = "Hello, World!"; + + // URLs for web test, proxy test. The proxy server is not a real proxy + // since it fakes the same content for any URL. :) + final static URL webUrl, proxyUrl; + static { + URL u1 = null, u2 = null; + try { + u1 = new URL("http://" + WEB_HOST +":" + WEB_PORT + "/a/b/c"); + u2 = new URL("http://nosuchplace/a/b/c"); + } catch (Exception e) { + } + webUrl = u1; proxyUrl = u2; + } + + /** + * This Authenticator checks everything: + * scheme, protocol, requestor type, host, port, and url + */ + static class KnowAllAuthenticator extends java.net.Authenticator { + public PasswordAuthentication getPasswordAuthentication () { + if (!getRequestingScheme().equalsIgnoreCase("Negotiate")) { + throw new RuntimeException("Bad scheme"); + } + if (!getRequestingProtocol().equalsIgnoreCase("HTTP")) { + throw new RuntimeException("Bad protocol"); + } + if (getRequestorType() == RequestorType.SERVER) { + if (!this.getRequestingHost().equalsIgnoreCase(webUrl.getHost())) { + throw new RuntimeException("Bad host"); + } + if (this.getRequestingPort() != webUrl.getPort()) { + throw new RuntimeException("Bad port"); + } + if (!this.getRequestingURL().equals(webUrl)) { + throw new RuntimeException("Bad url"); + } + return new PasswordAuthentication( + WEB_USER+"@"+REALM_WEB, WEB_PASS); + } else if (getRequestorType() == RequestorType.PROXY) { + if (!this.getRequestingHost().equalsIgnoreCase(PROXY_HOST)) { + throw new RuntimeException("Bad host"); + } + if (this.getRequestingPort() != PROXY_PORT) { + throw new RuntimeException("Bad port"); + } + if (!this.getRequestingURL().equals(proxyUrl)) { + throw new RuntimeException("Bad url"); + } + return new PasswordAuthentication( + PROXY_USER+"@"+REALM_PROXY, PROXY_PASS); + } else { + throw new RuntimeException("Bad requster type"); + } + } + } + + public static void main(String[] args) + throws Exception { + + KDC kdcw = new KDC(REALM_WEB, 0, true); + kdcw.addPrincipal(WEB_USER, WEB_PASS); + kdcw.addPrincipalRandKey("krbtgt/" + REALM_WEB); + kdcw.addPrincipalRandKey("HTTP/" + WEB_HOST); + + KDC kdcp = new KDC(REALM_PROXY, 0, true); + kdcp.addPrincipal(PROXY_USER, PROXY_PASS); + kdcp.addPrincipalRandKey("krbtgt/" + REALM_PROXY); + kdcp.addPrincipalRandKey("HTTP/" + PROXY_HOST); + + KDC.writeMultiKtab(KRB5_TAB, kdcw, kdcp); + KDC.saveConfig(KRB5_CONF, kdcw, kdcp, + "default_keytab_name = " + KRB5_TAB, + "[domain_realm]", + "", + ".web.domain="+REALM_WEB, + ".proxy.domain="+REALM_PROXY); + + System.setProperty("java.security.krb5.conf", KRB5_CONF); + Config.refresh(); + + HttpServer h1 = httpd(WEB_PORT, "Negotiate", false, + "HTTP/" + WEB_HOST + "@" + REALM_WEB, KRB5_TAB); + HttpServer h2 = httpd(PROXY_PORT, "Negotiate", true, + "HTTP/" + PROXY_HOST + "@" + REALM_PROXY, KRB5_TAB); + + try { + + BufferedReader reader; + java.net.Authenticator.setDefault(new KnowAllAuthenticator()); + + reader = new BufferedReader(new InputStreamReader( + webUrl.openConnection().getInputStream())); + if (!reader.readLine().equals(CONTENT)) { + throw new RuntimeException("Bad content"); + } + + reader = new BufferedReader(new InputStreamReader( + proxyUrl.openConnection( + new Proxy(Proxy.Type.HTTP, + new InetSocketAddress(PROXY_HOST, PROXY_PORT))) + .getInputStream())); + if (!reader.readLine().equals(CONTENT)) { + throw new RuntimeException("Bad content"); + } + } finally { + // Must stop. Seems there's no HttpServer.startAsDaemon() + if (h1 != null) h1.stop(0); + if (h2 != null) h2.stop(0); + } + } + + /** + * Creates and starts an HTTP or proxy server that requires + * Negotiate authentication. + * @param scheme "Negotiate" or "Kerberos" + * @param principal the krb5 service principal the server runs with + * @return the server + */ + public static HttpServer httpd(int port, String scheme, boolean proxy, + String principal, String ktab) throws Exception { + MyHttpHandler h = new MyHttpHandler(); + HttpServer server = HttpServer.create(new InetSocketAddress(port), 0); + HttpContext hc = server.createContext("/", h); + hc.setAuthenticator(new MyServerAuthenticator( + proxy, scheme, principal, ktab)); + server.start(); + return server; + } + + static class MyHttpHandler implements HttpHandler { + public void handle(HttpExchange t) throws IOException { + t.sendResponseHeaders(200, 0); + t.getResponseBody().write(CONTENT.getBytes()); + t.close(); + } + } + + static class MyServerAuthenticator + extends com.sun.net.httpserver.Authenticator { + Subject s = new Subject(); + GSSManager m = null; + GSSCredential cred = null; + String scheme = null; + String reqHdr = "WWW-Authenticate"; + String respHdr = "Authorization"; + int err = HttpURLConnection.HTTP_UNAUTHORIZED; + + public MyServerAuthenticator(boolean proxy, String scheme, + String principal, String ktab) throws Exception { + + this.scheme = scheme; + if (proxy) { + reqHdr = "Proxy-Authenticate"; + respHdr = "Proxy-Authorization"; + err = HttpURLConnection.HTTP_PROXY_AUTH; + } + + Krb5LoginModule krb5 = new Krb5LoginModule(); + Map map = new HashMap(); + Map shared = new HashMap(); + + map.put("storeKey", "true"); + map.put("isInitiator", "false"); + map.put("useKeyTab", "true"); + map.put("keyTab", ktab); + map.put("principal", principal); + krb5.initialize(s, null, shared, map); + krb5.login(); + krb5.commit(); + m = GSSManager.getInstance(); + cred = Subject.doAs(s, new PrivilegedExceptionAction() { + @Override + public GSSCredential run() throws Exception { + System.err.println("Creating GSSCredential"); + return m.createCredential( + null, + GSSCredential.INDEFINITE_LIFETIME, + MyServerAuthenticator.this.scheme.equalsIgnoreCase("Negotiate")? + GSSUtil.GSS_SPNEGO_MECH_OID: + GSSUtil.GSS_KRB5_MECH_OID, + GSSCredential.ACCEPT_ONLY); + } + }); + } + + @Override + public Result authenticate(HttpExchange exch) { + // The GSContext is stored in an HttpContext attribute named + // "GSSContext" and is created at the first request. + GSSContext c = null; + String auth = exch.getRequestHeaders().getFirst(respHdr); + try { + c = (GSSContext)exch.getHttpContext().getAttributes().get("GSSContext"); + if (auth == null) { // First request + Headers map = exch.getResponseHeaders(); + map.set (reqHdr, scheme); // Challenge! + c = Subject.doAs(s, new PrivilegedExceptionAction() { + @Override + public GSSContext run() throws Exception { + return m.createContext(cred); + } + }); + exch.getHttpContext().getAttributes().put("GSSContext", c); + return new com.sun.net.httpserver.Authenticator.Retry(err); + } else { // Later requests + byte[] token = new sun.misc.BASE64Decoder() + .decodeBuffer(auth.split(" ")[1]); + token = c.acceptSecContext(token, 0, token.length); + Headers map = exch.getResponseHeaders(); + map.set (reqHdr, scheme + " " + new sun.misc.BASE64Encoder() + .encode(token).replaceAll("\\s", "")); + if (c.isEstablished()) { + return new com.sun.net.httpserver.Authenticator.Success( + new HttpPrincipal(c.getSrcName().toString(), "")); + } else { + return new com.sun.net.httpserver.Authenticator.Retry(err); + } + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + + @Override + public NameService createNameService() throws Exception { + NameService ns = new NameService() { + @Override + public InetAddress[] lookupAllHostAddr(String host) + throws UnknownHostException { + // Everything is localhost + return new InetAddress[]{ + InetAddress.getByAddress(host, new byte[]{127,0,0,1}) + }; + } + @Override + public String getHostByAddr(byte[] addr) + throws UnknownHostException { + // No reverse lookup + throw new UnknownHostException(); + } + }; + return ns; + } + + @Override + public String getProviderName() { + return "mock"; + } + + @Override + public String getType() { + return "ns"; + } +} + diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/KDC.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/KDC.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/KDC.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/KDC.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,1003 @@ +/* + * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.net.*; +import java.io.*; +import java.lang.reflect.Method; +import java.security.SecureRandom; +import java.util.*; +import java.util.concurrent.*; +import sun.security.krb5.*; +import sun.security.krb5.internal.*; +import sun.security.krb5.internal.ccache.CredentialsCache; +import sun.security.krb5.internal.crypto.KeyUsage; +import sun.security.krb5.internal.ktab.KeyTab; +import sun.security.util.DerInputStream; +import sun.security.util.DerOutputStream; +import sun.security.util.DerValue; + +/** + * A KDC server. + *

    + * Features: + *

      + *
    1. Supports TCP and UDP + *
    2. Supports AS-REQ and TGS-REQ + *
    3. Principal db and other settings hard coded in application + *
    4. Options, say, request preauth or not + *
    + * Side effects: + *
      + *
    1. The Sun-internal class sun.security.krb5.Config is a + * singleton and initialized according to Kerberos settings (krb5.conf and + * java.security.krb5.* system properties). This means once it's initialized + * it will not automatically notice any changes to these settings (or file + * changes of krb5.conf). The KDC class normally does not touch these + * settings (except for the writeKtab() method). However, to make + * sure nothing ever goes wrong, if you want to make any changes to these + * settings after calling a KDC method, call Config.refresh() to + * make sure your changes are reflected in the Config object. + *
    + * Issues and TODOs: + *
      + *
    1. Generates krb5.conf to be used on another machine, currently the kdc is + * always localhost + *
    2. More options to KDC, say, error output, say, response nonce != + * request nonce + *
    + * Note: This program uses internal krb5 classes (including reflection to + * access private fields and methods). + *

    + * Usages: + *

    + * 1. Init and start the KDC: + *

    + * KDC kdc = KDC.create("REALM.NAME", port, isDaemon);
    + * KDC kdc = KDC.create("REALM.NAME");
    + * 
    + * Here, port is the UDP and TCP port number the KDC server + * listens on. If zero, a random port is chosen, which you can use getPort() + * later to retrieve the value. + *

    + * If isDaemon is true, the KDC worker threads will be daemons. + *

    + * The shortcut KDC.create("REALM.NAME") has port=0 and + * isDaemon=false, and is commonly used in an embedded KDC. + *

    + * 2. Adding users: + *

    + * kdc.addPrincipal(String principal_name, char[] password);
    + * kdc.addPrincipalRandKey(String principal_name);
    + * 
    + * A service principal's name should look like "host/f.q.d.n". The second form + * generates a random key. To expose this key, call writeKtab() to + * save the keys into a keytab file. + *

    + * Note that you need to add the principal name krbtgt/REALM.NAME yourself. + *

    + * Note that you can safely add a principal at any time after the KDC is + * started and before a user requests info on this principal. + *

    + * 3. Other public methods: + *

      + *
    • getPort: Returns the port number the KDC uses + *
    • getRealm: Returns the realm name + *
    • writeKtab: Writes all principals' keys into a keytab file + *
    • saveConfig: Saves a krb5.conf file to access this KDC + *
    • setOption: Sets various options + *
    + * Read the javadoc for details. Lazy developer can use OneKDC + * directly. + */ +public class KDC { + + // Under the hood. + + // The random generator to generate random keys (including session keys) + private static SecureRandom secureRandom = new SecureRandom(); + // Principal db + private Map passwords = new HashMap(); + // Realm name + private String realm; + // The request/response job queue + private BlockingQueue q = new ArrayBlockingQueue(100); + // Service port number + private int port; + // Options + private Map options = new HashMap(); + + /** + * Option names, to be expanded forever. + */ + public static enum Option { + /** + * Whether pre-authentication is required. Default Boolean.TRUE + */ + PREAUTH_REQUIRED, + }; + + /** + * A standalone KDC server. + * @param args + * @throws java.lang.Exception + */ + public static void main(String[] args) throws Exception { + if (args.length > 0) { + if (args[0].equals("-help") || args[0].equals("--help")) { + System.out.println("Usage:"); + System.out.println(" java " + KDC.class + " " + + "Start KDC on port 8888"); + return; + } + } + String localhost = "localhost"; + try { + localhost = InetAddress.getByName(localhost) + .getCanonicalHostName(); + } catch (UnknownHostException uhe) { + ; // Ignore, localhost is still "localhost" + } + KDC kdc = create("RABBIT.HOLE", 8888, false); + kdc.addPrincipal("dummy", "bogus".toCharArray()); + kdc.addPrincipal("foo", "bar".toCharArray()); + kdc.addPrincipalRandKey("krbtgt/" + kdc.realm); + kdc.addPrincipalRandKey("server/" + localhost); + kdc.addPrincipalRandKey("backend/" + localhost); + } + + /** + * Creates and starts a KDC running as a daemon on a random port. + * @param realm the realm name + * @return the running KDC instance + * @throws java.io.IOException for any socket creation error + */ + public static KDC create(String realm) throws IOException { + return create(realm, 0, true); + } + + /** + * Creates and starts a KDC server. + * @param realm the realm name + * @param port the TCP and UDP port to listen to. A random port will to + * chosen if zero. + * @param asDaemon if true, KDC threads will be daemons. Otherwise, not. + * @return the running KDC instance + * @throws java.io.IOException for any socket creation error + */ + public static KDC create(String realm, int port, boolean asDaemon) throws IOException { + return new KDC(realm, port, asDaemon); + } + + /** + * Sets an option + * @param key the option name + * @param obj the value + */ + public void setOption(Option key, Object value) { + options.put(key, value); + } + + /** + * Write all principals' keys from multiple KDCsinto one keytab file. + * Note that the keys for the krbtgt principals will not be written. + *

    + * Attention: This method references krb5.conf settings. If you need to + * setup krb5.conf later, please call Config.refresh() after + * the new setting. For example: + *

    +     * KDC.writeKtab("/etc/kdc/ktab", kdc);  // Config is initialized,
    +     * System.setProperty("java.security.krb5.conf", "/home/mykrb5.conf");
    +     * Config.refresh();
    +     * 
    + * + * Inside this method there are 2 places krb5.conf is used: + *
      + *
    1. (Fatal) Generating keys: EncryptionKey.acquireSecretKeys + *
    2. (Has workaround) Creating PrincipalName + *
    + * @param tab The keytab filename to write to. + * @throws java.io.IOException for any file output error + * @throws sun.security.krb5.KrbException for any realm and/or principal + * name error. + */ + public static void writeMultiKtab(String tab, KDC... kdcs) + throws IOException, KrbException { + KeyTab ktab = KeyTab.create(tab); + for (KDC kdc: kdcs) { + for (String name : kdc.passwords.keySet()) { + if (name.equals("krbtgt/" + kdc.realm)) { + continue; + } + ktab.addEntry(new PrincipalName(name + "@" + kdc.realm, + name.indexOf('/') < 0 ? + PrincipalName.KRB_NT_UNKNOWN : + PrincipalName.KRB_NT_SRV_HST), + kdc.passwords.get(name)); + } + } + ktab.save(); + } + + /** + * Write a ktab for this KDC. + */ + public void writeKtab(String tab) throws IOException, KrbException { + KDC.writeMultiKtab(tab, this); + } + + /** + * Adds a new principal to this realm with a given password. + * @param user the principal's name. For a service principal, use the + * form of host/f.q.d.n + * @param pass the password for the principal + */ + public void addPrincipal(String user, char[] pass) { + passwords.put(user, pass); + } + + /** + * Adds a new principal to this realm with a random password + * @param user the principal's name. For a service principal, use the + * form of host/f.q.d.n + */ + public void addPrincipalRandKey(String user) { + passwords.put(user, randomPassword()); + } + + /** + * Returns the name of this realm + * @return the name of this realm + */ + public String getRealm() { + return realm; + } + + /** + * Writes a krb5.conf for one or more KDC that includes KDC locations for + * each realm and the default realm name. You can also add extra strings + * into the file. The method should be called like: + *
    +     *   KDC.saveConfig("krb5.conf", kdc1, kdc2, ..., line1, line2, ...);
    +     * 
    + * Here you can provide one or more kdc# and zero or more line# arguments. + * The line# will be put after [libdefaults] and before [realms]. Therefore + * you can append new lines into [libdefaults] and/or create your new + * stanzas as well. Note that a newline character will be appended to + * each line# argument. + *

    + * For example: + *

    +     * KDC.saveConfig("krb5.conf", this);
    +     * 
    + * generates: + *
    +     * [libdefaults]
    +     * default_realm = REALM.NAME
    +     *
    +     * [realms]
    +     *   REALM.NAME = {
    +     *     kdc = localhost:port_number
    +     *   }
    +     * 
    + * + * Another example: + *
    +     * KDC.saveConfig("krb5.conf", kdc1, kdc2, "forwardable = true", "",
    +     *         "[domain_realm]",
    +     *         ".kdc1.com = KDC1.NAME");
    +     * 
    + * generates: + *
    +     * [libdefaults]
    +     * default_realm = KDC1.NAME
    +     * forwardable = true
    +     *
    +     * [domain_realm]
    +     * .kdc1.com = KDC1.NAME
    +     *
    +     * [realms]
    +     *   KDC1.NAME = {
    +     *     kdc = localhost:port1
    +     *   }
    +     *   KDC2.NAME = {
    +     *     kdc = localhost:port2
    +     *   }
    +     * 
    + * @param file the name of the file to write into + * @param kdc the first (and default) KDC + * @param more more KDCs or extra lines (in their appearing order) to + * insert into the krb5.conf file. This method reads each argument's type + * to determine what it's for. This argument can be empty. + * @throws java.io.IOException for any file output error + */ + public static void saveConfig(String file, KDC kdc, Object... more) + throws IOException { + File f = new File(file); + StringBuffer sb = new StringBuffer(); + sb.append("[libdefaults]\ndefault_realm = "); + sb.append(kdc.realm); + sb.append("\n"); + for (Object o: more) { + if (o instanceof String) { + sb.append(o); + sb.append("\n"); + } + } + sb.append("\n[realms]\n"); + sb.append(realmLineForKDC(kdc)); + for (Object o: more) { + if (o instanceof KDC) { + sb.append(realmLineForKDC((KDC)o)); + } + } + FileOutputStream fos = new FileOutputStream(f); + fos.write(sb.toString().getBytes()); + fos.close(); + } + + /** + * Returns the service port of the KDC server. + * @return the KDC service port + */ + public int getPort() { + return port; + } + + // Private helper methods + + /** + * Private constructor, cannot be called outside. + * @param realm + */ + private KDC(String realm) { + this.realm = realm; + } + + /** + * A constructor that starts the KDC service also. + */ + protected KDC(String realm, int port, boolean asDaemon) + throws IOException { + this(realm); + startServer(port, asDaemon); + } + /** + * Generates a 32-char random password + * @return the password + */ + private static char[] randomPassword() { + char[] pass = new char[32]; + for (int i=0; i<32; i++) + pass[i] = (char)secureRandom.nextInt(); + return pass; + } + + /** + * Generates a random key for the given encryption type. + * @param eType the encryption type + * @return the generated key + * @throws sun.security.krb5.KrbException for unknown/unsupported etype + */ + private static EncryptionKey generateRandomKey(int eType) + throws KrbException { + // Is 32 enough for AES256? I should have generated the keys directly + // but different cryptos have different rules on what keys are valid. + char[] pass = randomPassword(); + String algo; + switch (eType) { + case EncryptedData.ETYPE_DES_CBC_MD5: algo = "DES"; break; + case EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD: algo = "DESede"; break; + case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA1_96: algo = "AES128"; break; + case EncryptedData.ETYPE_ARCFOUR_HMAC: algo = "ArcFourHMAC"; break; + case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96: algo = "AES256"; break; + default: algo = "DES"; break; + } + return new EncryptionKey(pass, "NOTHING", algo); // Silly + } + + /** + * Returns the password for a given principal + * @param p principal + * @return the password + * @throws sun.security.krb5.KrbException when the principal is not inside + * the database. + */ + private char[] getPassword(PrincipalName p) throws KrbException { + char[] pass = passwords.get(p.getNameString()); + if (pass == null) { + throw new KrbException(Krb5.KDC_ERR_C_PRINCIPAL_UNKNOWN); + } + return pass; + } + + /** + * Returns the salt string for the principal. For normal users, the + * concatenation for the realm name and the sections of the principal; + * for krgtgt/A@B and krbtgt/B@A, always return AB (so that inter-realm + * principals have the same key). + * @param p principal + * @return the salt + */ + private String getSalt(PrincipalName p) { + String[] ns = p.getNameStrings(); + if (ns[0].equals("krbtgt") && ns.length > 1) { + // Shared cross-realm keys must be the same + if (ns[1].compareTo(realm) < 0) { + return ns[1] + realm; + } else { + return realm + ns[1]; + } + } else { + String s = getRealm(); + for (String n: p.getNameStrings()) { + s += n; + } + return s; + } + } + + /** + * Returns the key for a given principal of the given encryption type + * @param p the principal + * @param etype the encryption type + * @return the key + * @throws sun.security.krb5.KrbException for unknown/unsupported etype + */ + private EncryptionKey keyForUser(PrincipalName p, int etype) throws KrbException { + try { + // Do not call EncryptionKey.acquireSecretKeys(), otherwise + // the krb5.conf config file would be loaded. + Method stringToKey = EncryptionKey.class.getDeclaredMethod("stringToKey", char[].class, String.class, byte[].class, Integer.TYPE); + stringToKey.setAccessible(true); + return new EncryptionKey((byte[]) stringToKey.invoke(null, getPassword(p), getSalt(p), null, etype), etype, null); + } catch (InvocationTargetException ex) { + KrbException ke = (KrbException)ex.getCause(); + throw ke; + } catch (Exception e) { + throw new RuntimeException(e); // should not happen + } + } + + /** + * Processes an incoming request and generates a response. + * @param in the request + * @return the response + * @throws java.lang.Exception for various errors + */ + private byte[] processMessage(byte[] in) throws Exception { + if ((in[0] & 0x1f) == Krb5.KRB_AS_REQ) + return processAsReq(in); + else + return processTgsReq(in); + } + + /** + * Processes a TGS_REQ and generates a TGS_REP (or KRB_ERROR) + * @param in the request + * @return the response + * @throws java.lang.Exception for various errors + */ + private byte[] processTgsReq(byte[] in) throws Exception { + TGSReq tgsReq = new TGSReq(in); + try { + System.out.println(realm + "> " + tgsReq.reqBody.cname + + " sends TGS-REQ for " + + tgsReq.reqBody.sname); + KDCReqBody body = tgsReq.reqBody; + int etype = 0; + + // Reflection: PAData[] pas = tgsReq.pAData; + Field f = KDCReq.class.getDeclaredField("pAData"); + f.setAccessible(true); + PAData[] pas = (PAData[])f.get(tgsReq); + + Ticket tkt = null; + EncTicketPart etp = null; + if (pas == null || pas.length == 0) { + throw new KrbException(Krb5.KDC_ERR_PADATA_TYPE_NOSUPP); + } else { + for (PAData pa: pas) { + if (pa.getType() == Krb5.PA_TGS_REQ) { + APReq apReq = new APReq(pa.getValue()); + EncryptedData ed = apReq.authenticator; + tkt = apReq.ticket; + etype = tkt.encPart.getEType(); + EncryptionKey kkey = null; + if (!tkt.realm.toString().equals(realm)) { + if (tkt.sname.getNameString().equals("krbtgt/" + realm)) { + kkey = keyForUser(new PrincipalName("krbtgt/" + tkt.realm.toString(), realm), etype); + } + } else { + kkey = keyForUser(tkt.sname, etype); + } + byte[] bb = tkt.encPart.decrypt(kkey, KeyUsage.KU_TICKET); + DerInputStream derIn = new DerInputStream(bb); + DerValue der = derIn.getDerValue(); + etp = new EncTicketPart(der.toByteArray()); + } + } + if (tkt == null) { + throw new KrbException(Krb5.KDC_ERR_PADATA_TYPE_NOSUPP); + } + } + EncryptionKey skey = keyForUser(body.sname, etype); + if (skey == null) { + throw new KrbException(Krb5.KDC_ERR_SUMTYPE_NOSUPP); // TODO + } + + // Session key for original ticket, TGT + EncryptionKey ckey = etp.key; + + // Session key for session with the service + EncryptionKey key = generateRandomKey(etype); + + // Check time, TODO + KerberosTime till = body.till; + if (till == null) { + throw new KrbException(Krb5.KDC_ERR_NEVER_VALID); // TODO + } else if (till.isZero()) { + till = new KerberosTime(new Date().getTime() + 1000 * 3600 * 11); + } + + boolean[] bFlags = new boolean[Krb5.TKT_OPTS_MAX+1]; + if (body.kdcOptions.get(KDCOptions.FORWARDABLE)) { + bFlags[Krb5.TKT_OPTS_FORWARDABLE] = true; + } + if (body.kdcOptions.get(KDCOptions.FORWARDED) || + etp.flags.get(Krb5.TKT_OPTS_FORWARDED)) { + bFlags[Krb5.TKT_OPTS_FORWARDED] = true; + } + if (body.kdcOptions.get(KDCOptions.RENEWABLE)) { + bFlags[Krb5.TKT_OPTS_RENEWABLE] = true; + //renew = new KerberosTime(new Date().getTime() + 1000 * 3600 * 24 * 7); + } + if (body.kdcOptions.get(KDCOptions.PROXIABLE)) { + bFlags[Krb5.TKT_OPTS_PROXIABLE] = true; + } + if (body.kdcOptions.get(KDCOptions.POSTDATED)) { + bFlags[Krb5.TKT_OPTS_POSTDATED] = true; + } + if (body.kdcOptions.get(KDCOptions.ALLOW_POSTDATE)) { + bFlags[Krb5.TKT_OPTS_MAY_POSTDATE] = true; + } + bFlags[Krb5.TKT_OPTS_INITIAL] = true; + + TicketFlags tFlags = new TicketFlags(bFlags); + EncTicketPart enc = new EncTicketPart( + tFlags, + key, + etp.crealm, + etp.cname, + new TransitedEncoding(1, new byte[0]), // TODO + new KerberosTime(new Date()), + body.from, + till, body.rtime, + body.addresses, + null); + Ticket t = new Ticket( + body.crealm, + body.sname, + new EncryptedData(skey, enc.asn1Encode(), KeyUsage.KU_TICKET) + ); + EncTGSRepPart enc_part = new EncTGSRepPart( + key, + new LastReq(new LastReqEntry[]{ + new LastReqEntry(0, new KerberosTime(new Date().getTime() - 10000)) + }), + body.getNonce(), // TODO: detect replay + new KerberosTime(new Date().getTime() + 1000 * 3600 * 24), + // Next 5 and last MUST be same with ticket + tFlags, + new KerberosTime(new Date()), + body.from, + till, body.rtime, + body.crealm, + body.sname, + body.addresses + ); + EncryptedData edata = new EncryptedData(ckey, enc_part.asn1Encode(), KeyUsage.KU_ENC_TGS_REP_PART_SESSKEY); + TGSRep tgsRep = new TGSRep(null, + etp.crealm, + etp.cname, + t, + edata); + System.out.println(" Return " + tgsRep.cname + + " ticket for " + tgsRep.ticket.sname); + + DerOutputStream out = new DerOutputStream(); + out.write(DerValue.createTag(DerValue.TAG_APPLICATION, + true, (byte)Krb5.KRB_TGS_REP), tgsRep.asn1Encode()); + return out.toByteArray(); + } catch (KrbException ke) { + ke.printStackTrace(System.out); + KRBError kerr = ke.getError(); + KDCReqBody body = tgsReq.reqBody; + System.out.println(" Error " + ke.returnCode() + + " " +ke.returnCodeMessage()); + if (kerr == null) { + kerr = new KRBError(null, null, null, + new KerberosTime(new Date()), + 0, + ke.returnCode(), + body.crealm, body.cname, + new Realm(getRealm()), body.sname, + KrbException.errorMessage(ke.returnCode()), + null); + } + return kerr.asn1Encode(); + } + } + + /** + * Processes a AS_REQ and generates a AS_REP (or KRB_ERROR) + * @param in the request + * @return the response + * @throws java.lang.Exception for various errors + */ + private byte[] processAsReq(byte[] in) throws Exception { + ASReq asReq = new ASReq(in); + int[] eTypes = null; + try { + System.out.println(realm + "> " + asReq.reqBody.cname + + " sends AS-REQ for " + + asReq.reqBody.sname); + + KDCReqBody body = asReq.reqBody; + + // Reflection: int[] eType = body.eType; + Field f = KDCReqBody.class.getDeclaredField("eType"); + f.setAccessible(true); + eTypes = (int[])f.get(body); + int eType = eTypes[0]; + + EncryptionKey ckey = keyForUser(body.cname, eType); + EncryptionKey skey = keyForUser(body.sname, eType); + if (ckey == null) { + throw new KrbException(Krb5.KDC_ERR_ETYPE_NOSUPP); + } + if (skey == null) { + throw new KrbException(Krb5.KDC_ERR_SUMTYPE_NOSUPP); // TODO + } + + // Session key + EncryptionKey key = generateRandomKey(eType); + // Check time, TODO + KerberosTime till = body.till; + if (till == null) { + throw new KrbException(Krb5.KDC_ERR_NEVER_VALID); // TODO + } else if (till.isZero()) { + till = new KerberosTime(new Date().getTime() + 1000 * 3600 * 11); + } + //body.from + boolean[] bFlags = new boolean[Krb5.TKT_OPTS_MAX+1]; + if (body.kdcOptions.get(KDCOptions.FORWARDABLE)) { + bFlags[Krb5.TKT_OPTS_FORWARDABLE] = true; + } + if (body.kdcOptions.get(KDCOptions.RENEWABLE)) { + bFlags[Krb5.TKT_OPTS_RENEWABLE] = true; + //renew = new KerberosTime(new Date().getTime() + 1000 * 3600 * 24 * 7); + } + if (body.kdcOptions.get(KDCOptions.PROXIABLE)) { + bFlags[Krb5.TKT_OPTS_PROXIABLE] = true; + } + if (body.kdcOptions.get(KDCOptions.POSTDATED)) { + bFlags[Krb5.TKT_OPTS_POSTDATED] = true; + } + if (body.kdcOptions.get(KDCOptions.ALLOW_POSTDATE)) { + bFlags[Krb5.TKT_OPTS_MAY_POSTDATE] = true; + } + bFlags[Krb5.TKT_OPTS_INITIAL] = true; + + f = KDCReq.class.getDeclaredField("pAData"); + f.setAccessible(true); + PAData[] pas = (PAData[])f.get(asReq); + if (pas == null || pas.length == 0) { + Object preauth = options.get(Option.PREAUTH_REQUIRED); + if (preauth == null || preauth.equals(Boolean.TRUE)) { + throw new KrbException(Krb5.KDC_ERR_PREAUTH_REQUIRED); + } + } else { + try { + Constructor ctor = EncryptedData.class.getDeclaredConstructor(DerValue.class); + ctor.setAccessible(true); + EncryptedData data = ctor.newInstance(new DerValue(pas[0].getValue())); + data.decrypt(ckey, KeyUsage.KU_PA_ENC_TS); + } catch (Exception e) { + throw new KrbException(Krb5.KDC_ERR_PREAUTH_FAILED); + } + bFlags[Krb5.TKT_OPTS_PRE_AUTHENT] = true; + } + + TicketFlags tFlags = new TicketFlags(bFlags); + EncTicketPart enc = new EncTicketPart( + tFlags, + key, + body.crealm, + body.cname, + new TransitedEncoding(1, new byte[0]), + new KerberosTime(new Date()), + body.from, + till, body.rtime, + body.addresses, + null); + Ticket t = new Ticket( + body.crealm, + body.sname, + new EncryptedData(skey, enc.asn1Encode(), KeyUsage.KU_TICKET) + ); + EncASRepPart enc_part = new EncASRepPart( + key, + new LastReq(new LastReqEntry[]{ + new LastReqEntry(0, new KerberosTime(new Date().getTime() - 10000)) + }), + body.getNonce(), // TODO: detect replay? + new KerberosTime(new Date().getTime() + 1000 * 3600 * 24), + // Next 5 and last MUST be same with ticket + tFlags, + new KerberosTime(new Date()), + body.from, + till, body.rtime, + body.crealm, + body.sname, + body.addresses + ); + EncryptedData edata = new EncryptedData(ckey, enc_part.asn1Encode(), KeyUsage.KU_ENC_AS_REP_PART); + ASRep asRep = new ASRep(null, + body.crealm, + body.cname, + t, + edata); + + System.out.println(" Return " + asRep.cname + + " ticket for " + asRep.ticket.sname); + + DerOutputStream out = new DerOutputStream(); + out.write(DerValue.createTag(DerValue.TAG_APPLICATION, + true, (byte)Krb5.KRB_AS_REP), asRep.asn1Encode()); + byte[] result = out.toByteArray(); + + // Added feature: + // Write the current issuing TGT into a ccache file specified + // by the system property below. + String ccache = System.getProperty("test.kdc.save.ccache"); + if (ccache != null) { + asRep.encKDCRepPart = enc_part; + sun.security.krb5.internal.ccache.Credentials credentials = + new sun.security.krb5.internal.ccache.Credentials(asRep); + asReq.reqBody.cname.setRealm(getRealm()); + CredentialsCache cache = + CredentialsCache.create(asReq.reqBody.cname, ccache); + if (cache == null) { + throw new IOException("Unable to create the cache file " + + ccache); + } + cache.update(credentials); + cache.save(); + new File(ccache).deleteOnExit(); + } + + return result; + } catch (KrbException ke) { + ke.printStackTrace(System.out); + KRBError kerr = ke.getError(); + KDCReqBody body = asReq.reqBody; + System.out.println(" Error " + ke.returnCode() + + " " +ke.returnCodeMessage()); + byte[] eData = null; + if (kerr == null) { + if (ke.returnCode() == Krb5.KDC_ERR_PREAUTH_REQUIRED || + ke.returnCode() == Krb5.KDC_ERR_PREAUTH_FAILED) { + PAData pa; + + ETypeInfo2 ei2 = new ETypeInfo2(eTypes[0], null, null); + DerOutputStream eid = new DerOutputStream(); + eid.write(DerValue.tag_Sequence, ei2.asn1Encode()); + + pa = new PAData(Krb5.PA_ETYPE_INFO2, eid.toByteArray()); + + DerOutputStream bytes = new DerOutputStream(); + bytes.write(new PAData(Krb5.PA_ENC_TIMESTAMP, new byte[0]).asn1Encode()); + bytes.write(pa.asn1Encode()); + + boolean allOld = true; + for (int i: eTypes) { + if (i == EncryptedData.ETYPE_AES128_CTS_HMAC_SHA1_96 || + i == EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96) { + allOld = false; + break; + } + } + if (allOld) { + ETypeInfo ei = new ETypeInfo(eTypes[0], null); + eid = new DerOutputStream(); + eid.write(DerValue.tag_Sequence, ei.asn1Encode()); + pa = new PAData(Krb5.PA_ETYPE_INFO, eid.toByteArray()); + bytes.write(pa.asn1Encode()); + } + DerOutputStream temp = new DerOutputStream(); + temp.write(DerValue.tag_Sequence, bytes); + eData = temp.toByteArray(); + } + kerr = new KRBError(null, null, null, + new KerberosTime(new Date()), + 0, + ke.returnCode(), + body.crealm, body.cname, + new Realm(getRealm()), body.sname, + KrbException.errorMessage(ke.returnCode()), + eData); + } + return kerr.asn1Encode(); + } + } + + /** + * Generates a line for a KDC to put inside [realms] of krb5.conf + * @param kdc the KDC + * @return REALM.NAME = { kdc = localhost:port } + */ + private static String realmLineForKDC(KDC kdc) { + return String.format(" %s = {\n kdc = localhost:%d\n }\n", kdc.realm, kdc.port); + } + + /** + * Start the KDC service. This server listens on both UDP and TCP using + * the same port number. It uses three threads to deal with requests. + * They can be set to daemon threads if requested. + * @param port the port number to listen to. If zero, a random available + * port no less than 8000 will be chosen and used. + * @param asDaemon true if the KDC threads should be daemons + * @throws java.io.IOException for any communication error + */ + protected void startServer(int port, boolean asDaemon) throws IOException { + DatagramSocket u1 = null; + ServerSocket t1 = null; + if (port > 0) { + u1 = new DatagramSocket(port, InetAddress.getByName("127.0.0.1")); + t1 = new ServerSocket(port); + } else { + while (true) { + // Try to find a port number that's both TCP and UDP free + try { + port = 8000 + new java.util.Random().nextInt(10000); + u1 = null; + u1 = new DatagramSocket(port, InetAddress.getByName("127.0.0.1")); + t1 = new ServerSocket(port); + break; + } catch (Exception e) { + if (u1 != null) u1.close(); + } + } + } + final DatagramSocket udp = u1; + final ServerSocket tcp = t1; + System.out.println("Start KDC on " + port); + + this.port = port; + + // The UDP consumer + Thread thread = new Thread() { + public void run() { + while (true) { + try { + byte[] inbuf = new byte[8192]; + DatagramPacket p = new DatagramPacket(inbuf, inbuf.length); + udp.receive(p); + System.out.println("-----------------------------------------------"); + System.out.println(">>>>> UDP packet received"); + q.put(new Job(processMessage(Arrays.copyOf(inbuf, p.getLength())), udp, p)); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + }; + thread.setDaemon(asDaemon); + thread.start(); + + // The TCP consumer + thread = new Thread() { + public void run() { + while (true) { + try { + Socket socket = tcp.accept(); + System.out.println("-----------------------------------------------"); + System.out.println(">>>>> TCP connection established"); + DataInputStream in = new DataInputStream(socket.getInputStream()); + DataOutputStream out = new DataOutputStream(socket.getOutputStream()); + byte[] token = new byte[in.readInt()]; + in.readFully(token); + q.put(new Job(processMessage(token), socket, out)); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + }; + thread.setDaemon(asDaemon); + thread.start(); + + // The dispatcher + thread = new Thread() { + public void run() { + while (true) { + try { + q.take().send(); + } catch (Exception e) { + } + } + } + }; + thread.setDaemon(true); + thread.start(); + } + + /** + * Helper class to encapsulate a job in a KDC. + */ + private static class Job { + byte[] token; // The received request at creation time and + // the response at send time + Socket s; // The TCP socket from where the request comes + DataOutputStream out; // The OutputStream of the TCP socket + DatagramSocket s2; // The UDP socket from where the request comes + DatagramPacket dp; // The incoming UDP datagram packet + boolean useTCP; // Whether TCP or UDP is used + + // Creates a job object for TCP + Job(byte[] token, Socket s, DataOutputStream out) { + useTCP = true; + this.token = token; + this.s = s; + this.out = out; + } + + // Creates a job object for UDP + Job(byte[] token, DatagramSocket s2, DatagramPacket dp) { + useTCP = false; + this.token = token; + this.s2 = s2; + this.dp = dp; + } + + // Sends the output back to the client + void send() { + try { + if (useTCP) { + System.out.println(">>>>> TCP request honored"); + out.writeInt(token.length); + out.write(token); + s.close(); + } else { + System.out.println(">>>>> UDP request honored"); + s2.send(new DatagramPacket(token, token.length, dp.getAddress(), dp.getPort())); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/KerberosHashEqualsTest.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/KerberosHashEqualsTest.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/KerberosHashEqualsTest.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/KerberosHashEqualsTest.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4641821 + * @summary hashCode() and equals() for KerberosKey and KerberosTicket + */ + +import java.net.InetAddress; +import java.util.Date; +import javax.security.auth.kerberos.KerberosKey; +import javax.security.auth.kerberos.KerberosPrincipal; +import javax.security.auth.kerberos.KerberosTicket; + +public class KerberosHashEqualsTest { + public static void main(String[] args) throws Exception { + new OneKDC(null); + new KerberosHashEqualsTest().check(); + } + + void checkSame(Object o1, Object o2) { + if(!o1.equals(o2)) { + throw new RuntimeException("equals() fails"); + } + if(o1.hashCode() != o2.hashCode()) { + throw new RuntimeException("hashCode() not same"); + } + } + + void checkNotSame(Object o1, Object o2) { + if(o1.equals(o2)) { + throw new RuntimeException("equals() succeeds"); + } + } + + void check() throws Exception { + + // The key part: + // new KerberosKey(principal, bytes, keyType, version) + + KerberosKey k1, k2; + KerberosPrincipal CLIENT = new KerberosPrincipal("client"); + KerberosPrincipal SERVER = new KerberosPrincipal("server"); + byte[] PASS = "pass".getBytes(); + + k1 = new KerberosKey(CLIENT, PASS, 1, 1); + k2 = new KerberosKey(CLIENT, PASS, 1, 1); + checkSame(k1, k1); // me is me + checkSame(k1, k2); // same + + // A destroyed key doesn't equal to any key + k2.destroy(); + checkNotSame(k1, k2); + checkNotSame(k2, k1); + k1.destroy(); + checkNotSame(k1, k2); // even if they are both destroyed + checkNotSame(k2, k1); + checkSame(k2, k2); + + // a little difference means not equal + k1 = new KerberosKey(CLIENT, PASS, 1, 1); + k2 = new KerberosKey(SERVER, PASS, 1, 1); + checkNotSame(k1, k2); // Different principal name + + k2 = new KerberosKey(CLIENT, "ssap".getBytes(), 1, 1); + checkNotSame(k1, k2); // Different password + + k2 = new KerberosKey(CLIENT, PASS, 2, 1); + checkNotSame(k1, k2); // Different keytype + + k2 = new KerberosKey(CLIENT, PASS, 1, 2); + checkNotSame(k1, k2); // Different version + + k2 = new KerberosKey(null, PASS, 1, 2); + checkNotSame(k1, k2); // null is not non-null + + k1 = new KerberosKey(null, PASS, 1, 2); + checkSame(k1, k2); // null is null + + checkNotSame(k1, "Another Object"); + + // The ticket part: + // new KerberosTicket(asn1 bytes, client, server, session key, type, flags, + // auth, start, end, renewUntil times, address) + + KerberosTicket t1, t2; + + byte[] ASN1 = "asn1".getBytes(); + boolean[] FORWARDABLE = new boolean[] {true, true}; + boolean[] ALLTRUE = new boolean[] {true, true, true, true, true, true, true, true, true, true}; + Date D0 = new Date(0); + + t1 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, D0, D0, D0, null); + t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, D0, D0, D0, null); + checkSame(t1, t1); + checkSame(t1, t2); + + // destroyed tickets doesn't equal to each other + t1.destroy(); + checkNotSame(t1, t2); + checkNotSame(t2, t1); + + t2.destroy(); + checkNotSame(t1, t2); // even if they are both destroyed + checkNotSame(t2, t1); + + checkSame(t2, t2); // unless they are the same object + + // a little difference means not equal + t1 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, D0, D0, D0, null); + t2 = new KerberosTicket("asn11".getBytes(), CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, D0, D0, D0, null); + checkNotSame(t1, t2); // Different ASN1 encoding + + t2 = new KerberosTicket(ASN1, new KerberosPrincipal("client1"), SERVER, PASS, 1, FORWARDABLE, D0, D0, D0, D0, null); + checkNotSame(t1, t2); // Different client + + t2 = new KerberosTicket(ASN1, CLIENT, new KerberosPrincipal("server1"), PASS, 1, FORWARDABLE, D0, D0, D0, D0, null); + checkNotSame(t1, t2); // Different server + + t2 = new KerberosTicket(ASN1, CLIENT, SERVER, "pass1".getBytes(), 1, FORWARDABLE, D0, D0, D0, D0, null); + checkNotSame(t1, t2); // Different session key + + t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 2, FORWARDABLE, D0, D0, D0, D0, null); + checkNotSame(t1, t2); // Different key type + + t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, new boolean[] {true, false}, D0, D0, D0, D0, null); + checkNotSame(t1, t2); // Different flags, not FORWARDABLE + + t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, new Date(1), D0, D0, D0, null); + checkNotSame(t1, t2); // Different authtime + + t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, new Date(1), D0, D0, null); + checkNotSame(t1, t2); // Different starttime + + t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, D0, new Date(1), D0, null); + checkNotSame(t1, t2); // Different endtime + + t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, D0, D0, D0, new InetAddress[2]); + checkNotSame(t1, t2); // Different client addresses + + t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, D0, D0, new Date(1), null); + t1 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, D0, D0, new Date(2), null); + checkSame(t1, t2); // renewtill is ignored when RENEWABLE ticket flag is not set. + + t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, ALLTRUE, D0, D0, D0, new Date(1), null); + t1 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, ALLTRUE, D0, D0, D0, new Date(2), null); + checkNotSame(t1, t2); // renewtill is used when RENEWABLE is set. + + checkNotSame(t1, "Another Object"); + System.out.println("Good!"); + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/LoginModuleOptions.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/LoginModuleOptions.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/LoginModuleOptions.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/LoginModuleOptions.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6765491 + * @summary Krb5LoginModule a little too restrictive, and the doc is not clear. + */ +import com.sun.security.auth.module.Krb5LoginModule; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import javax.security.auth.Subject; +import javax.security.auth.callback.Callback; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.callback.NameCallback; +import javax.security.auth.callback.PasswordCallback; +import javax.security.auth.callback.UnsupportedCallbackException; + +public class LoginModuleOptions { + + private static final String NAME = "javax.security.auth.login.name"; + private static final String PWD = "javax.security.auth.login.password"; + + public static void main(String[] args) throws Exception { + OneKDC kdc = new OneKDC(null); + kdc.addPrincipal("foo", "bar".toCharArray()); + kdc.writeKtab(OneKDC.KTAB); // rewrite to add foo + + // All 4 works: keytab, shared state, callback, cache + login(null, "useKeyTab", "true", "principal", "dummy"); + login(null, "tryFirstPass", "true", NAME, OneKDC.USER, + PWD, OneKDC.PASS); + System.setProperty("test.kdc.save.ccache", "krbcc"); + login(new MyCallback(OneKDC.USER, OneKDC.PASS)); // save the cache + System.clearProperty("test.kdc.save.ccache"); + login(null, "useTicketCache", "true", "ticketCache", "krbcc"); + + // Fallbacks + // 1. ccache -> keytab + login(null, "useTicketCache", "true", "ticketCache", "krbcc_non_exists", + "useKeyTab", "true", "principal", "dummy"); + // 2. keytab -> shared + login(null, "useKeyTab", "true", "principal", "dummy", + "keyTab", "ktab_non_exist", + "tryFirstPass", "true", NAME, OneKDC.USER, PWD, OneKDC.PASS); + // 3. shared -> callback + // 3.1. useFirstPass, no callback + boolean failed = false; + try { + login(new MyCallback(OneKDC.USER, OneKDC.PASS), + "useFirstPass", "true", + NAME, OneKDC.USER, PWD, "haha".toCharArray()); + } catch (Exception e) { + failed = true; + } + if (!failed) { + throw new Exception("useFirstPass should not fallback to callback"); + } + // 3.2. tryFirstPass, has callback + login(new MyCallback(OneKDC.USER, OneKDC.PASS), + "tryFirstPass", "true", + NAME, OneKDC.USER, PWD, "haha".toCharArray()); + + // Preferences of type + // 1. ccache preferred to keytab + login(new MyCallback("foo", null), + "useTicketCache", "true", "ticketCache", "krbcc", + "useKeyTab", "true"); + // 2. keytab preferred to shared. This test case is not exactly correct, + // because principal=dummy would shadow the PWD setting in the shared + // state. So by only looking at the final authentication user name + // (which is how this program does), there's no way to tell if keyTab + // is picked first, or shared is tried first but fallback to keytab. + login(null, "useKeyTab", "true", "principal", "dummy", + "tryFirstPass", "true", NAME, "foo", PWD, "bar".toCharArray()); + // 3. shared preferred to callback + login(new MyCallback("foo", "bar".toCharArray()), + "tryFirstPass", "true", NAME, OneKDC.USER, PWD, OneKDC.PASS); + + // Preferences of username + // 1. principal preferred to NAME (NAME can be wrong or missing) + login(null, "principal", OneKDC.USER, + "tryFirstPass", "true", NAME, "someone_else", PWD, OneKDC.PASS); + login(null, "principal", OneKDC.USER, + "tryFirstPass", "true", PWD, OneKDC.PASS); + // 2. NAME preferred to callback + login(new MyCallback("someone_else", OneKDC.PASS), + "principal", OneKDC.USER); + // 3. With tryFirstPass, NAME preferred to callback + login(new MyCallback("someone_else", null), + "tryFirstPass", "true", NAME, OneKDC.USER, PWD, OneKDC.PASS); + // 3.1. you must provide a NAME (when there's no principal) + failed = false; + try { + login(new MyCallback(OneKDC.USER, null), + "tryFirstPass", "true", PWD, OneKDC.PASS); + } catch (Exception e) { + failed = true; + } + if (!failed) { + throw new Exception("useFirstPass must provide a NAME"); + } + // 3.2 Hybrid, you can use NAME as "", and provide it using callback. + // I don't think this is designed. + login(new MyCallback(OneKDC.USER, null), + "tryFirstPass", "true", NAME, "", PWD, OneKDC.PASS); + + // Test for the bug fix: doNotPrompt can be true if tryFirstPass=true + login(null, "doNotPrompt", "true", "storeKey", "true", + "tryFirstPass", "true", NAME, OneKDC.USER, PWD, OneKDC.PASS); + } + + static void login(CallbackHandler callback, Object... options) + throws Exception { + Krb5LoginModule krb5 = new Krb5LoginModule(); + Subject subject = new Subject(); + Map map = new HashMap(); + Map shared = new HashMap(); + + int count = options.length / 2; + for (int i = 0; i < count; i++) { + String key = (String) options[2 * i]; + Object value = options[2 * i + 1]; + if (key.startsWith("javax")) { + shared.put(key, value); + } else { + map.put(key, (String) value); + } + } + krb5.initialize(subject, callback, shared, map); + krb5.login(); + krb5.commit(); + if (!subject.getPrincipals().iterator().next() + .getName().startsWith(OneKDC.USER)) { + throw new Exception("The authenticated is not " + OneKDC.USER); + } + } + + static class MyCallback implements CallbackHandler { + + private String name; + private char[] password; + + public MyCallback(String name, char[] password) { + this.name = name; + this.password = password; + } + + public void handle(Callback[] callbacks) { + for (Callback callback : callbacks) { + System.err.println(callback); + if (callback instanceof NameCallback) { + System.err.println("name is " + name); + ((NameCallback) callback).setName(name); + } + if (callback instanceof PasswordCallback) { + System.err.println("pass is " + new String(password)); + ((PasswordCallback) callback).setPassword(password); + } + } + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1 @@ +HttpNegotiateServer diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/OneKDC.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/OneKDC.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/krb5/auto/OneKDC.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/krb5/auto/OneKDC.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.security.Security; +import javax.security.auth.callback.Callback; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.callback.NameCallback; +import javax.security.auth.callback.PasswordCallback; +import sun.security.krb5.Config; + +/** + * This class starts a simple KDC with one realm, several typical principal + * names, generates delete-on-exit krb5.conf and keytab files, and setup + * system properties for them. There's also a helper method to generate a + * JAAS login config file that can be used for JAAS or JGSS apps. + *

    + * Just call this line to start everything: + *

    + * new OneKDC(null).writeJaasConf();
    + * 
    + */ +public class OneKDC extends KDC { + + // The krb5 codes would try to canonicalize hostnames before creating + // a service principal name, so let's find out the canonicalized form + // of localhost first. The following codes mimic the process inside + // PrincipalName.java. + static String localhost = "localhost"; + static { + try { + localhost = InetAddress.getByName(localhost) + .getCanonicalHostName(); + } catch (UnknownHostException uhe) { + ; // Ignore, localhost is still "localhost" + } + } + public static final String USER = "dummy"; + public static final char[] PASS = "bogus".toCharArray(); + public static String SERVER = "server/" + localhost; + public static String BACKEND = "backend/" + localhost; + public static final String KRB5_CONF = "localkdc-krb5.conf"; + public static final String KTAB = "localkdc.ktab"; + public static final String JAAS_CONF = "localkdc-jaas.conf"; + public static final String REALM = "RABBIT.HOLE"; + + /** + * Creates the KDC and starts it. + * @param etype Encryption type, null if not specified + * @throws java.lang.Exception if there's anything wrong + */ + public OneKDC(String etype) throws Exception { + super(REALM, 0, true); + addPrincipal(USER, PASS); + addPrincipalRandKey("krbtgt/" + REALM); + addPrincipalRandKey(SERVER); + addPrincipalRandKey(BACKEND); + KDC.saveConfig(KRB5_CONF, this, + "forwardable = true", + "default_keytab_name = " + KTAB, + etype == null ? "" : "default_tkt_enctypes=" + etype + "\ndefault_tgs_enctypes=" + etype); + System.setProperty("java.security.krb5.conf", KRB5_CONF); + // Whatever krb5.conf had been loaded before, we reload ours now. + Config.refresh(); + + writeKtab(KTAB); + new File(KRB5_CONF).deleteOnExit(); + new File(KTAB).deleteOnExit(); + } + + /** + * Writes a JAAS login config file, which contains as many as useful + * entries, including JGSS style initiator/acceptor and normal JAAS + * entries with names using existing OneKDC principals. + * @throws java.lang.Exception if anything goes wrong + */ + public void writeJAASConf() throws IOException { + System.setProperty("java.security.auth.login.config", JAAS_CONF); + File f = new File(JAAS_CONF); + FileOutputStream fos = new FileOutputStream(f); + fos.write(( + "com.sun.security.jgss.krb5.initiate {\n" + + " com.sun.security.auth.module.Krb5LoginModule required;\n};\n" + + "com.sun.security.jgss.krb5.accept {\n" + + " com.sun.security.auth.module.Krb5LoginModule required\n" + + " principal=\"" + SERVER + "\"\n" + + " useKeyTab=true\n" + + " isInitiator=false\n" + + " storeKey=true;\n};\n" + + "client {\n" + + " com.sun.security.auth.module.Krb5LoginModule required;\n};\n" + + "server {\n" + + " com.sun.security.auth.module.Krb5LoginModule required\n" + + " principal=\"" + SERVER + "\"\n" + + " useKeyTab=true\n" + + " storeKey=true;\n};\n" + + "backend {\n" + + " com.sun.security.auth.module.Krb5LoginModule required\n" + + " principal=\"" + BACKEND + "\"\n" + + " useKeyTab=true\n" + + " storeKey=true\n" + + " isInitiator=false;\n};\n" + ).getBytes()); + fos.close(); + f.deleteOnExit(); + Security.setProperty("auth.login.defaultCallbackHandler", "OneKDC$CallbackForClient"); + } + + /** + * The default callback handler for JAAS login. Note that this handler is + * hard coded to provide only info for USER1. If you need to provide info + * for another principal, please use Context.fromUserPass() instead. + */ + public static class CallbackForClient implements CallbackHandler { + public void handle(Callback[] callbacks) { + String user = OneKDC.USER; + char[] pass = OneKDC.PASS; + for (Callback callback : callbacks) { + if (callback instanceof NameCallback) { + System.out.println("Callback for name: " + user); + ((NameCallback) callback).setName(user); + } + if (callback instanceof PasswordCallback) { + System.out.println("Callback for pass: " + + new String(pass)); + ((PasswordCallback) callback).setPassword(pass); + } + } + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/pkcs11/sslecc/CipherTest.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/pkcs11/sslecc/CipherTest.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/pkcs11/sslecc/CipherTest.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/pkcs11/sslecc/CipherTest.java 2015-01-20 02:20:42.000000000 +0000 @@ -119,6 +119,13 @@ return false; } + // ignore exportable cipher suite for TLSv1.1 + if (protocol.equals("TLSv1.1")) { + if(cipherSuite.indexOf("_EXPORT_") != -1) { + return false; + } + } + return true; } @@ -148,18 +155,14 @@ cipherSuites.length * protocols.length * clientAuths.length); for (int i = 0; i < cipherSuites.length; i++) { String cipherSuite = cipherSuites[i]; - if (peerFactory.isSupported(cipherSuite) == false) { - continue; - } - // skip kerberos cipher suites - if (cipherSuite.startsWith("TLS_KRB5")) { - continue; - } + for (int j = 0; j < protocols.length; j++) { String protocol = protocols[j]; - if (protocol.equals("SSLv2Hello")) { + + if (!peerFactory.isSupported(cipherSuite, protocol)) { continue; } + for (int k = 0; k < clientAuths.length; k++) { String clientAuth = clientAuths[k]; if ((clientAuth != null) && @@ -275,7 +278,6 @@ // for some reason, ${test.src} has a different value when the // test is called from the script and when it is called directly... -// static String pathToStores = "../../etc"; static String pathToStores = "."; static String pathToStoresSH = "."; static String keyStoreFile = "keystore"; @@ -336,7 +338,30 @@ abstract Server newServer(CipherTest cipherTest) throws Exception; - boolean isSupported(String cipherSuite) { + boolean isSupported(String cipherSuite, String protocol) { + // skip kerberos cipher suites + if (cipherSuite.startsWith("TLS_KRB5")) { + System.out.println("Skipping unsupported test for " + + cipherSuite + " of " + protocol); + return false; + } + + // skip SSLv2Hello protocol + if (protocol.equals("SSLv2Hello")) { + System.out.println("Skipping unsupported test for " + + cipherSuite + " of " + protocol); + return false; + } + + // ignore exportable cipher suite for TLSv1.1 + if (protocol.equals("TLSv1.1")) { + if (cipherSuite.indexOf("_EXPORT_WITH") != -1) { + System.out.println("Skipping obsoleted test for " + + cipherSuite + " of " + protocol); + return false; + } + } + return true; } } diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java 2014-10-08 15:35:08.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java 2015-01-20 02:20:42.000000000 +0000 @@ -27,6 +27,7 @@ * @summary Verify that all ciphersuites work (incl. ECC using NSS crypto) * @author Andreas Sterbenz * @library .. + * @run main/othervm ClientJSSEServerJSSE */ import java.security.*; @@ -36,6 +37,10 @@ private static String[] cmdArgs; public static void main(String[] args) throws Exception { + // reset the security property to make sure that the algorithms + // and keys used in this test are not disabled. + Security.setProperty("jdk.tls.disabledAlgorithms", ""); + cmdArgs = args; main(new ClientJSSEServerJSSE()); } diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/smartcardio/TestAll.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/smartcardio/TestAll.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/smartcardio/TestAll.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/smartcardio/TestAll.java 2015-01-20 02:20:42.000000000 +0000 @@ -40,6 +40,7 @@ TestMultiplePresent.class, TestPresent.class, TestTransmit.class, + TestDirect.class, }; public static void main(String[] args) throws Exception { diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/smartcardio/TestDirect.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/smartcardio/TestDirect.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/smartcardio/TestDirect.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/smartcardio/TestDirect.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8046343 + * @summary Make sure that direct protocol is available + * @run main/manual TestDirect + */ + +// This test requires special hardware. + +import javax.smartcardio.Card; +import javax.smartcardio.CardTerminal; +import javax.smartcardio.CardTerminals; +import javax.smartcardio.TerminalFactory; + +public class TestDirect { + public static void main(String[] args) throws Exception { + TerminalFactory terminalFactory = TerminalFactory.getDefault(); + CardTerminals cardTerminals = terminalFactory.terminals(); + CardTerminal cardTerminal = cardTerminals.list().get(0); + Card card = cardTerminal.connect("DIRECT"); + card.disconnect(true); + + System.out.println("OK."); + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ProtocolVersion/HttpsProtocols.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ProtocolVersion/HttpsProtocols.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ProtocolVersion/HttpsProtocols.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ProtocolVersion/HttpsProtocols.java 2015-01-20 02:20:42.000000000 +0000 @@ -32,6 +32,7 @@ import java.io.*; import java.net.*; import javax.net.ssl.*; +import java.security.Security; public class HttpsProtocols implements HostnameVerifier { @@ -171,6 +172,10 @@ volatile Exception clientException = null; public static void main(String[] args) throws Exception { + // reset the security property to make sure that the algorithms + // and keys used in this test are not disabled. + Security.setProperty("jdk.tls.disabledAlgorithms", ""); + String keyFilename = System.getProperty("test.src", "./") + "/" + pathToStores + "/" + keyStoreFile; diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/DelegatedTaskWrongException.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/DelegatedTaskWrongException.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/DelegatedTaskWrongException.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/DelegatedTaskWrongException.java 2015-01-20 02:20:42.000000000 +0000 @@ -25,7 +25,7 @@ * @test * @bug 4969459 * @summary Delegated tasks are not reflecting the subclasses of SSLException - * + * @run main/othervm DelegatedTaskWrongException */ import javax.net.ssl.*; @@ -110,6 +110,9 @@ } public static void main(String args[]) throws Exception { + // reset the security property to make sure that the algorithms + // and keys used in this test are not disabled. + Security.setProperty("jdk.tls.disabledAlgorithms", ""); DelegatedTaskWrongException test; diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/SelfIssuedCert.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/SelfIssuedCert.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/SelfIssuedCert.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/SelfIssuedCert.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,400 @@ +/* + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6822460 + * @summary support self-issued certificate + * @run main/othervm SelfIssuedCert PKIX + * @run main/othervm SelfIssuedCert SunX509 + * @author Xuelei Fan + */ + +import java.net.*; +import java.util.*; +import java.io.*; +import javax.net.ssl.*; +import java.security.KeyStore; +import java.security.KeyFactory; +import java.security.cert.Certificate; +import java.security.cert.CertificateFactory; +import java.security.spec.*; +import java.security.interfaces.*; +import java.math.BigInteger; + +import sun.misc.BASE64Decoder; + +public class SelfIssuedCert { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = true; + + /* + * Where do we find the keystores? + */ + // Certificate information: + // Issuer: C=US, O=Example, CN=localhost + // Validity + // Not Before: May 25 00:35:58 2009 GMT + // Not After : May 5 00:35:58 2030 GMT + // Subject: C=US, O=Example, CN=localhost + // X509v3 Subject Key Identifier: + // 56:AB:FE:15:4C:9C:4A:70:90:DC:0B:9B:EB:BE:DC:03:CC:7F:CE:CF + // X509v3 Authority Key Identifier: + // keyid:56:AB:FE:15:4C:9C:4A:70:90:DC:0B:9B:EB:BE:DC:03:CC:7F:CE:CF + // DirName:/C=US/O=Example/CN=localhost + // serial:00 + static String trusedCertStr = + "-----BEGIN CERTIFICATE-----\n" + + "MIICejCCAeOgAwIBAgIBADANBgkqhkiG9w0BAQQFADAzMQswCQYDVQQGEwJVUzEQ\n" + + "MA4GA1UEChMHRXhhbXBsZTESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTA5MDUyNTAw\n" + + "MDQ0M1oXDTMwMDUwNTAwMDQ0M1owMzELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0V4\n" + + "YW1wbGUxEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAw\n" + + "gYkCgYEA0Wvh3FHYGQ3vvw59yTjUxT6QuY0fzwCGQTM9evXr/V9+pjWmaTkNDW+7\n" + + "S/LErlWz64gOWTgcMZN162sVgx4ct/q27brY+SlUO5eSud1fSac6SfefhOPBa965\n" + + "Xc4mnpDt5sgQPMDCuFK7Le6A+/S9J42BO2WYmNcmvcwWWrv+ehcCAwEAAaOBnTCB\n" + + "mjAdBgNVHQ4EFgQUq3q5fYEibdvLpab+JY4pmifj2vYwWwYDVR0jBFQwUoAUq3q5\n" + + "fYEibdvLpab+JY4pmifj2vahN6Q1MDMxCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdF\n" + + "eGFtcGxlMRIwEAYDVQQDEwlsb2NhbGhvc3SCAQAwDwYDVR0TAQH/BAUwAwEB/zAL\n" + + "BgNVHQ8EBAMCAgQwDQYJKoZIhvcNAQEEBQADgYEAHL8BSwtX6s8WPPG2FbQBX+K8\n" + + "GquAyQNtgfJNm60B4i+fVBkJiQJtLmE0emvHx/3sIaHmB0Gd0HKnk/cIQXY304vr\n" + + "QpqwudKcIZuzmj+pa7807joV+WzRDVIlt4HpYg7tiUvEoyw+X8jwY2lgiGR7mWu6\n" + + "jQU8PN/06+qgtvSGFpo=\n" + + "-----END CERTIFICATE-----"; + + // Certificate information: + // Issuer: C=US, O=Example, CN=localhost + // Validity + // Not Before: May 25 00:35:58 2009 GMT + // Not After : May 5 00:35:58 2030 GMT + // Subject: C=US, O=Example, CN=localhost + // X509v3 Subject Key Identifier: + // 0D:30:76:22:D6:9D:75:EF:FD:83:50:31:18:08:83:CD:01:4E:6A:C4 + // X509v3 Authority Key Identifier: + // keyid:56:AB:FE:15:4C:9C:4A:70:90:DC:0B:9B:EB:BE:DC:03:CC:7F:CE:CF + // DirName:/C=US/O=Example/CN=localhost + // serial:00 + static String targetCertStr = + "-----BEGIN CERTIFICATE-----\n" + + "MIICaTCCAdKgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAzMQswCQYDVQQGEwJVUzEQ\n" + + "MA4GA1UEChMHRXhhbXBsZTESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTA5MDUyNTAw\n" + + "MDQ0M1oXDTI5MDIwOTAwMDQ0M1owMzELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0V4\n" + + "YW1wbGUxEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAw\n" + + "gYkCgYEAzmPahrH9LTQv3HEWsua+hIpzyU1ACooSd5BtDjc7XnVzSdGW8QD9R8EA\n" + + "xko7TvfJo6IH6wwgHBspySwsl+6xvHhbwQjgtWlT71ksrUbqcUzmvSvcycQYA8RC\n" + + "yk9HK5pEJQgSxldpR3Kmy0V6CHC4dCm15trnJYWisTuezY3fjXECAwEAAaOBjDCB\n" + + "iTAdBgNVHQ4EFgQUQkiWFRkjKsfwFo7UMQfGEzNNW60wWwYDVR0jBFQwUoAUq3q5\n" + + "fYEibdvLpab+JY4pmifj2vahN6Q1MDMxCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdF\n" + + "eGFtcGxlMRIwEAYDVQQDEwlsb2NhbGhvc3SCAQAwCwYDVR0PBAQDAgPoMA0GCSqG\n" + + "SIb3DQEBBAUAA4GBAIMz7c1R+6KEO7FmH4rnv9XE62xkg03ff0vKXLZMjjs0CX2z\n" + + "ybRttuTFafHA6/JS+Wz0G83FCRVeiw2WPU6BweMwwejzzIrQ/K6mbp6w6sRFcbNa\n" + + "eLBtzkjEtI/htOSSq3/0mbKmWn5uVJckO4QiB8kUR4F7ngM9l1uuI46ZfUsk\n" + + "-----END CERTIFICATE-----"; + + // Private key in the format of PKCS#8 + static String targetPrivateKey = + "MIICeQIBADANBgkqhkiG9w0BAQEFAASCAmMwggJfAgEAAoGBAM5j2oax/S00L9xx\n" + + "FrLmvoSKc8lNQAqKEneQbQ43O151c0nRlvEA/UfBAMZKO073yaOiB+sMIBwbKcks\n" + + "LJfusbx4W8EI4LVpU+9ZLK1G6nFM5r0r3MnEGAPEQspPRyuaRCUIEsZXaUdypstF\n" + + "eghwuHQpteba5yWForE7ns2N341xAgMBAAECgYEAgZ8k98OBhopoJMLBxso0jXmH\n" + + "Dr59oiDlSEJku7DkkIajSZFggyxj5lTI78BfT1FASozQ/EY5RG2q6LXdq+41oU/U\n" + + "JVEQWhdIE1mQDwE0vgaYdjzMaVIsC3cZYOCOmCYvNxCiTt7e/z8yBMmAE5udqJMB\n" + + "pim4WXDfpy0ssK81oCECQQDwMC4xu+kn0yD/Qyi9Zn26gIRDv4bjzDQoJfSvMhrY\n" + + "a4duxLzh9u4gCDd0+wHxpPQvNxGCk0c1JUxBJ2rb4G3HAkEA2/oVRV6+xiRXUnoo\n" + + "bdPEO27zEJmdpE42yU/JLIy6DPu2IUhEqY45fU2ZERmwMdhpiK/vsf/CZKJ2j/ZU\n" + + "PdMLBwJBAJIYTFDWAqjFpCGAASzLRZiGiW0H941h7Suqgp159ZhEN5mps1Yis47q\n" + + "UIkoEHOiKSD69vychsiNykcrKbVaWosCQQC1UrYX4Vo1r5z/EkyjAwzcxL68rzM/\n" + + "TW1hkU/NVg7CRvXBB3X5oY+H1t/WNauD2tRa5FMbESwmkbhTQIP+FikfAkEA4goD\n" + + "HCxUn0Z1OQq9QL6y1Yoof6sHxicUwABosuCLJnDJmA5vhpemvdXQTzFII8g1hyQf\n" + + "z1yyDoxhddcleKlJvQ=="; + + static char passphrase[] = "passphrase".toCharArray(); + + /* + * Is the server ready to serve? + */ + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + SSLContext context = getSSLContext(null, targetCertStr, + targetPrivateKey); + SSLServerSocketFactory sslssf = context.getServerSocketFactory(); + + SSLServerSocket sslServerSocket = + (SSLServerSocket)sslssf.createServerSocket(serverPort); + serverPort = sslServerSocket.getLocalPort(); + + /* + * Signal Client, we're ready for his connect. + */ + serverReady = true; + + SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept(); + sslSocket.setNeedClientAuth(false); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslIS.read(); + sslOS.write(85); + sslOS.flush(); + + sslSocket.close(); + + } + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + SSLContext context = getSSLContext(trusedCertStr, null, null); + SSLSocketFactory sslsf = context.getSocketFactory(); + + SSLSocket sslSocket = + (SSLSocket)sslsf.createSocket("localhost", serverPort); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslOS.write(280); + sslOS.flush(); + sslIS.read(); + + sslSocket.close(); + } + + // get the ssl context + private static SSLContext getSSLContext(String trusedCertStr, + String keyCertStr, String keySpecStr) throws Exception { + + // generate certificate from cert string + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + + // create a key store + KeyStore ks = KeyStore.getInstance("JKS"); + ks.load(null, null); + + // import the trused cert + Certificate trusedCert = null; + ByteArrayInputStream is = null; + if (trusedCertStr != null) { + is = new ByteArrayInputStream(trusedCertStr.getBytes()); + trusedCert = cf.generateCertificate(is); + is.close(); + + ks.setCertificateEntry("RSA Export Signer", trusedCert); + } + + if (keyCertStr != null) { + // generate the private key. + PKCS8EncodedKeySpec priKeySpec = new PKCS8EncodedKeySpec( + new BASE64Decoder().decodeBuffer(keySpecStr)); + KeyFactory kf = KeyFactory.getInstance("RSA"); + RSAPrivateKey priKey = + (RSAPrivateKey)kf.generatePrivate(priKeySpec); + + // generate certificate chain + is = new ByteArrayInputStream(keyCertStr.getBytes()); + Certificate keyCert = cf.generateCertificate(is); + is.close(); + + Certificate[] chain = null; + if (trusedCert != null) { + chain = new Certificate[2]; + chain[0] = keyCert; + chain[1] = trusedCert; + } else { + chain = new Certificate[1]; + chain[0] = keyCert; + } + + // import the key entry. + ks.setKeyEntry("Whatever", priKey, passphrase, chain); + } + + // create SSL context + TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmAlgorithm); + tmf.init(ks); + + SSLContext ctx = SSLContext.getInstance("TLS"); + if (keyCertStr != null && !keyCertStr.isEmpty()) { + KeyManagerFactory kmf = KeyManagerFactory.getInstance("NewSunX509"); + kmf.init(ks, passphrase); + + ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); + ks = null; + } else { + ctx.init(null, tmf.getTrustManagers(), null); + } + + return ctx; + } + + private static String tmAlgorithm; // trust manager + + private static void parseArguments(String[] args) { + tmAlgorithm = args[0]; + } + + /* + * ============================================================= + * The remainder is just support stuff + */ + + // use any free port by default + volatile int serverPort = 0; + + volatile Exception serverException = null; + volatile Exception clientException = null; + + public static void main(String args[]) throws Exception { + if (debug) + System.setProperty("javax.net.debug", "all"); + + + /* + * Get the customized arguments. + */ + parseArguments(args); + + /* + * Start the tests. + */ + new SelfIssuedCert(); + } + + Thread clientThread = null; + Thread serverThread = null; + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + SelfIssuedCert() throws Exception { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * + * If the main thread excepted, that propagates back + * immediately. If the other thread threw an exception, we + * should report back. + */ + if (serverException != null) + throw serverException; + if (clientException != null) + throw clientException; + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + doServerSide(); + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + doClientSide(); + } + } + +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/testEnabledProtocols.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/testEnabledProtocols.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/testEnabledProtocols.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/testEnabledProtocols.java 2015-01-20 02:20:42.000000000 +0000 @@ -116,6 +116,10 @@ volatile Exception clientException = null; public static void main(String[] args) throws Exception { + // reset the security property to make sure that the algorithms + // and keys used in this test are not disabled. + Security.setProperty("jdk.tls.disabledAlgorithms", ""); + String keyFilename = System.getProperty("test.src", "./") + "/" + pathToStores + "/" + keyStoreFile; diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/javax/net/ssl/SSLContextVersion.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/javax/net/ssl/SSLContextVersion.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/javax/net/ssl/SSLContextVersion.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/javax/net/ssl/SSLContextVersion.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6976117 + * @summary SSLContext.getInstance("TLSv1.1") returns SSLEngines/SSLSockets + * without TLSv1.1 enabled + */ + +import javax.net.ssl.*; + +public class SSLContextVersion { + static enum ContextVersion { + TLS_CV_01("SSL", "TLSv1", "TLSv1.1"), + TLS_CV_02("TLS", "TLSv1", "TLSv1.1"), + TLS_CV_03("SSLv3", "TLSv1", "TLSv1.1"), + TLS_CV_04("TLSv1", "TLSv1", "TLSv1.1"), + TLS_CV_05("TLSv1.1", "TLSv1.1", "TLSv1.1"), + TLS_CV_07("Default", "TLSv1", "TLSv1.1"); + + final String contextVersion; + final String defaultProtocolVersion; + final String supportedProtocolVersion; + + ContextVersion(String contextVersion, String defaultProtocolVersion, + String supportedProtocolVersion) { + this.contextVersion = contextVersion; + this.defaultProtocolVersion = defaultProtocolVersion; + this.supportedProtocolVersion = supportedProtocolVersion; + } + } + + public static void main(String[] args) throws Exception { + for (ContextVersion cv : ContextVersion.values()) { + System.out.println("Checking SSLContext of " + cv.contextVersion); + SSLContext context = SSLContext.getInstance(cv.contextVersion); + + // Default SSLContext is initialized automatically. + if (!cv.contextVersion.equals("Default")) { + // Use default TK, KM and random. + context.init((KeyManager[])null, (TrustManager[])null, null); + } + + SSLParameters parameters = context.getDefaultSSLParameters(); + + String[] protocols = parameters.getProtocols(); + String[] ciphers = parameters.getCipherSuites(); + + if (protocols.length == 0 || ciphers.length == 0) { + throw new Exception("No default protocols or cipher suites"); + } + + boolean isMatch = false; + for (String protocol : protocols) { + System.out.println("\tdefault protocol version " + protocol); + if (protocol.equals(cv.defaultProtocolVersion)) { + isMatch = true; + break; + } + } + + if (!isMatch) { + throw new Exception("No matched default protocol"); + } + + parameters = context.getSupportedSSLParameters(); + + protocols = parameters.getProtocols(); + ciphers = parameters.getCipherSuites(); + + if (protocols.length == 0 || ciphers.length == 0) { + throw new Exception("No default protocols or cipher suites"); + } + + isMatch = false; + for (String protocol : protocols) { + System.out.println("\tsupported protocol version " + protocol); + if (protocol.equals(cv.supportedProtocolVersion)) { + isMatch = true; + break; + } + } + + if (!isMatch) { + throw new Exception("No matched default protocol"); + } + System.out.println("\t... Success"); + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/EmptyCertificateAuthorities.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/EmptyCertificateAuthorities.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/EmptyCertificateAuthorities.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/EmptyCertificateAuthorities.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,371 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4873188 + * @summary Support TLS 1.1 + * @run main/othervm -Djavax.net.debug=all EmptyCertificateAuthorities + * + * @author Xuelei Fan + */ + +import java.io.*; +import java.net.*; +import java.security.*; +import java.security.cert.*; +import javax.net.ssl.*; + +public class EmptyCertificateAuthorities { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = false; + + /* + * Where do we find the keystores? + */ + static String pathToStores = "/../../../../etc"; + static String keyStoreFile = "keystore"; + static String trustStoreFile = "truststore"; + static String passwd = "passphrase"; + + /* + * Is the server ready to serve? + */ + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * If the client or server is doing some kind of object creation + * that the other side depends on, and that thread prematurely + * exits, you may experience a hang. The test harness will + * terminate all hung threads after its timeout has expired, + * currently 3 minutes by default, but you might try to be + * smart about it.... + */ + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + SSLServerSocketFactory sslssf = getSSLServerSF(); + SSLServerSocket sslServerSocket = + (SSLServerSocket) sslssf.createServerSocket(serverPort); + + // require client authentication. + sslServerSocket.setNeedClientAuth(true); + + serverPort = sslServerSocket.getLocalPort(); + + /* + * Signal Client, we're ready for his connect. + */ + serverReady = true; + + SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept(); + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslIS.read(); + sslOS.write('A'); + sslOS.flush(); + + sslSocket.close(); + } + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + SSLSocket sslSocket = (SSLSocket) + sslsf.createSocket("localhost", serverPort); + + // enable TLSv1.1 only + sslSocket.setEnabledProtocols(new String[] {"TLSv1.1"}); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslOS.write('B'); + sslOS.flush(); + sslIS.read(); + + sslSocket.close(); + } + + private SSLServerSocketFactory getSSLServerSF() throws Exception { + + char [] password = + System.getProperty("javax.net.ssl.keyStorePassword").toCharArray(); + String keyFilename = System.getProperty("javax.net.ssl.keyStore"); + + KeyStore ks = KeyStore.getInstance("JKS"); + ks.load(new FileInputStream(keyFilename), password); + + KeyManagerFactory kmf = KeyManagerFactory.getInstance("NewSunX509"); + kmf.init(ks, password); + + KeyManager[] kms = kmf.getKeyManagers(); + TrustManager[] tms = new MyX509TM[] {new MyX509TM()}; + + SSLContext ctx = SSLContext.getInstance("TLS"); + ctx.init(kms, tms, null); + + return ctx.getServerSocketFactory(); + } + + + static class MyX509TM implements X509TrustManager { + X509TrustManager tm; + + public void checkClientTrusted(X509Certificate[] chain, + String authType) throws CertificateException { + if (tm == null) { + initialize(); + } + tm.checkClientTrusted(chain, authType); + } + + public void checkServerTrusted(X509Certificate[] chain, + String authType) throws CertificateException { + if (tm == null) { + initialize(); + } + tm.checkServerTrusted(chain, authType); + } + + public X509Certificate[] getAcceptedIssuers() { + // always return empty array + return new X509Certificate[0]; + } + + private void initialize() throws CertificateException { + String passwd = + System.getProperty("javax.net.ssl.trustStorePassword"); + char [] password = passwd.toCharArray(); + String trustFilename = + System.getProperty("javax.net.ssl.trustStore"); + + try { + KeyStore ks = KeyStore.getInstance("JKS"); + ks.load(new FileInputStream(trustFilename), password); + + TrustManagerFactory tmf = + TrustManagerFactory.getInstance("PKIX"); + tmf.init(ks); + tm = (X509TrustManager)tmf.getTrustManagers()[0]; + } catch (Exception e) { + throw new CertificateException("Unable to initialize TM"); + } + + } + } + + /* + * ============================================================= + * The remainder is just support stuff + */ + + // use any free port by default + volatile int serverPort = 0; + + volatile Exception serverException = null; + volatile Exception clientException = null; + + public static void main(String[] args) throws Exception { + String keyFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + keyStoreFile; + String trustFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + trustStoreFile; + + System.setProperty("javax.net.ssl.keyStore", keyFilename); + System.setProperty("javax.net.ssl.keyStorePassword", passwd); + System.setProperty("javax.net.ssl.trustStore", trustFilename); + System.setProperty("javax.net.ssl.trustStorePassword", passwd); + + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Start the tests. + */ + new EmptyCertificateAuthorities(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + EmptyCertificateAuthorities() throws Exception { + try { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + } catch (Exception e) { + // swallow for now. Show later + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * Which side threw the error? + */ + Exception local; + Exception remote; + String whichRemote; + + if (separateServerThread) { + remote = serverException; + local = clientException; + whichRemote = "server"; + } else { + remote = clientException; + local = serverException; + whichRemote = "client"; + } + + /* + * If both failed, return the curthread's exception, but also + * print the remote side Exception + */ + if ((local != null) && (remote != null)) { + System.out.println(whichRemote + " also threw:"); + remote.printStackTrace(); + System.out.println(); + throw local; + } + + if (remote != null) { + throw remote; + } + + if (local != null) { + throw local; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + try { + doServerSide(); + } catch (Exception e) { + serverException = e; + } finally { + serverReady = true; + } + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + try { + doClientSide(); + } catch (Exception e) { + clientException = e; + } + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/ExportableBlockCipher.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/ExportableBlockCipher.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/ExportableBlockCipher.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/ExportableBlockCipher.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,327 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4873188 + * @summary Support TLS 1.1 + * @run main/othervm -Djavax.net.debug=all ExportableBlockCipher + * + * @author Xuelei Fan + */ + +import java.io.*; +import java.net.*; +import javax.net.ssl.*; + +public class ExportableBlockCipher { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = false; + + /* + * Where do we find the keystores? + */ + static String pathToStores = "/../../../../etc"; + static String keyStoreFile = "keystore"; + static String trustStoreFile = "truststore"; + static String passwd = "passphrase"; + + /* + * Is the server ready to serve? + */ + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * If the client or server is doing some kind of object creation + * that the other side depends on, and that thread prematurely + * exits, you may experience a hang. The test harness will + * terminate all hung threads after its timeout has expired, + * currently 3 minutes by default, but you might try to be + * smart about it.... + */ + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + SSLServerSocketFactory sslssf = + (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); + SSLServerSocket sslServerSocket = + (SSLServerSocket) sslssf.createServerSocket(serverPort); + + serverPort = sslServerSocket.getLocalPort(); + + /* + * Signal Client, we're ready for his connect. + */ + serverReady = true; + + SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept(); + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + boolean interrupted = false; + try { + sslIS.read(); + sslOS.write('A'); + sslOS.flush(); + } catch (SSLException ssle) { + // get the expected exception + interrupted = true; + } finally { + sslSocket.close(); + } + + if (!interrupted) { + throw new SSLHandshakeException( + "A weak cipher suite is negotiated, " + + "TLSv1.1 must not negotiate the exportable cipher suites."); + } + } + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + SSLSocket sslSocket = (SSLSocket) + sslsf.createSocket("localhost", serverPort); + + // enable TLSv1.1 only + sslSocket.setEnabledProtocols(new String[] {"TLSv1.1"}); + + // enable a exportable block cipher + sslSocket.setEnabledCipherSuites( + new String[] {"SSL_RSA_EXPORT_WITH_DES40_CBC_SHA"}); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + boolean interrupted = false; + try { + sslOS.write('B'); + sslOS.flush(); + sslIS.read(); + } catch (SSLException ssle) { + // get the expected exception + interrupted = true; + } finally { + sslSocket.close(); + } + + if (!interrupted) { + throw new SSLHandshakeException( + "A weak cipher suite is negotiated, " + + "TLSv1.1 must not negotiate the exportable cipher suites."); + } + } + + /* + * ============================================================= + * The remainder is just support stuff + */ + + // use any free port by default + volatile int serverPort = 0; + + volatile Exception serverException = null; + volatile Exception clientException = null; + + public static void main(String[] args) throws Exception { + String keyFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + keyStoreFile; + String trustFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + trustStoreFile; + + System.setProperty("javax.net.ssl.keyStore", keyFilename); + System.setProperty("javax.net.ssl.keyStorePassword", passwd); + System.setProperty("javax.net.ssl.trustStore", trustFilename); + System.setProperty("javax.net.ssl.trustStorePassword", passwd); + + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Start the tests. + */ + new ExportableBlockCipher(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + ExportableBlockCipher() throws Exception { + try { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + } catch (Exception e) { + // swallow for now. Show later + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * Which side threw the error? + */ + Exception local; + Exception remote; + String whichRemote; + + if (separateServerThread) { + remote = serverException; + local = clientException; + whichRemote = "server"; + } else { + remote = clientException; + local = serverException; + whichRemote = "client"; + } + + /* + * If both failed, return the curthread's exception, but also + * print the remote side Exception + */ + if ((local != null) && (remote != null)) { + System.out.println(whichRemote + " also threw:"); + remote.printStackTrace(); + System.out.println(); + throw local; + } + + if (remote != null) { + throw remote; + } + + if (local != null) { + throw local; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + try { + doServerSide(); + } catch (Exception e) { + serverException = e; + } finally { + serverReady = true; + } + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + try { + doClientSide(); + } catch (Exception e) { + clientException = e; + } + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/ExportableStreamCipher.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/ExportableStreamCipher.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/ExportableStreamCipher.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/ExportableStreamCipher.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,327 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4873188 + * @summary Support TLS 1.1 + * @run main/othervm -Djavax.net.debug=all ExportableStreamCipher + * + * @author Xuelei Fan + */ + +import java.io.*; +import java.net.*; +import javax.net.ssl.*; + +public class ExportableStreamCipher { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = false; + + /* + * Where do we find the keystores? + */ + static String pathToStores = "/../../../../etc"; + static String keyStoreFile = "keystore"; + static String trustStoreFile = "truststore"; + static String passwd = "passphrase"; + + /* + * Is the server ready to serve? + */ + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * If the client or server is doing some kind of object creation + * that the other side depends on, and that thread prematurely + * exits, you may experience a hang. The test harness will + * terminate all hung threads after its timeout has expired, + * currently 3 minutes by default, but you might try to be + * smart about it.... + */ + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + SSLServerSocketFactory sslssf = + (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); + SSLServerSocket sslServerSocket = + (SSLServerSocket) sslssf.createServerSocket(serverPort); + + serverPort = sslServerSocket.getLocalPort(); + + /* + * Signal Client, we're ready for his connect. + */ + serverReady = true; + + SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept(); + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + boolean interrupted = false; + try { + sslIS.read(); + sslOS.write('A'); + sslOS.flush(); + } catch (SSLException ssle) { + // get the expected exception + interrupted = true; + } finally { + sslSocket.close(); + } + + if (!interrupted) { + throw new SSLHandshakeException( + "A weak cipher suite is negotiated, " + + "TLSv1.1 must not negotiate the exportable cipher suites."); + } + } + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + SSLSocket sslSocket = (SSLSocket) + sslsf.createSocket("localhost", serverPort); + + // enable TLSv1.1 only + sslSocket.setEnabledProtocols(new String[] {"TLSv1.1"}); + + // enable a exportable stream cipher + sslSocket.setEnabledCipherSuites( + new String[] {"SSL_RSA_EXPORT_WITH_RC4_40_MD5"}); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + boolean interrupted = false; + try { + sslOS.write('B'); + sslOS.flush(); + sslIS.read(); + } catch (SSLException ssle) { + // get the expected exception + interrupted = true; + } finally { + sslSocket.close(); + } + + if (!interrupted) { + throw new SSLHandshakeException( + "A weak cipher suite is negotiated, " + + "TLSv1.1 must not negotiate the exportable cipher suites."); + } + } + + /* + * ============================================================= + * The remainder is just support stuff + */ + + // use any free port by default + volatile int serverPort = 0; + + volatile Exception serverException = null; + volatile Exception clientException = null; + + public static void main(String[] args) throws Exception { + String keyFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + keyStoreFile; + String trustFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + trustStoreFile; + + System.setProperty("javax.net.ssl.keyStore", keyFilename); + System.setProperty("javax.net.ssl.keyStorePassword", passwd); + System.setProperty("javax.net.ssl.trustStore", trustFilename); + System.setProperty("javax.net.ssl.trustStorePassword", passwd); + + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Start the tests. + */ + new ExportableStreamCipher(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + ExportableStreamCipher() throws Exception { + try { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + } catch (Exception e) { + // swallow for now. Show later + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * Which side threw the error? + */ + Exception local; + Exception remote; + String whichRemote; + + if (separateServerThread) { + remote = serverException; + local = clientException; + whichRemote = "server"; + } else { + remote = clientException; + local = serverException; + whichRemote = "client"; + } + + /* + * If both failed, return the curthread's exception, but also + * print the remote side Exception + */ + if ((local != null) && (remote != null)) { + System.out.println(whichRemote + " also threw:"); + remote.printStackTrace(); + System.out.println(); + throw local; + } + + if (remote != null) { + throw remote; + } + + if (local != null) { + throw local; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + try { + doServerSide(); + } catch (Exception e) { + serverException = e; + } finally { + serverReady = true; + } + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + try { + doClientSide(); + } catch (Exception e) { + clientException = e; + } + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericBlockCipher.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericBlockCipher.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericBlockCipher.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericBlockCipher.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,303 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4873188 + * @summary Support TLS 1.1 + * @run main/othervm -Djavax.net.debug=all GenericBlockCipher + * + * @author Xuelei Fan + */ + +import java.io.*; +import java.net.*; +import javax.net.ssl.*; + +public class GenericBlockCipher { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = false; + + /* + * Where do we find the keystores? + */ + static String pathToStores = "/../../../../etc"; + static String keyStoreFile = "keystore"; + static String trustStoreFile = "truststore"; + static String passwd = "passphrase"; + + /* + * Is the server ready to serve? + */ + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * If the client or server is doing some kind of object creation + * that the other side depends on, and that thread prematurely + * exits, you may experience a hang. The test harness will + * terminate all hung threads after its timeout has expired, + * currently 3 minutes by default, but you might try to be + * smart about it.... + */ + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + SSLServerSocketFactory sslssf = + (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); + SSLServerSocket sslServerSocket = + (SSLServerSocket) sslssf.createServerSocket(serverPort); + + serverPort = sslServerSocket.getLocalPort(); + + /* + * Signal Client, we're ready for his connect. + */ + serverReady = true; + + SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept(); + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslIS.read(); + sslOS.write('A'); + sslOS.flush(); + + sslSocket.close(); + } + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + SSLSocket sslSocket = (SSLSocket) + sslsf.createSocket("localhost", serverPort); + + // enable TLSv1.1 only + sslSocket.setEnabledProtocols(new String[] {"TLSv1.1"}); + + // enable a block cipher + sslSocket.setEnabledCipherSuites( + new String[] {"TLS_RSA_WITH_AES_128_CBC_SHA"}); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslOS.write('B'); + sslOS.flush(); + sslIS.read(); + + sslSocket.close(); + } + + /* + * ============================================================= + * The remainder is just support stuff + */ + + // use any free port by default + volatile int serverPort = 0; + + volatile Exception serverException = null; + volatile Exception clientException = null; + + public static void main(String[] args) throws Exception { + String keyFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + keyStoreFile; + String trustFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + trustStoreFile; + + System.setProperty("javax.net.ssl.keyStore", keyFilename); + System.setProperty("javax.net.ssl.keyStorePassword", passwd); + System.setProperty("javax.net.ssl.trustStore", trustFilename); + System.setProperty("javax.net.ssl.trustStorePassword", passwd); + + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Start the tests. + */ + new GenericBlockCipher(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + GenericBlockCipher() throws Exception { + try { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + } catch (Exception e) { + // swallow for now. Show later + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * Which side threw the error? + */ + Exception local; + Exception remote; + String whichRemote; + + if (separateServerThread) { + remote = serverException; + local = clientException; + whichRemote = "server"; + } else { + remote = clientException; + local = serverException; + whichRemote = "client"; + } + + /* + * If both failed, return the curthread's exception, but also + * print the remote side Exception + */ + if ((local != null) && (remote != null)) { + System.out.println(whichRemote + " also threw:"); + remote.printStackTrace(); + System.out.println(); + throw local; + } + + if (remote != null) { + throw remote; + } + + if (local != null) { + throw local; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + try { + doServerSide(); + } catch (Exception e) { + serverException = e; + } finally { + serverReady = true; + } + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + try { + doClientSide(); + } catch (Exception e) { + clientException = e; + } + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericStreamCipher.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericStreamCipher.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericStreamCipher.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericStreamCipher.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,303 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4873188 + * @summary Support TLS 1.1 + * @run main/othervm -Djavax.net.debug=all GenericStreamCipher + * + * @author Xuelei Fan + */ + +import java.io.*; +import java.net.*; +import javax.net.ssl.*; + +public class GenericStreamCipher { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = false; + + /* + * Where do we find the keystores? + */ + static String pathToStores = "/../../../../etc"; + static String keyStoreFile = "keystore"; + static String trustStoreFile = "truststore"; + static String passwd = "passphrase"; + + /* + * Is the server ready to serve? + */ + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * If the client or server is doing some kind of object creation + * that the other side depends on, and that thread prematurely + * exits, you may experience a hang. The test harness will + * terminate all hung threads after its timeout has expired, + * currently 3 minutes by default, but you might try to be + * smart about it.... + */ + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + SSLServerSocketFactory sslssf = + (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); + SSLServerSocket sslServerSocket = + (SSLServerSocket) sslssf.createServerSocket(serverPort); + + serverPort = sslServerSocket.getLocalPort(); + + /* + * Signal Client, we're ready for his connect. + */ + serverReady = true; + + SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept(); + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslIS.read(); + sslOS.write('A'); + sslOS.flush(); + + sslSocket.close(); + } + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + SSLSocketFactory sslsf = + (SSLSocketFactory) SSLSocketFactory.getDefault(); + SSLSocket sslSocket = (SSLSocket) + sslsf.createSocket("localhost", serverPort); + + // enable TLSv1.1 only + sslSocket.setEnabledProtocols(new String[] {"TLSv1.1"}); + + // enable a stream cipher + sslSocket.setEnabledCipherSuites( + new String[] {"SSL_RSA_WITH_RC4_128_MD5"}); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + sslOS.write('B'); + sslOS.flush(); + sslIS.read(); + + sslSocket.close(); + } + + /* + * ============================================================= + * The remainder is just support stuff + */ + + // use any free port by default + volatile int serverPort = 0; + + volatile Exception serverException = null; + volatile Exception clientException = null; + + public static void main(String[] args) throws Exception { + String keyFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + keyStoreFile; + String trustFilename = + System.getProperty("test.src", ".") + "/" + pathToStores + + "/" + trustStoreFile; + + System.setProperty("javax.net.ssl.keyStore", keyFilename); + System.setProperty("javax.net.ssl.keyStorePassword", passwd); + System.setProperty("javax.net.ssl.trustStore", trustFilename); + System.setProperty("javax.net.ssl.trustStorePassword", passwd); + + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Start the tests. + */ + new GenericStreamCipher(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + GenericStreamCipher() throws Exception { + try { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + } catch (Exception e) { + // swallow for now. Show later + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * Which side threw the error? + */ + Exception local; + Exception remote; + String whichRemote; + + if (separateServerThread) { + remote = serverException; + local = clientException; + whichRemote = "server"; + } else { + remote = clientException; + local = serverException; + whichRemote = "client"; + } + + /* + * If both failed, return the curthread's exception, but also + * print the remote side Exception + */ + if ((local != null) && (remote != null)) { + System.out.println(whichRemote + " also threw:"); + remote.printStackTrace(); + System.out.println(); + throw local; + } + + if (remote != null) { + throw remote; + } + + if (local != null) { + throw local; + } + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + try { + doServerSide(); + } catch (Exception e) { + serverException = e; + } finally { + serverReady = true; + } + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + try { + doClientSide(); + } catch (Exception e) { + clientException = e; + } + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/sanity/ciphersuites/CipherSuitesInOrder.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/sanity/ciphersuites/CipherSuitesInOrder.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/sanity/ciphersuites/CipherSuitesInOrder.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/sanity/ciphersuites/CipherSuitesInOrder.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,245 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7174244 + * @summary NPE in Krb5ProxyImpl.getServerKeys() + * + * SunJSSE does not support dynamic system properties, no way to re-use + * system properties in samevm/agentvm mode. + * @run main/othervm CipherSuitesInOrder + */ + +import java.util.*; +import javax.net.ssl.*; + +public class CipherSuitesInOrder { + + // supported ciphersuites + private final static List supportedCipherSuites = + Arrays.asList( + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", + "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", + "TLS_RSA_WITH_AES_256_CBC_SHA256", + "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384", + "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384", + "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", + "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", + "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", + "TLS_RSA_WITH_AES_256_CBC_SHA", + "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", + "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", + "TLS_DHE_RSA_WITH_AES_256_CBC_SHA", + "TLS_DHE_DSS_WITH_AES_256_CBC_SHA", + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", + "TLS_RSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", + "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", + "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", + "TLS_RSA_WITH_AES_128_CBC_SHA", + "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", + "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", + "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", + "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", + "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", + "TLS_ECDHE_RSA_WITH_RC4_128_SHA", + "SSL_RSA_WITH_RC4_128_SHA", + "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", + "TLS_ECDH_RSA_WITH_RC4_128_SHA", + "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", + "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", + "SSL_RSA_WITH_3DES_EDE_CBC_SHA", + "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", + "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", + "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", + "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", + "SSL_RSA_WITH_RC4_128_MD5", + + "TLS_EMPTY_RENEGOTIATION_INFO_SCSV", + + "TLS_DH_anon_WITH_AES_256_CBC_SHA256", + "TLS_ECDH_anon_WITH_AES_256_CBC_SHA", + "TLS_DH_anon_WITH_AES_256_CBC_SHA", + "TLS_DH_anon_WITH_AES_128_CBC_SHA256", + "TLS_ECDH_anon_WITH_AES_128_CBC_SHA", + "TLS_DH_anon_WITH_AES_128_CBC_SHA", + "TLS_ECDH_anon_WITH_RC4_128_SHA", + "SSL_DH_anon_WITH_RC4_128_MD5", + "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", + "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", + "TLS_RSA_WITH_NULL_SHA256", + "TLS_ECDHE_ECDSA_WITH_NULL_SHA", + "TLS_ECDHE_RSA_WITH_NULL_SHA", + "SSL_RSA_WITH_NULL_SHA", + "TLS_ECDH_ECDSA_WITH_NULL_SHA", + "TLS_ECDH_RSA_WITH_NULL_SHA", + "TLS_ECDH_anon_WITH_NULL_SHA", + "SSL_RSA_WITH_NULL_MD5", + "SSL_RSA_WITH_DES_CBC_SHA", + "SSL_DHE_RSA_WITH_DES_CBC_SHA", + "SSL_DHE_DSS_WITH_DES_CBC_SHA", + "SSL_DH_anon_WITH_DES_CBC_SHA", + "SSL_RSA_EXPORT_WITH_RC4_40_MD5", + "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", + "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", + "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", + "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", + "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", + "TLS_KRB5_WITH_RC4_128_SHA", + "TLS_KRB5_WITH_RC4_128_MD5", + "TLS_KRB5_WITH_3DES_EDE_CBC_SHA", + "TLS_KRB5_WITH_3DES_EDE_CBC_MD5", + "TLS_KRB5_WITH_DES_CBC_SHA", + "TLS_KRB5_WITH_DES_CBC_MD5", + "TLS_KRB5_EXPORT_WITH_RC4_40_SHA", + "TLS_KRB5_EXPORT_WITH_RC4_40_MD5", + "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", + "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5" + ); + + private final static String[] protocols = { + "", "SSL", "TLS", "SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2" + }; + + + public static void main(String[] args) throws Exception { + // show all of the supported cipher suites + showSuites(supportedCipherSuites.toArray(new String[0]), + "All supported cipher suites"); + + for (String protocol : protocols) { + System.out.println("//"); + System.out.println("// " + + "Testing for SSLContext of " + protocol); + System.out.println("//"); + checkForProtocols(protocol); + } + } + + public static void checkForProtocols(String protocol) throws Exception { + SSLContext context; + if (protocol.isEmpty()) { + context = SSLContext.getDefault(); + } else { + context = SSLContext.getInstance(protocol); + context.init(null, null, null); + } + + // check the order of default cipher suites of SSLContext + SSLParameters parameters = context.getDefaultSSLParameters(); + checkSuites(parameters.getCipherSuites(), + "Default cipher suites in SSLContext"); + + // check the order of supported cipher suites of SSLContext + parameters = context.getSupportedSSLParameters(); + checkSuites(parameters.getCipherSuites(), + "Supported cipher suites in SSLContext"); + + + // + // Check the cipher suites order of SSLEngine + // + SSLEngine engine = context.createSSLEngine(); + + // check the order of endabled cipher suites + String[] ciphers = engine.getEnabledCipherSuites(); + checkSuites(ciphers, + "Enabled cipher suites in SSLEngine"); + + // check the order of supported cipher suites + ciphers = engine.getSupportedCipherSuites(); + checkSuites(ciphers, + "Supported cipher suites in SSLEngine"); + + // + // Check the cipher suites order of SSLSocket + // + SSLSocketFactory factory = context.getSocketFactory(); + SSLSocket socket = null; + try { + socket = (SSLSocket)factory.createSocket(); + + // check the order of endabled cipher suites + ciphers = socket.getEnabledCipherSuites(); + checkSuites(ciphers, + "Enabled cipher suites in SSLSocket"); + + // check the order of supported cipher suites + ciphers = socket.getSupportedCipherSuites(); + checkSuites(ciphers, + "Supported cipher suites in SSLSocket"); + } finally { + if (socket != null) + socket.close(); + } + + // + // Check the cipher suites order of SSLServerSocket + // + SSLServerSocketFactory serverFactory = context.getServerSocketFactory(); + SSLServerSocket serverSocket = null; + try { + serverSocket = (SSLServerSocket)serverFactory.createServerSocket(); + // check the order of endabled cipher suites + ciphers = serverSocket.getEnabledCipherSuites(); + checkSuites(ciphers, + "Enabled cipher suites in SSLServerSocket"); + + // check the order of supported cipher suites + ciphers = serverSocket.getSupportedCipherSuites(); + checkSuites(ciphers, + "Supported cipher suites in SSLServerSocket"); + } finally { + if (serverSocket != null) + serverSocket.close(); + } + } + + private static void checkSuites(String[] suites, String title) { + showSuites(suites, title); + + int loc = -1; + int index = 0; + for (String suite : suites) { + index = supportedCipherSuites.indexOf(suite); + if (index <= loc) { + throw new RuntimeException(suite + " is not in order"); + } + + loc = index; + } + } + + private static void showSuites(String[] suites, String title) { + System.out.println(title + "[" + suites.length + "]:"); + for (String suite : suites) { + System.out.println(" " + suite); + } + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/sanity/interop/CipherTest.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/sanity/interop/CipherTest.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/sanity/interop/CipherTest.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/sanity/interop/CipherTest.java 2015-01-20 02:20:42.000000000 +0000 @@ -120,6 +120,13 @@ return false; } + // ignore exportable cipher suite for TLSv1.1 + if (protocol.equals("TLSv1.1")) { + if(cipherSuite.indexOf("_EXPORT_") != -1) { + return false; + } + } + return true; } @@ -149,18 +156,14 @@ cipherSuites.length * protocols.length * clientAuths.length); for (int i = 0; i < cipherSuites.length; i++) { String cipherSuite = cipherSuites[i]; - if (peerFactory.isSupported(cipherSuite) == false) { - continue; - } - // skip kerberos cipher suites - if (cipherSuite.startsWith("TLS_KRB5")) { - continue; - } + for (int j = 0; j < protocols.length; j++) { String protocol = protocols[j]; - if (protocol.equals("SSLv2Hello")) { + + if (!peerFactory.isSupported(cipherSuite, protocol)) { continue; } + for (int k = 0; k < clientAuths.length; k++) { String clientAuth = clientAuths[k]; if ((clientAuth != null) && @@ -295,9 +298,13 @@ public static void main(PeerFactory peerFactory, String[] args) throws Exception { + // reset the security property to make sure that the algorithms + // and keys used in this test are not disabled. + Security.setProperty("jdk.tls.disabledAlgorithms", ""); + long time = System.currentTimeMillis(); String relPath; - if ((args.length > 0) && args[0].equals("sh")) { + if ((args != null) && (args.length > 0) && args[0].equals("sh")) { relPath = pathToStoresSH; } else { relPath = pathToStores; @@ -336,7 +343,30 @@ abstract Server newServer(CipherTest cipherTest) throws Exception; - boolean isSupported(String cipherSuite) { + boolean isSupported(String cipherSuite, String protocol) { + // skip kerberos cipher suites + if (cipherSuite.startsWith("TLS_KRB5")) { + System.out.println("Skipping unsupported test for " + + cipherSuite + " of " + protocol); + return false; + } + + // skip SSLv2Hello protocol + if (protocol.equals("SSLv2Hello")) { + System.out.println("Skipping unsupported test for " + + cipherSuite + " of " + protocol); + return false; + } + + // ignore exportable cipher suite for TLSv1.1 + if (protocol.equals("TLSv1.1")) { + if (cipherSuite.indexOf("_EXPORT_WITH") != -1) { + System.out.println("Skipping obsoleted test for " + + cipherSuite + " of " + protocol); + return false; + } + } + return true; } } diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/sanity/interop/ClientJSSEServerJSSE.java openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/sanity/interop/ClientJSSEServerJSSE.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/security/ssl/sanity/interop/ClientJSSEServerJSSE.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/security/ssl/sanity/interop/ClientJSSEServerJSSE.java 2015-01-20 02:20:42.000000000 +0000 @@ -29,9 +29,15 @@ * @run main/othervm/timeout=300 ClientJSSEServerJSSE */ +import java.security.Security; + public class ClientJSSEServerJSSE { public static void main(String[] args) throws Exception { + // reset the security property to make sure that the algorithms + // and keys used in this test are not disabled. + Security.setProperty("jdk.tls.disabledAlgorithms", ""); + CipherTest.main(new JSSEFactory(), args); } diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/text/resources/LocaleData openjdk-6-6b34-1.13.6/jdk/test/sun/text/resources/LocaleData --- openjdk-6-6b33-1.13.5/jdk/test/sun/text/resources/LocaleData 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/text/resources/LocaleData 2015-01-20 02:17:33.000000000 +0000 @@ -574,7 +574,6 @@ FormatData/es_PA/NumberElements/0=. FormatData/es_PA/NumberElements/1=, FormatData/es_PA/NumberElements/2=; -CurrencyNames/es_PE/PEN=S/ FormatData/es_PE/NumberPatterns/0=#,##0.###;-#,##0.### # FormatData/es_PE/NumberPatterns/1=S/#,##0.00;S/-#,##0.00 # Changed; see bug 4122840 FormatData/es_PE/NumberPatterns/2=#,##0% @@ -656,7 +655,6 @@ FormatData/es_UY/NumberElements/2=; CurrencyNames/es_VE/VEB=Bs # bug 6570259 -CurrencyNames/es_VE/VEF=BsF. FormatData/es_VE/NumberPatterns/0=#,##0.###;-#,##0.### # FormatData/es_VE/NumberPatterns/1=Bs#,##0.00;Bs -#,##0.00 # Changed; see bug 4122840 FormatData/es_VE/NumberPatterns/2=#,##0% @@ -673,8 +671,8 @@ FormatData/es_VE/NumberElements/1=. FormatData/es_VE/NumberElements/2=; -# bug #4099810, 4290801 -CurrencyNames/uk_UA/UAH=\u0433\u0440\u0432. +# bug #4099810, 4290801, 6868106, 6916787 +CurrencyNames/uk_UA/UAH=\u0433\u0440\u043d. FormatData/uk_UA/NumberPatterns/0=#,##0.###;-#,##0.### # FormatData/uk_UA/NumberPatterns/1=#,##0.## '\u0433\u0440\u0432.';-#,##0.## '\u0433\u0440\u0432.' # Changed; see bug 4122840 FormatData/uk_UA/NumberPatterns/2=#,##0% @@ -5514,43 +5512,1477 @@ # bug 6531593 FormatData/is_IS/NumberPatterns/1=#,##0. \u00A4;-#,##0. \u00A4 -# bug 6573250 -CurrencyNames/en_CA/USD=US$ - -#bug 6450945 -CalendarData/ro/firstDayOfWeek=2 -CalendarData/ro/minimalDaysInFirstWeek=1 -FormatData/ro/DayNames/6=s\u00e2mb\u0103t\u0103 - -#bug 6509039 +# bug 6509039 FormatData/sv/AmPmMarkers/0=fm FormatData/sv/AmPmMarkers/1=em -#bug 6610748 +# JE, GG, IM (6544471) +LocaleNames//JE=Jersey +LocaleNames//GG=Guernsey +LocaleNames//IM=Isle Of Man + +# BL, MF (6627549) +LocaleNames//BL=Saint Barth\u00e9lemy +LocaleNames//MF=Saint Martin + +# bug 6609737 +FormatData/de/DateTimePatterns/0=HH:mm' Uhr 'z +TimeZoneNames/de/CET/1=Mitteleurop\u00e4ische Zeit +TimeZoneNames/de/CET/2=MEZ +TimeZoneNames/de/CET/3=Mitteleurop\u00e4ische Sommerzeit +TimeZoneNames/de/CET/4=MESZ +TimeZoneNames/de/EET/2=OEZ +TimeZoneNames/de/EET/4=OESZ +TimeZoneNames/de/WET/2=WEZ +TimeZoneNames/de/WET/4=WESZ + +# bug 6610748 FormatData/fi/AmPmMarkers/0=ap. FormatData/fi/AmPmMarkers/1=ip. +# bug 6507067 +TimeZoneNames/zh_TW/Asia\/Taipei/1=\u53f0\u7063\u6a19\u6e96\u6642\u9593 +TimeZoneNames/zh_TW/Asia\/Taipei/2=TST + +# bug 6645271 +FormatData/hr_HR/DateTimePatterns/6=dd.MM.yyyy. +FormatData/hr_HR/DateTimePatterns/7=dd.MM.yy. + +# bug 6873931 +CurrencyNames/tr_TR/TRY=TL + +#bug 6450945 +CalendarData/ro/firstDayOfWeek=2 +CalendarData/ro/minimalDaysInFirstWeek=1 +FormatData/ro/DayNames/6=s\u00e2mb\u0103t\u0103 + #bug 6645268 LocaleNames/fi/fr=ranska LocaleNames/fi/FR=Ranska LocaleNames/fi_FI/fr=ranska LocaleNames/fi_FI/FR=Ranska -#bug 6645405 +# bug 6646611, 6914413 +FormatData/be_BY/MonthNames/10=\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430 +FormatData/be_BY/MonthAbbreviations/10=\u043b\u0456\u0441 + +# bug 6645405 FormatData/hu_HU/NumberPatterns/1=#,##0.## \u00A4;-#,##0.## \u00A4 -#bug 6650730 +# bug 6650730 FormatData/lt/NumberElements/1=\u00a0 FormatData/lt/DateTimePatterns/6=yyyy-MM-dd -#bug 6609737 -FormatData/de/DateTimePatterns/0=HH:mm' Uhr 'z -TimeZoneNames/de/CET/1=Mitteleurop\u00e4ische Zeit -TimeZoneNames/de/CET/2=MEZ -TimeZoneNames/de/CET/3=Mitteleurop\u00e4ische Sommerzeit -TimeZoneNames/de/CET/4=MESZ -TimeZoneNames/de/EET/2=OEZ -TimeZoneNames/de/EET/4=OESZ -TimeZoneNames/de/WET/2=WEZ -TimeZoneNames/de/WET/4=WESZ +#bug 6910489 +CalendarData/sl/firstDayOfWeek=2 + +# bug 6573250 +CurrencyNames/en_CA/USD=US$ + +# bug 6870908 +FormatData/et/MonthNames/0=jaanuar +FormatData/et/MonthNames/1=veebruar +FormatData/et/MonthNames/2=m\u00e4rts +FormatData/et/MonthNames/3=aprill +FormatData/et/MonthNames/4=mai +FormatData/et/MonthNames/5=juuni +FormatData/et/MonthNames/6=juuli +FormatData/et/MonthNames/7=august +FormatData/et/MonthNames/8=september +FormatData/et/MonthNames/9=oktoober +FormatData/et/MonthNames/10=november +FormatData/et/MonthNames/11=detsember +FormatData/et/MonthAbbreviations/0=jaan +FormatData/et/MonthAbbreviations/1=veebr +FormatData/et/MonthAbbreviations/2=m\u00e4rts +FormatData/et/MonthAbbreviations/3=apr +FormatData/et/MonthAbbreviations/4=mai +FormatData/et/MonthAbbreviations/5=juuni +FormatData/et/MonthAbbreviations/6=juuli +FormatData/et/MonthAbbreviations/7=aug +FormatData/et/MonthAbbreviations/8=sept +FormatData/et/MonthAbbreviations/9=okt +FormatData/et/MonthAbbreviations/10=nov +FormatData/et/MonthAbbreviations/11=dets + +# bug 6585666 +LocaleNames/es/aa=afar +LocaleNames/es/av=avar +LocaleNames/es/az=azer\u00ed +LocaleNames/es/ba=bashkir +LocaleNames/es/bh=bihari +LocaleNames/es/bn=bengal\u00ed +LocaleNames/es/cu=eslavo eclesi\u00e1stico +LocaleNames/es/dz=dzongkha +LocaleNames/es/eu=vasco +LocaleNames/es/fa=persa +LocaleNames/es/ff=fula +LocaleNames/es/fj=fidjiano +LocaleNames/es/fo=fero\u00e9s +LocaleNames/es/fy=fris\u00f3n +LocaleNames/es/gu=gujarati +LocaleNames/es/gv=ga\u00e9lico man\u00e9s +LocaleNames/es/hi=hindi +LocaleNames/es/ho=hiri motu +LocaleNames/es/ie=interlingue +LocaleNames/es/ig=igbo +LocaleNames/es/ii=sichuan yi +LocaleNames/es/ik=inupiaq +LocaleNames/es/kg=kongo +LocaleNames/es/ki=kikuyu +LocaleNames/es/kj=kuanyama +LocaleNames/es/kk=kazajo +LocaleNames/es/km=jemer +LocaleNames/es/kn=canar\u00e9s +LocaleNames/es/ks=cachemiro +LocaleNames/es/ku=kurdo +LocaleNames/es/ky=kirghiz +LocaleNames/es/lu=luba-katanga +LocaleNames/es/mr=marathi +LocaleNames/es/nb=bokmal noruego +LocaleNames/es/nd=ndebele septentrional +LocaleNames/es/nn=nynorsk noruego +LocaleNames/es/nr=ndebele meridional +LocaleNames/es/os=os\u00e9tico +LocaleNames/es/rm=retorrom\u00e1nico +LocaleNames/es/rn=kiroundi +LocaleNames/es/rw=kinyarwanda +LocaleNames/es/sd=sindhi +LocaleNames/es/se=sami septentrional +LocaleNames/es/sl=esloveno +LocaleNames/es/sn=shona +LocaleNames/es/ss=siswati +LocaleNames/es/st=sesotho +LocaleNames/es/su=sundan\u00e9s +LocaleNames/es/sw=swahili +LocaleNames/es/tg=tayiko +LocaleNames/es/ti=tigri\u00f1a +LocaleNames/es/tn=setchwana +LocaleNames/es/to=tongano +LocaleNames/es/tw=twi +LocaleNames/es/ty=tahitiano +LocaleNames/es/ug=uigur +LocaleNames/es/uk=ucraniano +LocaleNames/es/uz=uzbeko +LocaleNames/es/vo=volap\u00fck +LocaleNames/es/za=zhuang + +# bug 6716626 - language +LocaleNames/nl/aa=Afar +LocaleNames/nl/ab=Abchazisch +LocaleNames/nl/ae=Avestisch +LocaleNames/nl/af=Afrikaans +LocaleNames/nl/ak=Akan +LocaleNames/nl/am=Amhaars +LocaleNames/nl/an=Aragonees +LocaleNames/nl/ar=Arabisch +LocaleNames/nl/as=Assamees +LocaleNames/nl/av=Avarisch +LocaleNames/nl/ay=Aymara +LocaleNames/nl/az=Azerbeidzjaans +LocaleNames/nl/ba=Basjkiers +LocaleNames/nl/be=Wit-Russisch +LocaleNames/nl/bg=Bulgaars +LocaleNames/nl/bh=Bihari +LocaleNames/nl/bi=Bislama +LocaleNames/nl/bm=Bambara +LocaleNames/nl/bn=Bengalees +LocaleNames/nl/bo=Tibetaans +LocaleNames/nl/br=Bretons +LocaleNames/nl/bs=Bosnisch +LocaleNames/nl/ca=Catalaans +LocaleNames/nl/ce=Chechen +LocaleNames/nl/ch=Chamorro +LocaleNames/nl/co=Corsicaans +LocaleNames/nl/cr=Cree +LocaleNames/nl/cs=Tsjechisch +LocaleNames/nl/cu=Kerkslavisch +LocaleNames/nl/cv=Tsjoevasjisch +LocaleNames/nl/cy=Welsh +LocaleNames/nl/da=Deens +LocaleNames/nl/de=Duits +LocaleNames/nl/dv=Divehi +LocaleNames/nl/dz=Dzongkha +LocaleNames/nl/ee=Ewe +LocaleNames/nl/el=Grieks +LocaleNames/nl/en=Engels +LocaleNames/nl/eo=Esperanto +LocaleNames/nl/es=Spaans +LocaleNames/nl/et=Estlands +LocaleNames/nl/eu=Baskisch +LocaleNames/nl/fa=Perzisch +LocaleNames/nl/ff=Fulah +LocaleNames/nl/fi=Fins +LocaleNames/nl/fj=Fijisch +LocaleNames/nl/fo=Faer\u00f6ers +LocaleNames/nl/fr=Frans +LocaleNames/nl/fy=Fries +LocaleNames/nl/ga=Iers +LocaleNames/nl/gd=Schots Gaelic +LocaleNames/nl/gl=Galicisch +LocaleNames/nl/gn=Guarani +LocaleNames/nl/gu=Gujarati +LocaleNames/nl/gv=Manx +LocaleNames/nl/ha=Hausa +LocaleNames/nl/he=Hebreeuws +LocaleNames/nl/hi=Hindi +LocaleNames/nl/ho=Hiri Motu +LocaleNames/nl/hr=Kroatisch +LocaleNames/nl/ht=Ha\u00eftiaans +LocaleNames/nl/hu=Hongaars +LocaleNames/nl/hy=Armeens +LocaleNames/nl/hz=Herero +LocaleNames/nl/ia=Interlingua +LocaleNames/nl/id=Indonesisch +LocaleNames/nl/ie=Interlingue +LocaleNames/nl/ig=Igbo +LocaleNames/nl/ii=Sichuan Yi +LocaleNames/nl/ik=Inupiaq +LocaleNames/nl/io=Ido +LocaleNames/nl/is=IJslands +LocaleNames/nl/it=Italiaans +LocaleNames/nl/iu=Inuktitut +LocaleNames/nl/ja=Japans +LocaleNames/nl/jv=Javaans +LocaleNames/nl/ka=Georgisch +LocaleNames/nl/kg=Kongo +LocaleNames/nl/ki=Kikuyu +LocaleNames/nl/kj=Kuanyama +LocaleNames/nl/kk=Kazachs +LocaleNames/nl/kl=Kalaallisut +LocaleNames/nl/km=Khmer +LocaleNames/nl/kn=Kannada +LocaleNames/nl/ko=Koreaans +LocaleNames/nl/kr=Kanuri +LocaleNames/nl/ks=Kashmiri +LocaleNames/nl/ku=Koerdisch +LocaleNames/nl/kv=Komi +LocaleNames/nl/kw=Cornish +LocaleNames/nl/ky=Kirgizisch +LocaleNames/nl/la=Latijn +LocaleNames/nl/lb=Luxemburgs +LocaleNames/nl/lg=Ganda +LocaleNames/nl/li=Limburgs +LocaleNames/nl/ln=Lingala +LocaleNames/nl/lo=Lao +LocaleNames/nl/lt=Litouws +LocaleNames/nl/lu=Luba-Katanga +LocaleNames/nl/lv=Letlands +LocaleNames/nl/mg=Malagasisch +LocaleNames/nl/mh=Marshallees +LocaleNames/nl/mi=Maori +LocaleNames/nl/mk=Macedonisch +LocaleNames/nl/ml=Malayalam +LocaleNames/nl/mn=Mongools +LocaleNames/nl/mo=Moldavisch +LocaleNames/nl/mr=Marathi +LocaleNames/nl/ms=Maleis +LocaleNames/nl/mt=Maltees +LocaleNames/nl/my=Birmees +LocaleNames/nl/na=Nauru +LocaleNames/nl/nb=Noors - Bokm\u00e5l +LocaleNames/nl/nd=Noord-Ndbele +LocaleNames/nl/ne=Nepalees +LocaleNames/nl/ng=Ndonga +LocaleNames/nl/nl=Nederlands +LocaleNames/nl/nn=Noors - Nynorsk +LocaleNames/nl/no=Noors +LocaleNames/nl/nr=Zuid-Ndbele +LocaleNames/nl/nv=Navajo +LocaleNames/nl/ny=Nyanja +LocaleNames/nl/oc=Occitaans +LocaleNames/nl/oj=Ojibwa +LocaleNames/nl/om=Oromo +LocaleNames/nl/or=Oriya +LocaleNames/nl/os=Ossetisch +LocaleNames/nl/pa=Punjabi +LocaleNames/nl/pi=Pali +LocaleNames/nl/pl=Pools +LocaleNames/nl/ps=Pasjtoe +LocaleNames/nl/pt=Portugees +LocaleNames/nl/qu=Quechua +LocaleNames/nl/rm=Reto-Romaans +LocaleNames/nl/rn=Rundi +LocaleNames/nl/ro=Roemeens +LocaleNames/nl/ru=Russisch +LocaleNames/nl/rw=Kinyarwanda +LocaleNames/nl/sa=Sanskriet +LocaleNames/nl/sc=Sardinisch +LocaleNames/nl/sd=Sindhi +LocaleNames/nl/se=Noord-Samisch +LocaleNames/nl/sg=Sango +LocaleNames/nl/si=Singalees +LocaleNames/nl/sk=Slowaaks +LocaleNames/nl/sl=Sloveens +LocaleNames/nl/sm=Samoaans +LocaleNames/nl/sn=Shona +LocaleNames/nl/so=Somalisch +LocaleNames/nl/sq=Albanees +LocaleNames/nl/sr=Servisch +LocaleNames/nl/ss=Swati +LocaleNames/nl/st=Zuid-Sotho +LocaleNames/nl/su=Soendanees +LocaleNames/nl/sv=Zweeds +LocaleNames/nl/sw=Swahili +LocaleNames/nl/ta=Tamil +LocaleNames/nl/te=Teloegoe +LocaleNames/nl/tg=Tadzjieks +LocaleNames/nl/th=Thais +LocaleNames/nl/ti=Tigrinya +LocaleNames/nl/tk=Turkmeens +LocaleNames/nl/tl=Tagalog +LocaleNames/nl/tn=Tswana +LocaleNames/nl/to=Tonga +LocaleNames/nl/tr=Turks +LocaleNames/nl/ts=Tsonga +LocaleNames/nl/tt=Tataars +LocaleNames/nl/tw=Twi +LocaleNames/nl/ty=Tahitisch +LocaleNames/nl/ug=Oeigoers +LocaleNames/nl/uk=Oekra\u00efens +LocaleNames/nl/ur=Urdu +LocaleNames/nl/uz=Oezbeeks +LocaleNames/nl/ve=Venda +LocaleNames/nl/vi=Vietnamees +LocaleNames/nl/vo=Volap\u00fck +LocaleNames/nl/wa=Wallonisch +LocaleNames/nl/wo=Wolof +LocaleNames/nl/xh=Xhosa +LocaleNames/nl/yi=Jiddisch +LocaleNames/nl/yo=Yoruba +LocaleNames/nl/za=Zhuang +LocaleNames/nl/zh=Chinees +LocaleNames/nl/zu=Zulu + +# bug 6716626 - country +LocaleNames/nl/AD=Andorra +LocaleNames/nl/AE=Verenigde Arabische Emiraten +LocaleNames/nl/AF=Afghanistan +LocaleNames/nl/AG=Antigua en Barbuda +LocaleNames/nl/AI=Anguilla +LocaleNames/nl/AL=Albani\u00eb +LocaleNames/nl/AM=Armeni\u00eb +LocaleNames/nl/AN=Nederlandse Antillen +LocaleNames/nl/AO=Angola +LocaleNames/nl/AQ=Antarctica +LocaleNames/nl/AR=Argentini\u00eb +LocaleNames/nl/AS=Amerikaans Samoa +LocaleNames/nl/AT=Oostenrijk +LocaleNames/nl/AU=Australi\u00eb +LocaleNames/nl/AW=Aruba +LocaleNames/nl/AX=Alandeilanden +LocaleNames/nl/AZ=Azerbeidzjan +LocaleNames/nl/BA=Bosni\u00eb en Herzegovina +LocaleNames/nl/BB=Barbados +LocaleNames/nl/BD=Bangladesh +LocaleNames/nl/BE=Belgi\u00eb +LocaleNames/nl/BF=Burkina Faso +LocaleNames/nl/BG=Bulgarije +LocaleNames/nl/BH=Bahrein +LocaleNames/nl/BI=Burundi +LocaleNames/nl/BJ=Benin +LocaleNames/nl/BM=Bermuda +LocaleNames/nl/BN=Brunei +LocaleNames/nl/BO=Bolivia +LocaleNames/nl/BR=Brazili\u00eb +LocaleNames/nl/BS=Bahama\u2019s +LocaleNames/nl/BT=Bhutan +LocaleNames/nl/BV=Bouveteiland +LocaleNames/nl/BW=Botswana +LocaleNames/nl/BY=Wit-Rusland +LocaleNames/nl/BZ=Belize +LocaleNames/nl/CA=Canada +LocaleNames/nl/CC=Cocoseilanden +LocaleNames/nl/CD=Congo-Kinshasa +LocaleNames/nl/CF=Centraal-Afrikaanse Republiek +LocaleNames/nl/CG=Congo +LocaleNames/nl/CH=Zwitserland +LocaleNames/nl/CI=Ivoorkust +LocaleNames/nl/CK=Cookeilanden +LocaleNames/nl/CL=Chili +LocaleNames/nl/CM=Kameroen +LocaleNames/nl/CN=China +LocaleNames/nl/CO=Colombia +LocaleNames/nl/CR=Costa Rica +LocaleNames/nl/CS=Servi\u00eb en Montenegro +LocaleNames/nl/CU=Cuba +LocaleNames/nl/CV=Kaapverdi\u00eb +LocaleNames/nl/CX=Christmaseiland +LocaleNames/nl/CY=Cyprus +LocaleNames/nl/CZ=Tsjechi\u00eb +LocaleNames/nl/DE=Duitsland +LocaleNames/nl/DJ=Djibouti +LocaleNames/nl/DK=Denemarken +LocaleNames/nl/DM=Dominica +LocaleNames/nl/DO=Dominicaanse Republiek +LocaleNames/nl/DZ=Algerije +LocaleNames/nl/EC=Ecuador +LocaleNames/nl/EE=Estland +LocaleNames/nl/EG=Egypte +LocaleNames/nl/EH=Westelijke Sahara +LocaleNames/nl/ER=Eritrea +LocaleNames/nl/ES=Spanje +LocaleNames/nl/ET=Ethiopi\u00eb +LocaleNames/nl/FI=Finland +LocaleNames/nl/FJ=Fiji +LocaleNames/nl/FK=Falklandeilanden +LocaleNames/nl/FM=Micronesi\u00eb +LocaleNames/nl/FO=Faer\u00f6er +LocaleNames/nl/FR=Frankrijk +LocaleNames/nl/GA=Gabon +LocaleNames/nl/GB=Verenigd Koninkrijk +LocaleNames/nl/GD=Grenada +LocaleNames/nl/GE=Georgi\u00eb +LocaleNames/nl/GF=Frans-Guyana +LocaleNames/nl/GH=Ghana +LocaleNames/nl/GI=Gibraltar +LocaleNames/nl/GL=Groenland +LocaleNames/nl/GM=Gambia +LocaleNames/nl/GN=Guinee +LocaleNames/nl/GP=Guadeloupe +LocaleNames/nl/GQ=Equatoriaal-Guinea +LocaleNames/nl/GR=Griekenland +LocaleNames/nl/GS=Zuid-Georgi\u00eb en Zuidelijke Sandwicheilanden +LocaleNames/nl/GT=Guatemala +LocaleNames/nl/GU=Guam +LocaleNames/nl/GW=Guinee-Bissau +LocaleNames/nl/GY=Guyana +LocaleNames/nl/HK=Hongkong SAR van China +LocaleNames/nl/HM=Heard- en McDonaldeilanden +LocaleNames/nl/HN=Honduras +LocaleNames/nl/HR=Kroati\u00eb +LocaleNames/nl/HT=Ha\u00efti +LocaleNames/nl/HU=Hongarije +LocaleNames/nl/ID=Indonesi\u00eb +LocaleNames/nl/IE=Ierland +LocaleNames/nl/IL=Isra\u00ebl +LocaleNames/nl/IN=India +LocaleNames/nl/IO=Britse Gebieden in de Indische Oceaan +LocaleNames/nl/IQ=Irak +LocaleNames/nl/IR=Iran +LocaleNames/nl/IS=IJsland +LocaleNames/nl/IT=Itali\u00eb +LocaleNames/nl/JM=Jamaica +LocaleNames/nl/JO=Jordani\u00eb +LocaleNames/nl/JP=Japan +LocaleNames/nl/KE=Kenia +LocaleNames/nl/KG=Kirgizi\u00eb +LocaleNames/nl/KH=Cambodja +LocaleNames/nl/KI=Kiribati +LocaleNames/nl/KM=Comoren +LocaleNames/nl/KN=Saint Kitts en Nevis +LocaleNames/nl/KP=Noord-Korea +LocaleNames/nl/KR=Zuid-Korea +LocaleNames/nl/KW=Koeweit +LocaleNames/nl/KY=Caymaneilanden +LocaleNames/nl/KZ=Kazachstan +LocaleNames/nl/LA=Laos +LocaleNames/nl/LB=Libanon +LocaleNames/nl/LC=Saint Lucia +LocaleNames/nl/LI=Liechtenstein +LocaleNames/nl/LK=Sri Lanka +LocaleNames/nl/LR=Liberia +LocaleNames/nl/LS=Lesotho +LocaleNames/nl/LT=Litouwen +LocaleNames/nl/LU=Luxemburg +LocaleNames/nl/LV=Letland +LocaleNames/nl/LY=Libi\u00eb +LocaleNames/nl/MA=Marokko +LocaleNames/nl/MC=Monaco +LocaleNames/nl/MD=Moldavi\u00eb +LocaleNames/nl/ME=Montenegro +LocaleNames/nl/MG=Madagaskar +LocaleNames/nl/MH=Marshalleilanden +LocaleNames/nl/MK=Macedoni\u00eb +LocaleNames/nl/ML=Mali +LocaleNames/nl/MM=Myanmar +LocaleNames/nl/MN=Mongoli\u00eb +LocaleNames/nl/MO=Macao SAR van China +LocaleNames/nl/MP=Noordelijke Marianeneilanden +LocaleNames/nl/MQ=Martinique +LocaleNames/nl/MR=Mauritani\u00eb +LocaleNames/nl/MS=Montserrat +LocaleNames/nl/MT=Malta +LocaleNames/nl/MU=Mauritius +LocaleNames/nl/MV=Maldiven +LocaleNames/nl/MW=Malawi +LocaleNames/nl/MX=Mexico +LocaleNames/nl/MY=Maleisi\u00eb +LocaleNames/nl/MZ=Mozambique +LocaleNames/nl/NA=Namibi\u00eb +LocaleNames/nl/NC=Nieuw-Caledoni\u00eb +LocaleNames/nl/NE=Niger +LocaleNames/nl/NF=Norfolkeiland +LocaleNames/nl/NG=Nigeria +LocaleNames/nl/NI=Nicaragua +LocaleNames/nl/NL=Nederland +LocaleNames/nl/NO=Noorwegen +LocaleNames/nl/NP=Nepal +LocaleNames/nl/NR=Nauru +LocaleNames/nl/NU=Niue +LocaleNames/nl/NZ=Nieuw-Zeeland +LocaleNames/nl/OM=Oman +LocaleNames/nl/PA=Panama +LocaleNames/nl/PE=Peru +LocaleNames/nl/PF=Frans-Polynesi\u00eb +LocaleNames/nl/PG=Papoea-Nieuw-Guinea +LocaleNames/nl/PH=Filipijnen +LocaleNames/nl/PK=Pakistan +LocaleNames/nl/PL=Polen +LocaleNames/nl/PM=Saint Pierre en Miquelon +LocaleNames/nl/PN=Pitcairn +LocaleNames/nl/PR=Puerto Rico +LocaleNames/nl/PS=Palestijns Gebied +LocaleNames/nl/PT=Portugal +LocaleNames/nl/PW=Palau +LocaleNames/nl/PY=Paraguay +LocaleNames/nl/QA=Qatar +LocaleNames/nl/RE=R\u00e9union +LocaleNames/nl/RO=Roemeni\u00eb +LocaleNames/nl/RS=Servi\u00eb +LocaleNames/nl/RU=Rusland +LocaleNames/nl/RW=Rwanda +LocaleNames/nl/SA=Saoedi-Arabi\u00eb +LocaleNames/nl/SB=Salomonseilanden +LocaleNames/nl/SC=Seychellen +LocaleNames/nl/SD=Soedan +LocaleNames/nl/SE=Zweden +LocaleNames/nl/SG=Singapore +LocaleNames/nl/SH=Sint-Helena +LocaleNames/nl/SI=Sloveni\u00eb +LocaleNames/nl/SJ=Svalbard en Jan Mayen +LocaleNames/nl/SK=Slowakije +LocaleNames/nl/SL=Sierra Leone +LocaleNames/nl/SM=San Marino +LocaleNames/nl/SN=Senegal +LocaleNames/nl/SO=Somali\u00eb +LocaleNames/nl/SR=Suriname +LocaleNames/nl/ST=Sao Tom\u00e9 en Principe +LocaleNames/nl/SV=El Salvador +LocaleNames/nl/SY=Syri\u00eb +LocaleNames/nl/SZ=Swaziland +LocaleNames/nl/TC=Turks- en Caicoseilanden +LocaleNames/nl/TD=Tsjaad +LocaleNames/nl/TF=Franse Gebieden in de zuidelijke Indische Oceaan +LocaleNames/nl/TG=Togo +LocaleNames/nl/TH=Thailand +LocaleNames/nl/TJ=Tadzjikistan +LocaleNames/nl/TK=Tokelau +LocaleNames/nl/TL=Oost-Timor +LocaleNames/nl/TM=Turkmenistan +LocaleNames/nl/TN=Tunesi\u00eb +LocaleNames/nl/TO=Tonga +LocaleNames/nl/TR=Turkije +LocaleNames/nl/TT=Trinidad en Tobago +LocaleNames/nl/TV=Tuvalu +LocaleNames/nl/TW=Taiwan +LocaleNames/nl/TZ=Tanzania +LocaleNames/nl/UA=Oekra\u00efne +LocaleNames/nl/UG=Oeganda +LocaleNames/nl/UM=Amerikaanse kleinere afgelegen eilanden +LocaleNames/nl/US=Verenigde Staten +LocaleNames/nl/UY=Uruguay +LocaleNames/nl/UZ=Oezbekistan +LocaleNames/nl/VA=Vaticaanstad +LocaleNames/nl/VC=Saint Vincent en de Grenadines +LocaleNames/nl/VE=Venezuela +LocaleNames/nl/VG=Britse Maagdeneilanden +LocaleNames/nl/VI=Amerikaanse Maagdeneilanden +LocaleNames/nl/VN=Vietnam +LocaleNames/nl/VU=Vanuatu +LocaleNames/nl/WF=Wallis en Futuna +LocaleNames/nl/WS=Samoa +LocaleNames/nl/YE=Jemen +LocaleNames/nl/YT=Mayotte +LocaleNames/nl/ZA=Zuid-Afrika +LocaleNames/nl/ZM=Zambia + +# bug 6919624 +CalendarData/hu/minimalDaysInFirstWeek=4 + +# bug 7019267 +CurrencyNames/pt/adp=Peseta de Andorra +CurrencyNames/pt/aed=Dir\u00e9m dos Emirados \u00c1rabes Unidos +CurrencyNames/pt/afa=Afegane (1927-2002) +CurrencyNames/pt/afn=Afegane +CurrencyNames/pt/all=Lek Alban\u00eas +CurrencyNames/pt/amd=Dram arm\u00eanio +CurrencyNames/pt/ang=Guilder das Antilhas Holandesas +CurrencyNames/pt/aoa=Cuanza angolano +CurrencyNames/pt/ars=Peso argentino +CurrencyNames/pt/ats=Xelim austr\u00edaco +CurrencyNames/pt/aud=D\u00f3lar australiano +CurrencyNames/pt/awg=Guilder de Aruba +CurrencyNames/pt/azm=Manat azerbaijano +CurrencyNames/pt/azn=Manat do Azerbaij\u00e3o +CurrencyNames/pt/bam=Marco b\u00f3snio-herzegovino convers\u00edvel +CurrencyNames/pt/bbd=D\u00f3lar de Barbados +CurrencyNames/pt/bdt=Taka de Bangladesh +CurrencyNames/pt/bef=Franco belga +CurrencyNames/pt/bgl=Lev forte b\u00falgaro +CurrencyNames/pt/bgn=Lev novo b\u00falgaro +CurrencyNames/pt/bhd=Dinar bareinita +CurrencyNames/pt/bif=Franco do Burundi +CurrencyNames/pt/bmd=D\u00f3lar das Bermudas +CurrencyNames/pt/bnd=D\u00f3lar do Brunei +CurrencyNames/pt/bov=Mvdol boliviano +CurrencyNames/pt/brl=Real brasileiro +CurrencyNames/pt/bsd=D\u00f3lar das Bahamas +CurrencyNames/pt/btn=Ngultrum do But\u00e3o +CurrencyNames/pt/bwp=Pula botsuanesa +CurrencyNames/pt/byb=Rublo novo bielo-russo (1994-1999) +CurrencyNames/pt/byr=Rublo bielo-russo +CurrencyNames/pt/bzd=D\u00f3lar do Belize +CurrencyNames/pt/cad=D\u00f3lar canadense +CurrencyNames/pt/cdf=Franco congol\u00eas +CurrencyNames/pt/chf=Franco su\u00ed\u00e7o +CurrencyNames/pt/clf=Unidades de Fomento chilenas +CurrencyNames/pt/clp=Peso chileno +CurrencyNames/pt/cny=Yuan Renminbi chin\u00eas +CurrencyNames/pt/cop=Peso colombiano +CurrencyNames/pt/crc=Colon da Costa Rica +CurrencyNames/pt/csd=Dinar s\u00e9rvio antigo +CurrencyNames/pt/cup=Peso cubano +CurrencyNames/pt/cve=Escudo cabo-verdiano +CurrencyNames/pt/cyp=Libra cipriota +CurrencyNames/pt/czk=Coroa checa +CurrencyNames/pt/dem=Marco alem\u00e3o +CurrencyNames/pt/djf=Franco do Djibuti +CurrencyNames/pt/dkk=Coroa dinamarquesa +CurrencyNames/pt/dop=Peso dominicano +CurrencyNames/pt/dzd=Dinar argelino +CurrencyNames/pt/eek=Coroa estoniana +CurrencyNames/pt/egp=Libra eg\u00edpcia +CurrencyNames/pt/ern=Nakfa da Eritreia +CurrencyNames/pt/esp=Peseta espanhola +CurrencyNames/pt/etb=Birr et\u00edope +CurrencyNames/pt/fim=Marca finlandesa +CurrencyNames/pt/fjd=D\u00f3lar de Fiji +CurrencyNames/pt/fkp=Libra das Malvinas +CurrencyNames/pt/frf=Franco franc\u00eas +CurrencyNames/pt/gbp=Libra esterlina brit\u00e2nica +CurrencyNames/pt/gel=Lari georgiano +CurrencyNames/pt/ghc=Cedi de Gana (1979-2007) +CurrencyNames/pt/ghs=Cedi gan\u00eas +CurrencyNames/pt/gip=Libra de Gibraltar +CurrencyNames/pt/gmd=Dalasi de G\u00e2mbia +CurrencyNames/pt/gnf=Franco de Guin\u00e9 +CurrencyNames/pt/grd=Dracma grego +CurrencyNames/pt/gtq=Quet\u00e7al da Guatemala +CurrencyNames/pt/gwp=Peso da Guin\u00e9-Bissau +CurrencyNames/pt/gyd=D\u00f3lar da Guiana +CurrencyNames/pt/hkd=D\u00f3lar de Hong Kong +CurrencyNames/pt/hnl=Lempira de Honduras +CurrencyNames/pt/hrk=Kuna croata +CurrencyNames/pt/htg=Gurde do Haiti +CurrencyNames/pt/huf=Forinte h\u00fangaro +CurrencyNames/pt/idr=Rupia indon\u00e9sia +CurrencyNames/pt/iep=Libra irlandesa +CurrencyNames/pt/ils=Sheqel Novo israelita +CurrencyNames/pt/inr=R\u00fapia indiana +CurrencyNames/pt/iqd=Dinar iraquiano +CurrencyNames/pt/irr=Rial iraniano +CurrencyNames/pt/isk=Coroa islandesa +CurrencyNames/pt/itl=Lira italiana +CurrencyNames/pt/jmd=D\u00f3lar jamaicano +CurrencyNames/pt/jod=Dinar jordaniano +CurrencyNames/pt/jpy=Iene japon\u00eas +CurrencyNames/pt/kes=Xelim queniano +CurrencyNames/pt/kgs=Som quirguiz +CurrencyNames/pt/khr=Riel cambojano +CurrencyNames/pt/kmf=Franco de Comores +CurrencyNames/pt/kpw=Won norte-coreano +CurrencyNames/pt/krw=Won sul-coreano +CurrencyNames/pt/kwd=Dinar coveitiano +CurrencyNames/pt/kyd=D\u00f3lar das Ilhas Caiman +CurrencyNames/pt/kzt=Tenge do Cazaquist\u00e3o +CurrencyNames/pt/lak=Kip de Laos +CurrencyNames/pt/lbp=Libra libanesa +CurrencyNames/pt/lkr=Rupia do Sri Lanka +CurrencyNames/pt/lrd=D\u00f3lar liberiano +CurrencyNames/pt/lsl=Loti do Lesoto +CurrencyNames/pt/ltl=Lita lituano +CurrencyNames/pt/luf=Franco luxemburgu\u00eas +CurrencyNames/pt/lvl=Lats let\u00e3o +CurrencyNames/pt/lyd=Dinar l\u00edbio +CurrencyNames/pt/mad=Dir\u00e9m marroquino +CurrencyNames/pt/mdl=Leu mold\u00e1vio +CurrencyNames/pt/mga=Ariary de Madagascar +CurrencyNames/pt/mgf=Franco de Madagascar +CurrencyNames/pt/mkd=Dinar maced\u00f4nio +CurrencyNames/pt/mmk=Kyat de Mianmar +CurrencyNames/pt/mnt=Tugrik mongol +CurrencyNames/pt/mop=Pataca macaense +CurrencyNames/pt/mro=Ouguiya da Maurit\u00e2nia +CurrencyNames/pt/mtl=Lira maltesa +CurrencyNames/pt/mur=Rupia de Maur\u00edcio +CurrencyNames/pt/mvr=Rupias das Ilhas Maldivas +CurrencyNames/pt/mwk=Cuacha do Mal\u00e1ui +CurrencyNames/pt/mxn=Peso mexicano +CurrencyNames/pt/mxv=Unidade Mexicana de Investimento (UDI) +CurrencyNames/pt/myr=Ringgit malaio +CurrencyNames/pt/mzm=Metical antigo de Mo\u00e7ambique +CurrencyNames/pt/mzn=Metical do Mo\u00e7ambique +CurrencyNames/pt/nad=D\u00f3lar da Nam\u00edbia +CurrencyNames/pt/ngn=Naira nigeriana +CurrencyNames/pt/nio=C\u00f3rdoba Ouro nicaraguense +CurrencyNames/pt/nlg=Florim holand\u00eas +CurrencyNames/pt/nok=Coroa norueguesa +CurrencyNames/pt/npr=Rupia nepalesa +CurrencyNames/pt/nzd=D\u00f3lar da Nova Zel\u00e2ndia +CurrencyNames/pt/omr=Rial de Om\u00e3 +CurrencyNames/pt/pab=Balboa panamenho +CurrencyNames/pt/pen=Sol Novo peruano +CurrencyNames/pt/pgk=Kina da Papua-Nova Guin\u00e9 +CurrencyNames/pt/php=Peso filipino +CurrencyNames/pt/pkr=Rupia paquistanesa +CurrencyNames/pt/pln=Zloti polon\u00eas +CurrencyNames/pt/pte=Escudo portugu\u00eas +CurrencyNames/pt/pyg=Guarani paraguaio +CurrencyNames/pt/qar=Rial catariano +CurrencyNames/pt/rol=Leu romeno antigo +CurrencyNames/pt/ron=Leu romeno +CurrencyNames/pt/rsd=Dinar s\u00e9rvio +CurrencyNames/pt/rub=Rublo russo +CurrencyNames/pt/rur=Rublo russo (1991-1998) +CurrencyNames/pt/rwf=Franco ruand\u00eas +CurrencyNames/pt/sar=Rial saudita +CurrencyNames/pt/sbd=D\u00f3lar das Ilhas Salom\u00e3o +CurrencyNames/pt/scr=Rupia das Seychelles +CurrencyNames/pt/sdd=Dinar sudan\u00eas +CurrencyNames/pt/sdg=Libra sudanesa +CurrencyNames/pt/sek=Coroa sueca +CurrencyNames/pt/sgd=D\u00f3lar de Cingapura +CurrencyNames/pt/shp=Libra de Santa Helena +CurrencyNames/pt/sit=Tolar Bons esloveno +CurrencyNames/pt/skk=Coroa eslovaca +CurrencyNames/pt/sll=Leone de Serra Leoa +CurrencyNames/pt/sos=Xelim somali +CurrencyNames/pt/srd=D\u00f3lar do Suriname +CurrencyNames/pt/srg=Florim do Suriname +CurrencyNames/pt/std=Dobra de S\u00e3o Tom\u00e9 e Pr\u00edncipe +CurrencyNames/pt/svc=Colom salvadorenho +CurrencyNames/pt/syp=Libra s\u00edria +CurrencyNames/pt/szl=Lilangeni da Suazil\u00e2ndia +CurrencyNames/pt/thb=Baht tailand\u00eas +CurrencyNames/pt/tjs=Somoni tadjique +CurrencyNames/pt/tmm=Manat do Turcomenist\u00e3o +CurrencyNames/pt/tnd=Dinar tunisiano +CurrencyNames/pt/top=Pa\u02bbanga de Tonga +CurrencyNames/pt/tpe=Escudo timorense +CurrencyNames/pt/trl=Lira turca antiga +CurrencyNames/pt/try=Lira turca +CurrencyNames/pt/ttd=D\u00f3lar de Trinidad e Tobago +CurrencyNames/pt/twd=D\u00f3lar Novo de Taiwan +CurrencyNames/pt/tzs=Xelim da Tanz\u00e2nia +CurrencyNames/pt/uah=Hryvnia ucraniano +CurrencyNames/pt/ugx=Xelim ugandense +CurrencyNames/pt/usd=D\u00f3lar norte-americano +CurrencyNames/pt/usn=D\u00f3lar norte-americano (Dia seguinte) +CurrencyNames/pt/uss=D\u00f3lar norte-americano (Mesmo dia) +CurrencyNames/pt/uyu=Peso uruguaio +CurrencyNames/pt/uzs=Sum do Usbequist\u00e3o +CurrencyNames/pt/veb=Bol\u00edvar venezuelano +CurrencyNames/pt/vef=Bol\u00edvar v enezuelano forte +CurrencyNames/pt/vnd=Dong vietnamita +CurrencyNames/pt/vuv=Vatu de Vanuatu +CurrencyNames/pt/wst=Tala samoano +CurrencyNames/pt/xaf=Franco CFA BEAC +CurrencyNames/pt/xag=Prata +CurrencyNames/pt/xau=Ouro +CurrencyNames/pt/xba=Unidade Composta Europeia +CurrencyNames/pt/xbb=Unidade Monet\u00e1ria Europeia +CurrencyNames/pt/xbc=Unidade de Conta Europeia (XBC) +CurrencyNames/pt/xbd=Unidade de Conta Europeia (XBD) +CurrencyNames/pt/xcd=D\u00f3lar do Caribe Oriental +CurrencyNames/pt/xdr=Direitos Especiais de Giro +CurrencyNames/pt/xfo=Franco-ouro franc\u00eas +CurrencyNames/pt/xfu=Franco UIC franc\u00eas +CurrencyNames/pt/xof=Franco CFA BCEAO +CurrencyNames/pt/xpd=Pal\u00e1dio +CurrencyNames/pt/xpf=Franco CFP +CurrencyNames/pt/xpt=Platina +CurrencyNames/pt/xts=C\u00f3digo de Moeda de Teste +CurrencyNames/pt/xxx=Moeda Desconhecida ou Inv\u00e1lida +CurrencyNames/pt/yer=Rial iemenita +CurrencyNames/pt/yum=Dinar noviy iugoslavo +CurrencyNames/pt/zar=Rand sul-africano +CurrencyNames/pt/zmk=Cuacha zambiano +CurrencyNames/pt/zwd=D\u00f3lar do Zimb\u00e1bue + +# bug 7020960 +CurrencyNames/sr_RS/RSD=\u0434\u0438\u043d. + +# bug 7025837 +CurrencyNames//afa=Afghan Afghani (1927-2002) +CurrencyNames//afn=Afghan Afghani +CurrencyNames//ang=Netherlands Antillean Guilder +CurrencyNames//awg=Aruban Florin +CurrencyNames//azm=Azerbaijani Manat (1993-2006) +CurrencyNames//azn=Azerbaijani Manat +CurrencyNames//bbd=Barbadian Dollar +CurrencyNames//bdt=Bangladeshi Taka +CurrencyNames//bgn=Bulgarian Lev +CurrencyNames//bif=Burundian Franc +CurrencyNames//bob=Bolivian Boliviano +CurrencyNames//btn=Bhutanese Ngultrum +CurrencyNames//byb=Belarusian New Ruble (1994-1999) +CurrencyNames//byr=Belarusian Ruble +CurrencyNames//cdf=Congolese Franc +CurrencyNames//clf=Chilean Unit of Account (UF) +CurrencyNames//cny=Chinese Yuan +CurrencyNames//crc=Costa Rican Col\u00f3n +CurrencyNames//csd=Serbian Dinar (2002-2006) +CurrencyNames//cve=Cape Verdean Escudo +CurrencyNames//cyp=Cypriot Pound +CurrencyNames//dem=German Mark +CurrencyNames//djf=Djiboutian Franc +CurrencyNames//fjd=Fijian Dollar +CurrencyNames//ghc=Ghanaian Cedi (1979-2007) +CurrencyNames//ghs=Ghanaian Cedi +CurrencyNames//gmd=Gambian Dalasi +CurrencyNames//gnf=Guinean Franc +CurrencyNames//gtq=Guatemalan Quetzal +CurrencyNames//gyd=Guyanaese Dollar +CurrencyNames//hnl=Honduran Lempira +CurrencyNames//isk=Icelandic Kr\u00f3na +CurrencyNames//kgs=Kyrgystani Som +CurrencyNames//kmf=Comorian Franc +CurrencyNames//kzt=Kazakhstani Tenge +CurrencyNames//lkr=Sri Lankan Rupee +CurrencyNames//ltl=Lithuanian Litas +CurrencyNames//luf=Luxembourgian Franc +CurrencyNames//mga=Malagasy Ariary +CurrencyNames//mgf=Malagasy Franc +CurrencyNames//mmk=Myanma Kyat +CurrencyNames//mop=Macanese Pataca +CurrencyNames//mro=Mauritanian Ouguiya +CurrencyNames//mur=Mauritian Rupee +CurrencyNames//mvr=Maldivian Rufiyaa +CurrencyNames//mwk=Malawian Kwacha +CurrencyNames//mxv=Mexican Investment Unit +CurrencyNames//mzm=Mozambican Metical (1980-2006) +CurrencyNames//mzn=Mozambican Metical +CurrencyNames//nad=Namibian Dollar +CurrencyNames//nio=Nicaraguan C\u00f3rdoba +CurrencyNames//nlg=Dutch Guilder +CurrencyNames//omr=Omani Rial +CurrencyNames//pen=Peruvian Nuevo Sol +CurrencyNames//pgk=Papua New Guinean Kina +CurrencyNames//pkr=Pakistani Rupee +CurrencyNames//pyg=Paraguayan Guarani +CurrencyNames//rol=Romanian Leu (1952-2006) +CurrencyNames//rsd=Serbian Dinar +CurrencyNames//scr=Seychellois Rupee +CurrencyNames//sdd=Sudanese Dinar (1992-2007) +CurrencyNames//sit=Slovenian Tolar +CurrencyNames//sll=Sierra Leonean Leone +CurrencyNames//srd=Surinamese Dollar +CurrencyNames//srg=Surinamese Guilder +CurrencyNames//std=S\u00e3o Tom\u00e9 and Pr\u00edncipe Dobra +CurrencyNames//svc=Salvadoran Col\u00f3n +CurrencyNames//szl=Swazi Lilangeni +CurrencyNames//tjs=Tajikistani Somoni +CurrencyNames//tmm=Turkmenistani Manat (1993-2009) +CurrencyNames//top=Tongan Pa\u02bbanga +CurrencyNames//tpe=Timorese Escudo +CurrencyNames//trl=Turkish Lira (1922-2005) +CurrencyNames//try=Turkish Lira +CurrencyNames//twd=New Taiwan Dollar +CurrencyNames//uyu=Uruguayan Peso +CurrencyNames//uzs=Uzbekistan Som +CurrencyNames//veb=Venezuelan Bol\u00edvar (1871-2008) +CurrencyNames//vef=Venezuelan Bol\u00edvar +CurrencyNames//wst=Samoan Tala +CurrencyNames//xxx=Unknown Currency +CurrencyNames//yum=Yugoslavian New Dinar (1994-2002) +CurrencyNames//zwd=Zimbabwean Dollar (1980-2008) + +# bug 7020583 +CurrencyNames/de/azm=Aserbaidschan-Manat (1993-2006) +CurrencyNames/de/azn=Aserbaidschan-Manat +CurrencyNames/de/csd=Alter Serbischer Dinar +CurrencyNames/de/cyp=Zypern-Pfund +CurrencyNames/de/esp=Spanische Peseta +CurrencyNames/de/fjd=Fidschi-Dollar +CurrencyNames/de/fkp=Falkland-Pfund +CurrencyNames/de/ghs=Ghanaische Cedi +CurrencyNames/de/gip=Gibraltar-Pfund +CurrencyNames/de/gnf=Guinea-Franc +CurrencyNames/de/gyd=Guyana-Dollar +CurrencyNames/de/hkd=Hongkong-Dollar +CurrencyNames/de/itl=Italienische Lira +CurrencyNames/de/jmd=Jamaika-Dollar +CurrencyNames/de/kes=Kenia-Schilling +CurrencyNames/de/mgf=Madagaskar-Franc +CurrencyNames/de/mur=Mauritius-Rupie +CurrencyNames/de/mzm=Alter Metical +CurrencyNames/de/mzn=Metical +CurrencyNames/de/nad=Namibia-Dollar +CurrencyNames/de/nzd=Neuseeland-Dollar +CurrencyNames/de/ron=Rum\u00e4nischer Leu +CurrencyNames/de/rsd=Serbischer Dinar +CurrencyNames/de/rwf=Ruanda-Franc +CurrencyNames/de/sbd=Salomonen-Dollar +CurrencyNames/de/scr=Seychellen-Rupie +CurrencyNames/de/sdg=Sudanesisches Pfund +CurrencyNames/de/sgd=Singapur-Dollar +CurrencyNames/de/sos=Somalia-Schilling +CurrencyNames/de/srd=Surinamischer Dollar +CurrencyNames/de/tpe=Timor-Escudo +CurrencyNames/de/trl=Alte T\u00fcrkische Lira +CurrencyNames/de/try=T\u00fcrkische Lira +CurrencyNames/de/ttd=Trinidad- und Tobago-Dollar +CurrencyNames/de/twd=Neuer Taiwan-Dollar +CurrencyNames/de/tzs=Tansania-Schilling +CurrencyNames/de/ugx=Uganda-Schilling +CurrencyNames/de/usd=US-Dollar +CurrencyNames/de/vef=Bol\u00edvar Fuerte +CurrencyNames/de/xag=Unze Silber +CurrencyNames/de/xau=Unze Gold +CurrencyNames/de/xbb=Europ\u00e4ische W\u00e4hrungseinheit (XBB) +CurrencyNames/de/xpd=Unze Palladium +CurrencyNames/de/xpt=Unze Platin +CurrencyNames/de/xts=Testw\u00e4hrung +CurrencyNames/de/xxx=Unbekannte W\u00e4hrung +CurrencyNames/de/yer=Jemen-Rial +CurrencyNames/de/zar=S\u00fcdafrikanischer Rand +CurrencyNames/de/zwd=Simbabwe-Dollar + +CurrencyNames/es/aed=d\u00edrham de los Emiratos \u00c1rabes Unidos +CurrencyNames/es/azm=manat azer\u00ed (1993-2006) +CurrencyNames/es/azn=manat azer\u00ed +CurrencyNames/es/csd=antiguo dinar serbio +CurrencyNames/es/ghc=cedi ghan\u00e9s (1979-2007) +CurrencyNames/es/ghs=cedi ghan\u00e9s +CurrencyNames/es/mzm=antiguo metical mozambique\u00f1o +CurrencyNames/es/mzn=metical mozambique\u00f1o +CurrencyNames/es/rsd=dinar serbio +CurrencyNames/es/sdg=libra sudanesa +CurrencyNames/es/trl=lira turca antigua +CurrencyNames/es/vef=bol\u00edvar fuerte venezolano + +CurrencyNames/fr/afa=afghani (1927\u20132002) +CurrencyNames/fr/all=lek albanais +CurrencyNames/fr/ang=florin antillais +CurrencyNames/fr/awg=florin arubais +CurrencyNames/fr/azm=manat az\u00e9ri (1993-2006) +CurrencyNames/fr/azn=manat az\u00e9ri +CurrencyNames/fr/bam=mark convertible bosniaque +CurrencyNames/fr/bbd=dollar barbadien +CurrencyNames/fr/bdt=taka bangladeshi +CurrencyNames/fr/bgl=lev bulgare (1962\u20131999) +CurrencyNames/fr/bgn=nouveau lev bulgare +CurrencyNames/fr/bhd=dinar bahre\u00efni +CurrencyNames/fr/bif=franc burundais +CurrencyNames/fr/bmd=dollar bermudien +CurrencyNames/fr/bnd=dollar brun\u00e9ien +CurrencyNames/fr/bov=mvdol bolivien +CurrencyNames/fr/brl=r\u00e9al br\u00e9silien +CurrencyNames/fr/bsd=dollar baham\u00e9en +CurrencyNames/fr/btn=ngultrum bouthanais +CurrencyNames/fr/bwp=pula botswanais +CurrencyNames/fr/bzd=dollar b\u00e9liz\u00e9en +CurrencyNames/fr/cny=yuan renminbi chinois +CurrencyNames/fr/crc=col\u00f3n costaricain +CurrencyNames/fr/csd=dinar serbo-mont\u00e9n\u00e9grin +CurrencyNames/fr/cve=escudo capverdien +CurrencyNames/fr/cyp=livre chypriote +CurrencyNames/fr/dem=mark allemand +CurrencyNames/fr/djf=franc djiboutien +CurrencyNames/fr/ern=nafka \u00e9rythr\u00e9en +CurrencyNames/fr/etb=birr \u00e9thiopien +CurrencyNames/fr/fjd=dollar fidjien +CurrencyNames/fr/fkp=livre des Falkland +CurrencyNames/fr/gel=lari g\u00e9orgien +CurrencyNames/fr/ghs=c\u00e9di ghan\u00e9en +CurrencyNames/fr/gmd=dalasi gambien +CurrencyNames/fr/grd=drachme grecque +CurrencyNames/fr/gtq=quetzal guat\u00e9malt\u00e8que +CurrencyNames/fr/gwp=peso bissau-guin\u00e9en +CurrencyNames/fr/hnl=lempira hondurien +CurrencyNames/fr/hrk=kuna croate +CurrencyNames/fr/htg=gourde ha\u00eftienne +CurrencyNames/fr/huf=forint hongrois +CurrencyNames/fr/idr=roupie indon\u00e9sienne +CurrencyNames/fr/ils=nouveau shekel isra\u00e9lien +CurrencyNames/fr/iqd=dinar irakien +CurrencyNames/fr/jpy=yen japonais +CurrencyNames/fr/kes=shilling k\u00e9nyan +CurrencyNames/fr/kgs=som kirghize +CurrencyNames/fr/khr=riel cambodgien +CurrencyNames/fr/kmf=franc comorien +CurrencyNames/fr/kwd=dinar kowe\u00eftien +CurrencyNames/fr/kzt=tenge kazakh +CurrencyNames/fr/lak=kip loatien +CurrencyNames/fr/lkr=roupie srilankaise +CurrencyNames/fr/lsl=loti lesothan +CurrencyNames/fr/mga=ariary malgache +CurrencyNames/fr/mkd=denar mac\u00e9donien +CurrencyNames/fr/mmk=kyat myanmarais +CurrencyNames/fr/mnt=tugrik mongol +CurrencyNames/fr/mop=pataca macanaise +CurrencyNames/fr/mro=ouguiya mauritanien +CurrencyNames/fr/mvr=rufiyaa maldivienne +CurrencyNames/fr/mwk=kwacha malawite +CurrencyNames/fr/myr=ringgit malais +CurrencyNames/fr/mzn=metical mozambicain +CurrencyNames/fr/ngn=naira nig\u00e9rian +CurrencyNames/fr/nio=c\u00f3rdoba oro nicaraguayen +CurrencyNames/fr/npr=roupie n\u00e9palaise +CurrencyNames/fr/pab=balboa panam\u00e9en +CurrencyNames/fr/pgk=kina papouan-n\u00e9o-guin\u00e9en +CurrencyNames/fr/pkr=roupie pakistanaise +CurrencyNames/fr/pln=zloty polonais +CurrencyNames/fr/pyg=guaran\u00ed paraguayen +CurrencyNames/fr/qar=rial qatari +CurrencyNames/fr/ron=leu roumain +CurrencyNames/fr/rsd=dinar serbe +CurrencyNames/fr/rub=rouble russe +CurrencyNames/fr/rur=rouble russe (1991\u20131998) +CurrencyNames/fr/sbd=dollar des \u00eeles Salomon +CurrencyNames/fr/sdg=livre soudanaise +CurrencyNames/fr/sit=tolar slov\u00e8ne +CurrencyNames/fr/sll=leone sierra-l\u00e9onais +CurrencyNames/fr/sos=shilling somalien +CurrencyNames/fr/srg=florin surinamais +CurrencyNames/fr/std=dobra santom\u00e9en +CurrencyNames/fr/svc=col\u00f3n salvadorien +CurrencyNames/fr/szl=lilangeni swazi +CurrencyNames/fr/thb=baht tha\u00eflandais +CurrencyNames/fr/tjs=somoni tadjik +CurrencyNames/fr/tmm=manat turkm\u00e8ne +CurrencyNames/fr/top=pa\u2019anga tongan +CurrencyNames/fr/tpe=escudo timorais +CurrencyNames/fr/ttd=dollar trinidadien +CurrencyNames/fr/twd=nouveau dollar ta\u00efwanais +CurrencyNames/fr/tzs=shilling tanzanien +CurrencyNames/fr/uah=hryvnia ukrainienne +CurrencyNames/fr/uzs=sum ouzbek +CurrencyNames/fr/vef=bolivar fuerte v\u00e9n\u00e9zu\u00e9lien +CurrencyNames/fr/vnd=d\u00f4ng vietnamien +CurrencyNames/fr/vuv=vatu vanuatuan +CurrencyNames/fr/wst=tala samoan +CurrencyNames/fr/xts=(devise de test) +CurrencyNames/fr/xxx=devise inconnue ou non valide +CurrencyNames/fr/yer=rial y\u00e9m\u00e9nite +CurrencyNames/fr/zar=rand sud-africain +CurrencyNames/fr/zmk=kwacha zambien +CurrencyNames/fr/zwd=dollar zimbabw\u00e9en + +CurrencyNames/it/azm=Manat Azero (1993-2006) +CurrencyNames/it/ghs=Cedi ghanese +CurrencyNames/it/iep=Sterlina irlandese +CurrencyNames/it/mzn=Metical del Mozambico +CurrencyNames/it/rsd=Dinaro serbo +CurrencyNames/it/sdg=Sterlina sudanese +CurrencyNames/it/srd=Dollaro surinamese +CurrencyNames/it/vef=Bol\u00edvar venezuelano forte +CurrencyNames/it/xag=Argento +CurrencyNames/it/xpd=Palladio + +CurrencyNames/ja/azm=\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3 \u30de\u30ca\u30c8 (1993-2006) +CurrencyNames/ja/azn=\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3 \u30de\u30ca\u30c8 +CurrencyNames/ja/ghc=\u30ac\u30fc\u30ca \u30bb\u30c7\u30a3 (1979-2007) +CurrencyNames/ja/ghs=\u30ac\u30fc\u30ca \u30bb\u30c7\u30a3 +CurrencyNames/ja/mzn=\u30e2\u30b6\u30f3\u30d3\u30fc\u30af \u30e1\u30c6\u30a3\u30ab\u30eb +CurrencyNames/ja/rol=\u30eb\u30fc\u30de\u30cb\u30a2 \u65e7\u30ec\u30a4 +CurrencyNames/ja/ron=\u30eb\u30fc\u30de\u30cb\u30a2 \u30ec\u30a4 +CurrencyNames/ja/rsd=\u30c7\u30a3\u30ca\u30fc\u30eb (\u30bb\u30eb\u30d3\u30a2) +CurrencyNames/ja/sdg=\u30b9\u30fc\u30c0\u30f3 \u30dd\u30f3\u30c9 +CurrencyNames/ja/srd=\u30b9\u30ea\u30ca\u30e0 \u30c9\u30eb +CurrencyNames/ja/vef=\u30d9\u30cd\u30ba\u30a8\u30e9 \u30dc\u30ea\u30d0\u30eb\u30d5\u30a8\u30eb\u30c6 +CurrencyNames/ja/xag=\u9280 +CurrencyNames/ja/xpd=\u30d1\u30e9\u30b8\u30a6\u30e0 +CurrencyNames/ja/xpt=\u30d7\u30e9\u30c1\u30ca +CurrencyNames/ja/xts=\u30c6\u30b9\u30c8\u7528\u901a\u8ca8\u30b3\u30fc\u30c9 +CurrencyNames/ja/xxx=\u4e0d\u660e\u307e\u305f\u306f\u7121\u52b9\u306a\u901a\u8ca8 +CurrencyNames/ja/zmk=\u30b6\u30f3\u30d3\u30a2 \u30af\u30ef\u30c1\u30e3 + +CurrencyNames/ko/aed=\uc544\ub78d\uc5d0\ubbf8\ub9ac\ud2b8 \ub514\ub974\ud568 +CurrencyNames/ko/ang=\ub124\ub35c\ub780\ub4dc\ub839 \uc548\ud2f8\ub808\uc2a4 \uae38\ub354 +CurrencyNames/ko/azm=\uc544\uc81c\ub974\ubc14\uc774\uc820 \ub9c8\ub098\ud2b8(1993-2006) +CurrencyNames/ko/azn=\uc544\uc81c\ub974\ubc14\uc774\uc794 \ub9c8\ub098\ud2b8 +CurrencyNames/ko/bov=\ubcfc\ub9ac\ube44\uc544\ub178 Mvdol(\uae30\uae08) +CurrencyNames/ko/chf=\uc2a4\uc704\uc2a4 \ud504\ub791 +CurrencyNames/ko/clf=\uce60\ub808 UF (Unidades de Fomento) +CurrencyNames/ko/csd=\uace0 \uc138\ub974\ube44\uc544 \ub514\ub098\ub974 +CurrencyNames/ko/ghc=\uac00\ub098 \uc2dc\ub514 (1979-2007) +CurrencyNames/ko/ghs=\uac00\ub098 \uc2dc\ub514 +CurrencyNames/ko/mxv=\uba55\uc2dc\ucf54 UDI(Unidad de Inversion) +CurrencyNames/ko/myr=\ub9d0\ub808\uc774\uc2dc\uc544 \ub9c1\uae43 +CurrencyNames/ko/mzm=\uace0 \ubaa8\uc7a0\ube44\ud06c \uba54\ud2f0\uce7c +CurrencyNames/ko/mzn=\ubaa8\uc7a0\ube44\ud06c \uba54\ud2f0\uce7c +CurrencyNames/ko/ron=\ub8e8\ub9c8\ub2c8\uc544 \ub808\uc6b0 +CurrencyNames/ko/rsd=\uc138\ub974\ube44\uc544 \ub514\ub098\ub974 +CurrencyNames/ko/sdg=\uc218\ub2e8 \ud30c\uc6b4\ub4dc +CurrencyNames/ko/srd=\uc218\ub9ac\ub0a8 \ub2ec\ub7ec +CurrencyNames/ko/top=\ud1b5\uac00 \ud30c\uc559\uac00 +CurrencyNames/ko/trl=\ud130\ud0a4 \ub9ac\ub77c +CurrencyNames/ko/try=\uc2e0 \ud130\ud0a4 \ub9ac\ub77c +CurrencyNames/ko/usn=\ubbf8\uad6d \ub2ec\ub7ec(\ub2e4\uc74c\ub0a0) +CurrencyNames/ko/uss=\ubbf8\uad6d \ub2ec\ub7ec(\ub2f9\uc77c) +CurrencyNames/ko/vef=\ubca0\ub124\uc8fc\uc5d8\ub77c \ubcfc\ub9ac\ubc14\ub974 \ud478\uc5d0\ub974\ub5bc +CurrencyNames/ko/xaf=CFA \ud504\ub791 BEAC +CurrencyNames/ko/xag=\uc740\ud654 +CurrencyNames/ko/xba=\uc720\ub974\ucf54 (\uc720\ub7fd \ud68c\uacc4 \ub2e8\uc704) +CurrencyNames/ko/xbb=\uc720\ub7fd \ud1b5\ud654 \ub3d9\ub9f9 +CurrencyNames/ko/xbc=\uc720\ub7fd \uacc4\uc0b0 \ub2e8\uc704 (XBC) +CurrencyNames/ko/xbd=\uc720\ub7fd \uacc4\uc0b0 \ub2e8\uc704 (XBD) +CurrencyNames/ko/xof=CFA \ud504\ub791 BCEAO +CurrencyNames/ko/xpd=\ud314\ub77c\ub4d0 +CurrencyNames/ko/xpf=CFP \ud504\ub791 +CurrencyNames/ko/xpt=\ubc31\uae08 +CurrencyNames/ko/xts=\ud14c\uc2a4\ud2b8 \ud1b5\ud654 \ucf54\ub4dc +CurrencyNames/ko/xxx=\uc54c\uc218\uc5c6\uac70\ub098 \uc720\ud6a8\ud558\uc9c0\uc54a\uc740 \ud1b5\ud654\ub2e8\uc704 +CurrencyNames/ko/zwd=\uc9d0\ubc14\ube0c\uc6e8 \ub2ec\ub7ec + +CurrencyNames/sv/adp=andorransk peseta +CurrencyNames/sv/aed=F\u00f6renade Arabemiratens dirham +CurrencyNames/sv/afa=afghani (1927-2002) +CurrencyNames/sv/afn=afghani +CurrencyNames/sv/all=albansk lek +CurrencyNames/sv/amd=armenisk dram +CurrencyNames/sv/ang=Nederl\u00e4ndska Antillernas gulden +CurrencyNames/sv/aoa=angolansk kwanza +CurrencyNames/sv/ars=argentinsk peso +CurrencyNames/sv/ats=\u00f6sterrikisk schilling +CurrencyNames/sv/aud=australisk dollar +CurrencyNames/sv/awg=Aruba-gulden +CurrencyNames/sv/azm=azerbajdzjansk manat (1993-2006) +CurrencyNames/sv/azn=azerbajdzjansk manat +CurrencyNames/sv/bam=bosnisk-hercegovinsk mark (konvertibel) +CurrencyNames/sv/bbd=Barbados-dollar +CurrencyNames/sv/bdt=bangladeshisk taka +CurrencyNames/sv/bef=belgisk franc +CurrencyNames/sv/bgn=bulgarisk ny lev +CurrencyNames/sv/bhd=Bahrain-dinar +CurrencyNames/sv/bif=burundisk franc +CurrencyNames/sv/bnd=Brunei-dollar +CurrencyNames/sv/bob=boliviano +CurrencyNames/sv/bov=boliviansk mvdol +CurrencyNames/sv/brl=brasiliansk real +CurrencyNames/sv/bsd=Bahamas-dollar +CurrencyNames/sv/btn=bhutanesisk ngultrum +CurrencyNames/sv/bwp=botswansk pula +CurrencyNames/sv/byb=vitrysk ny rubel (1994-1999) +CurrencyNames/sv/byr=vitrysk rubel +CurrencyNames/sv/bzd=belizisk dollar +CurrencyNames/sv/cad=kanadensisk dollar +CurrencyNames/sv/cdf=kongolesisk franc +CurrencyNames/sv/chf=schweizisk franc +CurrencyNames/sv/clf=chilensk unidad de fomento +CurrencyNames/sv/clp=chilensk peso +CurrencyNames/sv/cny=kinesisk yuan renminbi +CurrencyNames/sv/cop=colombiansk peso +CurrencyNames/sv/crc=costarikansk col\u00f3n +CurrencyNames/sv/csd=jugoslavisk dinar +CurrencyNames/sv/cup=kubansk peso +CurrencyNames/sv/cve=kapverdisk escudo +CurrencyNames/sv/cyp=cypriotiskt pund +CurrencyNames/sv/czk=tjeckisk koruna +CurrencyNames/sv/dem=tysk mark +CurrencyNames/sv/djf=djiboutisk franc +CurrencyNames/sv/dkk=dansk krona +CurrencyNames/sv/dop=dominikansk peso +CurrencyNames/sv/dzd=algerisk dinar +CurrencyNames/sv/eek=estnisk krona +CurrencyNames/sv/egp=egyptiskt pund +CurrencyNames/sv/ern=eritreansk nakfa +CurrencyNames/sv/esp=spansk peseta +CurrencyNames/sv/etb=etiopisk birr +CurrencyNames/sv/eur=euro +CurrencyNames/sv/fim=finsk mark +CurrencyNames/sv/fjd=Fiji-dollar +CurrencyNames/sv/frf=fransk franc +CurrencyNames/sv/gbp=brittiskt pund sterling +CurrencyNames/sv/gel=georgisk lari +CurrencyNames/sv/ghc=ghanansk cedi (1979-2007) +CurrencyNames/sv/ghs=ghanansk cedi +CurrencyNames/sv/gip=gibraltiskt pund +CurrencyNames/sv/gmd=gambisk dalasi +CurrencyNames/sv/gnf=guineansk franc +CurrencyNames/sv/grd=grekisk drachma +CurrencyNames/sv/gtq=guatemalansk quetzal +CurrencyNames/sv/gyd=guyanansk dollar +CurrencyNames/sv/hnl=honduransk lempira +CurrencyNames/sv/hrk=kroatisk kuna +CurrencyNames/sv/htg=haitisk gourde +CurrencyNames/sv/huf=ungersk forint +CurrencyNames/sv/idr=indonesisk rupiah +CurrencyNames/sv/iep=irl\u00e4ndskt pund +CurrencyNames/sv/ils=israelisk ny shekel +CurrencyNames/sv/inr=indisk rupie +CurrencyNames/sv/iqd=irakisk dinar +CurrencyNames/sv/irr=iransk rial +CurrencyNames/sv/isk=isl\u00e4ndsk krona +CurrencyNames/sv/itl=italiensk lira +CurrencyNames/sv/jmd=Jamaica-dollar +CurrencyNames/sv/jod=jordansk dinar +CurrencyNames/sv/jpy=japansk yen +CurrencyNames/sv/kes=kenyansk shilling +CurrencyNames/sv/kgs=kirgizisk som +CurrencyNames/sv/khr=kambodjansk riel +CurrencyNames/sv/kmf=komorisk franc +CurrencyNames/sv/kpw=nordkoreansk won +CurrencyNames/sv/krw=sydkoreansk won +CurrencyNames/sv/kwd=kuwaitisk dinar +CurrencyNames/sv/kzt=kazakisk tenge +CurrencyNames/sv/lak=laotisk kip +CurrencyNames/sv/lbp=libanesiskt pund +CurrencyNames/sv/lkr=srilankesisk rupie +CurrencyNames/sv/lrd=Liberia-dollar +CurrencyNames/sv/lsl=lesothisk loti +CurrencyNames/sv/ltl=litauisk litas +CurrencyNames/sv/luf=luxemburgsk franc +CurrencyNames/sv/lvl=lettisk lats +CurrencyNames/sv/lyd=libysk dinar +CurrencyNames/sv/mad=marockansk dirham +CurrencyNames/sv/mdl=moldavisk leu +CurrencyNames/sv/mga=madagaskisk ariary +CurrencyNames/sv/mgf=madagaskisk franc +CurrencyNames/sv/mkd=makedonisk denar +CurrencyNames/sv/mmk=myanmarisk kyat +CurrencyNames/sv/mnt=mongolisk tugrik +CurrencyNames/sv/mop=Macao-pataca +CurrencyNames/sv/mro=mauretansk ouguiya +CurrencyNames/sv/mtl=maltesisk lira +CurrencyNames/sv/mur=mauritisk rupie +CurrencyNames/sv/mvr=maldivisk rufiyaa +CurrencyNames/sv/mwk=malawisk kwacha +CurrencyNames/sv/mxn=mexikansk peso +CurrencyNames/sv/mxv=mexikansk unidad de inversion +CurrencyNames/sv/myr=malaysisk ringgit +CurrencyNames/sv/mzm=gammal mo\u00e7ambikisk metical +CurrencyNames/sv/mzn=mo\u00e7ambikisk metical +CurrencyNames/sv/nad=Namibia-dollar +CurrencyNames/sv/ngn=nigeriansk naira +CurrencyNames/sv/nio=nicaraguansk c\u00f3rdoba oro +CurrencyNames/sv/nlg=nederl\u00e4ndsk gulden +CurrencyNames/sv/nok=norsk krona +CurrencyNames/sv/npr=nepalesisk rupie +CurrencyNames/sv/nzd=nyzeel\u00e4ndsk dollar +CurrencyNames/sv/omr=omansk rial +CurrencyNames/sv/pab=panamansk balboa +CurrencyNames/sv/pen=peruansk sol nuevo +CurrencyNames/sv/pgk=papuansk kina +CurrencyNames/sv/php=filippinsk peso +CurrencyNames/sv/pkr=pakistansk rupie +CurrencyNames/sv/pln=polsk zloty +CurrencyNames/sv/pte=portugisisk escudo +CurrencyNames/sv/pyg=paraguaysk guarani +CurrencyNames/sv/qar=qatarisk rial +CurrencyNames/sv/rol=gammal rum\u00e4nsk leu +CurrencyNames/sv/ron=rum\u00e4nsk leu +CurrencyNames/sv/rsd=Serbisk dinar +CurrencyNames/sv/rub=rysk rubel +CurrencyNames/sv/rur=rysk rubel (1991-1998) +CurrencyNames/sv/rwf=rwandisk franc +CurrencyNames/sv/sar=saudisk riyal +CurrencyNames/sv/scr=seychellisk rupie +CurrencyNames/sv/sdd=sudanesisk dinar +CurrencyNames/sv/sdg=sudanesiskt pund +CurrencyNames/sv/sek=svensk krona +CurrencyNames/sv/sgd=Singapore-dollar +CurrencyNames/sv/sit=slovensk tolar +CurrencyNames/sv/skk=slovakisk koruna +CurrencyNames/sv/sll=sierraleonsk leone +CurrencyNames/sv/sos=somalisk shilling +CurrencyNames/sv/srd=Surinam-dollar +CurrencyNames/sv/srg=surinamesisk gulden +CurrencyNames/sv/svc=salvadoransk col\u00f3n +CurrencyNames/sv/syp=syriskt pund +CurrencyNames/sv/szl=swazil\u00e4ndsk lilangeni +CurrencyNames/sv/thb=thail\u00e4ndsk baht +CurrencyNames/sv/tjs=tadzjikisk somoni +CurrencyNames/sv/tmm=turkmensk manat +CurrencyNames/sv/tnd=tunisisk dinar +CurrencyNames/sv/top=tongansk pa\u02bbanga +CurrencyNames/sv/tpe=timoriansk escudo +CurrencyNames/sv/trl=gammal turkisk lira +CurrencyNames/sv/try=ny turkisk lira +CurrencyNames/sv/ttd=Trinidad ochTobago-dollar +CurrencyNames/sv/twd=taiwanesisk ny dollar +CurrencyNames/sv/tzs=tanzanisk shilling +CurrencyNames/sv/uah=ukrainsk hryvnia +CurrencyNames/sv/ugx=ugandisk shilling +CurrencyNames/sv/uyu=uruguayansk peso +CurrencyNames/sv/uzs=uzbekisk sum +CurrencyNames/sv/veb=venezuelansk bolivar +CurrencyNames/sv/vef=venezuelansk bolivar fuerte +CurrencyNames/sv/vnd=vietnamesisk dong +CurrencyNames/sv/vuv=vanuatisk vatu +CurrencyNames/sv/wst=v\u00e4stsamoansk tala +CurrencyNames/sv/xag=silver +CurrencyNames/sv/xau=guld +CurrencyNames/sv/xba=europeisk kompositenhet +CurrencyNames/sv/xbb=europeisk monet\u00e4r enhet +CurrencyNames/sv/xbc=europeisk kontoenhet (XBC) +CurrencyNames/sv/xbd=europeisk kontoenhet (XBD) +CurrencyNames/sv/xcd=\u00f6stkaribisk dollar +CurrencyNames/sv/xdr=IMF s\u00e4rskild dragningsr\u00e4tt +CurrencyNames/sv/xfo=fransk guldfranc +CurrencyNames/sv/xpd=palladium +CurrencyNames/sv/xpt=platina +CurrencyNames/sv/xts=test-valutakod +CurrencyNames/sv/xxx=ok\u00e4nd eller ogiltig valuta +CurrencyNames/sv/yer=jemenitisk rial +CurrencyNames/sv/yum=jugoslavisk ny dinar +CurrencyNames/sv/zar=sydafrikansk rand +CurrencyNames/sv/zmk=zambisk kwacha +CurrencyNames/sv/zwd=Zimbabwe-dollar + +CurrencyNames/zh_CN/ang=\u8377\u5170\u5b89\u66ff\u5170\u76fe +CurrencyNames/zh_CN/azm=\u963f\u585e\u62dc\u7586\u9a6c\u7eb3\u7279 (1993-2006) +CurrencyNames/zh_CN/azn=\u963f\u585e\u62dc\u7586\u9a6c\u7eb3\u7279 +CurrencyNames/zh_CN/csd=\u65e7\u585e\u5c14\u7ef4\u4e9a\u7b2c\u7eb3\u5c14 +CurrencyNames/zh_CN/ghs=\u52a0\u7eb3\u585e\u5730 +CurrencyNames/zh_CN/mzm=\u65e7\u83ab\u6851\u6bd4\u514b\u7f8e\u63d0\u5361 +CurrencyNames/zh_CN/mzn=\u83ab\u6851\u6bd4\u514b\u7f8e\u63d0\u5361 +CurrencyNames/zh_CN/ron=\u7f57\u9a6c\u5c3c\u4e9a\u5217\u4f0a +CurrencyNames/zh_CN/rsd=\u585e\u5c14\u7ef4\u4e9a\u7b2c\u7eb3\u5c14 +CurrencyNames/zh_CN/shp=\u5723\u8d6b\u52d2\u62ff\u7fa4\u5c9b\u78c5 +CurrencyNames/zh_CN/twd=\u65b0\u53f0\u5e01 +CurrencyNames/zh_CN/vef=\u59d4\u5185\u745e\u62c9\u5f3a\u52bf\u73bb\u5229\u74e6 +CurrencyNames/zh_CN/xxx=\u8d27\u5e01\u672a\u77e5\u6216\u65e0\u6548 + +CurrencyNames/zh_TW/afa=\u963f\u5bcc\u6c57\u5c3c (1927-2002) +CurrencyNames/zh_TW/ang=\u53e4\u82f1\u6587 +CurrencyNames/zh_TW/azm=\u4e9e\u585e\u62dc\u7136\u99ac\u7d0d\u7279 (1993-2006) +CurrencyNames/zh_TW/azn=\u4e9e\u585e\u62dc\u7136\u99ac\u7d0d\u7279 +CurrencyNames/zh_TW/bwp=\u6ce2\u672d\u90a3\u666e\u62c9 +CurrencyNames/zh_TW/bzd=\u8c9d\u91cc\u65af\u5143 +CurrencyNames/zh_TW/csd=\u65e7\u585e\u5c14\u7ef4\u4e9a\u7b2c\u7eb3\u5c14 +CurrencyNames/zh_TW/cyp=\u8cfd\u666e\u52d2\u65af\u938a +CurrencyNames/zh_TW/ghc=\u8fe6\u7d0d\u4ed9\u8515 (1979-2007) +CurrencyNames/zh_TW/ghs=\u8fe6\u7d0d\u4ed9\u8515 +CurrencyNames/zh_TW/gwp=\u5e7e\u5167\u4e9e\u6bd4\u7d22\u62ab\u7d22 +CurrencyNames/zh_TW/huf=\u5308\u7259\u5229\u798f\u6797 +CurrencyNames/zh_TW/idr=\u5370\u5c3c\u76fe +CurrencyNames/zh_TW/inr=\u5370\u5ea6\u76e7\u6bd4 +CurrencyNames/zh_TW/kpw=\u5317\u97d3\u571c +CurrencyNames/zh_TW/krw=\u97d3\u571c +CurrencyNames/zh_TW/lak=\u8001\u631d\u57fa\u666e +CurrencyNames/zh_TW/mad=\u6469\u6d1b\u54e5\u8fea\u62c9\u59c6 +CurrencyNames/zh_TW/mxn=\u58a8\u897f\u54e5\u62ab\u7d22 +CurrencyNames/zh_TW/mxv=\u58a8\u897f\u54e5 Unidad de Inversion (UDI)\uff08\u8d44\u91d1\uff09 +CurrencyNames/zh_TW/myr=\u99ac\u4f86\u897f\u4e9e\u4ee4\u5409 +CurrencyNames/zh_TW/mzn=\u83ab\u4e09\u6bd4\u514b\u7f8e\u63d0\u5361 +CurrencyNames/zh_TW/nio=\u5c3c\u52a0\u62c9\u74dc\u91d1\u79d1\u591a\u5df4 +CurrencyNames/zh_TW/rol=\u65e7\u7f57\u9a6c\u5c3c\u4e9a\u5217\u4f0a +CurrencyNames/zh_TW/ron=\u7f85\u99ac\u5c3c\u4e9e\u5217\u4f0a +CurrencyNames/zh_TW/rsd=\u585e\u723e\u7dad\u4e9e\u6234\u7d0d +CurrencyNames/zh_TW/scr=\u585e\u5e2d\u723e\u76e7\u6bd4 +CurrencyNames/zh_TW/sdg=\u8607\u4e39\u938a +CurrencyNames/zh_TW/shp=\u5723\u8d6b\u52d2\u62ff\u7fa4\u5c9b\u78c5 +CurrencyNames/zh_TW/srd=\u82cf\u91cc\u5357\u5143 +CurrencyNames/zh_TW/srg=\u8607\u5229\u5357\u57fa\u723e +CurrencyNames/zh_TW/svc=\u8428\u5c14\u74e6\u591a\u79d1\u6717 +CurrencyNames/zh_TW/szl=\u65af\u5a01\u58eb\u5170\u91cc\u5170\u5409\u5c3c +CurrencyNames/zh_TW/tpe=\u5e1d\u6c76\u57c3\u65af\u5e93\u591a +CurrencyNames/zh_TW/ttd=\u7279\u7acb\u5c3c\u8fbe\u548c\u591a\u5df4\u54e5\u5143 +CurrencyNames/zh_TW/tzs=\u5766\u6851\u5c3c\u4e9a\u5148\u4ee4 +CurrencyNames/zh_TW/uzs=\u70cf\u8332\u5225\u514b\u7d22\u59c6 +CurrencyNames/zh_TW/veb=\u59d4\u5167\u745e\u62c9\u73bb\u5229\u74e6 +CurrencyNames/zh_TW/vef=\u59d4\u5167\u745e\u62c9\u5f37\u52e2\u73bb\u5229\u74e6 +CurrencyNames/zh_TW/xaf=\u897f\u975e\u6cd5\u90ce BEAC +CurrencyNames/zh_TW/xag=XAG +CurrencyNames/zh_TW/xof=\u897f\u975e\u6cd5\u90ce BCEAO +CurrencyNames/zh_TW/xpd=\u94af +CurrencyNames/zh_TW/xpt=\u94c2 +CurrencyNames/zh_TW/xts=XTS +CurrencyNames/zh_TW/xxx=XXX +CurrencyNames/zh_TW/yer=\u8449\u9580\u91cc\u96c5 + +# bug 7036905 +CurrencyNames/de/afa=Afghani (1927-2002) +CurrencyNames/de/afn=Afghani +CurrencyNames/de/bob=Boliviano +CurrencyNames/de/dem=Deutsche Mark +CurrencyNames/de/mwk=Malawi Kwacha +CurrencyNames/de/mxv=Mexican Unidad de Inversion (UDI) +CurrencyNames/de/svc=El Salvador Colon + +CurrencyNames/it/bob=Boliviano + +# bug 7066203 +CurrencyNames//CUC=CUC +CurrencyNames//TMT=TMT +CurrencyNames//XSU=XSU +CurrencyNames//XUA=XUA +CurrencyNames//ZWL=ZWL +CurrencyNames//ZWR=ZWR +CurrencyNames//cuc=Cuban Convertible Peso +CurrencyNames//tmt=Turkmenistani Manat +CurrencyNames//zwl=Zimbabwean Dollar (2009) +CurrencyNames//zwr=Zimbabwean Dollar (2008) + +CurrencyNames/de/cuc=Kubanischer Peso (konvertibel) +CurrencyNames/de/tmt=Neuer Turkmenistan-Manat +CurrencyNames/de/zwl=Simbabwe-Dollar (2009) + +CurrencyNames/es/cuc=peso cubano convertible +CurrencyNames/es/tmt=nuevo manat turcomano +CurrencyNames/es/zwl=d\u00f3lar zimbabuense + +CurrencyNames/es_CU/CUP=CU$ +CurrencyNames/es_CU/CUC=CUC$ + +CurrencyNames/et_EE/eek=Eesti kroon +CurrencyNames/et_EE/EUR=\u20ac +CurrencyNames/et_EE/eur=euro + +CurrencyNames/fr/cuc=peso cubain convertible +CurrencyNames/fr/tmt=nouveau manat turkm\u00e8ne + +CurrencyNames/ja/cuc=\u30ad\u30e5\u30fc\u30d0 \u514c\u63db\u30da\u30bd +CurrencyNames/ja/tmt=\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3 \u65b0\u30de\u30ca\u30c8 +CurrencyNames/ja/zwl=\u30b8\u30f3\u30d0\u30d6\u30a8 \u30c9\u30eb (2009) + +CurrencyNames/ko/cuc=\ucfe0\ubc14 \ud0dc\ud658 \ud398\uc18c + +CurrencyNames/pt/bob=Boliviano +CurrencyNames/pt/cuc=Peso cubano convers\u00edvel +CurrencyNames/pt/tmt=Novo Manat do Turcomenist\u00e3o +CurrencyNames/pt/zwl=D\u00f3lar do Zimb\u00e1bue (2009) +CurrencyNames/pt/zwr=D\u00f3lar do Zimb\u00e1bue (2008) + +CurrencyNames/sk_SK/skk=Slovensk\u00e1 koruna +CurrencyNames/sk_SK/EUR=\u20ac + +CurrencyNames/zh_CN/cuc=\u53e4\u5df4\u53ef\u5151\u6362\u6bd4\u7d22 +CurrencyNames/zh_CN/tmt=\u571f\u5e93\u66fc\u65af\u5766\u65b0\u9a6c\u7eb3\u7279 +CurrencyNames/zh_CN/zwl=\u6d25\u5df4\u5e03\u97e6\u5143 (2009) + +# bug 7189611 +CurrencyNames/es_VE/VEF=Bs.F. +CurrencyNames/zh_TW/cuc=\u53e4\u5df4\u53ef\u8f49\u63db\u62ab\u7d22 +CurrencyNames/zh_TW/tmt=\u571f\u5eab\u66fc\u65b0\u99ac\u7d0d\u7279 +CurrencyNames/zh_TW/zwl=\u8f9b\u5df4\u5a01\u5143 (2009) + +# bug 7171028 +FormatData/sl/DateTimePatterns/4=EEEE, dd. MMMM y +FormatData/sl/DateTimePatterns/5=dd. MMMM y + +# bug 7085757 +CurrencyNames//SSP=SSP +CurrencyNames//ssp=South Sudanese Pound +CurrencyNames//xsu=Sucre +CurrencyNames//xua=ADB Unit of Account +LocaleNames//SS=South Sudan +LocaleNames/en/SS=South Sudan + +# bug 7028073 +CurrencyNames/es_PE/PEN=S/. + +# bug 7195759 +CurrencyNames//ZMW=ZMW + +# bug 8021121 +CurrencyNames/lv_LV/EUR=\u20AC + +# bug 6931564 +LocaleNames/sv/ZA=Sydafrika +# bug 8027695 +FormatData/sv_SE/NumberPatterns/2=#,##0 % diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/text/resources/LocaleDataTest.java openjdk-6-6b34-1.13.6/jdk/test/sun/text/resources/LocaleDataTest.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/text/resources/LocaleDataTest.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/text/resources/LocaleDataTest.java 2015-01-20 02:17:34.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,10 @@ * 5102005 5074431 6182685 6208712 6277020 6245766 6351682 6386647 6379382 * 6414459 6455680 6498742 6558863 6488119 6547501 6497154 6558856 6481177 * 6379214 6485516 6486607 4225362 4494727 6533691 6531591 6531593 6570259 - * 6573250 6450945 6509039 6610748 6645268 6645405 6650730 6609737 + * 6509039 6609737 6610748 6645271 6507067 6873931 6450945 6645268 6646611 + * 6645405 6650730 6910489 6573250 6870908 6585666 6716626 6914413 6916787 + * 6919624 7019267 7020960 7025837 7020583 7036905 7066203 7189611 7171028 + * 8013836 7028073 7195759 7085757 6931564 8027695 * @summary Verify locale data * */ @@ -255,6 +258,15 @@ index = key.length(); resTag = key.substring(oldIndex, index); + // TimeZone name may have "/" in it, for example "Asia/Taipei", so use "Asia\/Taipei in LocaleData. + if(resTag.endsWith("\\")) { + resTag = resTag.substring(0, resTag.length() - 1); + oldIndex = index; + index = key.indexOf("/", oldIndex + 1); + if (index == -1) index = key.length(); + resTag += key.substring(oldIndex, index); + } + if (index < key.length() - 1) qualifier = key.substring(index + 1); else diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/tools/common/CommonSetup.sh openjdk-6-6b34-1.13.6/jdk/test/sun/tools/common/CommonSetup.sh --- openjdk-6-6b33-1.13.5/jdk/test/sun/tools/common/CommonSetup.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/tools/common/CommonSetup.sh 2015-01-20 02:20:42.000000000 +0000 @@ -111,6 +111,11 @@ PS=";" isWindows=true ;; + CYGWIN* ) + PS=";" + OS="Windows" + isCygwin=true + ;; * ) isUnknownOS=true ;; diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jps/jps-help.sh openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jps/jps-help.sh --- openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jps/jps-help.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jps/jps-help.sh 2015-01-20 02:20:42.000000000 +0000 @@ -35,7 +35,7 @@ rm -f jps.out 2>/dev/null ${JPS} -? > jps.out 2>&1 -diff jps.out ${TESTSRC}/usage.out +diff -w jps.out ${TESTSRC}/usage.out if [ $? != 0 ] then echo "Output of jps -? differ from expected output. Failed." @@ -46,7 +46,7 @@ rm -f jps.out 2>/dev/null ${JPS} -help > jps.out 2>&1 -diff jps.out ${TESTSRC}/usage.out +diff -w jps.out ${TESTSRC}/usage.out if [ $? != 0 ] then echo "Output of jps -help differ from expected output. Failed." diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jps/jps-m_2.sh openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jps/jps-m_2.sh --- openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jps/jps-m_2.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jps/jps-m_2.sh 2015-01-20 02:20:42.000000000 +0000 @@ -50,3 +50,9 @@ SLEEPER_PID=$! ${JPS} -m | awk -f ${TESTSRC}/jps-m_Output2.awk +RC=$? + +cleanup + +exit ${RC} + diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jps/jps-Vvml_2.sh openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jps/jps-Vvml_2.sh --- openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jps/jps-Vvml_2.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jps/jps-Vvml_2.sh 2015-01-20 02:20:42.000000000 +0000 @@ -51,3 +51,9 @@ SLEEPER_PID=$! ${JPS} -J-XX:Flags=${TESTSRC}/vmflags -Vvml | awk -f ${TESTSRC}/jps-Vvml_Output2.awk +RC=$? + +cleanup + +exit ${RC} + diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jstat/jstatHelp.sh openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jstat/jstatHelp.sh --- openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jstat/jstatHelp.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jstat/jstatHelp.sh 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -22,9 +22,9 @@ # # @test -# @bug 4990825 +# @bug 4990825 6364329 # @run shell jstatHelp.sh -# @summary Test that output of 'jstat -?' matches the usage.out file +# @summary Test that output of 'jstat -?', 'jstat -help' and 'jstat' matches the usage.out file . ${TESTSRC-.}/../../jvmstat/testlibrary/utils.sh @@ -35,20 +35,30 @@ rm -f jstat.out 2>/dev/null ${JSTAT} -? > jstat.out 2>&1 -diff jstat.out ${TESTSRC}/usage.out +diff -w jstat.out ${TESTSRC}/usage.out if [ $? != 0 ] then - echo "Output of jstat -? differ from expected output. Failed." + echo "Output of jstat -? differs from expected output. Failed." exit 1 fi rm -f jstat.out 2>/dev/null ${JSTAT} -help > jstat.out 2>&1 -diff jstat.out ${TESTSRC}/usage.out +diff -w jstat.out ${TESTSRC}/usage.out if [ $? != 0 ] then - echo "Output of jstat -help differ from expected output. Failed." + echo "Output of jstat -help differs from expected output. Failed." + exit 1 +fi + +rm -f jstat.out 2>/dev/null +${JSTAT} > jstat.out 2>&1 + +diff -w jstat.out ${TESTSRC}/usage.out +if [ $? != 0 ] +then + echo "Output of jstat differs from expected output. Failed." exit 1 fi diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jstat/jstatOptions1.sh openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jstat/jstatOptions1.sh --- openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jstat/jstatOptions1.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jstat/jstatOptions1.sh 2015-01-20 02:20:42.000000000 +0000 @@ -35,4 +35,4 @@ rm -f jstat.out 2>/dev/null ${JSTAT} -options > jstat.out 2>&1 -diff jstat.out ${TESTSRC}/options1.out +diff -w jstat.out ${TESTSRC}/options1.out diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jstatd/jstatdDefaults.sh openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jstatd/jstatdDefaults.sh --- openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jstatd/jstatdDefaults.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jstatd/jstatdDefaults.sh 2015-01-20 02:20:42.000000000 +0000 @@ -56,12 +56,11 @@ if [ $? -ne 0 ] then echo "Output of jps differs from expected output. Failed." + cleanup exit 1 fi -TARGET_PID=`${JPS} | grep "Jstatd" | cut -d" " -f1` - -${JSTAT} -gcutil ${TARGET_PID}@${HOSTNAME} 250 5 2>&1 | awk -f ${TESTSRC}/jstatGcutilOutput1.awk +${JSTAT} -gcutil ${JSTATD_PID}@${HOSTNAME} 250 5 2>&1 | awk -f ${TESTSRC}/jstatGcutilOutput1.awk RC=$? if [ ${RC} -ne 0 ] @@ -75,4 +74,6 @@ RC=1 fi +cleanup + exit ${RC} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jstatd/jstatdExternalRegistry.sh openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jstatd/jstatdExternalRegistry.sh --- openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jstatd/jstatdExternalRegistry.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jstatd/jstatdExternalRegistry.sh 2015-01-20 02:20:42.000000000 +0000 @@ -44,7 +44,11 @@ JSTAT="${TESTJAVA}/bin/jstat" HOSTNAME=`uname -n` -PORT=2099 +PORT=`freePort` +if [ "${PORT}" = "0" ] ; then + echo "Cannot get free port" + exit 1 +fi RMIREGISTRY_OUT="rmiregistry_$$.out" JSTATD_OUT="jstatd_$$.out" @@ -69,12 +73,7 @@ exit 1 fi -# get the process id for the target app (jstatd). note, don't rely -# on JSTATD_PID as mks interposes a shell when starting a process in -# the background -TARGET_PID=`${JPS} | grep "Jstatd" | cut -d" " -f1` - -${JSTAT} -gcutil ${TARGET_PID}@${HOSTNAME}:${PORT} 250 5 2>&1 | awk -f ${TESTSRC}/jstatGcutilOutput1.awk +${JSTAT} -gcutil ${JSTATD_PID}@${HOSTNAME}:${PORT} 250 5 2>&1 | awk -f ${TESTSRC}/jstatGcutilOutput1.awk RC=$? if [ ${RC} -ne 0 ] diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jstatd/jstatdPort.sh openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jstatd/jstatdPort.sh --- openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jstatd/jstatdPort.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jstatd/jstatdPort.sh 2015-01-20 02:20:42.000000000 +0000 @@ -42,7 +42,11 @@ JSTAT="${TESTJAVA}/bin/jstat" HOSTNAME=`uname -n` -PORT=2099 +PORT=`freePort` +if [ "${PORT}" = "0" ] ; then + echo "Cannot get free port" + exit 1 +fi JSTATD_OUT="jstatd_$$.out" @@ -57,12 +61,11 @@ if [ $? -ne 0 ] then echo "Output of jps differs from expected output. Failed." + cleanup exit 1 fi -TARGET_PID=`${JPS} | grep "Jstatd" | cut -d" " -f1` - -${JSTAT} -gcutil ${TARGET_PID}@${HOSTNAME}:${PORT} 250 5 2>&1 | awk -f ${TESTSRC}/jstatGcutilOutput1.awk +${JSTAT} -gcutil ${JSTATD_PID}@${HOSTNAME}:${PORT} 250 5 2>&1 | awk -f ${TESTSRC}/jstatGcutilOutput1.awk RC=$? if [ ${RC} -ne 0 ] @@ -76,4 +79,6 @@ RC=1 fi +cleanup + exit ${RC} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jstatd/jstatdServerName.sh openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jstatd/jstatdServerName.sh --- openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jstatd/jstatdServerName.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jstatd/jstatdServerName.sh 2015-01-20 02:20:42.000000000 +0000 @@ -43,8 +43,12 @@ JSTAT="${TESTJAVA}/bin/jstat" HOSTNAME=`uname -n` -PORT_1=2098 -PORT_2=2099 +PORT_1=`freePort` +if [ "${PORT_1}" = "0" ] ; then + echo "ERROR: No free port" + exit 1 +fi +PORT_2=`expr ${PORT_1} '+' 1` SERVERNAME="SecondJstatdServer" JSTATD_1_OUT="jstatd_$$_1.out" @@ -68,6 +72,7 @@ if [ $? -ne 0 ] then echo "Output of jps differs from expected output. Failed." + cleanup exit 1 fi @@ -77,13 +82,12 @@ if [ $? -ne 0 ] then echo "Output of jps differs from expected output. Failed." + cleanup exit 1 fi -TARGET_PID=`${JPS} | grep "Jstatd" | cut -d" " -f1 | head -1` - -echo "running: ${JSTAT} -gcutil ${TARGET_PID}@${HOSTNAME}:${PORT_1} 250 5" -${JSTAT} -gcutil ${TARGET_PID}@${HOSTNAME}:${PORT_1} 250 5 2>&1 | awk -f ${TESTSRC}/jstatGcutilOutput1.awk +echo "running: ${JSTAT} -gcutil ${JSTATD_1_PID}@${HOSTNAME}:${PORT_1} 250 5" +${JSTAT} -gcutil ${JSTATD_1_PID}@${HOSTNAME}:${PORT_1} 250 5 2>&1 | awk -f ${TESTSRC}/jstatGcutilOutput1.awk RC=$? if [ ${RC} -ne 0 ] @@ -91,8 +95,8 @@ echo "jstat output differs from expected output" fi -echo "running: ${JSTAT} -gcutil ${TARGET_PID}@${HOSTNAME}:${PORT_2}/${SERVERNAME} 250 5" -${JSTAT} -gcutil ${TARGET_PID}@${HOSTNAME}:${PORT_2}/${SERVERNAME} 250 5 2>&1 | awk -f ${TESTSRC}/jstatGcutilOutput1.awk +echo "running: ${JSTAT} -gcutil ${JSTATD_1_PID}@${HOSTNAME}:${PORT_2}/${SERVERNAME} 250 5" +${JSTAT} -gcutil ${JSTATD_1_PID}@${HOSTNAME}:${PORT_2}/${SERVERNAME} 250 5 2>&1 | awk -f ${TESTSRC}/jstatGcutilOutput1.awk RC=$? if [ ${RC} -ne 0 ] @@ -112,4 +116,6 @@ RC=1 fi +cleanup + exit ${RC} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jstatd/jstatdUsage1.sh openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jstatd/jstatdUsage1.sh --- openjdk-6-6b33-1.13.5/jdk/test/sun/tools/jstatd/jstatdUsage1.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/tools/jstatd/jstatdUsage1.sh 2015-01-20 02:20:42.000000000 +0000 @@ -37,7 +37,7 @@ ${JSTATD} -? > ${JSTATD_1_OUT} 2>&1 -diff ${JSTATD_1_OUT} ${TESTSRC}/usage.out +diff -w ${JSTATD_1_OUT} ${TESTSRC}/usage.out if [ $? != 0 ] then echo "Output of jstatd -? differs from expected output. Failed." @@ -46,7 +46,7 @@ ${JSTATD} -help > ${JSTATD_2_OUT} 2>&1 -diff ${JSTATD_2_OUT} ${TESTSRC}/usage.out +diff -w ${JSTATD_2_OUT} ${TESTSRC}/usage.out if [ $? != 0 ] then echo "Output of jstatd -help differs from expected output. Failed." diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh openjdk-6-6b34-1.13.6/jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh --- openjdk-6-6b33-1.13.5/jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh 2015-01-20 02:20:42.000000000 +0000 @@ -32,7 +32,7 @@ if [ "${TESTJAVA}" = "" ]; then TESTJAVA=$1; shift; fi case `uname -s` in - Windows*) OS=Windows;; + Windows* | CYGWIN*) OS=Windows;; SunOS|Linux) OS=Unix;; esac @@ -45,12 +45,14 @@ # Strip carriage returns from output when comparing with n2a test output # on win32 systems - if [ OS = Windows ]; then - tr -d '\015' <$out >$out.1 + if [ ${OS} = Windows ]; then + sed -e 's@\\r@@g' $out >$out.1 + sed -e 's@\\r@@g' $expected >$out.expected else cp $out $out.1 + cp $expected $out.expected fi - if (set -x; diff -c $expected $out.1); then + if (set -x; diff -c $out.expected $out.1); then echo "$bug passed" else echo "$bug failed" diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/tools/native2ascii/NativeErrors.java openjdk-6-6b34-1.13.6/jdk/test/sun/tools/native2ascii/NativeErrors.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/tools/native2ascii/NativeErrors.java 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/tools/native2ascii/NativeErrors.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,12 +25,18 @@ * @test * @bug 4136352 * @summary Test Native2ASCII error messages - * + * @library /lib/testlibrary + * @build jdk.testlibrary.* NativeErrors + * @run main NativeErrors */ -import java.io.*; -import sun.tools.native2ascii.*; -import java.util.*; + +import java.io.File; +import java.util.ResourceBundle; +import java.util.MissingResourceException; +import jdk.testlibrary.OutputAnalyzer; +import jdk.testlibrary.JDKToolLauncher; +import jdk.testlibrary.ProcessTools; public class NativeErrors { @@ -45,30 +51,18 @@ } } - public static void main(String args[]) throws Exception { - String[] command; - Process p = null; - BufferedReader in = null; - - // Construct a command that runs the test in other vm - // Exec another vm to run test in - // Read the result to determine if test failed - - command = getComString("-encoding"); - p = Runtime.getRuntime().exec(command); - in = new BufferedReader(new InputStreamReader(p.getInputStream())); - checkResult(in, "err.bad.arg"); + public static void main(String args[]) throws Throwable { + // Execute command in another vm. Verify stdout for expected err msg. + + // Test with no input file given. + checkResult(executeCmd("-encoding"), "err.bad.arg"); File f0 = new File(System.getProperty("test.src", "."), "test123"); String path0 = f0.getPath(); if ( f0.exists() ) { throw new Error("Input file should not exist: " + path0); } - - command = getComString(path0); - p = Runtime.getRuntime().exec(command); - in = new BufferedReader(new InputStreamReader(p.getInputStream())); - checkResult(in, "err.cannot.read"); + checkResult(executeCmd(path0), "err.cannot.read"); File f1 = new File(System.getProperty("test.src", "."), "test1"); File f2 = File.createTempFile("test2", ".tmp"); @@ -81,71 +75,38 @@ throw new Error("Output file cannot be made read only: " + path2); } f2.deleteOnExit(); - - command = getComString(path1, path2); - p = Runtime.getRuntime().exec(command); - in = new BufferedReader(new InputStreamReader(p.getInputStream())); - checkResult(in, "err.cannot.write"); + checkResult(executeCmd(path1, path2), "err.cannot.write"); } - - private static void checkResult(BufferedReader in, String errorExpected) - throws Exception { - String errorReceived; - errorReceived = in.readLine(); - assert errorReceived != null : "First readline cannot be null"; - errorExpected = rsrc.getString(errorExpected); - assert errorExpected != null : "Expected message cannot be null"; - StringBuffer error = new StringBuffer(errorExpected); - int start = errorExpected.indexOf("{0}"); - if (start >= 0) { - error.delete(start, start+3); - errorExpected = error.toString(); - } - //System.out.println("received: " + errorReceived); - //System.out.println("expected: " + errorExpected); - if (!errorReceived.endsWith(errorExpected)) - throw new RuntimeException("Native2ascii bad arg error broken."); - } - - private static String[] getComString(String arg2) { - String[] coms = new String[2]; - coms[0] = getPathString(); - coms[1] = arg2; - return coms; + private static String executeCmd(String... toolArgs) throws Throwable { + JDKToolLauncher cmd = JDKToolLauncher.createUsingTestJDK("native2ascii"); + for (String s : toolArgs) { + cmd.addToolArg(s); + } + OutputAnalyzer output = ProcessTools.executeProcess(cmd.getCommand()); + if (output == null || output.getStdout() == null) { + throw new Exception("Output was null. Process did not finish correctly."); + } + if (output.getExitValue() == 0) { + throw new Exception("Process exit code was 0, but error was expected."); + } + return output.getStdout(); } - private static String[] getComString(String arg2, String arg3) { - String[] coms = new String[3]; - coms[0] = getPathString(); - coms[1] = arg2; - coms[2] = arg3; - return coms; - } + private static void checkResult( + String errorReceived, String errorKey) throws Exception { + String errorExpected = rsrc.getString(errorKey); + if (errorExpected == null) { + throw new Exception("No error message for key: " + errorKey); + } + // Remove template tag from error message. + errorExpected = errorExpected.replaceAll("\\{0\\}", ""); - /* - * Search for path to native2ascii - */ - private static String getPathString() { - String path = System.getProperty("java.home") + File.separator + - "bin" + File.separator + "native2ascii"; - if (File.separatorChar == '\\') { - path = path + ".exe"; - } - File f = new File(path); - if (!f.exists()) { - System.out.println("Cannot find native2ascii at "+path); - path = System.getProperty("java.home") + File.separator + ".." + - File.separator + "bin" + File.separator + "native2ascii"; - if (File.separatorChar == '\\') { - path = path + ".exe"; - } - f = new File(path); - if (!f.exists()) - throw new RuntimeException("Cannot find native2ascii at "+path); - System.out.println("Using native2ascii at "+path); + System.out.println("received: " + errorReceived); + System.out.println("expected: " + errorExpected); + if (errorReceived.indexOf(errorExpected) < 0) { + throw new RuntimeException("Native2ascii bad arg error broken."); } - return path; } } diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/Bug4640234.java openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/Bug4640234.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/Bug4640234.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/Bug4640234.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,296 @@ +/* + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 4640234 4946057 4938151 4873691 5023181 + * @summary Verifies the translation of time zone names, this test will catch presence + * of country name for english and selected locales for all ISO country + * codes. + * The test program also displays which timezone, country and language names + * are not translated + */ + + +/* + * 4946057 Localization for ISO country & language data. + * 4938151 Time zones not translated + * 4873691 Changes in TimeZone mapping + */ + +import java.text.MessageFormat; +import java.text.SimpleDateFormat; + +import java.util.Date; +import java.util.Locale; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; +import java.util.ResourceBundle; +import java.util.TimeZone; + + +public class Bug4640234 { + static SimpleDateFormat sdfEn = new SimpleDateFormat("zzzz", Locale.US); + static SimpleDateFormat sdfEnShort = new SimpleDateFormat("z", Locale.US); + static Locale locEn = Locale.ENGLISH; + + static SimpleDateFormat sdfLoc; + static SimpleDateFormat sdfLocShort; + static Date date = new Date(); + + // Define supported locales + static Locale[] locales2Test = new Locale[] { + new Locale("de"), + new Locale("es"), + new Locale("fr"), + new Locale("it"), + new Locale("ja"), + new Locale("ko"), + new Locale("sv"), + new Locale("zh", "CN"), + new Locale("zh", "TW") + }; + + public static void main(String[] args) throws Exception { + Locale.setDefault(Locale.ENGLISH); + + StringBuffer errors = new StringBuffer(""); + StringBuffer warnings = new StringBuffer(""); + + String[] timezones = TimeZone.getAvailableIDs(); + String[] countries = locEn.getISOCountries(); + String[] languages = locEn.getISOLanguages(); + + ResourceBundle resEn = ResourceBundle.getBundle("sun.util.resources.LocaleNames", locEn); + Map countryMapEn = getList(resEn, true); + Map languageMapEn = getList(resEn, false); + + ResourceBundle resLoc; + Map countryMap; + Map languageMap; + + for (Locale locale : locales2Test) { + resLoc = ResourceBundle.getBundle("sun.util.resources.LocaleNames", locale); + + sdfLoc = new SimpleDateFormat("zzzz", locale); + sdfLocShort = new SimpleDateFormat("z", locale); + + for (String timezone : timezones) { + if (isTZIgnored(timezone)) { + continue; + } + warnings.append(testTZ(timezone, locale)); + } + + countryMap = getList(resLoc, true); + + for (String country : countries) { + String[] result = testEntry(country, + countryMapEn, + countryMap, + locale, + "ERROR: {0} country name for country code: {1} not found!\n", + "WARNING: {0} country name for country code: {1} not localized!\n" + ); + if (warnings.indexOf(result[0]) == -1) { + warnings.append(result[0]); + } + if (errors.indexOf(result[1]) == -1) { + errors.append(result[1]); + } + } + + languageMap = getList(resLoc, false); + for (String language : languages) { + String[] result = testEntry(language, + languageMapEn, + languageMap, + locale, + "ERROR: {0} language name for language code: {1} not found!\n", + "WARNING: {0} language name for language code: {1} not localized!\n"); + if (warnings.indexOf(result[0]) == -1) { + warnings.append(result[0]); + } + if (errors.indexOf(result[1]) == -1) { + errors.append(result[1]); + } + } + } + + StringBuffer message = new StringBuffer(""); + if (!"".equals(errors.toString())) { + message.append("Test failed! "); + message.append("ERROR: some keys are missing! "); + } + + if ("".equals(message.toString())) { + System.out.println("\nTest passed"); + System.out.println(warnings.toString()); + } else { + System.out.println("\nTest failed!"); + System.out.println(errors.toString()); + System.out.println(warnings.toString()); + throw new Exception("\n" + message); + } + } + + /** + * Compares the english timezone name and timezone name in specified locale + * @param timeZoneName - name of the timezone to compare + * @param locale - locale to test against english + * @return empty string when passed, descriptive error message in other cases + */ + private static String testTZ(String timeZoneName, Locale locale) { + StringBuffer timeZoneResult = new StringBuffer(""); + TimeZone tz = TimeZone.getTimeZone(timeZoneName); + sdfEn.setTimeZone(tz); + sdfEnShort.setTimeZone(tz); + sdfLoc.setTimeZone(tz); + sdfLocShort.setTimeZone(tz); + + String en, enShort, loc, locShort; + en = sdfEn.format(date); + enShort = sdfEnShort.format(date); + loc = sdfLoc.format(date); + locShort = sdfLocShort.format(date); + + String displayLanguage = locale.getDisplayLanguage(); + String displayCountry = locale.getDisplayCountry(); + + if (loc.equals(en)) { + timeZoneResult.append("["); + timeZoneResult.append(displayLanguage); + if (!"".equals(displayCountry)) { + timeZoneResult.append(" "); + timeZoneResult.append(displayCountry); + } + timeZoneResult.append("] timezone \""); + timeZoneResult.append(timeZoneName); + timeZoneResult.append("\" long name \"" + en); + timeZoneResult.append("\" not localized!\n"); + } + + if (!locShort.equals(enShort)) { + timeZoneResult.append("["); + timeZoneResult.append(displayLanguage); + if (!"".equals(displayCountry)) { + timeZoneResult.append(" "); + timeZoneResult.append(displayCountry); + } + timeZoneResult.append("] timezone \""); + timeZoneResult.append(timeZoneName); + timeZoneResult.append("\" short name \"" + enShort); + timeZoneResult.append("\" is localized \""); + timeZoneResult.append(locShort); + timeZoneResult.append("\"!\n"); + } + return timeZoneResult.toString(); + } + + /** + * Verifies whether the name for ISOCode is localized. + * @param ISOCode - ISO country/language code for country/language name to test + * @param entriesEn - array of english country/language names + * @param entriesLoc - array of localized country/language names for specified locale + * @param locale - locale to test against english + * @param notFoundMessage - message in form ready for MessageFormat, {0} will be human readable + * language name, {1} will be ISOCode. + * @param notLocalizedMessage - message in for ready for MessageFormat, same formatting like + * for notFountMessage + * @return array of two empty strings when passed, descriptive error message in + * other cases, [0] - warnings for not localized, [1] - errors for missing keys. + */ + private static String[] testEntry(String ISOCode, + Map entriesEn, + Map entriesLoc, + Locale locale, + String notFoundMessage, + String notLocalizedMessage) { + String nameEn = null; + String nameLoc = null; + + for (String key: entriesEn.keySet()) { + if (ISOCode.equalsIgnoreCase(key)) { + nameEn = entriesEn.get(key); + break; + } + } + + for (String key: entriesLoc.keySet()) { + if (ISOCode.equalsIgnoreCase(key)) { + nameLoc = entriesLoc.get(key); + break; + } + } + + if (nameEn == null) { + // We should not get here but test is a MUST have + return new String[] {"", MessageFormat.format(notFoundMessage, + new String[] {"English", ISOCode})}; + } + + if (nameLoc == null) { + return new String[] {"", MessageFormat.format(notFoundMessage, + new String[] {locale.getDisplayName(), ISOCode})}; + } + + if (nameEn.equals(nameLoc)) { + return new String[] {MessageFormat.format(notLocalizedMessage, + new String[] {locale.getDisplayName(), ISOCode}), ""}; + } + + return new String[] {"", ""}; + } + + private static boolean isTZIgnored(String TZName) { + if (TZName.startsWith("Etc/GMT") || + TZName.indexOf("Riyadh8") != -1 || + TZName.equals("GMT0") || + TZName.equals("MET") + ) { + return true; + } + return false; + } + + private static Map getList(ResourceBundle rs, Boolean getCountryList) { + char beginChar = 'a'; + char endChar = 'z'; + if (getCountryList) { + beginChar = 'A'; + endChar = 'Z'; + } + + Map hm = new HashMap(); + Enumeration keys = rs.getKeys(); + while (keys.hasMoreElements()) { + String s = keys.nextElement(); + if (s.length() == 2 && + s.charAt(0) >= beginChar && s.charAt(0) <= endChar) { + hm.put(s, rs.getString(s)); + } + } + return hm; + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/Bug4848242.java openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/Bug4848242.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/Bug4848242.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/Bug4848242.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + *@test + *@bug 4848242 + *@summary Make sure that MET time zone is not misinterpreted in euro locales. + * Display the MET and MEST TZ human-readable name in all euro locales. + */ + +import java.util.Locale; +import java.util.TimeZone; +import java.text.DateFormatSymbols; + +public class Bug4848242 { + + public static void main(String[] args) { + getTzInfo("de", "DE"); + getTzInfo("es", "ES"); + getTzInfo("fr", "FR"); + getTzInfo("it", "IT"); + getTzInfo("sv", "SV"); + } + + static void getTzInfo(String langName, String locName) + { + Locale tzLocale = new Locale(langName, locName); + TimeZone euroTz = TimeZone.getTimeZone("MET"); + + System.out.println("Locale is " + langName + "_" + locName); + + if ( euroTz.getID().equalsIgnoreCase("GMT") ) { + // if we don't have a timezone and default back to GMT + throw new RuntimeException("Error: no time zone found"); + } + + // get the timezone info + System.out.println(euroTz.getDisplayName(false, TimeZone.SHORT, tzLocale)); + if(!euroTz.getDisplayName(false, TimeZone.SHORT, tzLocale).equals("MET")) + throw new RuntimeException("Timezone name is incorrect (should be MET)\n"); + System.out.println(euroTz.getDisplayName(false, TimeZone.LONG, tzLocale)); + + System.out.println(euroTz.getDisplayName(true, TimeZone.SHORT, tzLocale)); + if(!euroTz.getDisplayName(true, TimeZone.SHORT, tzLocale).equals("MEST")) + throw new RuntimeException("Summer timezone name is incorrect (should be MEST)\n"); + System.out.println(euroTz.getDisplayName(true, TimeZone.LONG, tzLocale) + "\n"); + + } + +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/Bug4858517.java openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/Bug4858517.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/Bug4858517.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/Bug4858517.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + *@test + *@bug 4858517 6300580 + *@summary Test case for tzdata2003a support for 9 locales + */ + +import java.util.Locale; +import java.util.TimeZone; + +public class Bug4858517 { + + static Locale[] locales2Test = new Locale[] { + new Locale("en"), + new Locale("de"), + new Locale("es"), + new Locale("fr"), + new Locale("it"), + new Locale("ja"), + new Locale("ko"), + new Locale("sv"), + new Locale("zh","CN"), + new Locale("zh","TW") + }; + + public static void main(String[] args) { + + Locale tzLocale; + + for (int i = 0; i < locales2Test.length; i++){ + + tzLocale = locales2Test[i]; + TimeZone Rothera = TimeZone.getTimeZone("Antarctica/Rothera"); + + if (!Rothera.getDisplayName(false, TimeZone.SHORT, tzLocale).equals ("ROTT")) + throw new RuntimeException("\n" + tzLocale + ": short name, non-daylight time for Rothera should be \"ROTT\""); + + if (!Rothera.getDisplayName(true, TimeZone.SHORT, tzLocale).equals ("ROTST")) + throw new RuntimeException("\n" + tzLocale + ": short name, daylight time for Rothera should be \"ROTST\""); + + TimeZone IRT = TimeZone.getTimeZone("Iran"); + + if (!IRT.getDisplayName(false, TimeZone.SHORT, tzLocale).equals ("IRST")) + throw new RuntimeException("\n" + tzLocale + ": short name, non-daylight time for IRT should be \"IRST\""); + + if (!IRT.getDisplayName(true, TimeZone.SHORT, tzLocale).equals ("IRDT")) + throw new RuntimeException("\n" + tzLocale + ": short name, daylight time for IRT should be \"IRDT\""); + } + + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/Bug4938846.java openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/Bug4938846.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/Bug4938846.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/Bug4938846.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + *@test + *@bug 4938846 + *@summary Test case for en_IE TimeZone info + */ + +import java.util.Locale; +import java.util.TimeZone; + +public class Bug4938846 { + + public static void main(String[] args) { + String zoneInfo = new String(); + Locale tzLocale = new Locale("en", "IE"); + + TimeZone ieTz = TimeZone.getTimeZone("Europe/London"); + + if (!ieTz.getDisplayName(true, TimeZone.LONG, tzLocale).equals ("Irish Summer Time")) + throw new RuntimeException("\nString for IST, en_IE locale should be \"Irish Summer Time\""); + + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/Bug6271396.java openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/Bug6271396.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/Bug6271396.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/Bug6271396.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + *@test + *@bug 6271396 + *@summary Test case for verifying typo of timezone display name Australia/Lord_Howe + */ + +import java.util.Locale; +import java.util.TimeZone; + +public class Bug6271396 { + + public static void main(String[] args) { + + TimeZone Lord_Howe = TimeZone.getTimeZone("Australia/Lord_Howe"); + Locale tzLocale = new Locale("fr"); + + if (!Lord_Howe.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("Heure standard de Lord Howe")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "Australia/Lord_Howe should be " + + "\"Heure standard de Lord Howe\""); + if (!Lord_Howe.getDisplayName(true, TimeZone.LONG, tzLocale).equals + ("Heure d'\u00e9t\u00e9 de Lord Howe")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "daylight saving name for " + + "Australia/Lord_Howe should be " + + "\"Heure d'\u00e9t\u00e9 de Lord Howe\""); + + tzLocale = new Locale("zh", "TW"); + if (!Lord_Howe.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("\u8c6a\u52f3\u7235\u5cf6\u6a19\u6e96\u6642\u9593")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "Australia/Lord_Howe should be " + + "\"\u8c6a\u52f3\u7235\u5cf6" + + "\u6a19\u6e96\u6642\u9593\""); + if (!Lord_Howe.getDisplayName(true, TimeZone.LONG, tzLocale).equals + ("\u8c6a\u52f3\u7235\u5cf6\u590f\u4ee4\u6642\u9593")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "daylight saving name for " + + "Australia/Lord_Howe should be " + + "\"\u8c6a\u52f3\u7235\u5cf6" + + "\u590f\u4ee4\u6642\u9593\""); + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/Bug6317929.java openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/Bug6317929.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/Bug6317929.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/Bug6317929.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,206 @@ +/* + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + *@test + *@bug 6317929 6409419 + *@summary Test case for tzdata2005m support for 9 locales + */ + +import java.util.Locale; +import java.util.TimeZone; + +public class Bug6317929 { + static Locale[] locales2Test = new Locale[] { + new Locale("en"), + new Locale("de"), + new Locale("es"), + new Locale("fr"), + new Locale("it"), + new Locale("ja"), + new Locale("ko"), + new Locale("sv"), + new Locale("zh","CN"), + new Locale("zh","TW") + }; + + public static void main(String[] args) { + Locale tzLocale; + + TimeZone Coral_Harbour = TimeZone.getTimeZone("America/Coral_Harbour"); + tzLocale = locales2Test[0]; + if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("Eastern Standard Time")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "America/Coral_Harbour should be " + + "\"Eastern Standard Time\""); + tzLocale = locales2Test[1]; + if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("\u00d6stliche Normalzeit")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "America/Coral_Harbour should be " + + "\"\u00d6stliche Normalzeit\""); + tzLocale = locales2Test[2]; + if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("Hora est\u00e1ndar Oriental")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "America/Coral_Harbour should be " + + "\"Hora est\u00e1ndar Oriental\""); + tzLocale = locales2Test[3]; + if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("Heure normale de l'Est")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "America/Coral_Harbour should be " + + "\"Heure normale de l'Est\""); + tzLocale = locales2Test[4]; + if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("Ora solare USA orientale")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "America/Coral_Harbour should be " + + "\"Ora solare USA orientale\""); + tzLocale = locales2Test[5]; + if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("\u6771\u90e8\u6a19\u6e96\u6642")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "America/Coral_Harbour should be " + + "\"\u6771\u90e8\u6a19\u6e96\u6642\""); + tzLocale = locales2Test[6]; + if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("\ub3d9\ubd80 \ud45c\uc900\uc2dc")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "America/Coral_Harbour should be " + + "\"\ub3d9\ubd80 \ud45c\uc900\uc2dc\""); + tzLocale = locales2Test[7]; + if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("Eastern, normaltid")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "America/Coral_Harbour should be " + + "\"Eastern, normaltid\""); + tzLocale = locales2Test[8]; + if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "America/Coral_Harbour should be " + + "\"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\""); + tzLocale = locales2Test[9]; + if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("\u6771\u65b9\u6a19\u6e96\u6642\u9593")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "America/Coral_Harbour should be " + + "\"\u6771\u65b9\u6a19\u6e96\u6642\u9593\""); + + TimeZone Currie = TimeZone.getTimeZone("Australia/Currie"); + tzLocale = locales2Test[0]; + if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("Australian Eastern Standard Time (New South Wales)")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "Australia/Currie should be " + + "\"Australian Eastern Standard Time " + + "(New South Wales)\""); + tzLocale = locales2Test[1]; + if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("\u00D6stliche Normalzeit (New South Wales)")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "Australia/Currie should be " + + "\"\u00D6stliche Normalzeit " + + "(New South Wales)\""); + tzLocale = locales2Test[2]; + if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("Hora est\u00e1ndar Oriental (Nueva Gales del Sur)")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "Australia/Currie should be " + + "\"Hora est\u00e1ndar Oriental " + + "(Nueva Gales del Sur)\""); + tzLocale = locales2Test[3]; + if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("Heure normale de l'Est (Nouvelle-Galles du Sud)")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "Australia/Currie should be " + + "\"Heure normale de l'Est " + + "(Nouvelle-Galles du Sud)\""); + tzLocale = locales2Test[4]; + if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("Ora standard dell'Australia orientale (Nuovo Galles del Sud)")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "Australia/Currie should be " + + "\"Ora standard dell'Australia orientale " + + "(Nuovo Galles del Sud)\""); + tzLocale = locales2Test[5]; + if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("\u6771\u90E8\u6A19\u6E96\u6642" + + "(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "Australia/Currie should be " + + "\"\u6771\u90E8\u6A19\u6E96\u6642" + + "(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9" + + "\u30A6\u30A7\u30FC\u30EB\u30BA)\""); + tzLocale = locales2Test[6]; + if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "Australia/Currie should be " + + "\"\uB3D9\uBD80 \uD45C\uC900\uC2DC" + + "(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)\""); + tzLocale = locales2Test[7]; + if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("\u00D6stlig standardtid (New South Wales)")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "Australia/Currie should be " + + "\"\u00D6stlig standardtid " + + "(New South Wales)\""); + tzLocale = locales2Test[8]; + if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "Australia/Currie should be " + + "\"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 " + + "(\u65B0\u5357\u5A01\u5C14\u65AF)\""); + tzLocale = locales2Test[9]; + if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "Australia/Currie should be " + + "\"\u6771\u90E8\u6A19\u6E96\u6642\u9593 " + + "(\u65B0\u5357\u5A01\u723E\u65AF)\""); + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/Bug6377794.java openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/Bug6377794.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/Bug6377794.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/Bug6377794.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + *@test + *@bug 6377794 + *@summary Test case for tzdata2005r support for 9 locales + */ + +import java.util.Locale; +import java.util.TimeZone; + +public class Bug6377794 { + static Locale[] locales2Test = new Locale[] { + new Locale("en"), + new Locale("de"), + new Locale("es"), + new Locale("fr"), + new Locale("it"), + new Locale("ja"), + new Locale("ko"), + new Locale("sv"), + new Locale("zh","CN"), + new Locale("zh","TW") + }; + + public static void main(String[] args) { + TimeZone SystemVYST9 = TimeZone.getTimeZone("SystemV/YST9"); + Locale tzLocale; + for (int i = 0; i < locales2Test.length; i++) { + tzLocale = locales2Test[i]; + if (!SystemVYST9.getDisplayName(false, TimeZone.SHORT, tzLocale).equals + ("AKST")) + throw new RuntimeException("\n" + tzLocale + ": SHORT, " + + "non-daylight saving name for " + + "SystemV/YST9 should be \"AKST\""); + } + +/* + * For "SystemV/PST8", testing TimeZone.SHORT would return the same value + * before and after the fix. Therefore, the regression test was changed to test + * TimeZone.LONG instead. + */ + + TimeZone SystemVPST8 = TimeZone.getTimeZone("SystemV/PST8"); + tzLocale = locales2Test[0]; + if (!SystemVPST8.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("Pacific Standard Time")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "SystemV/PST8 should be " + + "\"Pacific Standard Time\""); + tzLocale = locales2Test[1]; + if (!SystemVPST8.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("Pazifische Normalzeit")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "SystemV/PST8 should be " + + "\"Pazifische Normalzeit\""); + tzLocale = locales2Test[2]; + if (!SystemVPST8.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("Hora est\u00e1ndar del Pac\u00edfico")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "SystemV/PST8 should be " + + "\"Hora est\u00e1ndar del Pac\u00edfico\""); + tzLocale = locales2Test[3]; + if (!SystemVPST8.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("Heure normale du Pacifique")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "SystemV/PST8 should be " + + "\"Heure normale du Pacifique\""); + tzLocale = locales2Test[4]; + if (!SystemVPST8.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("Ora solare della costa occidentale USA")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "SystemV/PST8 should be " + + "\"Ora solare della costa occidentale USA\""); + tzLocale = locales2Test[5]; + if (!SystemVPST8.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("\u592a\u5e73\u6d0b\u6a19\u6e96\u6642")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "SystemV/PST8 should be " + + "\"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642\""); + tzLocale = locales2Test[6]; + if (!SystemVPST8.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "SystemV/PST8 should be " + + "\"\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc\""); + tzLocale = locales2Test[7]; + if (!SystemVPST8.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("Stilla havet, normaltid")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "SystemV/PST8 should be " + + "\"Stilla havet, normaltid\""); + tzLocale = locales2Test[8]; + if (!SystemVPST8.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "SystemV/PST8 should be " + + "\"\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4\""); + tzLocale = locales2Test[9]; + if (!SystemVPST8.getDisplayName(false, TimeZone.LONG, tzLocale).equals + ("\u592a\u5e73\u6d0b\u6a19\u6e96\u6642\u9593")) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + "SystemV/PST8 should be " + + "\"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642\u9593\""); + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/Bug6442006.java openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/Bug6442006.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/Bug6442006.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/Bug6442006.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + *@test + *@bug 6442006 + *@summary Test case for verifying timezone display name for Asia/Taipei + */ + +import java.util.Locale; +import java.util.TimeZone; + +public class Bug6442006 { + + public static void main(String[] args) { + + TimeZone tz = TimeZone.getTimeZone("Asia/Taipei"); + Locale tzLocale = new Locale("ja"); + String jaStdName = "\u4e2d\u56fd\u6a19\u6e96\u6642"; + String jaDstName = "\u4e2d\u56fd\u590f\u6642\u9593"; + + if (!tz.getDisplayName(false, TimeZone.LONG, tzLocale).equals + (jaStdName)) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "non-daylight saving name for " + + tz.getID() + + " should be " + + jaStdName); + if (!tz.getDisplayName(true, TimeZone.LONG, tzLocale).equals + (jaDstName)) + throw new RuntimeException("\n" + tzLocale + ": LONG, " + + "daylight saving name for " + + tz.getID() + + " should be " + + jaDstName); + } +} diff -Nru openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/IntlTest.java openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/IntlTest.java --- openjdk-6-6b33-1.13.5/jdk/test/sun/util/resources/TimeZone/IntlTest.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/sun/util/resources/TimeZone/IntlTest.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.lang.reflect.*; +import java.util.Hashtable; +import java.util.Enumeration; +import java.util.Vector; +import java.io.*; +import java.text.*; + +/** + * IntlTest is a base class for tests that can be run conveniently from + * the command line as well as under the Java test harness. + *

    + * Sub-classes implement a set of methods named Test. Each + * of these methods performs some test. Test methods should indicate + * errors by calling either err or errln. This will increment the + * errorCount field and may optionally print a message to the log. + * Debugging information may also be added to the log via the log + * and logln methods. These methods will add their arguments to the + * log only if the test is being run in verbose mode. + */ +public class IntlTest { + + //------------------------------------------------------------------------ + // Everything below here is boilerplate code that makes it possible + // to add a new test by simply adding a function to an existing class + //------------------------------------------------------------------------ + + protected IntlTest() { + // Create a hashtable containing all the test methods. + testMethods = new Hashtable(); + Method[] methods = getClass().getDeclaredMethods(); + for( int i=0; i x.out + ${JAVAW} DefaultLocaleTest `cat x.out` + if [ $? -ne 0 ] + then + echo "Test fails" exit 1 fi echo "Test passes" diff -Nru openjdk-6-6b33-1.13.5/jdk/test/tools/launcher/UnicodeTest.sh openjdk-6-6b34-1.13.6/jdk/test/tools/launcher/UnicodeTest.sh --- openjdk-6-6b33-1.13.5/jdk/test/tools/launcher/UnicodeTest.sh 2014-10-08 15:35:09.000000000 +0000 +++ openjdk-6-6b34-1.13.6/jdk/test/tools/launcher/UnicodeTest.sh 2015-01-20 02:20:42.000000000 +0000 @@ -54,7 +54,7 @@ echo "creating test source files" "$JAVAC" -d . "${TESTSRC}"/UnicodeTest.java -CLASS_NAME=`"$JAVA" UnicodeTest` +CLASS_NAME=`"$JAVA" UnicodeTest | sed -e 's@\\r@@g' ` if [ "$CLASS_NAME" = "" ] then diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/AccessFlags.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/AccessFlags.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/AccessFlags.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/AccessFlags.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/AnnotationDefault_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/AnnotationDefault_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/AnnotationDefault_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/AnnotationDefault_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Annotation.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Annotation.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Annotation.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Annotation.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/AttributeException.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/AttributeException.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/AttributeException.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/AttributeException.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Attributes.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Attributes.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Attributes.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Attributes.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/CharacterRangeTable_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/CharacterRangeTable_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/CharacterRangeTable_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/CharacterRangeTable_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ClassFile.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ClassFile.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ClassFile.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ClassFile.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ClassReader.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ClassReader.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ClassReader.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ClassReader.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ClassTranslator.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ClassTranslator.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ClassTranslator.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ClassTranslator.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ClassWriter.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ClassWriter.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ClassWriter.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ClassWriter.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Code_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Code_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Code_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Code_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/CompilationID_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/CompilationID_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/CompilationID_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/CompilationID_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ConstantPoolException.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ConstantPoolException.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ConstantPoolException.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ConstantPoolException.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ConstantPool.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ConstantPool.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ConstantPool.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ConstantPool.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ConstantValue_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ConstantValue_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ConstantValue_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ConstantValue_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/DefaultAttribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/DefaultAttribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/DefaultAttribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/DefaultAttribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Deprecated_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Deprecated_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Deprecated_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Deprecated_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/DescriptorException.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/DescriptorException.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/DescriptorException.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/DescriptorException.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Descriptor.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Descriptor.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Descriptor.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Descriptor.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/EnclosingMethod_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/EnclosingMethod_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/EnclosingMethod_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/EnclosingMethod_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,13 +1,12 @@ - /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -19,11 +18,12 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ + package com.sun.tools.classfile; import java.io.IOException; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Exceptions_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Exceptions_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Exceptions_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Exceptions_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Field.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Field.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Field.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Field.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/InnerClasses_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/InnerClasses_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/InnerClasses_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/InnerClasses_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Instruction.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Instruction.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Instruction.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Instruction.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/LineNumberTable_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/LineNumberTable_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/LineNumberTable_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/LineNumberTable_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/LocalVariableTable_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/LocalVariableTable_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/LocalVariableTable_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/LocalVariableTable_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/LocalVariableTypeTable_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/LocalVariableTypeTable_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/LocalVariableTypeTable_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/LocalVariableTypeTable_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Method.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Method.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Method.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Method.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Module_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Module_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Module_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Module_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ModuleExportTable_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ModuleExportTable_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ModuleExportTable_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ModuleExportTable_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ModuleMemberTable_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ModuleMemberTable_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/ModuleMemberTable_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/ModuleMemberTable_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Opcode.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Opcode.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Opcode.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Opcode.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/RuntimeAnnotations_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/RuntimeAnnotations_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/RuntimeAnnotations_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/RuntimeAnnotations_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/RuntimeInvisibleAnnotations_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/RuntimeInvisibleAnnotations_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/RuntimeInvisibleAnnotations_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/RuntimeInvisibleAnnotations_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/RuntimeInvisibleParameterAnnotations_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/RuntimeInvisibleParameterAnnotations_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/RuntimeInvisibleParameterAnnotations_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/RuntimeInvisibleParameterAnnotations_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/RuntimeParameterAnnotations_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/RuntimeParameterAnnotations_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/RuntimeParameterAnnotations_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/RuntimeParameterAnnotations_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/RuntimeVisibleAnnotations_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/RuntimeVisibleAnnotations_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/RuntimeVisibleAnnotations_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/RuntimeVisibleAnnotations_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/RuntimeVisibleParameterAnnotations_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/RuntimeVisibleParameterAnnotations_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/RuntimeVisibleParameterAnnotations_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/RuntimeVisibleParameterAnnotations_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Signature_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Signature_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Signature_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Signature_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Signature.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Signature.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Signature.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Signature.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/SourceDebugExtension_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/SourceDebugExtension_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/SourceDebugExtension_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/SourceDebugExtension_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/SourceFile_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/SourceFile_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/SourceFile_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/SourceFile_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/SourceID_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/SourceID_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/SourceID_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/SourceID_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/StackMap_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/StackMap_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/StackMap_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/StackMap_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/StackMapTable_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/StackMapTable_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/StackMapTable_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/StackMapTable_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Synthetic_attribute.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Synthetic_attribute.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Synthetic_attribute.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Synthetic_attribute.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Type.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Type.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/classfile/Type.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/classfile/Type.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.classfile; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java 2015-01-20 02:17:51.000000000 +0000 @@ -262,7 +262,7 @@ UndetVar uv = (UndetVar) l.head; TypeVar tv = (TypeVar)uv.qtype; ListBuffer hibounds = new ListBuffer(); - for (Type t : that.getConstraints(tv, ConstraintKind.EXTENDS).prependList(types.getBounds(tv))) { + for (Type t : that.getConstraints(tv, ConstraintKind.EXTENDS)) { if (!t.containsSome(that.tvars) && t.tag != BOT) { hibounds.append(t); } @@ -286,7 +286,6 @@ // check bounds List targs = Type.map(undetvars, getInstFun); targs = types.subst(targs, that.tvars, targs); - checkWithinBounds(that.tvars, targs, warn); return chk.checkType(warn.pos(), that.inst(targs, types), to); } @@ -402,7 +401,7 @@ UndetVar uv = (UndetVar)t; if (uv.qtype == tv) { switch (ck) { - case EXTENDS: return uv.hibounds; + case EXTENDS: return uv.hibounds.appendList(types.subst(types.getBounds(tv), all_tvars, inferredTypes)); case SUPER: return uv.lobounds; case EQUAL: return uv.inst != null ? List.of(uv.inst) : List.nil(); } diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/AnnotationWriter.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/AnnotationWriter.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/AnnotationWriter.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/AnnotationWriter.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/AttributeWriter.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/AttributeWriter.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/AttributeWriter.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/AttributeWriter.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/BasicWriter.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/BasicWriter.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/BasicWriter.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/BasicWriter.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/ClassWriter.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/ClassWriter.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/ClassWriter.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/ClassWriter.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/CodeWriter.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/CodeWriter.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/CodeWriter.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/CodeWriter.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/ConstantWriter.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/ConstantWriter.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/ConstantWriter.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/ConstantWriter.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/Context.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/Context.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/Context.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/Context.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/DisassemblerTool.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/DisassemblerTool.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/DisassemblerTool.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/DisassemblerTool.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; //javax.tools; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/InstructionDetailWriter.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/InstructionDetailWriter.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/InstructionDetailWriter.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/InstructionDetailWriter.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/InternalError.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/InternalError.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/InternalError.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/InternalError.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/JavapFileManager.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/JavapFileManager.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/JavapFileManager.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/JavapFileManager.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/JavapTask.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/JavapTask.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/JavapTask.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/JavapTask.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -16,11 +16,11 @@ * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-15301 USA. + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/LocalVariableTableWriter.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/LocalVariableTableWriter.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/LocalVariableTableWriter.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/LocalVariableTableWriter.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/LocalVariableTypeTableWriter.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/LocalVariableTypeTableWriter.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/LocalVariableTypeTableWriter.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/LocalVariableTypeTableWriter.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/Main.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/Main.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/Main.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/Main.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/Messages.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/Messages.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/Messages.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/Messages.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/Options.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/Options.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/Options.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/Options.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/resources/version.properties-template openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/resources/version.properties-template --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/resources/version.properties-template 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/resources/version.properties-template 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ # -# Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved. +# Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Sun designates this +# published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided -# by Sun in the LICENSE file that accompanied this code. +# by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # -# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -# CA 95054 USA or visit www.sun.com if you need additional information or -# have any questions. +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. # jdk=$(JDK_VERSION) diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/SourceWriter.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/SourceWriter.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/SourceWriter.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/SourceWriter.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/StackMapWriter.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/StackMapWriter.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/StackMapWriter.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/StackMapWriter.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/TryBlockWriter.java openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/TryBlockWriter.java --- openjdk-6-6b33-1.13.5/langtools/src/share/classes/com/sun/tools/javap/TryBlockWriter.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/src/share/classes/com/sun/tools/javap/TryBlockWriter.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package com.sun.tools.javap; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C1.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C1.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C1.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C1.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package pkg1; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C2.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C2.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C2.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C2.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package pkg1; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C3.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C3.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C3.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C3.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package pkg1; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C4.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C4.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C4.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C4.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package pkg1; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C5.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C5.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C5.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/pkg1/C5.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package pkg1; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlStrongTag/pkg1/C1.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlStrongTag/pkg1/C1.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlStrongTag/pkg1/C1.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlStrongTag/pkg1/C1.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 1999-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package pkg1; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlStrongTag/pkg2/C2.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlStrongTag/pkg2/C2.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlStrongTag/pkg2/C2.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlStrongTag/pkg2/C2.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 1999-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package pkg2; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 1999-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg1/C1.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg1/C1.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg1/C1.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg1/C1.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package pkg1; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg1/I1.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg1/I1.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg1/I1.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg1/I1.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package pkg1; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg1/package-info.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg1/package-info.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg1/package-info.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg1/package-info.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /** diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/C2.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/C2.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/C2.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/C2.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package pkg2; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/C3.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/C3.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/C3.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/C3.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package pkg2; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/C4.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/C4.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/C4.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/C4.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package pkg2; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/package-info.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/package-info.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/package-info.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTableTags/pkg2/package-info.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /** diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTag/pkg1/C1.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTag/pkg1/C1.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTag/pkg1/C1.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTag/pkg1/C1.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package pkg1; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTag/pkg2/C2.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTag/pkg2/C2.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTag/pkg2/C2.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTag/pkg2/C2.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package pkg2; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C1.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C1.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C1.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C1.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package pkg1; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C2.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C2.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C2.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C2.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package pkg1; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C3.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C3.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C3.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/pkg1/C3.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ package pkg1; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java --- openjdk-6-6b33-1.13.5/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -18,9 +18,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759a.java openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759a.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759a.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759a.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759b.java openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759b.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759b.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759b.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759c.java openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759c.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759c.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759c.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759d.java openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759d.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759d.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759d.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759e.java openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759e.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759e.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759e.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759f.java openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759f.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759f.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759f.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759g.java openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759g.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759g.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759g.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759h.java openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759h.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759h.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759h.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759i.java openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759i.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759i.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759i.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759j.java openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759j.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759j.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759j.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759k.java openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759k.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759k.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759k.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759l.java openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759l.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6650759/T6650759l.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6650759/T6650759l.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6938454/T6938454a.java openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6938454/T6938454a.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6938454/T6938454a.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6938454/T6938454a.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6938454 + * + * @summary Unable to determine generic type in program that compiles under Java 6 + * @author mcimadamore + * @compile T6938454a.java + * + */ + +class T6938454a { + + static abstract class A { } + + static class B extends A { } + + B getB(B b) { + return makeA(b); + } + + Y makeA(X x) { + return (Y)new B(); + } +} diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6938454/T6938454b.java openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6938454/T6938454b.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javac/generics/inference/6938454/T6938454b.java 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javac/generics/inference/6938454/T6938454b.java 2015-01-20 02:20:42.000000000 +0000 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.util.List; + +/* + * @test + * @bug 6938454 + * + * @summary Unable to determine generic type in program that compiles under Java 6 + * @author mcimadamore + * @compile T6938454b.java + * + */ + +class T6938454b { + + static interface A {} + static interface B extends A {} + static class C implements B {} + + List m(List l, S s) { + return null; + } + + List test(List la) { + return m(la, new C()); + } +} diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/4111861/T4111861.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/4111861/T4111861.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/4111861/T4111861.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/4111861/T4111861.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ import java.io.*; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/4870651/T4870651.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/4870651/T4870651.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/4870651/T4870651.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/4870651/T4870651.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/4870651/Test.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/4870651/Test.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/4870651/Test.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/4870651/Test.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ import java.util.*; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/ListTest.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/ListTest.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/ListTest.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/ListTest.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ import java.io.*; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/OptionTest.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/OptionTest.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/OptionTest.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/OptionTest.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ import java.io.*; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T4075403.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T4075403.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T4075403.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T4075403.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T4459541.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T4459541.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T4459541.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T4459541.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T4501660.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T4501660.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T4501660.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T4501660.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T4501661.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T4501661.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T4501661.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T4501661.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ import java.io.*; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T4876942.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T4876942.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T4876942.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T4876942.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T4880663.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T4880663.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T4880663.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T4880663.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T4884240.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T4884240.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T4884240.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T4884240.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,12 +1,12 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this + * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -16,11 +16,11 @@ * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-15301 USA. + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T4975569.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T4975569.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T4975569.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T4975569.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6271787.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6271787.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6271787.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6271787.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6474890.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6474890.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6474890.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6474890.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6587786.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6587786.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6587786.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6587786.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6622216.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6622216.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6622216.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6622216.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6622232.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6622232.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6622232.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6622232.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6622260.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6622260.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6622260.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6622260.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6715767.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6715767.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6715767.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6715767.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6824493.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6824493.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6824493.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6824493.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ import java.io.*; diff -Nru openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6868539.java openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6868539.java --- openjdk-6-6b33-1.13.5/langtools/test/tools/javap/T6868539.java 2014-10-08 15:34:05.000000000 +0000 +++ openjdk-6-6b34-1.13.6/langtools/test/tools/javap/T6868539.java 2015-01-20 02:20:42.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. */ /* diff -Nru openjdk-6-6b33-1.13.5/make/templates/bsd-header openjdk-6-6b34-1.13.6/make/templates/bsd-header --- openjdk-6-6b33-1.13.5/make/templates/bsd-header 2014-10-08 15:32:12.000000000 +0000 +++ openjdk-6-6b34-1.13.6/make/templates/bsd-header 2015-01-20 02:15:53.000000000 +0000 @@ -1,4 +1,4 @@ -Copyright %YEARS% Sun Microsystems, Inc. All Rights Reserved. +Copyright (c) %YEARS% Oracle and/or its affiliates. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -26,3 +26,4 @@ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff -Nru openjdk-6-6b33-1.13.5/make/templates/gpl-cp-header openjdk-6-6b34-1.13.6/make/templates/gpl-cp-header --- openjdk-6-6b33-1.13.5/make/templates/gpl-cp-header 2014-10-08 15:32:12.000000000 +0000 +++ openjdk-6-6b34-1.13.6/make/templates/gpl-cp-header 2015-01-20 02:15:53.000000000 +0000 @@ -1,4 +1,4 @@ -Copyright (c) %YEARS%, Oracle and/or its affiliates. All rights reserved. +Copyright (c) %YEARS% Oracle and/or its affiliates. All rights reserved. DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. This code is free software; you can redistribute it and/or modify it @@ -20,3 +20,4 @@ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA or visit www.oracle.com if you need additional information or have any questions. + diff -Nru openjdk-6-6b33-1.13.5/make/templates/gpl-header openjdk-6-6b34-1.13.6/make/templates/gpl-header --- openjdk-6-6b33-1.13.5/make/templates/gpl-header 2014-10-08 15:32:12.000000000 +0000 +++ openjdk-6-6b34-1.13.6/make/templates/gpl-header 2015-01-20 02:15:53.000000000 +0000 @@ -1,4 +1,4 @@ -Copyright (c) %YEARS%, Oracle and/or its affiliates. All rights reserved. +Copyright (c) %YEARS% Oracle and/or its affiliates. All rights reserved. DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. This code is free software; you can redistribute it and/or modify it @@ -18,3 +18,4 @@ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA or visit www.oracle.com if you need additional information or have any questions. + diff -Nru openjdk-6-6b33-1.13.5/Makefile.am openjdk-6-6b34-1.13.6/Makefile.am --- openjdk-6-6b33-1.13.5/Makefile.am 2015-01-27 16:24:27.000000000 +0000 +++ openjdk-6-6b34-1.13.6/Makefile.am 2015-01-27 16:24:32.000000000 +0000 @@ -1,8 +1,8 @@ # Dependencies -OPENJDK_DATE = 14_oct_2014 -OPENJDK_SHA256SUM = cabc35587a90fa81edd8ba8537c0454348c37456de27e407bbb66d52031a1293 -OPENJDK_VERSION = b33 +OPENJDK_DATE = 20_jan_2015 +OPENJDK_SHA256SUM = 13d1b4e1e152b6f9ad81b5558d6c7c0d3315a9e9494e49e515229722e2ee4e51 +OPENJDK_VERSION = b34 OPENJDK_URL = https://java.net/downloads/openjdk6/ CACAO_VERSION = 68fe50ac34ec @@ -345,7 +345,6 @@ patches/nomotif-mtoolkit.patch \ patches/alt-jar.patch \ patches/jdk-use-ssize_t.patch \ - patches/clean-crypto.patch \ patches/arch.patch \ patches/lc_ctype.patch \ patches/xjc.patch \ @@ -454,9 +453,7 @@ patches/openjdk/5082756-ImageIO_plugins_metadata_boolean_attributes.patch \ patches/openjdk/6296893-BMP_Writer_handles_TopDown_prop_incorrectly.patch \ patches/openjdk/7103610-_NET_WM_PID_and_WM_CLIENT_MACHINE_are_not_set.patch \ - patches/openjdk/6706974-krb5_test_infrastructure.patch \ patches/openjdk/6764553-IdResolver_is_not_thread_safe.patch \ - patches/openjdk/6761072-new_krb5_tests_fail_on_multiple_platforms.patch \ patches/ScriptEngineManager-doc.patch \ patches/openjdk/6883983-JarVerifier_removed_dependency_sun_security_pkcs.patch \ patches/openjdk/4465490-Suspicious_double-check_locking_idiom.patch \ @@ -507,24 +504,6 @@ patches/openjdk/8014427-raster_regression.patch \ patches/openjdk/8014676-javadebugger_space_in_paths.patch \ patches/openjdk/8014968-OCSP_timeout_default.patch \ - patches/openjdk/6541350-tz_display_names_l10n.patch \ - patches/openjdk/6821191-tz_display_names_l10n.patch \ - patches/openjdk/6925851-pt_br.patch \ - patches/openjdk/6977550-tzdata2010l.patch \ - patches/openjdk/6996686-tzdata2010o.patch \ - patches/openjdk/7017800-tzdata2011b.patch \ - patches/openjdk/7027387-tzdata2011d.patch \ - patches/openjdk/7033174-tzdata2011e.patch \ - patches/openjdk/7035073-missing_pt_br_timezones.patch \ - patches/openjdk/7039469-tzdata2011g.patch \ - patches/openjdk/7090843-tzdata2011j.patch \ - patches/openjdk/7103108-tzdata2011l.patch \ - patches/openjdk/7104126-headers_tzdata.patch \ - patches/openjdk/7103405-correct_display_names.patch \ - patches/openjdk/7158483-tzdata2012c.patch \ - patches/openjdk/7198570-tzdata2012f.patch \ - patches/openjdk/8002225-tzdata2012i.patch \ - patches/openjdk/8009987-tzdata2013b.patch \ patches/openjdk/6636370-appcontext_simplification.patch \ patches/openjdk/6636331-appcontext_concurrentmodificationexception.patch \ patches/sparc-ptracefix.patch \ @@ -545,8 +524,6 @@ patches/print_lsb_release.patch \ patches/alternative_krb5_cache.patch \ patches/alternative_krb5_cache_fixup.patch \ - patches/openjdk/8014469-tzdata2013c.patch \ - patches/openjdk/8020054-tzdata2013d.patch \ patches/imageiojpeg_sync.patch \ patches/openjdk/8005194-scale_memory_leak.patch \ patches/openjdk/6563752-ss12_support.patch \ @@ -600,7 +577,6 @@ patches/hotspot/hs23/arm-hsdis.patch \ patches/openjdk/7025066-embedded_build.patch \ patches/s390_casts.patch \ - patches/openjdk/8025255-tzdata2013g.patch \ patches/d729448-32_bit_alignment.patch \ patches/windows-awt.patch \ patches/windows-jdk-sizecalc.patch \ @@ -617,7 +593,21 @@ patches/openjdk/8006935-long_keys_in_hmac_prf.patch \ patches/openjdk/7106773-512_bits_rsa.patch \ patches/pr1904-icedtea_and_distro_versioning.patch \ - patches/openjdk/8017173-xml_cipher_rsa_oaep_cant_be_instantiated.patch + patches/openjdk/8017173-xml_cipher_rsa_oaep_cant_be_instantiated.patch \ + patches/openjdk/8000897-pr2173-vm_crash_in_compilebroker.patch \ + patches/openjdk/8020190-pr2174-jfieldid_must_match_object.patch \ + patches/openjdk/8028623-pr2177-hash_code_mismatch_for_extended_characters.patch \ + patches/openjdk/8061785-pr2177-test_bug-corrupted_utf8_character.patch \ + patches/pr2070-type_punning_warnings.patch \ + patches/pr2082-s390_type_fixes.patch \ + patches/pr2096-4096-bit_dh.patch \ + patches/pr2179-avoid_x86_workaround_on_zero.patch \ + patches/openjdk/6730740-pr2186-64-bit_breakage_in_6729881.patch \ + patches/openjdk/oj51-pr2187-sync_4873188.patch \ + patches/openjdk/7031830-pr2183-bad_record_mac_failure.patch \ + patches/openjdk/oj52-pr2185-no_serbia_montenegro.patch \ + patches/openjdk/oj53-pr2181-strict_aliasing_on_ppc32.patch \ + patches/openjdk/oj54-pr2182-6911104_reintroduces_test_fragment.patch if WITH_RHINO ICEDTEA_PATCHES += \ @@ -629,7 +619,8 @@ patches/cacao/launcher.patch \ patches/cacao/memory.patch \ patches/cacao/hotspot/original/memory.patch \ - patches/cacao/armhf.patch + patches/cacao/armhf.patch \ + patches/cacao/pr2184.patch else if USING_CACAO ICEDTEA_PATCHES += \ @@ -656,6 +647,7 @@ endif if ENABLE_NSS +ICEDTEA_PATCHES += patches/rh1022017.patch NSS_PATCHES = patches/nss-config.patch else NSS_PATCHES = patches/nss-not-enabled-config.patch @@ -691,6 +683,11 @@ patches/libraries-gif.patch endif +if BUILD_JAMVM +ICEDTEA_PATCHES += \ + patches/jamvm-2.5.3-fix.diff +endif + ICEDTEA_PATCHES += $(DISTRIBUTION_PATCHES) # Bootstrapping patches @@ -737,6 +734,12 @@ ICEDTEA_ECJ_PATCHES += patches/ecj/no-test_gamma.patch endif +# If date parsing bug is present, drop Lithuania and Latvia EUR transition +# dates as they are already in the past anyway. +if CP64174 +ICEDTEA_ECJ_PATCHES += patches/ecj/pr64174.patch +endif + ICEDTEA_ECJ_PATCHES += $(DISTRIBUTION_ECJ_PATCHES) # OpenJDK build environment. @@ -768,6 +771,12 @@ WERROR_STATUS=false endif +ICEDTEA_UNSET = \ + JAVAC= \ + JAVA_HOME= \ + JDK_HOME= \ + OS= + ICEDTEA_ENV = \ ALT_JDK_IMPORT_PATH="$(BOOT_DIR)" \ ANT="$(ANT)" \ @@ -798,9 +807,6 @@ FT2_LIB="$(FREETYPE2_LIBS)" \ ALT_PARALLEL_COMPILE_JOBS="$(PARALLEL_JOBS)" \ HOTSPOT_BUILD_JOBS="$(PARALLEL_JOBS)" \ - JAVAC="" \ - JAVA_HOME="" \ - JDK_HOME="" \ ANT_RESPECT_JAVA_HOME="TRUE" \ DISTRIBUTION_ID="$(DIST_ID)" \ DERIVATIVE_ID="$(ICEDTEA_NAME) $(PACKAGE_VERSION)$(ICEDTEA_REV)" \ @@ -812,7 +818,8 @@ BUILD_GCC=gcc$(GCC_SUFFIX) \ BUILD_CPP=g++$(GCC_SUFFIX) \ BUILD_CXX=g++$(GCC_SUFFIX) \ - COMPILER_WARNINGS_FATAL="$(WERROR_STATUS)" + COMPILER_WARNINGS_FATAL="$(WERROR_STATUS)" \ + UNLIMITED_CRYPTO="true" if ENABLE_CACAO ICEDTEA_ENV += \ @@ -932,7 +939,7 @@ contrib arm_port \ overlays \ jconsole.desktop policytool.desktop \ - $(JTREG_SRCS) HACKING pulseaudio fsg.sh \ + $(JTREG_SRCS) HACKING pulseaudio \ hotspot.map \ autogen.sh \ tapset/hotspot.stp.in \ @@ -1217,7 +1224,7 @@ mkdir openjdk ; \ $(TAR) xf $(OPENJDK_SRC_ZIP) -C openjdk; \ chmod -R ug+w openjdk ; \ - sh $(abs_top_srcdir)/fsg.sh ; \ + sh $(abs_top_builddir)/fsg.sh ; \ fi endif endif @@ -1655,7 +1662,7 @@ stamps/icedtea.stamp: stamps/bootstrap-directory-symlink.stamp \ $(OPENJDK_TREE) stamps/cacao.stamp stamps/rewrite-rhino.stamp \ stamps/jamvm.stamp - $(ARCH_PREFIX) $(MAKE) -j1 \ + $(ICEDTEA_UNSET) $(ARCH_PREFIX) $(MAKE) -j1 \ $(ICEDTEA_ENV) \ -C openjdk \ $(ICEDTEA_BUILD_TARGET) @@ -1686,7 +1693,7 @@ stamps/icedtea-debug.stamp: stamps/bootstrap-directory-symlink.stamp \ $(OPENJDK_TREE) stamps/cacao.stamp stamps/rewrite-rhino.stamp \ stamps/jamvm.stamp - $(ARCH_PREFIX) $(MAKE) -j1 \ + $(ICEDTEA_UNSET) $(ARCH_PREFIX) $(MAKE) -j1 \ $(ICEDTEA_ENV) \ -C openjdk \ $(ICEDTEA_DEBUG_BUILD_TARGET) @@ -2057,7 +2064,7 @@ stamps/icedtea-ecj.stamp: stamps/bootstrap-directory-symlink-ecj.stamp \ $(OPENJDK_ECJ_TREE) stamps/jamvm.stamp stamps/cacao.stamp \ stamps/rewrite-rhino.stamp - $(ARCH_PREFIX) $(MAKE) -j1 \ + $(ICEDTEA_UNSET) $(ARCH_PREFIX) $(MAKE) -j1 \ $(ICEDTEA_ENV_ECJ) \ -C openjdk-ecj/ \ $(ICEDTEA_BUILD_TARGET) diff -Nru openjdk-6-6b33-1.13.5/Makefile.in openjdk-6-6b34-1.13.6/Makefile.in --- openjdk-6-6b33-1.13.5/Makefile.in 2015-01-27 16:24:27.000000000 +0000 +++ openjdk-6-6b34-1.13.6/Makefile.in 2015-01-27 16:24:32.000000000 +0000 @@ -148,7 +148,8 @@ @BUILD_CACAO_TRUE@ patches/cacao/launcher.patch \ @BUILD_CACAO_TRUE@ patches/cacao/memory.patch \ @BUILD_CACAO_TRUE@ patches/cacao/hotspot/original/memory.patch \ -@BUILD_CACAO_TRUE@ patches/cacao/armhf.patch +@BUILD_CACAO_TRUE@ patches/cacao/armhf.patch \ +@BUILD_CACAO_TRUE@ patches/cacao/pr2184.patch @BUILD_CACAO_FALSE@@USING_CACAO_TRUE@am__append_23 = \ @BUILD_CACAO_FALSE@@USING_CACAO_TRUE@ patches/cacao/memory.patch \ @@ -165,109 +166,118 @@ @ENABLE_SYSTEMTAP_TRUE@ patches/hotspot/hs23/systemtap_gc.patch \ @ENABLE_SYSTEMTAP_TRUE@ patches/hotspot/hs23/systemtap-alloc-size-workaround.patch -@WITH_PAX_TRUE@am__append_27 = \ +@ENABLE_NSS_TRUE@am__append_27 = patches/rh1022017.patch +@WITH_PAX_TRUE@am__append_28 = \ @WITH_PAX_TRUE@ patches/no-test_gamma.patch \ @WITH_PAX_TRUE@ patches/pax-mark-rmic-java.patch -@USE_SYSTEM_ZLIB_TRUE@am__append_28 = \ +@USE_SYSTEM_ZLIB_TRUE@am__append_29 = \ @USE_SYSTEM_ZLIB_TRUE@ patches/libraries-zlib.patch \ @USE_SYSTEM_ZLIB_TRUE@ patches/linker-libs-order-zlib.patch -@USE_SYSTEM_JPEG_TRUE@am__append_29 = \ +@USE_SYSTEM_JPEG_TRUE@am__append_30 = \ @USE_SYSTEM_JPEG_TRUE@ patches/libraries-jpeg.patch \ @USE_SYSTEM_JPEG_TRUE@ patches/rh661505-jpeg.patch -@USE_SYSTEM_PNG_TRUE@am__append_30 = \ +@USE_SYSTEM_PNG_TRUE@am__append_31 = \ @USE_SYSTEM_PNG_TRUE@ patches/libraries-png.patch -@USE_SYSTEM_GIF_TRUE@am__append_31 = \ +@USE_SYSTEM_GIF_TRUE@am__append_32 = \ @USE_SYSTEM_GIF_TRUE@ patches/libraries-gif.patch -@DTDTYPE_QNAME_TRUE@am__append_32 = \ +@BUILD_JAMVM_TRUE@am__append_33 = \ +@BUILD_JAMVM_TRUE@ patches/jamvm-2.5.3-fix.diff + +@DTDTYPE_QNAME_TRUE@am__append_34 = \ @DTDTYPE_QNAME_TRUE@ patches/ecj/jaxws-getdtdtype.patch -@ENABLE_XRENDER_TRUE@am__append_33 = patches/ecj/needs-6.patch -@CP40188_JAVAH_TRUE@@ENABLE_XRENDER_TRUE@am__append_34 = patches/ecj/cp40188-opengl.patch -@DISABLE_BOOTSTRAP_TOOLS_FALSE@am__append_35 = \ +@ENABLE_XRENDER_TRUE@am__append_35 = patches/ecj/needs-6.patch +@CP40188_JAVAH_TRUE@@ENABLE_XRENDER_TRUE@am__append_36 = patches/ecj/cp40188-opengl.patch +@DISABLE_BOOTSTRAP_TOOLS_FALSE@am__append_37 = \ @DISABLE_BOOTSTRAP_TOOLS_FALSE@ patches/ecj/bootstrap-tools.patch -@VM_SUPPORTS_XBOOTCLASSPATH_FALSE@am__append_36 = \ +@VM_SUPPORTS_XBOOTCLASSPATH_FALSE@am__append_38 = \ @VM_SUPPORTS_XBOOTCLASSPATH_FALSE@ patches/ecj/xbootclasspath.patch -@WITH_PAX_FALSE@am__append_37 = patches/ecj/no-test_gamma.patch -@ENABLE_CACAO_TRUE@am__append_38 = \ +@WITH_PAX_FALSE@am__append_39 = patches/ecj/no-test_gamma.patch + +# If date parsing bug is present, drop Lithuania and Latvia EUR transition +# dates as they are already in the past anyway. +@CP64174_TRUE@am__append_40 = patches/ecj/pr64174.patch +@ENABLE_CACAO_TRUE@am__append_41 = \ @ENABLE_CACAO_TRUE@ ALT_HOTSPOT_IMPORT_PATH="$(CACAO_IMPORT_PATH)" -@ENABLE_JAMVM_TRUE@am__append_39 = \ +@ENABLE_JAMVM_TRUE@am__append_42 = \ @ENABLE_JAMVM_TRUE@ ALT_HOTSPOT_IMPORT_PATH="$(JAMVM_IMPORT_PATH)" -@DISABLE_OPTIMIZATIONS_TRUE@am__append_40 = \ +@DISABLE_OPTIMIZATIONS_TRUE@am__append_43 = \ @DISABLE_OPTIMIZATIONS_TRUE@ NO_OPTIMIZATIONS="true" \ @DISABLE_OPTIMIZATIONS_TRUE@ CC_NO_OPT="-O0 -g" -@ENABLE_DOCS_FALSE@am__append_41 = \ +@ENABLE_DOCS_FALSE@am__append_44 = \ @ENABLE_DOCS_FALSE@ NO_DOCS="true" -@ENABLE_CROSS_COMPILATION_TRUE@am__append_42 = \ +@ENABLE_CROSS_COMPILATION_TRUE@am__append_45 = \ @ENABLE_CROSS_COMPILATION_TRUE@ CROSS_COMPILATION="true" \ @ENABLE_CROSS_COMPILATION_TRUE@ CROSS_TARGET_ARCH="$(CROSS_TARGET_ARCH)" -@USE_ALT_JAR_TRUE@am__append_43 = \ +@USE_ALT_JAR_TRUE@am__append_46 = \ @USE_ALT_JAR_TRUE@ ALT_JAR_CMD="$(ALT_JAR_CMD)" -@HAS_HOTSPOT_REVISION_TRUE@am__append_44 = \ +@HAS_HOTSPOT_REVISION_TRUE@am__append_47 = \ @HAS_HOTSPOT_REVISION_TRUE@ HOTSPOT_BUILD_VERSION="$(HOTSPOT_REVISION)" -@WITH_RHINO_TRUE@am__append_45 = \ +@WITH_RHINO_TRUE@am__append_48 = \ @WITH_RHINO_TRUE@ RHINO_JAR="$(abs_top_builddir)/rhino/rhino.jar" -@USE_SYSTEM_ZLIB_TRUE@am__append_46 = \ +@USE_SYSTEM_ZLIB_TRUE@am__append_49 = \ @USE_SYSTEM_ZLIB_TRUE@ SYSTEM_ZLIB="true" \ @USE_SYSTEM_ZLIB_TRUE@ ZLIB_LIBS="${ZLIB_LIBS}" \ @USE_SYSTEM_ZLIB_TRUE@ ZLIB_CFLAGS="${ZLIB_CFLAGS}" -@USE_SYSTEM_LCMS_TRUE@am__append_47 = \ +@USE_SYSTEM_LCMS_TRUE@am__append_50 = \ @USE_SYSTEM_LCMS_TRUE@ SYSTEM_LCMS="true" \ @USE_SYSTEM_LCMS_TRUE@ LCMS_LIBS="${LCMS2_LIBS}" \ @USE_SYSTEM_LCMS_TRUE@ LCMS_CFLAGS="${LCMS2_CFLAGS}" -@USE_SYSTEM_JPEG_TRUE@am__append_48 = \ +@USE_SYSTEM_JPEG_TRUE@am__append_51 = \ @USE_SYSTEM_JPEG_TRUE@ SYSTEM_JPEG="true" \ @USE_SYSTEM_JPEG_TRUE@ JPEG_LIBS="${JPEG_LIBS}" \ @USE_SYSTEM_JPEG_TRUE@ JPEG_CFLAGS="${JPEG_CFLAGS}" -@USE_SYSTEM_PNG_TRUE@am__append_49 = \ +@USE_SYSTEM_PNG_TRUE@am__append_52 = \ @USE_SYSTEM_PNG_TRUE@ SYSTEM_PNG="true" \ @USE_SYSTEM_PNG_TRUE@ PNG_LIBS="${PNG_LIBS}" \ @USE_SYSTEM_PNG_TRUE@ PNG_CFLAGS="${PNG_CFLAGS}" -@USE_SYSTEM_GIF_TRUE@am__append_50 = \ +@USE_SYSTEM_GIF_TRUE@am__append_53 = \ @USE_SYSTEM_GIF_TRUE@ SYSTEM_GIF="true" \ @USE_SYSTEM_GIF_TRUE@ GIF_LIBS="${GIF_LIBS}" \ @USE_SYSTEM_GIF_TRUE@ GIF_CFLAGS="${GIF_CFLAGS}" -@USE_SYSTEM_KERBEROS_TRUE@am__append_51 = \ +@USE_SYSTEM_KERBEROS_TRUE@am__append_54 = \ @USE_SYSTEM_KERBEROS_TRUE@ SYSTEM_KRB5="true" \ @USE_SYSTEM_KERBEROS_TRUE@ KRB5_LIBS="${KRB5_LIBS}" \ @USE_SYSTEM_KERBEROS_TRUE@ KRB5_CFLAGS="${KRB5_CFLAGS}" -@ENABLE_JAR_COMPRESSION_TRUE@am__append_52 = \ +@ENABLE_JAR_COMPRESSION_TRUE@am__append_55 = \ @ENABLE_JAR_COMPRESSION_TRUE@ COMPRESS_JARS="true" -@ADD_SHARK_BUILD_TRUE@am__append_53 = \ +@ADD_SHARK_BUILD_TRUE@am__append_56 = \ @ADD_SHARK_BUILD_TRUE@ --enable-shark -@WITH_ALT_HSBUILD_TRUE@am__append_54 = \ +@WITH_ALT_HSBUILD_TRUE@am__append_57 = \ @WITH_ALT_HSBUILD_TRUE@ $(if $(findstring --with-hotspot-src-zip=, $(CONFIGURE_ARGS)),, \ @WITH_ALT_HSBUILD_TRUE@ --with-hotspot-src-zip=$(abs_top_builddir)/$(HOTSPOT_SRC_ZIP)) subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/ergo.c.in $(srcdir)/javac.in \ - $(srcdir)/javap.in $(srcdir)/jconsole.desktop.in \ - $(srcdir)/jvm.cacao.cfg.in $(srcdir)/jvm.cfg.in \ - $(srcdir)/jvm.jamvm.cfg.in $(srcdir)/nss.cfg.in \ - $(srcdir)/pax-mark-vm.in $(srcdir)/policytool.desktop.in \ + $(srcdir)/Makefile.in $(srcdir)/ergo.c.in $(srcdir)/fsg.sh.in \ + $(srcdir)/javac.in $(srcdir)/javap.in \ + $(srcdir)/jconsole.desktop.in $(srcdir)/jvm.cacao.cfg.in \ + $(srcdir)/jvm.cfg.in $(srcdir)/jvm.jamvm.cfg.in \ + $(srcdir)/nss.cfg.in $(srcdir)/pax-mark-vm.in \ + $(srcdir)/policytool.desktop.in \ $(srcdir)/remove-intree-libraries.sh.in \ $(srcdir)/tz.properties.in $(top_srcdir)/configure \ $(top_srcdir)/tapset/hotspot.stp.in \ @@ -284,7 +294,7 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d -CONFIG_CLEAN_FILES = jvm.cacao.cfg jvm.jamvm.cfg jvm.cfg ergo.c \ +CONFIG_CLEAN_FILES = fsg.sh jvm.cacao.cfg jvm.jamvm.cfg jvm.cfg ergo.c \ nss.cfg javac javap tz.properties pax-mark-vm \ remove-intree-libraries.sh jconsole.desktop policytool.desktop \ tapset/hotspot.stp tapset/hotspot_jni.stp tapset/jstack.stp \ @@ -544,9 +554,9 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -OPENJDK_DATE = 14_oct_2014 -OPENJDK_SHA256SUM = cabc35587a90fa81edd8ba8537c0454348c37456de27e407bbb66d52031a1293 -OPENJDK_VERSION = b33 +OPENJDK_DATE = 20_jan_2015 +OPENJDK_SHA256SUM = 13d1b4e1e152b6f9ad81b5558d6c7c0d3315a9e9494e49e515229722e2ee4e51 +OPENJDK_VERSION = b34 OPENJDK_URL = https://java.net/downloads/openjdk6/ CACAO_VERSION = 68fe50ac34ec CACAO_SHA256SUM = b8230f20d7022f9230bbfea13b2f3f179b2f42db40138ac6d32c82fc418ffc3a @@ -718,8 +728,7 @@ patches/uname.patch patches/nomotif-6706121.patch \ patches/nomotif.patch patches/nomotif-mtoolkit.patch \ patches/alt-jar.patch patches/jdk-use-ssize_t.patch \ - patches/clean-crypto.patch patches/arch.patch \ - patches/lc_ctype.patch patches/xjc.patch \ + patches/arch.patch patches/lc_ctype.patch patches/xjc.patch \ patches/linker-libs-order.patch patches/testenv.patch \ patches/samejvm-safe.patch patches/pr261.patch \ patches/sparc-buildfixes.patch patches/sparc64-linux.patch \ @@ -815,9 +824,7 @@ patches/openjdk/5082756-ImageIO_plugins_metadata_boolean_attributes.patch \ patches/openjdk/6296893-BMP_Writer_handles_TopDown_prop_incorrectly.patch \ patches/openjdk/7103610-_NET_WM_PID_and_WM_CLIENT_MACHINE_are_not_set.patch \ - patches/openjdk/6706974-krb5_test_infrastructure.patch \ patches/openjdk/6764553-IdResolver_is_not_thread_safe.patch \ - patches/openjdk/6761072-new_krb5_tests_fail_on_multiple_platforms.patch \ patches/ScriptEngineManager-doc.patch \ patches/openjdk/6883983-JarVerifier_removed_dependency_sun_security_pkcs.patch \ patches/openjdk/4465490-Suspicious_double-check_locking_idiom.patch \ @@ -866,24 +873,6 @@ patches/openjdk/8014427-raster_regression.patch \ patches/openjdk/8014676-javadebugger_space_in_paths.patch \ patches/openjdk/8014968-OCSP_timeout_default.patch \ - patches/openjdk/6541350-tz_display_names_l10n.patch \ - patches/openjdk/6821191-tz_display_names_l10n.patch \ - patches/openjdk/6925851-pt_br.patch \ - patches/openjdk/6977550-tzdata2010l.patch \ - patches/openjdk/6996686-tzdata2010o.patch \ - patches/openjdk/7017800-tzdata2011b.patch \ - patches/openjdk/7027387-tzdata2011d.patch \ - patches/openjdk/7033174-tzdata2011e.patch \ - patches/openjdk/7035073-missing_pt_br_timezones.patch \ - patches/openjdk/7039469-tzdata2011g.patch \ - patches/openjdk/7090843-tzdata2011j.patch \ - patches/openjdk/7103108-tzdata2011l.patch \ - patches/openjdk/7104126-headers_tzdata.patch \ - patches/openjdk/7103405-correct_display_names.patch \ - patches/openjdk/7158483-tzdata2012c.patch \ - patches/openjdk/7198570-tzdata2012f.patch \ - patches/openjdk/8002225-tzdata2012i.patch \ - patches/openjdk/8009987-tzdata2013b.patch \ patches/openjdk/6636370-appcontext_simplification.patch \ patches/openjdk/6636331-appcontext_concurrentmodificationexception.patch \ patches/sparc-ptracefix.patch \ @@ -900,8 +889,6 @@ patches/sparc-trapsfix.patch patches/print_lsb_release.patch \ patches/alternative_krb5_cache.patch \ patches/alternative_krb5_cache_fixup.patch \ - patches/openjdk/8014469-tzdata2013c.patch \ - patches/openjdk/8020054-tzdata2013d.patch \ patches/imageiojpeg_sync.patch \ patches/openjdk/8005194-scale_memory_leak.patch \ patches/openjdk/6563752-ss12_support.patch \ @@ -954,7 +941,6 @@ patches/hotspot/hs23/arm-hsdis.patch \ patches/openjdk/7025066-embedded_build.patch \ patches/s390_casts.patch \ - patches/openjdk/8025255-tzdata2013g.patch \ patches/d729448-32_bit_alignment.patch \ patches/windows-awt.patch patches/windows-jdk-sizecalc.patch \ patches/shark_fixes_from_8003868.patch \ @@ -971,10 +957,25 @@ patches/openjdk/7106773-512_bits_rsa.patch \ patches/pr1904-icedtea_and_distro_versioning.patch \ patches/openjdk/8017173-xml_cipher_rsa_oaep_cant_be_instantiated.patch \ + patches/openjdk/8000897-pr2173-vm_crash_in_compilebroker.patch \ + patches/openjdk/8020190-pr2174-jfieldid_must_match_object.patch \ + patches/openjdk/8028623-pr2177-hash_code_mismatch_for_extended_characters.patch \ + patches/openjdk/8061785-pr2177-test_bug-corrupted_utf8_character.patch \ + patches/pr2070-type_punning_warnings.patch \ + patches/pr2082-s390_type_fixes.patch \ + patches/pr2096-4096-bit_dh.patch \ + patches/pr2179-avoid_x86_workaround_on_zero.patch \ + patches/openjdk/6730740-pr2186-64-bit_breakage_in_6729881.patch \ + patches/openjdk/oj51-pr2187-sync_4873188.patch \ + patches/openjdk/7031830-pr2183-bad_record_mac_failure.patch \ + patches/openjdk/oj52-pr2185-no_serbia_montenegro.patch \ + patches/openjdk/oj53-pr2181-strict_aliasing_on_ppc32.patch \ + patches/openjdk/oj54-pr2182-6911104_reintroduces_test_fragment.patch \ $(am__append_21) $(am__append_22) $(am__append_23) \ $(am__append_24) $(am__append_25) $(am__append_26) \ $(am__append_27) $(am__append_28) $(am__append_29) \ - $(am__append_30) $(am__append_31) $(DISTRIBUTION_PATCHES) + $(am__append_30) $(am__append_31) $(am__append_32) \ + $(am__append_33) $(DISTRIBUTION_PATCHES) @ENABLE_NSS_FALSE@NSS_PATCHES = patches/nss-not-enabled-config.patch @ENABLE_NSS_TRUE@NSS_PATCHES = patches/nss-config.patch @@ -989,9 +990,10 @@ patches/ecj/jaxws-jdk-dependency.patch \ patches/ecj/hotspot/hs23/hotspot-jdk-dependency.patch \ patches/ecj/fphexconstants.patch \ - patches/ecj/no-sun-classes.patch $(am__append_32) \ - $(am__append_33) $(am__append_34) $(am__append_35) \ - $(am__append_36) $(am__append_37) $(DISTRIBUTION_ECJ_PATCHES) + patches/ecj/no-sun-classes.patch $(am__append_34) \ + $(am__append_35) $(am__append_36) $(am__append_37) \ + $(am__append_38) $(am__append_39) $(am__append_40) \ + $(DISTRIBUTION_ECJ_PATCHES) @ZERO_BUILD_FALSE@ICEDTEA_ZERO_BUILD = # OpenJDK build environment. @@ -1005,6 +1007,12 @@ @HAS_PKGVERSION_TRUE@ICEDTEA_PKG = $(EMPTY) (${PKGVERSION}) @ENABLE_WERROR_FALSE@WERROR_STATUS = false @ENABLE_WERROR_TRUE@WERROR_STATUS = true +ICEDTEA_UNSET = \ + JAVAC= \ + JAVA_HOME= \ + JDK_HOME= \ + OS= + ICEDTEA_ENV = ALT_JDK_IMPORT_PATH="$(BOOT_DIR)" ANT="$(ANT)" \ BUILD_NUMBER="$(OPENJDK_VERSION)" \ JDK_UPDATE_VERSION="$(JDK_UPDATE_VERSION)" \ @@ -1025,20 +1033,21 @@ FREETYPE2_HEADERS="$(FREETYPE2_CFLAGS)" \ FT2_LIB="$(FREETYPE2_LIBS)" \ ALT_PARALLEL_COMPILE_JOBS="$(PARALLEL_JOBS)" \ - HOTSPOT_BUILD_JOBS="$(PARALLEL_JOBS)" JAVAC="" JAVA_HOME="" \ - JDK_HOME="" ANT_RESPECT_JAVA_HOME="TRUE" \ - DISTRIBUTION_ID="$(DIST_ID)" DERIVATIVE_ID="$(ICEDTEA_NAME) \ + HOTSPOT_BUILD_JOBS="$(PARALLEL_JOBS)" \ + ANT_RESPECT_JAVA_HOME="TRUE" DISTRIBUTION_ID="$(DIST_ID)" \ + DERIVATIVE_ID="$(ICEDTEA_NAME) \ $(PACKAGE_VERSION)$(ICEDTEA_REV)" DEBUG_CLASSFILES="true" \ DEBUG_BINARIES="true" VERBOSE="$(VERBOSE)" \ ALT_OUTPUTDIR="$(BUILD_OUTPUT_DIR)" STATIC_CXX="false" \ BUILD_GCC=gcc$(GCC_SUFFIX) BUILD_CPP=g++$(GCC_SUFFIX) \ BUILD_CXX=g++$(GCC_SUFFIX) \ - COMPILER_WARNINGS_FATAL="$(WERROR_STATUS)" $(am__append_38) \ - $(am__append_39) $(am__append_40) $(am__append_41) \ - $(am__append_42) $(am__append_43) $(am__append_44) \ - $(am__append_45) $(am__append_46) $(am__append_47) \ - $(am__append_48) $(am__append_49) $(am__append_50) \ - $(am__append_51) $(am__append_52) + COMPILER_WARNINGS_FATAL="$(WERROR_STATUS)" \ + UNLIMITED_CRYPTO="true" $(am__append_41) $(am__append_42) \ + $(am__append_43) $(am__append_44) $(am__append_45) \ + $(am__append_46) $(am__append_47) $(am__append_48) \ + $(am__append_49) $(am__append_50) $(am__append_51) \ + $(am__append_52) $(am__append_53) $(am__append_54) \ + $(am__append_55) # OpenJDK ecj build environment. ICEDTEA_ENV_ECJ = $(ICEDTEA_ENV) \ @@ -1069,7 +1078,7 @@ contrib arm_port \ overlays \ jconsole.desktop policytool.desktop \ - $(JTREG_SRCS) HACKING pulseaudio fsg.sh \ + $(JTREG_SRCS) HACKING pulseaudio \ hotspot.map \ autogen.sh \ tapset/hotspot.stp.in \ @@ -1086,7 +1095,7 @@ # 'make emacs mode happy ADD_ZERO_CONFIGURE_ARGS = \ --with-jdk-home=$(BUILD_OUTPUT_DIR)/j2sdk-image --enable-zero \ - $(am__append_53) --disable-docs $(filter-out \ + $(am__append_56) --disable-docs $(filter-out \ $(_quote)--with-jdk-home=% $(_quote)--with-ecj=% \ $(_quote)--with-java=% $(_quote)--with-javah=% \ $(_quote)--with-javac=% $(_quote)--with-javac=% \ @@ -1095,7 +1104,7 @@ $(CONFIGURE_ARGS)) $(if $(findstring --with-openjdk-src-zip=, \ $(CONFIGURE_ARGS)),, \ --with-openjdk-src-zip=$(abs_top_builddir)/$(OPENJDK_SRC_ZIP)) \ - $(am__append_54) --disable-bootstrap + $(am__append_57) --disable-bootstrap _quote = ' ADD_ZERO_EXTRA_BUILD_ENV = \ BUILD_LANGTOOLS=false ALT_LANGTOOLS_DIST=$(BUILD_OUTPUT_DIR)/langtools/dist \ @@ -1151,6 +1160,8 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): +fsg.sh: $(top_builddir)/config.status $(srcdir)/fsg.sh.in + cd $(top_builddir) && $(SHELL) ./config.status $@ jvm.cacao.cfg: $(top_builddir)/config.status $(srcdir)/jvm.cacao.cfg.in cd $(top_builddir) && $(SHELL) ./config.status $@ jvm.jamvm.cfg: $(top_builddir)/config.status $(srcdir)/jvm.jamvm.cfg.in @@ -1709,7 +1720,7 @@ @OPENJDK_SRC_DIR_FOUND_FALSE@@USE_HG_FALSE@ mkdir openjdk ; \ @OPENJDK_SRC_DIR_FOUND_FALSE@@USE_HG_FALSE@ $(TAR) xf $(OPENJDK_SRC_ZIP) -C openjdk; \ @OPENJDK_SRC_DIR_FOUND_FALSE@@USE_HG_FALSE@ chmod -R ug+w openjdk ; \ -@OPENJDK_SRC_DIR_FOUND_FALSE@@USE_HG_FALSE@ sh $(abs_top_srcdir)/fsg.sh ; \ +@OPENJDK_SRC_DIR_FOUND_FALSE@@USE_HG_FALSE@ sh $(abs_top_builddir)/fsg.sh ; \ @OPENJDK_SRC_DIR_FOUND_FALSE@@USE_HG_FALSE@ fi @ENABLE_CACAO_TRUE@ mkdir -p openjdk/jdk/src/solaris/bin/$(JRE_ARCH_DIR) @ENABLE_CACAO_TRUE@ cp jvm.cacao.cfg openjdk/jdk/src/solaris/bin/$(JRE_ARCH_DIR)/jvm.cfg @@ -2126,7 +2137,7 @@ stamps/icedtea.stamp: stamps/bootstrap-directory-symlink.stamp \ $(OPENJDK_TREE) stamps/cacao.stamp stamps/rewrite-rhino.stamp \ stamps/jamvm.stamp - $(ARCH_PREFIX) $(MAKE) -j1 \ + $(ICEDTEA_UNSET) $(ARCH_PREFIX) $(MAKE) -j1 \ $(ICEDTEA_ENV) \ -C openjdk \ $(ICEDTEA_BUILD_TARGET) @@ -2149,7 +2160,7 @@ stamps/icedtea-debug.stamp: stamps/bootstrap-directory-symlink.stamp \ $(OPENJDK_TREE) stamps/cacao.stamp stamps/rewrite-rhino.stamp \ stamps/jamvm.stamp - $(ARCH_PREFIX) $(MAKE) -j1 \ + $(ICEDTEA_UNSET) $(ARCH_PREFIX) $(MAKE) -j1 \ $(ICEDTEA_ENV) \ -C openjdk \ $(ICEDTEA_DEBUG_BUILD_TARGET) @@ -2484,7 +2495,7 @@ stamps/icedtea-ecj.stamp: stamps/bootstrap-directory-symlink-ecj.stamp \ $(OPENJDK_ECJ_TREE) stamps/jamvm.stamp stamps/cacao.stamp \ stamps/rewrite-rhino.stamp - $(ARCH_PREFIX) $(MAKE) -j1 \ + $(ICEDTEA_UNSET) $(ARCH_PREFIX) $(MAKE) -j1 \ $(ICEDTEA_ENV_ECJ) \ -C openjdk-ecj/ \ $(ICEDTEA_BUILD_TARGET) diff -Nru openjdk-6-6b33-1.13.5/NEWS openjdk-6-6b34-1.13.6/NEWS --- openjdk-6-6b33-1.13.5/NEWS 2014-10-09 02:07:22.000000000 +0000 +++ openjdk-6-6b34-1.13.6/NEWS 2015-01-23 18:50:42.000000000 +0000 @@ -12,6 +12,184 @@ CVE-XXXX-YYYY: http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=XXXX-YYYY +New in release 1.13.6 (2015-01-23): + +* Security fixes + - S8046656: Update protocol support + - S8047125, CVE-2015-0395: (ref) More phantom object references + - S8047130: Fewer escapes from escape analysis + - S8048035, CVE-2015-0400: Ensure proper proxy protocols + - S8049253: Better GC validation + - S8050807, CVE-2015-0383: Better performing performance data handling + - S8054367, CVE-2015-0412: More references for endpoints + - S8055304, CVE-2015-0407: More boxing for DirectoryComboBoxModel + - S8055309, CVE-2015-0408: RMI needs better transportation considerations + - S8055479: TLAB stability + - S8055489, CVE-2014-6585: Better substitution formats + - S8056264, CVE-2014-6587: Multicast support improvements + - S8056276, CVE-2014-6591: Fontmanager feature improvements + - S8057555, CVE-2014-6593: Less cryptic cipher suite management + - S8058982, CVE-2014-6601: Better verification of an exceptional invokespecial + - S8059485, CVE-2015-0410: Resolve parsing ambiguity + - S8061210, CVE-2014-3566: Issues in TLS +* Import of OpenJDK6 b34 + - OJ43: Backport JAX_WS-945; Socket backlog may be limiting lwhs performance + - OJ44: Add missing TimeZone test cases included in OpenJDK 7 revision 0. + - OJ45: Fix copyright headers on imported files + - OJ46: Fix lost Classpath exception + - OJ47: Remove @Override annotation on interfaces added by 2015/01/20 security fixes. + - OJ48: Fix substitution error. + - OJ49: Fix placement of 8023956 fix. + - OJ50: Fix reference to missing pd_attempt_reserve_memory_at + - S4873188: Support TLS 1.1 + - S6364329: jstat displays "invalid argument count" with usage + - S6461635: [TESTBUG] BasicTests.sh test fails intermittently + - S6507067: TimeZone country/area message error + - S6545422: [TESTBUG] NativeErrors.java uses wrong path name in exec + - S6578647: Undefined requesting URL in java.net.Authenticator.getPasswordAuthentication() + - S6585666: Spanish language names not compliant with CLDR + - S6587676: Krb5LoginModule failure if useTicketCache=true on Vista + - S6608572: Currency change for Malta and Cyprus + - S6610748: Dateformat - AM-PM indicator in Finnish appears to be from English + - S6627549: ISO 3166 code addition: Saint Barthelemy and Saint Martin + - S6631048: Problem when writing on output stream of HttpURLConnection + - S6641309: Wrong Cookie separator used in HttpURLConnection + - S6641312: Fix krb5 codes indentation problems + - S6645271: Wrong date format for Croatian (hr) locale + - S6646611: Incorrect spelling of month name in locale for Belarusian language ("be", "BY") + - S6647452: Remove obfuscation, framework and provider self-verification checking + - S6653795: C2 intrinsic for Unsafe.getAddress performs pointer sign extension on 32-bit systems + - S6659779: HttpURLConnections logger should log tunnel requests + - S6670362: HTTP/SPNEGO should work across realms + - S6716626: Integrate contributed language and country names for NL + - S6720866: Slow performance using HttpURLConnection for upload + - S6726695: HttpURLConnection shoul support 'Expect: 100-continue' headers for PUT + - S6729881: Compiler warning in networking native code + - S6765491: Krb5LoginModule a little too restrictive, and the doc is not clear. + - S6776102: sun/util/resources/TimeZone/Bug6317929.java test failed against 6u12b01 and passed against 6u11b03 + - S6786276: Locale.getISOCountries() still contains country code "CS" + - S6792180: Enhance to reject weak algorithms or conform to crypto recommendations + - S6811297: Add more logging to HTTP protocol handler + - S6822460: support self-issued certificate + - S6830658: Changeset 67e5d3e41b5b breaks the fastdebug build in NativeCreds.c + - S6835668: Use of /usr/include/linux/ files creates a dependence on kernel-headers + - S6855297: Windows build breaks after 6811297 + - S6856856: NPE in HTTP protocol handler logging + - S6868106: Ukrainian currency has wrong format + - S6870908: reopen bug 4244752: month names in Estonian should be lowercase + - S6873931: New Turkish currency since 2009 + - S6882594: Remove static dependancy on NTLM authentication + - S6899503: Security code issue using Verisign root certificate + - S6910489: Slovenia Locale, wrong firstDayOfWeek number + - S6911104: Tests do not work with CYGWIN: tools, sun/tools, and com/sun/tools + - S6914413: abbreviation name for November is not correct in be_BY + - S6916787: Ukrainian currency name needs to be fixed + - S6919624: minimalDaysInFirstWeek ressource for hungarian is wrong + - S6931564: Incorrect display name of Locale for south africa + - S6931566: NetworkInterface is not working when interface name is more than 15 characters long + - S6938454: 2 new testcases for bug: Unable to determine generic type in program that compiles under Java 6 + - S6938454: Unable to determine generic type in program that compiles under Java 6 + - S6945604: wrong error message in CardImpl.java + - S6962617: Testcase changes, cleanup of problem list for jdk_tools targets + - S6964714: NetworkInterface getInetAddresses enumerates IPv6 addresses if java.net.preferIPvStack property set + - S6967937: Scope id no longer being set after 6931566 + - S6972374: NetworkInterface.getNetworkInterfaces throws "java.net.SocketException" on Solaris zone + - S6976117: SSLContext.getInstance("TLSv1.1") returns SSLEngines/SSLSockets without TLSv1.1 enabled + - S7001720: copyright templates not rebranded + - S7019267: Currency Display Names are not localized into pt_BR. + - S7020583: Some currency names are missing in some locales + - S7020960: CurrencyNames_sr_RS.properties is missing. + - S7022269: clean up fscanf usage in Linux networking native code + - S7025837: fix plural currency display names in sr_Latn_(BA|ME|RS).properties + - S7028073: The currency symbol for Peru is wrong + - S7035555: 4/4 attach/BasicTests.sh needs another tweak for Cygwin + - S7036025: java.security.AccessControlException when creating JFileChooser in signed applet + - S7036905: [de] dem - the german mark display name is incorrect + - S7047033: (smartcardio) Card.disconnect(boolean reset) does not reset when reset is true + - S7066203: Update currency data to the latest ISO 4217 standard + - S7077119: remove past transition dates from CurrencyData.properties file + - S7085757: Currency Data: ISO 4217 Amendment 152 + - S7122142, RH1151372: (ann) Race condition between isAnnotationPresent and getAnnotations + - S7153184: NullPointerException when calling SSLEngineImpl.getSupportedCipherSuites + - S7161796, RH1151372: PhaseStringOpts::fetch_static_field tries to fetch field from the Klass instead of the mirror + - S7171028: dots are missed in the datetime for Slovanian + - S7174244: NPE in Krb5ProxyImpl.getServerKeys() + - S7185456: (ann) Optimize Annotation handling in java/sun.reflect.* code for small number of annotations + - S7189611: Venezuela current Currency should be Bs.F. + - S7195759: ISO 4217 Amendment 154 + - S7199066: Typo in method name + - S7201205: Add Makefile configuration option to build with unlimited crypto in OpenJDK. + - S8005232: (JEP-149) Class Instance size reduction + - S8006748: getISO3Country() returns wrong value + - S8013836: getFirstDayOfWeek reports wrong day for pt-BR locale + - S8015421: NegativeArraySizeException occurs in ChunkedOutputStream() with Integer.MAX_VALUE + - S8015570: Use long comparison in Rule.getRules(). + - S8021121: ISO 4217 Amendment Number 156 + - S8021372: NetworkInterface.getNetworkInterfaces() returns duplicate hardware address + - S8022721: TEST_BUG: AnnotationTypeDeadlockTest.java throws java.lang.IllegalStateException: unexpected condition + - S8023956: Provide a work-around to broken Linux 32 bit "Exec Shield" using CS for NX emulation (crashing with SI_KERNEL) + - S8025051: Update resource files for TimeZone display names + - S8026772: test/sun/util/resources/TimeZone/Bug6317929.java failing + - S8027359: XML parser returns incorrect parsing results + - S8027370: Support tzdata2013h + - S8027695: There should be a space before % sign in Swedish locale + - S8028627: Unsynchronized code path from javax.crypto.Cipher to the WeakHashMap used by JceSecurity to store codebase mappings + - S8028726: (prefs) Check src/solaris/native/java/util/FileSystemPreferences.c for JNI pending exceptions + - S8029153: [TESTBUG] test/compiler/7141637/SpreadNullArg.java fails because it expects NullPointerException + - S8029318: Native Windows ccache still reads DES tickets + - S8030822: (tz) Support tzdata2013i + - S8031046: Native Windows ccache might still get unsupported ticket + - S8032788: ImageIcon constructor throws an NPE and hangs when passed a null String parameter + - S8032909: XSLT string-length returns incorrect length when string includes complementary chars + - S8035613: With active Securitymanager JAXBContext.newInstance fails + - S8037012: (tz) Support tzdata2014a + - S8038306: (tz) Support tzdata2014b + - S8040617: [macosx] Large JTable cell results in a OutOfMemoryException + - S8041990: [macosx] Language specific keys does not work in applets when opened outside the browser + - S8043012: (tz) Support tzdata2014c + - S8046343: (smartcardio) CardTerminal.connect('direct') does not work on MacOSX + - S8049250: Need a flag to invert the Card.disconnect(reset) argument + - S8049343: (tz) Support tzdata2014g + - S8050485: super() in a try block in a ctor causes VerifyError + - S8051012: Regression in verifier for method call from inside of a branch + - S8051614: smartcardio TCK tests fail due to lack of 'reset' permission + - S8054367: More references for endpoints + - S8055222: Currency update needed for ISO 4217 Amendment #159 + - S8056211: api/java_awt/Event/InputMethodEvent/serial/index.html#Input[serial2002] failure + - S8058715: stability issues when being launched as an embedded JVM via JNI + - S8059206: (tz) Support tzdata2014i + - S8060474: Resolve more parsing ambiguity + - S8061826: Part of JDK-8060474 should be reverted + - S8062561: Test bug8055304 fails if file system default directory has read access + - S8062807: Exporting RMI objects fails when run under restrictive SecurityManager + - S8064560: (tz) Support tzdata2014j +* Backports + - OJ51, PR2187: Sync patch for 4873188 with 7 version + - OJ52, PR2185: Application of 6786276 introduces compatibility issue + - OJ53, PR2181: strict-aliasing warnings issued on PPC32 + - OJ54, PR2182: 6911104 reintroduces test fragment removed in existing 6964018 backport + - S6730740, PR2186: Fix for 6729881 has apparently broken several 64 bit tests: "Bad address" + - S7031830, PR2183: bad_record_mac failure on TLSv1.2 enabled connection with SSLEngine + - S8000897, PR2173, RH1155012: VM crash in CompileBroker + - S8020190, PR2174, RH1176718: Fatal: Bug in native code: jfieldID must match object + - S8028623, PR2177, RH1168693: SA: hash codes in SymbolTable mismatching java_lang_String::hash_code for extended characters. + - S8061785, PR2177: [TEST_BUG] serviceability/sa/jmap-hashcode/Test8028623.java has utf8 character corrupted by earlier merge +* Bug fixes + - PR1831: Drop version requirement for LCMS 2 + - PR1832, RH1022017: Report elliptic curves supported by NSS, not the SunEC library + - PR2033: patches/ecj/jaxws-getdtdtype.patch no longer applies since removal of JAXWS drop + - PR2062: Unset OS before running OpenJDK build + - PR2070: Type-punning warnings still evident on RHEL 5 + - PR2082: Cast should use same type as GCDrainStackTargetSize (uintx). + - PR2096, RH1163501: 2048-bit DH upper bound too small for Fedora infrastructure + - PR2125: Synchronise elliptic curves in sun.security.ec.NamedCurve with those listed by NSS + - PR2179: Avoid x86 workaround when running Zero rather than a JIT + - PR2180: Old autotools dislike $(builddir)/fsg.sh +* CACAO + - PR2184: CACAO lacks JVM_FindClassFromCaller introduced by security patch in 1.13.6 +* JamVM + - PR2190: JamVM lacks JVM_FindClassFromCaller introduced by security patch in 1.13.6 + New in release 1.13.5 (2014-10-14): * Security fixes @@ -54,7 +232,7 @@ - S8042850: Extra unused entries in ICU ScriptCodes enum - S8052162: REGRESSION: sun/java2d/cmm/ColorConvertOp tests fail since 7u71 b01 - S8053963: (dc) Use DatagramChannel.receive() instead of read() in connect() - * Backports +* Backports - S4963723: Implement SHA-224 - S6578658: Request for raw RSA (NONEwithRSA) Signature support in SunMSCAPI - S6753664: Support SHA256 (and higher) in SunMSCAPI Binary files /tmp/PSmT1xE_pF/openjdk-6-6b33-1.13.5/openjdk-6-src-b33-14_oct_2014.tar.xz and /tmp/yuRmvDh6IL/openjdk-6-6b34-1.13.6/openjdk-6-src-b33-14_oct_2014.tar.xz differ Binary files /tmp/PSmT1xE_pF/openjdk-6-6b33-1.13.5/openjdk-6-src-b34-20_jan_2015.tar.xz and /tmp/yuRmvDh6IL/openjdk-6-6b34-1.13.6/openjdk-6-src-b34-20_jan_2015.tar.xz differ diff -Nru openjdk-6-6b33-1.13.5/patches/cacao/pr2184.patch openjdk-6-6b34-1.13.6/patches/cacao/pr2184.patch --- openjdk-6-6b33-1.13.5/patches/cacao/pr2184.patch 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/cacao/pr2184.patch 2015-01-21 22:23:45.000000000 +0000 @@ -0,0 +1,75 @@ +# HG changeset patch +# User Xerxes Rånby +# Date 1414362363 -3600 +# Node ID ec6bd33b3e927738d1353e6e639e76f74d55635f +# Parent ea3c9a40d975430d1e9dcb598bf25b4bd7aec4ca +OpenJDK: Implement JVM_FindClassFromCaller + +8015256: Better class accessibility +Summary: Improve protection domain check in forName() + +* contrib/mapfile-vers-product: Export said function. +* src/native/vm/openjdk/jvm.cpp (JVM_FindClassFromCaller): Implement it. + +diff --git a/contrib/mapfile-vers-product b/contrib/mapfile-vers-product +--- cacao/cacao/contrib/mapfile-vers-product ++++ cacao/cacao/contrib/mapfile-vers-product +@@ -87,6 +87,7 @@ + JVM_Exit; + JVM_FillInStackTrace; + JVM_FindClassFromBootLoader; ++ JVM_FindClassFromCaller; + JVM_FindClassFromClass; + JVM_FindClassFromClassLoader; + JVM_FindLibraryEntry; +--- cacao/cacao/src/native/vm/openjdk/jvm.cpp.orig 2014-10-29 16:40:30.732305204 +0000 ++++ cacao/cacao/src/native/vm/openjdk/jvm.cpp 2014-10-29 16:44:06.643292016 +0000 +@@ -684,6 +684,48 @@ + } + + ++/* JVM_FindClassFromCaller ++ * Find a class from a given class loader. Throws ClassNotFoundException. ++ * name: name of class ++ * init: whether initialization is done ++ * loader: class loader to look up the class. ++ * This may not be the same as the caller's class loader. ++ * caller: initiating class. The initiating class may be null when a security ++ * manager is not installed. ++ * ++ * Find a class with this name in this loader, ++ * using the caller's "protection domain". ++ */ ++ ++jclass JVM_FindClassFromCaller(JNIEnv* env, const char* name, jboolean init, jobject loader, jclass caller) ++{ ++ classinfo *c; ++ utf *u; ++ classloader_t *cl; ++ ++ TRACEJVMCALLS(("JVM_FindClassFromCaller(name=%s, init=%d, loader=%p, caller=%p)", name, init, loader, caller)); ++ ++ u = utf_new_char(name); ++ cl = loader_hashtable_classloader_add((java_handle_t *) loader); ++ ++ /* XXX The caller's protection domain should be used during ++ the load_class_from_classloader but there is no specification or ++ unit-test in OpenJDK documenting the desired effect */ ++ ++ c = load_class_from_classloader(u, cl); ++ ++ if (c == NULL) ++ return NULL; ++ ++ if (init) ++ if (!(c->state & CLASS_INITIALIZED)) ++ if (!initialize_class(c)) ++ return NULL; ++ ++ return (jclass) LLNI_classinfo_wrap(c); ++} ++ ++ + /* JVM_FindClassFromClassLoader */ + + jclass JVM_FindClassFromClassLoader(JNIEnv* env, const char* name, jboolean init, jobject loader, jboolean throwError) diff -Nru openjdk-6-6b33-1.13.5/patches/clean-crypto.patch openjdk-6-6b34-1.13.6/patches/clean-crypto.patch --- openjdk-6-6b33-1.13.5/patches/clean-crypto.patch 2014-10-08 18:39:25.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/clean-crypto.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,1099 +0,0 @@ -diff -Nru openjdk.orig/jdk/make/javax/crypto/Makefile openjdk/jdk/make/javax/crypto/Makefile ---- openjdk.orig/jdk/make/javax/crypto/Makefile 2010-05-26 09:32:35.000000000 +0100 -+++ openjdk/jdk/make/javax/crypto/Makefile 2010-05-26 13:53:03.000000000 +0100 -@@ -155,7 +155,8 @@ - # - - ifdef OPENJDK --all: build-jar install-jar build-policy install-limited -+# We don't need any policy files. -+all: build-jar install-jar - else # OPENJDK - ifeq ($(strip $(FILES_java)),) - all: -diff -Nru openjdk.orig/jdk/src/share/classes/javax/crypto/Cipher.java openjdk/jdk/src/share/classes/javax/crypto/Cipher.java ---- openjdk.orig/jdk/src/share/classes/javax/crypto/Cipher.java 2010-05-26 09:32:39.000000000 +0100 -+++ openjdk/jdk/src/share/classes/javax/crypto/Cipher.java 2010-05-26 13:53:03.000000000 +0100 -@@ -144,12 +144,6 @@ - // The transformation - private String transformation; - -- // Crypto permission representing the maximum allowable cryptographic -- // strength that this Cipher object can be used for. (The cryptographic -- // strength is a function of the keysize and algorithm parameters encoded -- // in the crypto permission.) -- private CryptoPermission cryptoPerm; -- - // The exemption mechanism that needs to be enforced - private ExemptionMechanism exmech; - -@@ -190,16 +184,9 @@ - protected Cipher(CipherSpi cipherSpi, - Provider provider, - String transformation) { -- // See bug 4341369 & 4334690 for more info. -- // If the caller is trusted, then okey. -- // Otherwise throw a NullPointerException. -- if (!JceSecurityManager.INSTANCE.isCallerTrusted()) { -- throw new NullPointerException(); -- } - this.spi = cipherSpi; - this.provider = provider; - this.transformation = transformation; -- this.cryptoPerm = CryptoAllPermission.INSTANCE; - this.lock = null; - } - -@@ -212,7 +199,6 @@ - Cipher(CipherSpi cipherSpi, String transformation) { - this.spi = cipherSpi; - this.transformation = transformation; -- this.cryptoPerm = CryptoAllPermission.INSTANCE; - this.lock = null; - } - -@@ -442,9 +428,6 @@ - Exception failure = null; - while (t.hasNext()) { - Service s = (Service)t.next(); -- if (JceSecurity.canUseProvider(s.getProvider()) == false) { -- continue; -- } - Transform tr = getTransform(s, transforms); - if (tr == null) { - // should never happen -@@ -570,7 +553,6 @@ - } - Exception failure = null; - List transforms = getTransforms(transformation); -- boolean providerChecked = false; - String paddingError = null; - for (Iterator t = transforms.iterator(); t.hasNext();) { - Transform tr = (Transform)t.next(); -@@ -578,19 +560,6 @@ - if (s == null) { - continue; - } -- if (providerChecked == false) { -- // for compatibility, first do the lookup and then verify -- // the provider. this makes the difference between a NSAE -- // and a SecurityException if the -- // provider does not support the algorithm. -- Exception ve = JceSecurity.getVerificationResult(provider); -- if (ve != null) { -- String msg = "JCE cannot authenticate the provider " -- + provider.getName(); -- throw new SecurityException(msg, ve); -- } -- providerChecked = true; -- } - if (tr.supportsMode(s) == S_NO) { - continue; - } -@@ -603,7 +572,6 @@ - tr.setModePadding(spi); - Cipher cipher = new Cipher(spi, transformation); - cipher.provider = s.getProvider(); -- cipher.initCryptoPermission(); - return cipher; - } catch (Exception e) { - failure = e; -@@ -622,22 +590,6 @@ - ("No such algorithm: " + transformation, failure); - } - -- // If the requested crypto service is export-controlled, -- // determine the maximum allowable keysize. -- private void initCryptoPermission() throws NoSuchAlgorithmException { -- if (JceSecurity.isRestricted() == false) { -- cryptoPerm = CryptoAllPermission.INSTANCE; -- exmech = null; -- return; -- } -- cryptoPerm = getConfiguredPermission(transformation); -- // Instantiate the exemption mechanism (if required) -- String exmechName = cryptoPerm.getExemptionMechanism(); -- if (exmechName != null) { -- exmech = ExemptionMechanism.getInstance(exmechName); -- } -- } -- - // max number of debug warnings to print from chooseFirstProvider() - private static int warnCount = 10; - -@@ -679,9 +631,6 @@ - s = (Service)serviceIterator.next(); - thisSpi = null; - } -- if (JceSecurity.canUseProvider(s.getProvider()) == false) { -- continue; -- } - Transform tr = getTransform(s, transforms); - if (tr == null) { - // should never happen -@@ -699,7 +648,6 @@ - thisSpi = (CipherSpi)obj; - } - tr.setModePadding(thisSpi); -- initCryptoPermission(); - spi = thisSpi; - provider = s.getProvider(); - // not needed any more -@@ -731,19 +679,15 @@ - InvalidAlgorithmParameterException { - switch (type) { - case I_KEY: -- checkCryptoPerm(thisSpi, key); - thisSpi.engineInit(opmode, key, random); - break; - case I_PARAMSPEC: -- checkCryptoPerm(thisSpi, key, paramSpec); - thisSpi.engineInit(opmode, key, paramSpec, random); - break; - case I_PARAMS: -- checkCryptoPerm(thisSpi, key, params); - thisSpi.engineInit(opmode, key, params, random); - break; - case I_CERT: -- checkCryptoPerm(thisSpi, key); - thisSpi.engineInit(opmode, key, random); - break; - default: -@@ -777,9 +721,6 @@ - if (s.supportsParameter(key) == false) { - continue; - } -- if (JceSecurity.canUseProvider(s.getProvider()) == false) { -- continue; -- } - Transform tr = getTransform(s, transforms); - if (tr == null) { - // should never happen -@@ -793,7 +734,6 @@ - thisSpi = (CipherSpi)s.newInstance(null); - } - tr.setModePadding(thisSpi); -- initCryptoPermission(); - implInit(thisSpi, initType, opmode, key, paramSpec, - params, random); - provider = s.getProvider(); -@@ -939,107 +879,6 @@ - return exmech; - } - -- // -- // Crypto permission check code below -- // -- private void checkCryptoPerm(CipherSpi checkSpi, Key key) -- throws InvalidKeyException { -- if (cryptoPerm == CryptoAllPermission.INSTANCE) { -- return; -- } -- // Check if key size and default parameters are within legal limits -- AlgorithmParameterSpec params; -- try { -- params = getAlgorithmParameterSpec(checkSpi.engineGetParameters()); -- } catch (InvalidParameterSpecException ipse) { -- throw new InvalidKeyException -- ("Unsupported default algorithm parameters"); -- } -- if (!passCryptoPermCheck(checkSpi, key, params)) { -- throw new InvalidKeyException( -- "Illegal key size or default parameters"); -- } -- } -- -- private void checkCryptoPerm(CipherSpi checkSpi, Key key, -- AlgorithmParameterSpec params) throws InvalidKeyException, -- InvalidAlgorithmParameterException { -- if (cryptoPerm == CryptoAllPermission.INSTANCE) { -- return; -- } -- // Determine keysize and check if it is within legal limits -- if (!passCryptoPermCheck(checkSpi, key, null)) { -- throw new InvalidKeyException("Illegal key size"); -- } -- if ((params != null) && (!passCryptoPermCheck(checkSpi, key, params))) { -- throw new InvalidAlgorithmParameterException("Illegal parameters"); -- } -- } -- -- private void checkCryptoPerm(CipherSpi checkSpi, Key key, -- AlgorithmParameters params) -- throws InvalidKeyException, InvalidAlgorithmParameterException { -- if (cryptoPerm == CryptoAllPermission.INSTANCE) { -- return; -- } -- // Convert the specified parameters into specs and then delegate. -- AlgorithmParameterSpec pSpec; -- try { -- pSpec = getAlgorithmParameterSpec(params); -- } catch (InvalidParameterSpecException ipse) { -- throw new InvalidAlgorithmParameterException -- ("Failed to retrieve algorithm parameter specification"); -- } -- checkCryptoPerm(checkSpi, key, pSpec); -- } -- -- private boolean passCryptoPermCheck(CipherSpi checkSpi, Key key, -- AlgorithmParameterSpec params) -- throws InvalidKeyException { -- String em = cryptoPerm.getExemptionMechanism(); -- int keySize = checkSpi.engineGetKeySize(key); -- // Use the "algorithm" component of the cipher -- // transformation so that the perm check would -- // work when the key has the "aliased" algo. -- String algComponent; -- int index = transformation.indexOf('/'); -- if (index != -1) { -- algComponent = transformation.substring(0, index); -- } else { -- algComponent = transformation; -- } -- CryptoPermission checkPerm = -- new CryptoPermission(algComponent, keySize, params, em); -- -- if (!cryptoPerm.implies(checkPerm)) { -- if (debug != null) { -- debug.println("Crypto Permission check failed"); -- debug.println("granted: " + cryptoPerm); -- debug.println("requesting: " + checkPerm); -- } -- return false; -- } -- if (exmech == null) { -- return true; -- } -- try { -- if (!exmech.isCryptoAllowed(key)) { -- if (debug != null) { -- debug.println(exmech.getName() + " isn't enforced"); -- } -- return false; -- } -- } catch (ExemptionMechanismException eme) { -- if (debug != null) { -- debug.println("Cannot determine whether "+ -- exmech.getName() + " has been enforced"); -- eme.printStackTrace(); -- } -- return false; -- } -- return true; -- } -- - // check if opmode is one of the defined constants - // throw InvalidParameterExeption if not - private static void checkOpmode(int opmode) { -@@ -1144,7 +983,6 @@ - checkOpmode(opmode); - - if (spi != null) { -- checkCryptoPerm(spi, key); - spi.engineInit(opmode, key, random); - } else { - try { -@@ -1270,7 +1108,6 @@ - checkOpmode(opmode); - - if (spi != null) { -- checkCryptoPerm(spi, key, params); - spi.engineInit(opmode, key, params, random); - } else { - chooseProvider(I_PARAMSPEC, opmode, key, params, null, random); -@@ -1391,7 +1228,6 @@ - checkOpmode(opmode); - - if (spi != null) { -- checkCryptoPerm(spi, key, params); - spi.engineInit(opmode, key, params, random); - } else { - chooseProvider(I_PARAMS, opmode, key, null, params, random); -@@ -1555,7 +1391,6 @@ - (certificate==null? null:certificate.getPublicKey()); - - if (spi != null) { -- checkCryptoPerm(spi, publicKey); - spi.engineInit(opmode, publicKey, random); - } else { - try { -@@ -2361,12 +2196,15 @@ - return null; - } - -+ // Used by getMaxAllowedKeyLength and getMaxAllowedParameterSpec -+ // always returns CryptoAllPermission. Old stuff from bad old days. - private static CryptoPermission getConfiguredPermission( - String transformation) throws NullPointerException, - NoSuchAlgorithmException { - if (transformation == null) throw new NullPointerException(); -- String[] parts = tokenizeTransformation(transformation); -- return JceSecurityManager.INSTANCE.getCryptoPermission(parts[0]); -+ // Called to make sure it is a valid transformation. -+ tokenizeTransformation(transformation); -+ return CryptoAllPermission.INSTANCE; - } - - /** -diff -Nru openjdk.orig/jdk/src/share/classes/javax/crypto/JarVerifier.java openjdk/jdk/src/share/classes/javax/crypto/JarVerifier.java ---- openjdk.orig/jdk/src/share/classes/javax/crypto/JarVerifier.java 2010-05-26 09:32:39.000000000 +0100 -+++ openjdk/jdk/src/share/classes/javax/crypto/JarVerifier.java 1970-01-01 01:00:00.000000000 +0100 -@@ -1,170 +0,0 @@ --/* -- * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. -- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -- * -- * This code is free software; you can redistribute it and/or modify it -- * under the terms of the GNU General Public License version 2 only, as -- * published by the Free Software Foundation. Oracle designates this -- * particular file as subject to the "Classpath" exception as provided -- * by Oracle in the LICENSE file that accompanied this code. -- * -- * This code is distributed in the hope that it will be useful, but WITHOUT -- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- * version 2 for more details (a copy is included in the LICENSE file that -- * accompanied this code). -- * -- * You should have received a copy of the GNU General Public License version -- * 2 along with this work; if not, write to the Free Software Foundation, -- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -- * -- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -- * or visit www.oracle.com if you need additional information or have any -- * questions. -- */ -- --package javax.crypto; -- --import java.io.*; --import java.net.*; --import java.security.*; --import java.util.*; --import java.util.jar.*; --import javax.crypto.CryptoPolicyParser.ParsingException; -- --/** -- * This class verifies JAR files (and any supporting JAR files), and -- * determines whether they may be used in this implementation. -- * -- * The JCE in OpenJDK has an open cryptographic interface, meaning it -- * does not restrict which providers can be used. Compliance with -- * United States export controls and with local law governing the -- * import/export of products incorporating the JCE in the OpenJDK is -- * the responsibility of the licensee. -- * -- * @since 1.7 -- */ --final class JarVerifier { -- -- // The URL for the JAR file we want to verify. -- private URL jarURL; -- private boolean savePerms; -- private CryptoPermissions appPerms = null; -- -- /** -- * Creates a JarVerifier object to verify the given URL. -- * -- * @param jarURL the JAR file to be verified. -- * @param savePerms if true, save the permissions allowed by the -- * exemption mechanism -- */ -- JarVerifier(URL jarURL, boolean savePerms) { -- this.jarURL = jarURL; -- this.savePerms = savePerms; -- } -- -- /** -- * Verify the JAR file is signed by an entity which has a certificate -- * issued by a trusted CA. -- * -- * In OpenJDK, we just need to examine the "cryptoperms" file to see -- * if any permissions were bundled together with this jar file. -- */ -- void verify() throws JarException, IOException { -- -- // Short-circuit. If we weren't asked to save any, we're done. -- if (!savePerms) { -- return; -- } -- -- // If the protocol of jarURL isn't "jar", we should -- // construct a JAR URL so we can open a JarURLConnection -- // for verifying this provider. -- final URL url = jarURL.getProtocol().equalsIgnoreCase("jar")? -- jarURL : new URL("jar:" + jarURL.toString() + "!/"); -- -- JarFile jf = null; -- try { -- -- // Get a link to the Jarfile to search. -- try { -- jf = (JarFile) -- AccessController.doPrivileged( -- new PrivilegedExceptionAction() { -- public Object run() throws Exception { -- JarURLConnection conn = -- (JarURLConnection) url.openConnection(); -- // You could do some caching here as -- // an optimization. -- conn.setUseCaches(false); -- return conn.getJarFile(); -- } -- }); -- } catch (java.security.PrivilegedActionException pae) { -- SecurityException se = new SecurityException( -- "Cannot load " + url.toString()); -- se.initCause(pae); -- throw se; -- } -- -- if (jf != null) { -- JarEntry je = jf.getJarEntry("cryptoPerms"); -- if (je == null) { -- throw new JarException( -- "Can not find cryptoPerms"); -- } -- try { -- appPerms = new CryptoPermissions(); -- appPerms.load(jf.getInputStream(je)); -- } catch (Exception ex) { -- JarException jex = -- new JarException("Cannot load/parse" + -- jarURL.toString()); -- jex.initCause(ex); -- throw jex; -- } -- } -- } finally { -- // Only call close() when caching is not enabled. -- // Otherwise, exceptions will be thrown for all -- // subsequent accesses of this cached jar. -- if (jf != null) { -- jf.close(); -- } -- } -- } -- -- /** -- * Verify that the provided JarEntry was indeed signed by the -- * framework signing certificate. -- * -- * @param je the URL of the jar entry to be checked. -- * @throws Exception if the jar entry was not signed by -- * the proper certificate -- */ -- static void verifyFrameworkSigned(URL je) throws Exception { -- } -- -- /** -- * Verify that the provided certs include the -- * framework signing certificate. -- * -- * @param certs the list of certs to be checked. -- * @throws Exception if the list of certs did not contain -- * the framework signing certificate -- */ -- static void verifyPolicySigned(java.security.cert.Certificate[] certs) -- throws Exception { -- } -- -- /** -- * Returns the permissions which are bundled with the JAR file, -- * aka the "cryptoperms" file. -- * -- * NOTE: if this JarVerifier instance is constructed with "savePerms" -- * equal to false, then this method would always return null. -- */ -- CryptoPermissions getPermissions() { -- return appPerms; -- } --} -diff -Nru openjdk.orig/jdk/src/share/classes/javax/crypto/JceSecurity.java openjdk/jdk/src/share/classes/javax/crypto/JceSecurity.java ---- openjdk.orig/jdk/src/share/classes/javax/crypto/JceSecurity.java 2010-05-26 09:32:39.000000000 +0100 -+++ openjdk/jdk/src/share/classes/javax/crypto/JceSecurity.java 2010-05-26 13:53:03.000000000 +0100 -@@ -25,11 +25,7 @@ - - package javax.crypto; - --import java.lang.ref.*; - import java.util.*; --import java.util.jar.*; --import java.io.*; --import java.net.URL; - import java.security.*; - - import java.security.Provider.Service; -@@ -48,72 +44,25 @@ - - final class JceSecurity { - -+ // Used in KeyGenerator, Cipher and KeyAgreement. - static final SecureRandom RANDOM = new SecureRandom(); - -- // The defaultPolicy and exemptPolicy will be set up -- // in the static initializer. -- private static CryptoPermissions defaultPolicy = null; -- private static CryptoPermissions exemptPolicy = null; -- -- // Map of the providers we already have verified -- // value == PROVIDER_VERIFIED is successfully verified -- // value is failure cause Exception in error case -- private final static Map verificationResults = new IdentityHashMap(); -- -- // Map of the providers currently being verified -- private final static Map verifyingProviders = new IdentityHashMap(); -- -- // Set the default value. May be changed in the static initializer. -- private static boolean isRestricted = true; -- - /* - * Don't let anyone instantiate this. - */ - private JceSecurity() { - } - -- static { -- try { -- AccessController.doPrivileged(new PrivilegedExceptionAction() { -- public Object run() throws Exception { -- setupJurisdictionPolicies(); -- return null; -- } -- }); -- -- isRestricted = defaultPolicy.implies( -- CryptoAllPermission.INSTANCE) ? false : true; -- } catch (Exception e) { -- SecurityException se = -- new SecurityException( -- "Can not initialize cryptographic mechanism"); -- se.initCause(e); -- throw se; -- } -- } -- - static Instance getInstance(String type, Class clazz, String algorithm, - String provider) throws NoSuchAlgorithmException, - NoSuchProviderException { - Service s = GetInstance.getService(type, algorithm, provider); -- Exception ve = getVerificationResult(s.getProvider()); -- if (ve != null) { -- String msg = "JCE cannot authenticate the provider " + provider; -- throw (NoSuchProviderException) -- new NoSuchProviderException(msg).initCause(ve); -- } - return GetInstance.getInstance(s, clazz); - } - - static Instance getInstance(String type, Class clazz, String algorithm, - Provider provider) throws NoSuchAlgorithmException { - Service s = GetInstance.getService(type, algorithm, provider); -- Exception ve = JceSecurity.getVerificationResult(provider); -- if (ve != null) { -- String msg = "JCE cannot authenticate the provider " -- + provider.getName(); -- throw new SecurityException(msg, ve); -- } - return GetInstance.getInstance(s, clazz); - } - -@@ -123,10 +72,6 @@ - NoSuchAlgorithmException failure = null; - for (Iterator t = services.iterator(); t.hasNext(); ) { - Service s = (Service)t.next(); -- if (canUseProvider(s.getProvider()) == false) { -- // allow only signed providers -- continue; -- } - try { - Instance instance = GetInstance.getInstance(s, clazz); - return instance; -@@ -138,203 +83,10 @@ - + " not available", failure); - } - -- /** -- * Verify if the JAR at URL codeBase is a signed exempt application -- * JAR file and returns the permissions bundled with the JAR. -- * -- * @throws Exception on error -- */ -- static CryptoPermissions verifyExemptJar(URL codeBase) throws Exception { -- JarVerifier jv = new JarVerifier(codeBase, true); -- jv.verify(); -- return jv.getPermissions(); -- } -- -- /** -- * Verify if the JAR at URL codeBase is a signed provider JAR file. -- * -- * @throws Exception on error -- */ -- static void verifyProviderJar(URL codeBase) throws Exception { -- // Verify the provider JAR file and all -- // supporting JAR files if there are any. -- JarVerifier jv = new JarVerifier(codeBase, false); -- jv.verify(); -- } -- -- private final static Object PROVIDER_VERIFIED = Boolean.TRUE; -- -- /* -- * Verify that the provider JAR files are signed properly, which -- * means the signer's certificate can be traced back to a -- * JCE trusted CA. -- * Return null if ok, failure Exception if verification failed. -- */ -- static synchronized Exception getVerificationResult(Provider p) { -- Object o = verificationResults.get(p); -- if (o == PROVIDER_VERIFIED) { -- return null; -- } else if (o != null) { -- return (Exception)o; -- } -- if (verifyingProviders.get(p) != null) { -- // this method is static synchronized, must be recursion -- // return failure now but do not save the result -- return new NoSuchProviderException("Recursion during verification"); -- } -- try { -- verifyingProviders.put(p, Boolean.FALSE); -- URL providerURL = getCodeBase(p.getClass()); -- verifyProviderJar(providerURL); -- // Verified ok, cache result -- verificationResults.put(p, PROVIDER_VERIFIED); -- return null; -- } catch (Exception e) { -- verificationResults.put(p, e); -- return e; -- } finally { -- verifyingProviders.remove(p); -- } -- } -- -- // return whether this provider is properly signed and can be used by JCE -+ // Used to return whether this provider is properly signed and -+ // can be used by JCE. These days just returns true. Still used -+ // in SecretKeyFactory, KeyGenerator, Mac and KeyAgreement. - static boolean canUseProvider(Provider p) { -- return getVerificationResult(p) == null; -- } -- -- // dummy object to represent null -- private static final URL NULL_URL; -- -- static { -- try { -- NULL_URL = new URL("http://null.sun.com/"); -- } catch (Exception e) { -- throw new RuntimeException(e); -- } -- } -- -- // reference to a Map we use as a cache for codebases -- private static final Map codeBaseCacheRef = new WeakHashMap(); -- -- /* -- * Retuns the CodeBase for the given class. -- */ -- static URL getCodeBase(final Class clazz) { -- URL url = (URL)codeBaseCacheRef.get(clazz); -- if (url == null) { -- url = (URL)AccessController.doPrivileged(new PrivilegedAction() { -- public Object run() { -- ProtectionDomain pd = clazz.getProtectionDomain(); -- if (pd != null) { -- CodeSource cs = pd.getCodeSource(); -- if (cs != null) { -- return cs.getLocation(); -- } -- } -- return NULL_URL; -- } -- }); -- codeBaseCacheRef.put(clazz, url); -- } -- return (url == NULL_URL) ? null : url; -- } -- -- private static void setupJurisdictionPolicies() throws Exception { -- String javaHomeDir = System.getProperty("java.home"); -- String sep = File.separator; -- String pathToPolicyJar = javaHomeDir + sep + "lib" + sep + -- "security" + sep; -- -- File exportJar = new File(pathToPolicyJar, "US_export_policy.jar"); -- File importJar = new File(pathToPolicyJar, "local_policy.jar"); -- URL jceCipherURL = ClassLoader.getSystemResource -- ("javax/crypto/Cipher.class"); -- -- if ((jceCipherURL == null) || -- !exportJar.exists() || !importJar.exists()) { -- throw new SecurityException -- ("Cannot locate policy or framework files!"); -- } -- -- // Enforce the signer restraint, i.e. signer of JCE framework -- // jar should also be the signer of the two jurisdiction policy -- // jar files. -- JarVerifier.verifyFrameworkSigned(jceCipherURL); -- -- // Read jurisdiction policies. -- CryptoPermissions defaultExport = new CryptoPermissions(); -- CryptoPermissions exemptExport = new CryptoPermissions(); -- loadPolicies(exportJar, defaultExport, exemptExport); -- -- CryptoPermissions defaultImport = new CryptoPermissions(); -- CryptoPermissions exemptImport = new CryptoPermissions(); -- loadPolicies(importJar, defaultImport, exemptImport); -- -- // Merge the export and import policies for default applications. -- if (defaultExport.isEmpty() || defaultImport.isEmpty()) { -- throw new SecurityException("Missing mandatory jurisdiction " + -- "policy files"); -- } -- defaultPolicy = defaultExport.getMinimum(defaultImport); -- -- // Merge the export and import policies for exempt applications. -- if (exemptExport.isEmpty()) { -- exemptPolicy = exemptImport.isEmpty() ? null : exemptImport; -- } else { -- exemptPolicy = exemptExport.getMinimum(exemptImport); -- } -- } -- -- /** -- * Load the policies from the specified file. Also checks that the -- * policies are correctly signed. -- */ -- private static void loadPolicies(File jarPathName, -- CryptoPermissions defaultPolicy, -- CryptoPermissions exemptPolicy) -- throws Exception { -- -- JarFile jf = new JarFile(jarPathName); -- -- Enumeration entries = jf.entries(); -- while (entries.hasMoreElements()) { -- JarEntry je = (JarEntry)entries.nextElement(); -- InputStream is = null; -- try { -- if (je.getName().startsWith("default_")) { -- is = jf.getInputStream(je); -- defaultPolicy.load(is); -- } else if (je.getName().startsWith("exempt_")) { -- is = jf.getInputStream(je); -- exemptPolicy.load(is); -- } else { -- continue; -- } -- } finally { -- if (is != null) { -- is.close(); -- } -- } -- -- // Enforce the signer restraint, i.e. signer of JCE framework -- // jar should also be the signer of the two jurisdiction policy -- // jar files. -- JarVerifier.verifyPolicySigned(je.getCertificates()); -- } -- // Close and nullify the JarFile reference to help GC. -- jf.close(); -- jf = null; -- } -- -- static CryptoPermissions getDefaultPolicy() { -- return defaultPolicy; -- } -- -- static CryptoPermissions getExemptPolicy() { -- return exemptPolicy; -- } -- -- static boolean isRestricted() { -- return isRestricted; -+ return true; - } - } -diff -Nru openjdk.orig/jdk/src/share/classes/javax/crypto/JceSecurityManager.java openjdk/jdk/src/share/classes/javax/crypto/JceSecurityManager.java ---- openjdk.orig/jdk/src/share/classes/javax/crypto/JceSecurityManager.java 2010-05-26 09:32:39.000000000 +0100 -+++ openjdk/jdk/src/share/classes/javax/crypto/JceSecurityManager.java 1970-01-01 01:00:00.000000000 +0100 -@@ -1,252 +0,0 @@ --/* -- * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. -- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -- * -- * This code is free software; you can redistribute it and/or modify it -- * under the terms of the GNU General Public License version 2 only, as -- * published by the Free Software Foundation. Oracle designates this -- * particular file as subject to the "Classpath" exception as provided -- * by Oracle in the LICENSE file that accompanied this code. -- * -- * This code is distributed in the hope that it will be useful, but WITHOUT -- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- * version 2 for more details (a copy is included in the LICENSE file that -- * accompanied this code). -- * -- * You should have received a copy of the GNU General Public License version -- * 2 along with this work; if not, write to the Free Software Foundation, -- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -- * -- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -- * or visit www.oracle.com if you need additional information or have any -- * questions. -- */ -- --package javax.crypto; -- --import java.security.*; --import java.net.*; --import java.util.*; --import java.util.jar.*; -- --/** -- * The JCE security manager. -- * -- *

    The JCE security manager is responsible for determining the maximum -- * allowable cryptographic strength for a given applet/application, for a given -- * algorithm, by consulting the configured jurisdiction policy files and -- * the cryptographic permissions bundled with the applet/application. -- * -- *

    Note that this security manager is never installed, only instantiated. -- * -- * @author Jan Luehe -- * -- * @since 1.4 -- */ -- --final class JceSecurityManager extends SecurityManager { -- -- private static final CryptoPermissions defaultPolicy; -- private static final CryptoPermissions exemptPolicy; -- private static final CryptoAllPermission allPerm; -- private static final Vector TrustedCallersCache = new Vector(2); -- private static final Map exemptCache = new HashMap(); -- -- // singleton instance -- static final JceSecurityManager INSTANCE; -- -- static { -- defaultPolicy = JceSecurity.getDefaultPolicy(); -- exemptPolicy = JceSecurity.getExemptPolicy(); -- allPerm = CryptoAllPermission.INSTANCE; -- INSTANCE = (JceSecurityManager) -- AccessController.doPrivileged(new PrivilegedAction() { -- public Object run() { -- return new JceSecurityManager(); -- } -- }); -- } -- -- private JceSecurityManager() { -- // empty -- } -- -- /** -- * Returns the maximum allowable crypto strength for the given -- * applet/application, for the given algorithm. -- */ -- CryptoPermission getCryptoPermission(String alg) { -- // Need to convert to uppercase since the crypto perm -- // lookup is case sensitive. -- alg = alg.toUpperCase(Locale.ENGLISH); -- -- // If CryptoAllPermission is granted by default, we return that. -- // Otherwise, this will be the permission we return if anything goes -- // wrong. -- CryptoPermission defaultPerm = getDefaultPermission(alg); -- if (defaultPerm == CryptoAllPermission.INSTANCE) { -- return defaultPerm; -- } -- -- // Determine the codebase of the caller of the JCE API. -- // This is the codebase of the first class which is not in -- // javax.crypto.* packages. -- // NOTE: javax.crypto.* package maybe subject to package -- // insertion, so need to check its classloader as well. -- Class[] context = getClassContext(); -- URL callerCodeBase = null; -- int i; -- for (i=0; inext_cell(state->tos()); state->set_stack_size(0); @@ -30,9 +22,9 @@ for (; cell < limit; cell = state->next_cell(cell)) { state->set_type_at(cell, state->bottom_type()); } -diff --git a/src/share/vm/compiler/methodLiveness.cpp b/src/share/vm/compiler/methodLiveness.cpp ---- openjdk/hotspot/src/share/vm/compiler/methodLiveness.cpp -+++ openjdk/hotspot/src/share/vm/compiler/methodLiveness.cpp +diff -Nru openjdk.orig/hotspot/src/share/vm/compiler/methodLiveness.cpp openjdk/hotspot/src/share/vm/compiler/methodLiveness.cpp +--- openjdk.orig/hotspot/src/share/vm/compiler/methodLiveness.cpp 2015-01-20 02:18:13.308918231 +0000 ++++ openjdk/hotspot/src/share/vm/compiler/methodLiveness.cpp 2015-01-20 02:24:10.553291894 +0000 @@ -572,15 +572,15 @@ @@ -63,10 +55,10 @@ _analyzer->bit_map_size_bits()); answer.set_is_valid(); -diff --git a/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp b/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp ---- openjdk/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp -+++ openjdk/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp -@@ -957,7 +957,7 @@ +diff -Nru openjdk.orig/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp openjdk/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp +--- openjdk.orig/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp 2015-01-20 02:20:42.290742422 +0000 ++++ openjdk/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp 2015-01-20 02:24:10.557291942 +0000 +@@ -963,7 +963,7 @@ if (free_percentage < desired_free_percentage) { size_t desired_capacity = (size_t)(used() / ((double) 1 - desired_free_percentage)); assert(desired_capacity >= capacity(), "invalid expansion size"); @@ -75,7 +67,7 @@ } if (expand_bytes > 0) { if (PrintGCDetails && Verbose) { -@@ -6253,7 +6253,7 @@ +@@ -6282,7 +6282,7 @@ HeapWord* curAddr = _markBitMap.startWord(); while (curAddr < _markBitMap.endWord()) { size_t remaining = pointer_delta(_markBitMap.endWord(), curAddr); @@ -84,7 +76,7 @@ _markBitMap.clear_large_range(chunk); if (ConcurrentMarkSweepThread::should_yield() && !foregroundGCIsActive() && -@@ -6546,7 +6546,7 @@ +@@ -6575,7 +6575,7 @@ return; } // Double capacity if possible @@ -93,9 +85,9 @@ // Do not give up existing stack until we have managed to // get the double capacity that we desired. ReservedSpace rs(ReservedSpace::allocation_align_size_up( -diff --git a/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp b/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp ---- openjdk/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp -+++ openjdk/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp +diff -Nru openjdk.orig/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp openjdk/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp +--- openjdk.orig/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp 2015-01-20 02:18:02.044780293 +0000 ++++ openjdk/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp 2015-01-20 02:24:10.557291942 +0000 @@ -897,8 +897,8 @@ void PSParallelCompact::initialize_dead_wood_limiter() { @@ -107,9 +99,9 @@ _dwl_first_term = 1.0 / (sqrt(2.0 * M_PI) * _dwl_std_dev); DEBUG_ONLY(_dwl_initialized = true;) _dwl_adjustment = normal_distribution(1.0); -diff --git a/src/share/vm/gc_implementation/parallelScavenge/psPermGen.cpp b/src/share/vm/gc_implementation/parallelScavenge/psPermGen.cpp ---- openjdk/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPermGen.cpp -+++ openjdk/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPermGen.cpp +diff -Nru openjdk.orig/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPermGen.cpp openjdk/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPermGen.cpp +--- openjdk.orig/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPermGen.cpp 2015-01-20 02:18:02.140781469 +0000 ++++ openjdk/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPermGen.cpp 2015-01-20 02:24:10.557291942 +0000 @@ -69,7 +69,7 @@ _last_used = current_live; @@ -119,10 +111,10 @@ virtual_space()->alignment()); // Compute the desired size: -diff --git a/src/share/vm/memory/collectorPolicy.cpp b/src/share/vm/memory/collectorPolicy.cpp ---- openjdk/hotspot/src/share/vm/memory/collectorPolicy.cpp -+++ openjdk/hotspot/src/share/vm/memory/collectorPolicy.cpp -@@ -327,7 +327,7 @@ +diff -Nru openjdk.orig/hotspot/src/share/vm/memory/collectorPolicy.cpp openjdk/hotspot/src/share/vm/memory/collectorPolicy.cpp +--- openjdk.orig/hotspot/src/share/vm/memory/collectorPolicy.cpp 2015-01-20 02:18:07.024841278 +0000 ++++ openjdk/hotspot/src/share/vm/memory/collectorPolicy.cpp 2015-01-20 02:24:10.557291942 +0000 +@@ -330,7 +330,7 @@ // yield a size that is too small) and bound it by MaxNewSize above. // Ergonomics plays here by previously calculating the desired // NewSize and MaxNewSize. @@ -131,22 +123,10 @@ } assert(max_new_size > 0, "All paths should set max_new_size"); -diff --git a/src/share/vm/memory/threadLocalAllocBuffer.cpp b/src/share/vm/memory/threadLocalAllocBuffer.cpp ---- openjdk/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp -+++ openjdk/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp -@@ -240,7 +240,7 @@ - size_t init_sz; - - if (TLABSize > 0) { -- init_sz = MIN2(TLABSize / HeapWordSize, max_size()); -+ init_sz = MIN2((size_t) (TLABSize / HeapWordSize), max_size()); - } else if (global_stats() == NULL) { - // Startup issue - main thread initialized before heap initialized. - init_sz = min_size(); -diff --git a/src/share/vm/runtime/arguments.cpp b/src/share/vm/runtime/arguments.cpp ---- openjdk/hotspot/src/share/vm/runtime/arguments.cpp -+++ openjdk/hotspot/src/share/vm/runtime/arguments.cpp -@@ -1143,7 +1143,7 @@ +diff -Nru openjdk.orig/hotspot/src/share/vm/runtime/arguments.cpp openjdk/hotspot/src/share/vm/runtime/arguments.cpp +--- openjdk.orig/hotspot/src/share/vm/runtime/arguments.cpp 2015-01-20 02:22:59.128417610 +0000 ++++ openjdk/hotspot/src/share/vm/runtime/arguments.cpp 2015-01-20 02:24:10.557291942 +0000 +@@ -1168,7 +1168,7 @@ // NewSize was set on the command line and it is larger than // preferred_max_new_size. if (!FLAG_IS_DEFAULT(NewSize)) { // NewSize explicitly set at command-line @@ -155,7 +135,7 @@ } else { FLAG_SET_ERGO(uintx, MaxNewSize, preferred_max_new_size); } -@@ -1172,8 +1172,8 @@ +@@ -1197,8 +1197,8 @@ // Unless explicitly requested otherwise, make young gen // at least min_new, and at most preferred_max_new_size. if (FLAG_IS_DEFAULT(NewSize)) { @@ -166,9 +146,9 @@ if (PrintGCDetails && Verbose) { // Too early to use gclog_or_tty tty->print_cr("CMS ergo set NewSize: " SIZE_FORMAT, NewSize); -diff --git a/src/share/vm/utilities/bitMap.hpp b/src/share/vm/utilities/bitMap.hpp ---- openjdk/hotspot/src/share/vm/utilities/bitMap.hpp -+++ openjdk/hotspot/src/share/vm/utilities/bitMap.hpp +diff -Nru openjdk.orig/hotspot/src/share/vm/utilities/bitMap.hpp openjdk/hotspot/src/share/vm/utilities/bitMap.hpp +--- openjdk.orig/hotspot/src/share/vm/utilities/bitMap.hpp 2015-01-20 02:18:09.404870423 +0000 ++++ openjdk/hotspot/src/share/vm/utilities/bitMap.hpp 2015-01-20 02:24:10.557291942 +0000 @@ -79,7 +79,7 @@ // Set a word to a specified value or to all ones; clear a word. @@ -178,10 +158,10 @@ void clear_word(idx_t word) { _map[word] = 0; } // Utilities for ranges of bits. Ranges are half-open [beg, end). -diff --git a/src/share/vm/utilities/ostream.cpp b/src/share/vm/utilities/ostream.cpp ---- openjdk/hotspot/src/share/vm/utilities/ostream.cpp -+++ openjdk/hotspot/src/share/vm/utilities/ostream.cpp -@@ -961,7 +961,7 @@ +diff -Nru openjdk.orig/hotspot/src/share/vm/utilities/ostream.cpp openjdk/hotspot/src/share/vm/utilities/ostream.cpp +--- openjdk.orig/hotspot/src/share/vm/utilities/ostream.cpp 2015-01-20 02:20:42.314742716 +0000 ++++ openjdk/hotspot/src/share/vm/utilities/ostream.cpp 2015-01-20 02:24:10.557291942 +0000 +@@ -1121,7 +1121,7 @@ server.sin_port = htons(port); server.sin_addr.s_addr = inet_addr(ip); diff -Nru openjdk-6-6b33-1.13.5/patches/jamvm/pr2190-find_class_from_caller.patch openjdk-6-6b34-1.13.6/patches/jamvm/pr2190-find_class_from_caller.patch --- openjdk-6-6b33-1.13.5/patches/jamvm/pr2190-find_class_from_caller.patch 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/jamvm/pr2190-find_class_from_caller.patch 2015-01-23 18:50:42.000000000 +0000 @@ -0,0 +1,93 @@ +diff -Nru jamvm.old/src/classlib/openjdk/class.c jamvm/src/classlib/openjdk/class.c +--- jamvm/jamvm.old/src/classlib/openjdk/class.c 2013-11-18 03:45:44.000000000 +0000 ++++ jamvm/jamvm/src/classlib/openjdk/class.c 2015-01-07 16:14:57.599311159 +0000 +@@ -23,6 +23,7 @@ + #include "jam.h" + #include "hash.h" + #include "class.h" ++#include "excep.h" + #include "symbol.h" + + /* Cached offset of classes field in java.lang.ClassLoader objects */ +@@ -161,3 +162,24 @@ + + return strcat(strcpy(endorsed_dirs, java_home), "/lib/endorsed"); + } ++ ++Class *findClassFromLoader(char *name, int init, Object *loader, ++ int throw_error) { ++ ++ Class *class = findClassFromClassLoader(name, loader); ++ ++ if(class == NULL) { ++ if(!throw_error) { ++ Object *excep = exceptionOccurred(); ++ char *dot_name = slash2DotsDup(name); ++ ++ clearException(); ++ signalChainedException(java_lang_ClassNotFoundException, ++ dot_name, excep); ++ sysFree(dot_name); ++ } ++ } else if(init) ++ initClass(class); ++ ++ return class; ++} +diff -Nru jamvm.old/src/classlib/openjdk/jvm.c jamvm/src/classlib/openjdk/jvm.c +--- jamvm/jamvm.old/src/classlib/openjdk/jvm.c 2013-11-18 03:45:44.000000000 +0000 ++++ jamvm/jamvm/src/classlib/openjdk/jvm.c 2015-01-07 16:16:43.560605105 +0000 +@@ -520,26 +520,22 @@ + jclass JVM_FindClassFromClassLoader(JNIEnv *env, const char *name, + jboolean init, jobject loader, + jboolean throw_error) { +- Class *class; + + TRACE("JVM_FindClassFromClassLoader(env=%p, name=%s, init=%d, loader=%p," + " throwError=%d)", env, name, init, loader, throwError); + +- class = findClassFromClassLoader((char *)name, loader); ++ return findClassFromLoader((char *)name, init, loader, throw_error); ++} ++ ++/* JVM_FindClassFromCaller */ ++ ++jclass JVM_FindClassFromCaller(JNIEnv *env, const char *name, jboolean init, ++ jobject loader, jclass caller) { + +- if(class == NULL && !throw_error) { +- Object *excep = exceptionOccurred(); +- char *dot_name = slash2DotsDup((char*)name); +- +- clearException(); +- signalChainedException(java_lang_ClassNotFoundException, +- dot_name, excep); +- sysFree(dot_name); +- } else +- if(init) +- initClass(class); ++ TRACE("JVM_FindClassFromCaller(env=%p, name=%s, init=%d, loader=%p," ++ " caller=%p)", env, name, init, loader, caller); + +- return class; ++ return findClassFromLoader((char *)name, init, loader, FALSE); + } + + +diff -Nru jamvm.old/src/classlib/openjdk/openjdk.h jamvm/src/classlib/openjdk/openjdk.h +--- jamvm/jamvm.old/src/classlib/openjdk/openjdk.h 2013-11-18 03:45:44.000000000 +0000 ++++ jamvm/jamvm/src/classlib/openjdk/openjdk.h 2015-01-07 16:14:57.599311159 +0000 +@@ -1,5 +1,5 @@ + /* +- * Copyright (C) 2010, 2011, 2013 Robert Lougher . ++ * Copyright (C) 2010, 2011, 2013, 2014 Robert Lougher . + * + * This file is part of JamVM. + * +@@ -53,3 +53,6 @@ + extern Object *resolveMemberName(Class *mh_class, Object *mname); + + extern Object *getMethodParameters(Object *method); ++ ++extern Class *findClassFromLoader(char *name, int init, Object *loader, ++ int throw_error); diff -Nru openjdk-6-6b33-1.13.5/patches/jamvm-2.5.3-fix.diff openjdk-6-6b34-1.13.6/patches/jamvm-2.5.3-fix.diff --- openjdk-6-6b33-1.13.5/patches/jamvm-2.5.3-fix.diff 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/jamvm-2.5.3-fix.diff 2015-01-27 16:24:32.000000000 +0000 @@ -0,0 +1,76 @@ +--- jamvm/jamvm/src/classlib/openjdk/jvm.c ++++ jamvm/jamvm/src/classlib/openjdk/jvm.c +@@ -517,6 +517,48 @@ jclass JVM_FindClassFromBootLoader(JNIEnv *env, const char *name) { + } + + ++/* JVM_FindClassFromCaller ++ * Find a class from a given class loader. Throws ClassNotFoundException. ++ * name: name of class ++ * init: whether initialization is done ++ * loader: class loader to look up the class. ++ * This may not be the same as the caller's class loader. ++ * caller: initiating class. The initiating class may be null when a security ++ * manager is not installed. ++ * ++ * Find a class with this name in this loader, ++ * using the caller's "protection domain". ++ */ ++ ++jclass JVM_FindClassFromCaller(JNIEnv *env, const char *name, ++ jboolean init, jobject loader, ++ jclass caller) { ++ Class *class; ++ ++ TRACE("JVM_FindClassFromCaller(env=%p, name=%s, init=%d, loader=%p," ++ " caller=%p)", env, name, init, loader, caller); ++ ++ /* XXX The caller's protection domain should be used during ++ the findClassFromClassLoader but there is no specification or ++ unit-test in OpenJDK documenting the desired effect */ ++ ++ class = findClassFromClassLoader((char *)name, loader); ++ ++ if(class == NULL) { ++ Object *excep = exceptionOccurred(); ++ char *dot_name = slash2DotsDup((char*)name); ++ ++ clearException(); ++ signalChainedException(java_lang_ClassNotFoundException, ++ dot_name, excep); ++ sysFree(dot_name); ++ } else if(init) ++ initClass(class); ++ ++ return class; ++} ++ ++ + /* JVM_FindClassFromClassLoader */ + + jclass JVM_FindClassFromClassLoader(JNIEnv *env, const char *name, +@@ -2965,6 +3007,24 @@ void JVM_GetVersionInfo(JNIEnv *env, jvm_version_info *info, size_t info_size) { + } + + ++/* JVM_GetTemporaryDirectory ++ * Return the temporary directory that the VM uses for the attach ++ * and perf data files. ++ * ++ * It is important that this directory is well-known and the ++ * same for all VM instances. It cannot be affected by configuration ++ * variables such as java.io.tmpdir. ++ * ++ * JamVM do not support the jvmstat framework thus this is left unimplemented. ++ */ ++ ++jstring JVM_GetTemporaryDirectory(JNIEnv *env) { ++ UNIMPLEMENTED("JVM_GetTemporaryDirectory"); ++ ++ return 0; ++} ++ ++ + /* JVM_RegisterSignal */ + + extern void signalHandler(int sig); diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/4963723-implement_sha-224.patch openjdk-6-6b34-1.13.6/patches/openjdk/4963723-implement_sha-224.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/4963723-implement_sha-224.patch 2014-10-09 02:07:22.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/4963723-implement_sha-224.patch 2015-01-20 09:12:43.000000000 +0000 @@ -1,9 +1,9 @@ diff -Nru openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/HmacCore.java openjdk/jdk/src/share/classes/com/sun/crypto/provider/HmacCore.java ---- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/HmacCore.java 2014-07-14 04:24:43.000000000 +0100 -+++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/HmacCore.java 2014-10-08 23:26:07.127607311 +0100 +--- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/HmacCore.java 2014-12-24 18:49:01.960433052 +0000 ++++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/HmacCore.java 2014-12-24 20:08:44.235133898 +0000 @@ -1,5 +1,5 @@ /* -- * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. +- * Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -125,7 +125,7 @@ if (first == false) { md.reset(); first = true; -@@ -234,118 +228,38 @@ +@@ -234,115 +228,38 @@ * Clones this object. */ public Object clone() throws CloneNotSupportedException { @@ -149,7 +149,6 @@ - private final HmacCore core; + public static final class HmacSHA256 extends HmacCore { public HmacSHA256() throws NoSuchAlgorithmException { -- SunJCE.ensureIntegrity(getClass()); - core = new HmacCore("SHA-256", 64); - } - private HmacSHA256(HmacSHA256 base) throws CloneNotSupportedException { @@ -188,7 +187,6 @@ - private final HmacCore core; + public static final class HmacSHA384 extends HmacCore { public HmacSHA384() throws NoSuchAlgorithmException { -- SunJCE.ensureIntegrity(getClass()); - core = new HmacCore("SHA-384", 128); - } - private HmacSHA384(HmacSHA384 base) throws CloneNotSupportedException { @@ -227,7 +225,6 @@ - private final HmacCore core; + public static final class HmacSHA512 extends HmacCore { public HmacSHA512() throws NoSuchAlgorithmException { -- SunJCE.ensureIntegrity(getClass()); - core = new HmacCore("SHA-512", 128); - } - private HmacSHA512(HmacSHA512 base) throws CloneNotSupportedException { @@ -263,16 +260,16 @@ - } diff -Nru openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5.java openjdk/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5.java ---- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5.java 2014-07-14 04:24:43.000000000 +0100 -+++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5.java 2014-10-08 23:26:07.127607311 +0100 +--- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5.java 2014-12-24 18:49:01.960433052 +0000 ++++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5.java 2014-12-24 20:05:44.309011863 +0000 @@ -1,5 +1,5 @@ /* -- * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved. +- * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it -@@ -37,11 +37,7 @@ +@@ -37,97 +37,11 @@ * * @author Jan Luehe */ @@ -284,15 +281,8 @@ +public final class HmacMD5 extends HmacCore { /** * Standard constructor, creates a new HmacMD5 instance. - * Verify the SunJCE provider in the constructor. -@@ -50,92 +46,6 @@ - * its own integrity */ public HmacMD5() throws NoSuchAlgorithmException { -- if (!SunJCE.verifySelfIntegrity(this.getClass())) { -- throw new SecurityException("The SunJCE provider may have " + -- "been tampered."); -- } - hmac = new HmacCore(MessageDigest.getInstance("MD5"), - MD5_BLOCK_LENGTH); - } @@ -380,16 +370,16 @@ } } diff -Nru openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/HmacPKCS12PBESHA1.java openjdk/jdk/src/share/classes/com/sun/crypto/provider/HmacPKCS12PBESHA1.java ---- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/HmacPKCS12PBESHA1.java 2014-07-14 04:24:43.000000000 +0100 -+++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/HmacPKCS12PBESHA1.java 2014-10-08 23:26:07.127607311 +0100 +--- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/HmacPKCS12PBESHA1.java 2014-12-24 18:49:01.960433052 +0000 ++++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/HmacPKCS12PBESHA1.java 2014-12-24 20:04:48.704357000 +0000 @@ -1,5 +1,5 @@ /* -- * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. +- * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it -@@ -41,10 +41,7 @@ +@@ -41,26 +41,13 @@ * * @author Valerie Peng */ @@ -401,11 +391,8 @@ /** * Standard constructor, creates a new HmacSHA1 instance. -@@ -54,18 +51,7 @@ - * its own integrity */ public HmacPKCS12PBESHA1() throws NoSuchAlgorithmException { -- SunJCE.ensureIntegrity(this.getClass()); - this.hmac = new HmacCore(MessageDigest.getInstance("SHA1"), - SHA1_BLOCK_LENGTH); - } @@ -421,7 +408,7 @@ } /** -@@ -76,7 +62,7 @@ +@@ -71,7 +58,7 @@ * * @exception InvalidKeyException if the given key is inappropriate for * initializing this MAC. @@ -430,7 +417,7 @@ * parameters are inappropriate for this MAC. */ protected void engineInit(Key key, AlgorithmParameterSpec params) -@@ -145,64 +131,8 @@ +@@ -140,64 +127,8 @@ ("IterationCount must be a positive number"); } byte[] derivedKey = PKCS12PBECipherCore.derive(passwdChars, salt, @@ -498,16 +485,16 @@ } } diff -Nru openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1.java openjdk/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1.java ---- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1.java 2014-07-14 04:24:43.000000000 +0100 -+++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1.java 2014-10-08 23:26:07.127607311 +0100 +--- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1.java 2014-12-24 18:49:01.960433052 +0000 ++++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1.java 2014-12-24 20:03:59.847781984 +0000 @@ -1,5 +1,5 @@ /* -- * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved. +- * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it -@@ -37,11 +37,7 @@ +@@ -37,97 +37,11 @@ * * @author Jan Luehe */ @@ -519,15 +506,8 @@ +public final class HmacSHA1 extends HmacCore { /** * Standard constructor, creates a new HmacSHA1 instance. - * Verify the SunJCE provider in the constructor. -@@ -50,92 +46,6 @@ - * its own integrity */ public HmacSHA1() throws NoSuchAlgorithmException { -- if (!SunJCE.verifySelfIntegrity(this.getClass())) { -- throw new SecurityException("The SunJCE provider may have " + -- "been tampered."); -- } - this.hmac = new HmacCore(MessageDigest.getInstance("SHA1"), - SHA1_BLOCK_LENGTH); - } @@ -615,16 +595,16 @@ } } diff -Nru openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/KeyGeneratorCore.java openjdk/jdk/src/share/classes/com/sun/crypto/provider/KeyGeneratorCore.java ---- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/KeyGeneratorCore.java 2014-07-14 04:24:43.000000000 +0100 -+++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/KeyGeneratorCore.java 2014-10-08 23:26:07.127607311 +0100 +--- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/KeyGeneratorCore.java 2014-12-24 18:49:01.960433052 +0000 ++++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/KeyGeneratorCore.java 2014-12-24 20:02:30.166727408 +0000 @@ -1,5 +1,5 @@ /* -- * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. +- * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it -@@ -105,12 +105,12 @@ +@@ -105,11 +105,11 @@ return new SecretKeySpec(b, name); } @@ -634,24 +614,42 @@ + abstract static class HmacSHA2KG extends KeyGeneratorSpi { private final KeyGeneratorCore core; - public HmacSHA256KG() { -+ protected HmacSHA2KG(String algoName, int len) { - SunJCE.ensureIntegrity(getClass()); - core = new KeyGeneratorCore("HmacSHA256", 256); ++ protected HmacSHA2KG(String algoName, int len) { + core = new KeyGeneratorCore(algoName, len); } protected void engineInit(SecureRandom random) { core.implInit(random); -@@ -125,49 +125,25 @@ +@@ -124,50 +124,27 @@ protected SecretKey engineGenerateKey() { return core.implGenerateKey(); } -- } ++ public static final class SHA224 extends HmacSHA2KG { ++ public SHA224() { ++ super("HmacSHA224", 224); ++ } ++ } ++ public static final class SHA256 extends HmacSHA2KG { ++ public SHA256() { ++ super("HmacSHA256", 256); ++ } ++ } ++ public static final class SHA384 extends HmacSHA2KG { ++ public SHA384() { ++ super("HmacSHA384", 384); ++ } ++ } ++ public static final class SHA512 extends HmacSHA2KG { ++ public SHA512() { ++ super("HmacSHA512", 512); ++ } ++ } + } - - // nested static class for the HmacSHA384 key generator - public static final class HmacSHA384KG extends KeyGeneratorSpi { - private final KeyGeneratorCore core; - public HmacSHA384KG() { -- SunJCE.ensureIntegrity(getClass()); - core = new KeyGeneratorCore("HmacSHA384", 384); - } - protected void engineInit(SecureRandom random) { @@ -673,7 +671,6 @@ - public static final class HmacSHA512KG extends KeyGeneratorSpi { - private final KeyGeneratorCore core; - public HmacSHA512KG() { -- SunJCE.ensureIntegrity(getClass()); - core = new KeyGeneratorCore("HmacSHA512", 512); - } - protected void engineInit(SecureRandom random) { @@ -688,31 +685,15 @@ - } - protected SecretKey engineGenerateKey() { - return core.implGenerateKey(); -+ public static final class SHA224 extends HmacSHA2KG { -+ public SHA224() { -+ super("HmacSHA224", 224); -+ } -+ } -+ public static final class SHA256 extends HmacSHA2KG { -+ public SHA256() { -+ super("HmacSHA256", 256); -+ } -+ } -+ public static final class SHA384 extends HmacSHA2KG { -+ public SHA384() { -+ super("HmacSHA384", 384); -+ } -+ } -+ public static final class SHA512 extends HmacSHA2KG { -+ public SHA512() { -+ super("HmacSHA512", 512); -+ } - } - } - +- } +- } +- + // nested static class for the RC2 key generator + public static final class RC2KeyGenerator extends KeyGeneratorSpi { + private final KeyGeneratorCore core; diff -Nru openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java openjdk/jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java ---- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java 2014-07-14 04:24:43.000000000 +0100 -+++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java 2014-10-08 23:26:07.127607311 +0100 +--- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java 2013-08-21 20:33:04.180330661 +0100 ++++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java 2014-12-24 19:58:20.000164073 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. @@ -730,11 +711,11 @@ mgfSpec = MGF1ParameterSpec.SHA256; } else if (mgfDigestName.equals("SHA-384")) { diff -Nru openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java openjdk/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java ---- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java 2014-07-14 04:24:43.000000000 +0100 -+++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java 2014-10-08 23:26:07.127607311 +0100 +--- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java 2014-12-24 18:49:01.964433104 +0000 ++++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java 2014-12-24 19:58:39.268401924 +0000 @@ -1,5 +1,5 @@ /* -- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. +- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -748,7 +729,7 @@ * */ -@@ -121,6 +121,7 @@ +@@ -117,6 +117,7 @@ "NOPADDING|PKCS1PADDING|OAEPWITHMD5ANDMGF1PADDING" + "|OAEPWITHSHA1ANDMGF1PADDING" + "|OAEPWITHSHA-1ANDMGF1PADDING" @@ -756,7 +737,7 @@ + "|OAEPWITHSHA-256ANDMGF1PADDING" + "|OAEPWITHSHA-384ANDMGF1PADDING" + "|OAEPWITHSHA-512ANDMGF1PADDING"); -@@ -229,12 +230,25 @@ +@@ -225,12 +226,25 @@ put("KeyGenerator.HmacSHA1", "com.sun.crypto.provider.HmacSHA1KeyGenerator"); @@ -785,7 +766,7 @@ put("KeyPairGenerator.DiffieHellman", "com.sun.crypto.provider.DHKeyPairGenerator"); -@@ -397,12 +411,23 @@ +@@ -393,12 +407,23 @@ */ put("Mac.HmacMD5", "com.sun.crypto.provider.HmacMD5"); put("Mac.HmacSHA1", "com.sun.crypto.provider.HmacSHA1"); @@ -809,7 +790,7 @@ put("Mac.HmacPBESHA1", "com.sun.crypto.provider.HmacPKCS12PBESHA1"); -@@ -413,6 +438,7 @@ +@@ -409,6 +434,7 @@ put("Mac.HmacMD5 SupportedKeyFormats", "RAW"); put("Mac.HmacSHA1 SupportedKeyFormats", "RAW"); @@ -818,8 +799,8 @@ put("Mac.HmacSHA384 SupportedKeyFormats", "RAW"); put("Mac.HmacSHA512 SupportedKeyFormats", "RAW"); diff -Nru openjdk.orig/jdk/src/share/classes/java/security/spec/MGF1ParameterSpec.java openjdk/jdk/src/share/classes/java/security/spec/MGF1ParameterSpec.java ---- openjdk.orig/jdk/src/share/classes/java/security/spec/MGF1ParameterSpec.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/java/security/spec/MGF1ParameterSpec.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/share/classes/java/security/spec/MGF1ParameterSpec.java 2013-08-21 20:33:07.812389433 +0100 ++++ openjdk/jdk/src/share/classes/java/security/spec/MGF1ParameterSpec.java 2014-12-24 19:58:20.000164073 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. @@ -836,8 +817,8 @@ * { OID id-sha384 PARAMETERS NULL }| * { OID id-sha512 PARAMETERS NULL }, diff -Nru openjdk.orig/jdk/src/share/classes/java/security/spec/PSSParameterSpec.java openjdk/jdk/src/share/classes/java/security/spec/PSSParameterSpec.java ---- openjdk.orig/jdk/src/share/classes/java/security/spec/PSSParameterSpec.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/java/security/spec/PSSParameterSpec.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/share/classes/java/security/spec/PSSParameterSpec.java 2013-08-21 20:33:07.812389433 +0100 ++++ openjdk/jdk/src/share/classes/java/security/spec/PSSParameterSpec.java 2014-12-24 19:58:20.000164073 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2006, Oracle and/or its affiliates. All rights reserved. @@ -854,8 +835,8 @@ * { OID id-sha384 PARAMETERS NULL }| * { OID id-sha512 PARAMETERS NULL }, diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11Digest.java openjdk/jdk/src/share/classes/sun/security/pkcs11/P11Digest.java ---- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11Digest.java 2014-10-08 23:21:44.807972437 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/P11Digest.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11Digest.java 2014-12-24 19:57:29.151536657 +0000 ++++ openjdk/jdk/src/share/classes/sun/security/pkcs11/P11Digest.java 2014-12-24 19:58:20.000164073 +0000 @@ -39,7 +39,7 @@ /** @@ -876,8 +857,8 @@ digestLength = 32; break; diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11Mac.java openjdk/jdk/src/share/classes/sun/security/pkcs11/P11Mac.java ---- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11Mac.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/P11Mac.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11Mac.java 2013-08-21 20:33:03.292316290 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/pkcs11/P11Mac.java 2014-12-24 19:58:20.000164073 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. @@ -907,8 +888,8 @@ macLength = 32; break; diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11Signature.java openjdk/jdk/src/share/classes/sun/security/pkcs11/P11Signature.java ---- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11Signature.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/P11Signature.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11Signature.java 2013-08-21 20:33:03.296316354 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/pkcs11/P11Signature.java 2014-12-24 19:58:20.000164073 +0000 @@ -54,12 +54,14 @@ * . MD2withRSA * . MD5withRSA @@ -961,8 +942,8 @@ encodedLength = 51; } else if (algorithm.equals("SHA384withRSA")) { diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java openjdk/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java ---- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java 2014-10-08 23:21:44.783972104 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java 2014-12-24 19:57:29.063535572 +0000 ++++ openjdk/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java 2014-12-24 19:58:20.000164073 +0000 @@ -328,6 +328,7 @@ System.out.println("Library info:"); System.out.println(p11Info); @@ -971,7 +952,7 @@ if ((slotID < 0) || showInfo) { long[] slots = p11.C_GetSlotList(false); if (showInfo) { -@@ -522,24 +523,37 @@ +@@ -504,24 +505,37 @@ m(CKM_MD2)); d(MD, "MD5", P11Digest, m(CKM_MD5)); @@ -1010,7 +991,7 @@ m(CKM_SHA512_HMAC)); d(MAC, "SslMacMD5", P11MAC, m(CKM_SSL3_MD5_MAC)); -@@ -637,11 +651,17 @@ +@@ -619,11 +633,17 @@ m(CKM_ECDSA)); d(SIG, "SHA1withECDSA", P11Signature, s("ECDSA"), m(CKM_ECDSA_SHA1, CKM_ECDSA)); @@ -1028,7 +1009,7 @@ m(CKM_ECDSA)); d(SIG, "MD2withRSA", P11Signature, m(CKM_MD2_RSA_PKCS, CKM_RSA_PKCS, CKM_RSA_X_509)); -@@ -649,11 +669,17 @@ +@@ -631,11 +651,17 @@ m(CKM_MD5_RSA_PKCS, CKM_RSA_PKCS, CKM_RSA_X_509)); d(SIG, "SHA1withRSA", P11Signature, m(CKM_SHA1_RSA_PKCS, CKM_RSA_PKCS, CKM_RSA_X_509)); @@ -1047,8 +1028,8 @@ d(KG, "SunTlsRsaPremasterSecret", "sun.security.pkcs11.P11TlsRsaPremasterSecretGenerator", diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/wrapper/Functions.java openjdk/jdk/src/share/classes/sun/security/pkcs11/wrapper/Functions.java ---- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/wrapper/Functions.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/wrapper/Functions.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/wrapper/Functions.java 2013-08-21 20:33:03.308316548 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/pkcs11/wrapper/Functions.java 2014-12-24 19:58:20.000164073 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. @@ -1083,8 +1064,8 @@ addMech(CKM_SHA384_KEY_DERIVATION, "CKM_SHA384_KEY_DERIVATION"); addMech(CKM_SHA512_KEY_DERIVATION, "CKM_SHA512_KEY_DERIVATION"); diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/provider/DigestBase.java openjdk/jdk/src/share/classes/sun/security/provider/DigestBase.java ---- openjdk.orig/jdk/src/share/classes/sun/security/provider/DigestBase.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/provider/DigestBase.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/provider/DigestBase.java 2013-08-21 20:33:03.316316678 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/provider/DigestBase.java 2014-12-24 19:58:20.000164073 +0000 @@ -39,7 +39,6 @@ * . abstract void implCompress(byte[] b, int ofs); * . abstract void implDigest(byte[] out, int ofs); @@ -1146,8 +1127,8 @@ - } diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/provider/MD2.java openjdk/jdk/src/share/classes/sun/security/provider/MD2.java ---- openjdk.orig/jdk/src/share/classes/sun/security/provider/MD2.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/provider/MD2.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/provider/MD2.java 2013-08-21 20:33:03.320316743 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/provider/MD2.java 2014-12-24 19:58:20.000164073 +0000 @@ -39,14 +39,14 @@ public final class MD2 extends DigestBase { @@ -1189,8 +1170,8 @@ // reset state and checksum diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/provider/MD4.java openjdk/jdk/src/share/classes/sun/security/provider/MD4.java ---- openjdk.orig/jdk/src/share/classes/sun/security/provider/MD4.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/provider/MD4.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/provider/MD4.java 2013-08-21 20:33:03.320316743 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/provider/MD4.java 2014-12-24 19:58:20.000164073 +0000 @@ -44,9 +44,9 @@ public final class MD4 extends DigestBase { @@ -1226,8 +1207,8 @@ /** diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/provider/MD5.java openjdk/jdk/src/share/classes/sun/security/provider/MD5.java ---- openjdk.orig/jdk/src/share/classes/sun/security/provider/MD5.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/provider/MD5.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/provider/MD5.java 2013-08-21 20:33:03.320316743 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/provider/MD5.java 2014-12-24 19:58:20.000164073 +0000 @@ -39,9 +39,9 @@ public final class MD5 extends DigestBase { @@ -1263,8 +1244,8 @@ /** diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/provider/SHA2.java openjdk/jdk/src/share/classes/sun/security/provider/SHA2.java ---- openjdk.orig/jdk/src/share/classes/sun/security/provider/SHA2.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/provider/SHA2.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/provider/SHA2.java 2013-08-21 20:33:03.324316807 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/provider/SHA2.java 2014-12-24 19:58:20.000164073 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved. @@ -1377,8 +1358,8 @@ + } } diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/provider/SHA5.java openjdk/jdk/src/share/classes/sun/security/provider/SHA5.java ---- openjdk.orig/jdk/src/share/classes/sun/security/provider/SHA5.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/provider/SHA5.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/provider/SHA5.java 2013-08-21 20:33:03.324316807 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/provider/SHA5.java 2014-12-24 19:58:20.004164123 +0000 @@ -82,10 +82,10 @@ }; @@ -1454,8 +1435,8 @@ - } diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/provider/SHA.java openjdk/jdk/src/share/classes/sun/security/provider/SHA.java ---- openjdk.orig/jdk/src/share/classes/sun/security/provider/SHA.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/provider/SHA.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/provider/SHA.java 2013-08-21 20:33:03.324316807 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/provider/SHA.java 2014-12-24 19:58:20.004164123 +0000 @@ -47,10 +47,10 @@ // 64 bytes are included in each hash block so the low order // bits of count are used to know how to pack the bytes into ints @@ -1495,8 +1476,8 @@ /** diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/provider/SunEntries.java openjdk/jdk/src/share/classes/sun/security/provider/SunEntries.java ---- openjdk.orig/jdk/src/share/classes/sun/security/provider/SunEntries.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/provider/SunEntries.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/provider/SunEntries.java 2013-08-21 20:33:03.328316872 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/provider/SunEntries.java 2014-12-24 19:58:20.004164123 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. @@ -1537,8 +1518,8 @@ /* * Algorithm Parameter Generator engines diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/rsa/RSASignature.java openjdk/jdk/src/share/classes/sun/security/rsa/RSASignature.java ---- openjdk.orig/jdk/src/share/classes/sun/security/rsa/RSASignature.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/rsa/RSASignature.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/rsa/RSASignature.java 2013-08-21 20:33:03.348317196 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/rsa/RSASignature.java 2014-12-24 19:58:20.004164123 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. @@ -1572,8 +1553,8 @@ public static final class SHA256withRSA extends RSASignature { public SHA256withRSA() { diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/rsa/SunRsaSignEntries.java openjdk/jdk/src/share/classes/sun/security/rsa/SunRsaSignEntries.java ---- openjdk.orig/jdk/src/share/classes/sun/security/rsa/SunRsaSignEntries.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/rsa/SunRsaSignEntries.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/rsa/SunRsaSignEntries.java 2013-08-21 20:33:03.348317196 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/rsa/SunRsaSignEntries.java 2014-12-24 19:58:20.004164123 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. @@ -1609,8 +1590,8 @@ map.put("Alg.Alias.Signature.OID.1.2.840.113549.1.1.11", "SHA256withRSA"); diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/x509/AlgorithmId.java openjdk/jdk/src/share/classes/sun/security/x509/AlgorithmId.java ---- openjdk.orig/jdk/src/share/classes/sun/security/x509/AlgorithmId.java 2014-10-08 23:21:44.739971495 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/x509/AlgorithmId.java 2014-10-08 23:26:20.231788929 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/x509/AlgorithmId.java 2014-12-24 19:57:29.027535128 +0000 ++++ openjdk/jdk/src/share/classes/sun/security/x509/AlgorithmId.java 2014-12-24 19:58:20.004164123 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. @@ -1710,8 +1691,8 @@ nameTable.put(sha384WithRSAEncryption_oid, "SHA384withRSA"); nameTable.put(sha512WithRSAEncryption_oid, "SHA512withRSA"); diff -Nru openjdk.orig/jdk/src/windows/classes/sun/security/mscapi/RSASignature.java openjdk/jdk/src/windows/classes/sun/security/mscapi/RSASignature.java ---- openjdk.orig/jdk/src/windows/classes/sun/security/mscapi/RSASignature.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/src/windows/classes/sun/security/mscapi/RSASignature.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/windows/classes/sun/security/mscapi/RSASignature.java 2013-08-21 20:32:57.876228625 +0100 ++++ openjdk/jdk/src/windows/classes/sun/security/mscapi/RSASignature.java 2014-12-24 19:58:20.004164123 +0000 @@ -49,6 +49,7 @@ * following algorithm names: * @@ -1734,8 +1715,8 @@ public MD5() { super("MD5"); diff -Nru openjdk.orig/jdk/src/windows/classes/sun/security/mscapi/SunMSCAPI.java openjdk/jdk/src/windows/classes/sun/security/mscapi/SunMSCAPI.java ---- openjdk.orig/jdk/src/windows/classes/sun/security/mscapi/SunMSCAPI.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/src/windows/classes/sun/security/mscapi/SunMSCAPI.java 2014-10-08 23:26:07.131607366 +0100 +--- openjdk.orig/jdk/src/windows/classes/sun/security/mscapi/SunMSCAPI.java 2014-12-24 18:49:01.976433264 +0000 ++++ openjdk/jdk/src/windows/classes/sun/security/mscapi/SunMSCAPI.java 2014-12-24 19:58:20.004164123 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. @@ -1764,8 +1745,8 @@ "sun.security.mscapi.Key"); map.put("Signature.MD2withRSA SupportedKeyClasses", diff -Nru openjdk.orig/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEP.java openjdk/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEP.java ---- openjdk.orig/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEP.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEP.java 2014-10-08 23:26:07.135607422 +0100 +--- openjdk.orig/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEP.java 2013-08-21 20:32:58.220234193 +0100 ++++ openjdk/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEP.java 2014-12-24 19:58:20.004164123 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. @@ -1809,8 +1790,8 @@ System.out.println("Testing OAEP with hash " + hashAlg + ", " + dataLength + " bytes"); Cipher c = Cipher.getInstance("RSA/ECB/OAEPwith" + hashAlg + "andMGF1Padding", cp); diff -Nru openjdk.orig/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEPParameterSpec.java openjdk/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEPParameterSpec.java ---- openjdk.orig/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEPParameterSpec.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEPParameterSpec.java 2014-10-08 23:26:07.135607422 +0100 +--- openjdk.orig/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEPParameterSpec.java 2013-08-21 20:32:58.220234193 +0100 ++++ openjdk/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEPParameterSpec.java 2014-12-24 19:58:20.004164123 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. @@ -1827,8 +1808,8 @@ status &= runTest("SHA-384", MGF1ParameterSpec.SHA384, p); status &= runTest("SHA-512", MGF1ParameterSpec.SHA512, p); diff -Nru openjdk.orig/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEPWithParams.java openjdk/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEPWithParams.java ---- openjdk.orig/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEPWithParams.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEPWithParams.java 2014-10-08 23:26:07.135607422 +0100 +--- openjdk.orig/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEPWithParams.java 2013-08-21 20:32:58.220234193 +0100 ++++ openjdk/jdk/test/com/sun/crypto/provider/Cipher/RSA/TestOAEPWithParams.java 2014-12-24 19:58:20.004164123 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. @@ -1850,8 +1831,8 @@ public static void main(String[] args) throws Exception { long start = System.currentTimeMillis(); diff -Nru openjdk.orig/jdk/test/com/sun/crypto/provider/KeyGenerator/Test4628062.java openjdk/jdk/test/com/sun/crypto/provider/KeyGenerator/Test4628062.java ---- openjdk.orig/jdk/test/com/sun/crypto/provider/KeyGenerator/Test4628062.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/com/sun/crypto/provider/KeyGenerator/Test4628062.java 2014-10-08 23:26:07.135607422 +0100 +--- openjdk.orig/jdk/test/com/sun/crypto/provider/KeyGenerator/Test4628062.java 2013-08-21 20:32:58.228234324 +0100 ++++ openjdk/jdk/test/com/sun/crypto/provider/KeyGenerator/Test4628062.java 2014-12-24 19:58:20.004164123 +0000 @@ -23,7 +23,7 @@ /* @@ -1953,8 +1934,8 @@ } } diff -Nru openjdk.orig/jdk/test/com/sun/crypto/provider/Mac/MacClone.java openjdk/jdk/test/com/sun/crypto/provider/Mac/MacClone.java ---- openjdk.orig/jdk/test/com/sun/crypto/provider/Mac/MacClone.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/com/sun/crypto/provider/Mac/MacClone.java 2014-10-08 23:26:07.135607422 +0100 +--- openjdk.orig/jdk/test/com/sun/crypto/provider/Mac/MacClone.java 2013-08-21 20:32:58.228234324 +0100 ++++ openjdk/jdk/test/com/sun/crypto/provider/Mac/MacClone.java 2014-12-24 19:58:20.004164123 +0000 @@ -28,15 +28,33 @@ * @author Jan Luehe */ @@ -2030,8 +2011,8 @@ } } diff -Nru openjdk.orig/jdk/test/com/sun/crypto/provider/Mac/MacKAT.java openjdk/jdk/test/com/sun/crypto/provider/Mac/MacKAT.java ---- openjdk.orig/jdk/test/com/sun/crypto/provider/Mac/MacKAT.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/com/sun/crypto/provider/Mac/MacKAT.java 2014-10-08 23:26:07.135607422 +0100 +--- openjdk.orig/jdk/test/com/sun/crypto/provider/Mac/MacKAT.java 2013-08-21 20:32:58.228234324 +0100 ++++ openjdk/jdk/test/com/sun/crypto/provider/Mac/MacKAT.java 2014-12-24 19:58:20.004164123 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. @@ -2112,8 +2093,8 @@ KeyGenerator.getInstance("HmacSHA384", p); KeyGenerator.getInstance("HmacSHA512", p); diff -Nru openjdk.orig/jdk/test/sun/security/pkcs11/ec/TestCurves.java openjdk/jdk/test/sun/security/pkcs11/ec/TestCurves.java ---- openjdk.orig/jdk/test/sun/security/pkcs11/ec/TestCurves.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/sun/security/pkcs11/ec/TestCurves.java 2014-10-08 23:26:07.135607422 +0100 +--- openjdk.orig/jdk/test/sun/security/pkcs11/ec/TestCurves.java 2013-08-21 20:32:58.012230826 +0100 ++++ openjdk/jdk/test/sun/security/pkcs11/ec/TestCurves.java 2014-12-24 19:58:20.004164123 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved. @@ -2130,8 +2111,8 @@ testSigning(p, "SHA384withECDSA", data, kp1, kp2); testSigning(p, "SHA512withECDSA", data, kp1, kp2); diff -Nru openjdk.orig/jdk/test/sun/security/pkcs11/MessageDigest/DigestKAT.java openjdk/jdk/test/sun/security/pkcs11/MessageDigest/DigestKAT.java ---- openjdk.orig/jdk/test/sun/security/pkcs11/MessageDigest/DigestKAT.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/sun/security/pkcs11/MessageDigest/DigestKAT.java 2014-10-08 23:26:07.135607422 +0100 +--- openjdk.orig/jdk/test/sun/security/pkcs11/MessageDigest/DigestKAT.java 2013-08-21 20:32:58.000230633 +0100 ++++ openjdk/jdk/test/sun/security/pkcs11/MessageDigest/DigestKAT.java 2014-12-24 19:58:20.004164123 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. @@ -2153,8 +2134,8 @@ t("SHA-256", s("a"), "ca:97:81:12:ca:1b:bd:ca:fa:c2:31:b3:9a:23:dc:4d:a7:86:ef:f8:14:7c:4e:72:b9:80:77:85:af:ee:48:bb"), t("SHA-256", s("abc"), "ba:78:16:bf:8f:01:cf:ea:41:41:40:de:5d:ae:22:23:b0:03:61:a3:96:17:7a:9c:b4:10:ff:61:f2:00:15:ad"), diff -Nru openjdk.orig/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java openjdk/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java ---- openjdk.orig/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java 2014-10-08 23:26:07.135607422 +0100 +--- openjdk.orig/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java 2013-08-21 20:32:58.024231021 +0100 ++++ openjdk/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java 2014-12-24 19:58:20.004164123 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. @@ -2171,8 +2152,8 @@ RSAPublicKey rsaKey = (RSAPublicKey)publicKey; if (rsaKey.getModulus().bitLength() > 512) { diff -Nru openjdk.orig/jdk/test/sun/security/pkcs11/rsa/TestSignatures.java openjdk/jdk/test/sun/security/pkcs11/rsa/TestSignatures.java ---- openjdk.orig/jdk/test/sun/security/pkcs11/rsa/TestSignatures.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/sun/security/pkcs11/rsa/TestSignatures.java 2014-10-08 23:26:07.135607422 +0100 +--- openjdk.orig/jdk/test/sun/security/pkcs11/rsa/TestSignatures.java 2013-08-21 20:32:58.024231021 +0100 ++++ openjdk/jdk/test/sun/security/pkcs11/rsa/TestSignatures.java 2014-12-24 19:58:20.004164123 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. @@ -2189,8 +2170,8 @@ RSAPublicKey rsaKey = (RSAPublicKey)publicKey; if (rsaKey.getModulus().bitLength() > 512) { diff -Nru openjdk.orig/jdk/test/sun/security/pkcs11/Signature/TestRSAKeyLength.java openjdk/jdk/test/sun/security/pkcs11/Signature/TestRSAKeyLength.java ---- openjdk.orig/jdk/test/sun/security/pkcs11/Signature/TestRSAKeyLength.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/sun/security/pkcs11/Signature/TestRSAKeyLength.java 2014-10-08 23:26:07.135607422 +0100 +--- openjdk.orig/jdk/test/sun/security/pkcs11/Signature/TestRSAKeyLength.java 2013-08-21 20:32:58.012230826 +0100 ++++ openjdk/jdk/test/sun/security/pkcs11/Signature/TestRSAKeyLength.java 2014-12-24 19:58:20.004164123 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. @@ -2208,8 +2189,8 @@ KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", p); kpg.initialize(512); diff -Nru openjdk.orig/jdk/test/sun/security/provider/MessageDigest/DigestKAT.java openjdk/jdk/test/sun/security/provider/MessageDigest/DigestKAT.java ---- openjdk.orig/jdk/test/sun/security/provider/MessageDigest/DigestKAT.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/sun/security/provider/MessageDigest/DigestKAT.java 2014-10-08 23:26:07.135607422 +0100 +--- openjdk.orig/jdk/test/sun/security/provider/MessageDigest/DigestKAT.java 2013-08-21 20:32:58.044231344 +0100 ++++ openjdk/jdk/test/sun/security/provider/MessageDigest/DigestKAT.java 2014-12-24 19:58:20.004164123 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. @@ -2240,8 +2221,8 @@ t("SHA-256", s("a"), "ca:97:81:12:ca:1b:bd:ca:fa:c2:31:b3:9a:23:dc:4d:a7:86:ef:f8:14:7c:4e:72:b9:80:77:85:af:ee:48:bb"), t("SHA-256", s("abc"), "ba:78:16:bf:8f:01:cf:ea:41:41:40:de:5d:ae:22:23:b0:03:61:a3:96:17:7a:9c:b4:10:ff:61:f2:00:15:ad"), diff -Nru openjdk.orig/jdk/test/sun/security/provider/MessageDigest/Offsets.java openjdk/jdk/test/sun/security/provider/MessageDigest/Offsets.java ---- openjdk.orig/jdk/test/sun/security/provider/MessageDigest/Offsets.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/sun/security/provider/MessageDigest/Offsets.java 2014-10-08 23:26:07.135607422 +0100 +--- openjdk.orig/jdk/test/sun/security/provider/MessageDigest/Offsets.java 2013-08-21 20:32:58.044231344 +0100 ++++ openjdk/jdk/test/sun/security/provider/MessageDigest/Offsets.java 2014-12-24 19:58:20.004164123 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. @@ -2258,8 +2239,8 @@ test("SHA-384", 0, 128, 0, 256); test("SHA-512", 0, 128, 0, 256); diff -Nru openjdk.orig/jdk/test/sun/security/provider/MessageDigest/TestSHAClone.java openjdk/jdk/test/sun/security/provider/MessageDigest/TestSHAClone.java ---- openjdk.orig/jdk/test/sun/security/provider/MessageDigest/TestSHAClone.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/sun/security/provider/MessageDigest/TestSHAClone.java 2014-10-08 23:26:07.135607422 +0100 +--- openjdk.orig/jdk/test/sun/security/provider/MessageDigest/TestSHAClone.java 2013-08-21 20:32:58.052231474 +0100 ++++ openjdk/jdk/test/sun/security/provider/MessageDigest/TestSHAClone.java 2014-12-24 19:58:20.008164172 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved. @@ -2286,8 +2267,8 @@ private static byte[] input1 = { diff -Nru openjdk.orig/jdk/test/sun/security/rsa/TestKeyPairGenerator.java openjdk/jdk/test/sun/security/rsa/TestKeyPairGenerator.java ---- openjdk.orig/jdk/test/sun/security/rsa/TestKeyPairGenerator.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/sun/security/rsa/TestKeyPairGenerator.java 2014-10-08 23:26:07.135607422 +0100 +--- openjdk.orig/jdk/test/sun/security/rsa/TestKeyPairGenerator.java 2013-08-21 20:32:58.088232056 +0100 ++++ openjdk/jdk/test/sun/security/rsa/TestKeyPairGenerator.java 2014-12-24 19:58:20.008164172 +0000 @@ -23,7 +23,7 @@ /** @@ -2306,8 +2287,8 @@ RSAPublicKey rsaKey = (RSAPublicKey)publicKey; if (rsaKey.getModulus().bitLength() > 512) { diff -Nru openjdk.orig/jdk/test/sun/security/rsa/TestSignatures.java openjdk/jdk/test/sun/security/rsa/TestSignatures.java ---- openjdk.orig/jdk/test/sun/security/rsa/TestSignatures.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/sun/security/rsa/TestSignatures.java 2014-10-08 23:26:07.135607422 +0100 +--- openjdk.orig/jdk/test/sun/security/rsa/TestSignatures.java 2013-08-21 20:32:58.088232056 +0100 ++++ openjdk/jdk/test/sun/security/rsa/TestSignatures.java 2014-12-24 19:58:20.008164172 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/6541350-tz_display_names_l10n.patch openjdk-6-6b34-1.13.6/patches/openjdk/6541350-tz_display_names_l10n.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/6541350-tz_display_names_l10n.patch 2014-10-08 18:39:25.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/6541350-tz_display_names_l10n.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,300 +0,0 @@ -# HG changeset patch -# User yhuang -# Date 1261700777 28800 -# Node ID 1397ae8dc558c9128d84818afc9ec55d23714c35 -# Parent 7bf839e2e9ce58d5f205280bf5a06f00227f2240 -6541350: TimeZone display names localization -Reviewed-by: yhuang, peytoia - ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java -@@ -83,8 +83,8 @@ - "Zentrale Sommerzeit", "CDT"}; - String CTT[] = new String[] {"Chinesische Normalzeit", "CST", - "Chinesische Sommerzeit", "CDT"}; -- String CUBA[] = new String[] {"Cuba Standard Time", "CST", -- "Cuba Daylight Time", "CDT"}; -+ String CUBA[] = new String[] {"Kubanische Normalzeit", "CST", -+ "Kubanische Sommerzeit", "CDT"}; - String DARWIN[] = new String[] {"Zentrale Normalzeit (Northern Territory)", "CST", - "Zentrale Sommerzeit (Northern Territory)", "CST"}; - String DUBLIN[] = new String[] {"Greenwich Zeit", "GMT", -@@ -594,8 +594,8 @@ - {"Australia/Canberra", EST_NSW}, - {"Australia/Currie", EST_NSW}, - {"Australia/Darwin", DARWIN}, -- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", -- "Central Western Summer Time (Australia)", "CWST"}}, -+ {"Australia/Eucla", new String[] {"Zentral-Westliche Normalzeit (Australien)", "CWST", -+ "Zentral-Westliche Sommerzeit (Australien)", "CWST"}}, - {"Australia/Hobart", TASMANIA}, - {"Australia/LHI", LORD_HOWE}, - {"Australia/Lindeman", BRISBANE}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java -@@ -83,8 +83,8 @@ - "Hora de verano Central", "CDT"}; - String CTT[] = new String[] {"Hora est\u00e1ndar de China", "CST", - "Hora de verano de China", "CDT"}; -- String CUBA[] = new String[] {"Cuba Standard Time", "CST", -- "Cuba Daylight Time", "CDT"}; -+ String CUBA[] = new String[] {"Hora est\u00e1ndar de Cuba", "CST", -+ "Hora de verano de Cuba", "CDT"}; - String DARWIN[] = new String[] {"Hora est\u00e1ndar Central (territorio del Norte)", "CST", - "Hora de verano Central (territorio del Norte)", "CST"}; - String DUBLIN[] = new String[] {"Hora del Meridiano de Greenwich", "GMT", -@@ -595,8 +595,8 @@ - {"Australia/Canberra", EST_NSW}, - {"Australia/Currie", EST_NSW}, - {"Australia/Darwin", DARWIN}, -- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", -- "Central Western Summer Time (Australia)", "CWST"}}, -+ {"Australia/Eucla", new String[] {"Hora est\u00e1ndar de Australia Central y Occidental", "CWST", -+ "Hora de verano de Australia Central y Occidental", "CWST"}}, - {"Australia/Hobart", TASMANIA}, - {"Australia/LHI", LORD_HOWE}, - {"Australia/Lindeman", BRISBANE}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java -@@ -83,8 +83,8 @@ - "Heure avanc\u00e9e du Centre", "CDT"} ; - String CTT[] = new String[] {"Heure normale de Chine", "CST", - "Heure avanc\u00e9e de Chine", "CDT"} ; -- String CUBA[] = new String[] {"Cuba Standard Time", "CST", -- "Cuba Daylight Time", "CDT"}; -+ String CUBA[] = new String[] {"Heure standard de Cuba", "CST", -+ "Heure d'\u00e9t\u00e9 de Cuba", "CDT"}; - String DARWIN[] = new String[] {"Heure standard d'Australie centrale (Territoire du Nord)", "CST", - "Heure d'\u00e9t\u00e9 d'Australie centrale (Territoire du Nord)", "CST"}; - String DUBLIN[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT", -@@ -594,8 +594,8 @@ - {"Australia/Canberra", EST_NSW}, - {"Australia/Currie", EST_NSW}, - {"Australia/Darwin", DARWIN}, -- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", -- "Central Western Summer Time (Australia)", "CWST"}}, -+ {"Australia/Eucla", new String[] {"Heure standard de l'Australie occidentale (centre)", "CWST", -+ "Heure d'\u00e9t\u00e9 de l'Australie occidentale (centre)", "CWST"}}, - {"Australia/Hobart", TASMANIA}, - {"Australia/LHI", LORD_HOWE}, - {"Australia/Lindeman", BRISBANE}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java -@@ -83,8 +83,8 @@ - "Ora legale USA centrale", "CDT"}; - String CTT[] = new String[] {"Ora solare della Cina", "CST", - "Ora legale della Cina", "CDT"}; -- String CUBA[] = new String[] {"Cuba Standard Time", "CST", -- "Cuba Daylight Time", "CDT"}; -+ String CUBA[] = new String[] {"Ora solare Cuba", "CST", -+ "Ora legale Cuba", "CDT"}; - String DARWIN[] = new String[] {"Ora centrale standard (Territori del Nord)", "CST", - "Ora estiva centrale (Territori del Nord)", "CST"}; - String DUBLIN[] = new String[] {"Ora media di Greenwich", "GMT", -@@ -594,8 +594,8 @@ - {"Australia/Canberra", EST_NSW}, - {"Australia/Currie", EST_NSW}, - {"Australia/Darwin", DARWIN}, -- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", -- "Central Western Summer Time (Australia)", "CWST"}}, -+ {"Australia/Eucla", new String[] {"Ora solare Australia centrorientale", "CWST", -+ "Ora estiva Australia centrorientale", "CWST"}}, - {"Australia/Hobart", TASMANIA}, - {"Australia/LHI", LORD_HOWE}, - {"Australia/Lindeman", BRISBANE}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java -@@ -83,8 +83,8 @@ - "\u4e2d\u90e8\u590f\u6642\u9593", "CDT"}; - String CTT[] = new String[] {"\u4e2d\u56fd\u6a19\u6e96\u6642", "CST", - "\u4e2d\u56fd\u590f\u6642\u9593", "CDT"}; -- String CUBA[] = new String[] {"Cuba Standard Time", "CST", -- "Cuba Daylight Time", "CDT"}; -+ String CUBA[] = new String[] {"\u30ad\u30e5\u30fc\u30d0\u6a19\u6e96\u6642", "CST", -+ "\u30ad\u30e5\u30fc\u30d0\u590f\u6642\u9593", "CDT"}; - String DARWIN[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642 (\u30ce\u30fc\u30b6\u30f3\u30c6\u30ea\u30c8\u30ea\u30fc)", "CST", - "\u4e2d\u90e8\u590f\u6642\u9593 (\u30ce\u30fc\u30b6\u30f3\u30c6\u30ea\u30c8\u30ea\u30fc)", "CST"}; - String DUBLIN[] = new String[] {"\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642", "GMT", -@@ -594,8 +594,8 @@ - {"Australia/Canberra", EST_NSW}, - {"Australia/Currie", EST_NSW}, - {"Australia/Darwin", DARWIN}, -- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", -- "Central Western Summer Time (Australia)", "CWST"}}, -+ {"Australia/Eucla", new String[] {"\u4e2d\u897f\u90e8\u6a19\u6e96\u6642 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "CWST", -+ "\u4e2d\u897f\u90e8\u590f\u6642\u9593 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "CWST"}}, - {"Australia/Hobart", TASMANIA}, - {"Australia/LHI", LORD_HOWE}, - {"Australia/Lindeman", BRISBANE}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java -@@ -83,8 +83,8 @@ - "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"}; - String CTT[] = new String[] {"\uc911\uad6d \ud45c\uc900\uc2dc", "CST", - "\uc911\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"}; -- String CUBA[] = new String[] {"Cuba Standard Time", "CST", -- "Cuba Daylight Time", "CDT"}; -+ String CUBA[] = new String[] {"\ucfe0\ubc14 \ud45c\uc900\uc2dc", "CST", -+ "\ucfe0\ubc14 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"}; - String DARWIN[] = new String[] {"\uc911\ubd80 \ud45c\uc900\uc2dc(\ub178\ub358 \uc9c0\uc5ed)", "CST", - "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ub178\ub358 \uc9c0\uc5ed)", "CST"}; - String DUBLIN[] = new String[] {"\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc", "GMT", -@@ -594,8 +594,8 @@ - {"Australia/Canberra", EST_NSW}, - {"Australia/Currie", EST_NSW}, - {"Australia/Darwin", DARWIN}, -- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", -- "Central Western Summer Time (Australia)", "CWST"}}, -+ {"Australia/Eucla", new String[] {"\uc911\uc11c\ubd80 \ud45c\uc900\uc2dc(\uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544)", "CWST", -+ "\uc911\uc11c\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544)", "CWST"}}, - {"Australia/Hobart", TASMANIA}, - {"Australia/LHI", LORD_HOWE}, - {"Australia/Lindeman", BRISBANE}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java -@@ -45,8 +45,8 @@ - protected final Object[][] getContents() { - String ACT[] = new String[] {"Acre, normaltid", "ACT", - "Acre, sommartid", "ACST"}; -- String ADELAIDE[] = new String[] {"Central Standard Time (S\u00f6dra Australien)", "CST", -- "Central Summer Time (S\u00f6dra Australien)", "CST"}; -+ String ADELAIDE[] = new String[] {"Central normaltid (S\u00f6dra Australien)", "CST", -+ "Central sommartid (S\u00f6dra Australien)", "CST"}; - String AGT[] = new String[] {"Argentina, normaltid", "ART", - "Argentina, sommartid", "ARST"}; - String AKST[] = new String[] {"Alaska, normaltid", "AKST", -@@ -61,10 +61,10 @@ - "Atlantisk sommartid", "ADT"}; - String BDT[] = new String[] {"Bangladesh, normaltid", "BDT", - "Bangladesh, sommartid", "BDST"}; -- String BRISBANE[] = new String[] {"Eastern Standard Time (Queensland)", "EST", -- "Eastern Summer Time (Queensland)", "EST"}; -- String BROKEN_HILL[] = new String[] {"Central Standard Time (S\u00f6dra Australien/Nya Sydwales)", "CST", -- "Central Summer Time (S\u00f6dra Australien/Nya Sydwales)", "CST"}; -+ String BRISBANE[] = new String[] {"\u00d6stlig normaltid (Queensland)", "EST", -+ "\u00d6stlig sommartid (Queensland)", "EST"}; -+ String BROKEN_HILL[] = new String[] {"Central normaltid (S\u00f6dra Australien/Nya Sydwales)", "CST", -+ "Central sommartid (S\u00f6dra Australien/Nya Sydwales)", "CST"}; - String BRT[] = new String[] {"Brasilien, normaltid", "BRT", - "Brasilien, sommartid", "BRST"}; - String BTT[] = new String[] {"Bhutan, normaltid", "BTT", -@@ -83,10 +83,10 @@ - "Central sommartid", "CDT"}; - String CTT[] = new String[] {"Kina, normaltid", "CST", - "Kina, sommartid", "CDT"}; -- String CUBA[] = new String[] {"Cuba Standard Time", "CST", -- "Cuba Daylight Time", "CDT"}; -- String DARWIN[] = new String[] {"Central Standard Time (Nordterritoriet)", "CST", -- "Central Summer Time (Nordterritoriet)", "CST"}; -+ String CUBA[] = new String[] {"Kuba, normaltid", "CST", -+ "Kuba, sommartid", "CDT"}; -+ String DARWIN[] = new String[] {"Central normaltid (Nordterritoriet)", "CST", -+ "Central sommartid (Nordterritoriet)", "CST"}; - String DUBLIN[] = new String[] {"Greenwichtid", "GMT", - "Irland, sommartid", "IST"}; - String EAT[] = new String[] {"\u00d6stafrikansk tid", "EAT", -@@ -99,8 +99,8 @@ - "\u00d6stgr\u00f6nl\u00e4ndsk sommartid", "EGST"}; - String EST[] = new String[] {"Eastern, normaltid", "EST", - "Eastern, sommartid", "EDT"}; -- String EST_NSW[] = new String[] {"Eastern Standard Time (Nya Sydwales)", "EST", -- "Eastern Summer Time (Nya Sydwales)", "EST"}; -+ String EST_NSW[] = new String[] {"Eastern, normaltid (Nya Sydwales)", "EST", -+ "Eastern, sommartid (Nya Sydwales)", "EST"}; - String GHMT[] = new String[] {"Ghana, normaltid", "GMT", - "Ghana, sommartid", "GHST"}; - String GAMBIER[] = new String[] {"Gambier, normaltid", "GAMT", -@@ -163,10 +163,10 @@ - "Salomon\u00f6arna, sommartid", "SBST"}; - String SGT[] = new String[] {"Singapore, normaltid", "SGT", - "Singapore, sommartid", "SGST"}; -- String SLST[] = new String[] {"Greenwich Mean Time", "GMT", -+ String SLST[] = new String[] {"Greenwichtid", "GMT", - "Sierra Leone, sommartid", "SLST"}; -- String TASMANIA[] = new String[] {"Eastern Standard Time (Tasmanien)", "EST", -- "Eastern Summer Time (Tasmanien)", "EST"}; -+ String TASMANIA[] = new String[] {"Eastern, normaltid (Tasmanien)", "EST", -+ "Eastern, sommartid (Tasmanien)", "EST"}; - String TMT[] = new String[] {"Turkmenistan, normaltid", "TMT", - "Turkmenistan, sommartid", "TMST"}; - String TRUT[] = new String[] {"Truk, normaltid", "TRUT", -@@ -181,16 +181,16 @@ - "V\u00e4steuropeisk sommartid", "WEST"}; - String WIT[] = new String[] {"V\u00e4stindonesisk tid", "WIT", - "V\u00e4stindonesisk sommartid", "WIST"}; -- String WST_AUS[] = new String[] {"Western Standard Time (Australien)", "WST", -- "Western Summer Time (Australien)", "WST"}; -+ String WST_AUS[] = new String[] {"V\u00e4stlig normaltid (Australien)", "WST", -+ "V\u00e4stlig sommartid (Australien)", "WST"}; - String SAMOA[] = new String[] {"Samoa, normaltid", "SST", - "Samoa, sommartid", "SDT"}; - String WST_SAMOA[] = new String[] {"V\u00e4stsamoansk tid", "WST", - "V\u00e4stsamoansk sommartid", "WSST"}; - String ChST[] = new String[] {"Chamorro, normaltid", "ChST", - "Chamorro, sommartid", "ChDT"}; -- String VICTORIA[] = new String[] {"Eastern Standard Time (Victoria)", "EST", -- "Eastern Summer Time (Victoria)", "EST"}; -+ String VICTORIA[] = new String[] {"\u00d6stlig normaltid (Victoria)", "EST", -+ "\u00d6stlig sommartid (Victoria)", "EST"}; - String UTC[] = new String[] {"Koordinerad universell tid", "UTC", - "Koordinerad universell tid", "UTC"}; - String UZT[] = new String[] {"Uzbekistan, normaltid", "UZT", -@@ -594,8 +594,8 @@ - {"Australia/Canberra", EST_NSW}, - {"Australia/Currie", EST_NSW}, - {"Australia/Darwin", DARWIN}, -- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", -- "Central Western Summer Time (Australia)", "CWST"}}, -+ {"Australia/Eucla", new String[] {"Central v\u00e4stlig normaltid (Australien)", "CWST", -+ "Central v\u00e4stlig sommartid (Australien)", "CWST"}}, - {"Australia/Hobart", TASMANIA}, - {"Australia/LHI", LORD_HOWE}, - {"Australia/Lindeman", BRISBANE}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java -@@ -83,8 +83,8 @@ - "\u4e2d\u592e\u590f\u4ee4\u65f6", "CDT"}; - String CTT[] = new String[] {"\u4e2d\u56fd\u6807\u51c6\u65f6\u95f4", "CST", - "\u4e2d\u56fd\u590f\u4ee4\u65f6", "CDT"}; -- String CUBA[] = new String[] {"Cuba Standard Time", "CST", -- "Cuba Daylight Time", "CDT"}; -+ String CUBA[] = new String[] {"\u53e4\u5df4\u6807\u51c6\u65f6\u95f4", "CST", -+ "\u53e4\u5df4\u590f\u4ee4\u65f6", "CDT"}; - String DARWIN[] = new String[] {"\u4e2d\u592e\u6807\u51c6\u65f6\u95f4\uff08\u5317\u9886\u5730\uff09", "CST", - "\u4e2d\u592e\u590f\u4ee4\u65f6\uff08\u5317\u9886\u5730\uff09", "CST"}; - String DUBLIN[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u65f6\u95f4", "GMT", -@@ -594,8 +594,8 @@ - {"Australia/Canberra", EST_NSW}, - {"Australia/Currie", EST_NSW}, - {"Australia/Darwin", DARWIN}, -- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", -- "Central Western Summer Time (Australia)", "CWST"}}, -+ {"Australia/Eucla", new String[] {"\u4e2d\u897f\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "CWST", -+ "\u4e2d\u897f\u90e8\u590f\u4ee4\u65f6\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "CWST"}}, - {"Australia/Hobart", TASMANIA}, - {"Australia/LHI", LORD_HOWE}, - {"Australia/Lindeman", BRISBANE}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java -@@ -83,8 +83,8 @@ - "\u4e2d\u592e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"}; - String CTT[] = new String[] {"\u4e2d\u570b\u6a19\u6e96\u6642\u9593", "CST", - "\u4e2d\u570b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"}; -- String CUBA[] = new String[] {"Cuba Standard Time", "CST", -- "Cuba Daylight Time", "CDT"}; -+ String CUBA[] = new String[] {"\u53e4\u5df4\u6a19\u6e96\u6642\u9593", "CST", -+ "\u53e4\u5df4\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"}; - String DARWIN[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642\u9593 (\u5317\u90e8\u5404\u5730\u5340)", "CST", - "\u4e2d\u90e8\u590f\u4ee4\u6642\u9593 (\u5317\u90e8\u5404\u5730\u5340)", "CST"}; - String DUBLIN[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u5e73\u5747\u6642\u9593", "GMT", -@@ -595,8 +595,8 @@ - {"Australia/Canberra", EST_NSW}, - {"Australia/Currie", EST_NSW}, - {"Australia/Darwin", DARWIN}, -- {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", -- "Central Western Summer Time (Australia)", "CWST"}}, -+ {"Australia/Eucla", new String[] {"\u4e2d\u897f\u90e8\u6a19\u6e96\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "CWST", -+ "\u4e2d\u897f\u90e8\u65e5\u5149\u7bc0\u7d04\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "CWST"}}, - {"Australia/Hobart", TASMANIA}, - {"Australia/LHI", LORD_HOWE}, - {"Australia/Lindeman", BRISBANE}, diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/6706974-krb5_test_infrastructure.patch openjdk-6-6b34-1.13.6/patches/openjdk/6706974-krb5_test_infrastructure.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/6706974-krb5_test_infrastructure.patch 2014-10-08 18:39:25.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/6706974-krb5_test_infrastructure.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,2090 +0,0 @@ -# HG changeset patch -# User weijun -# Date 1224219720 -28800 -# Node ID 3f051f3ba5bba355ddd6df6d0cb1528aef631a2d -# Parent 8b2d7e577d4a89fab8a892623cb4dff4e6fca0a6 -6706974: Add krb5 test infrastructure -Reviewed-by: valeriep - -diff -r 8b2d7e577d4a -r 3f051f3ba5bb test/sun/security/krb5/auto/Action.java ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/test/sun/security/krb5/auto/Action.java Fri Oct 17 13:02:00 2008 +0800 -@@ -0,0 +1,33 @@ -+/* -+ * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * This code is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. -+ * -+ * This code is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+ * version 2 for more details (a copy is included in the LICENSE file that -+ * accompanied this code). -+ * -+ * You should have received a copy of the GNU General Public License version -+ * 2 along with this work; if not, write to the Free Software Foundation, -+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -+ * CA 95054 USA or visit www.sun.com if you need additional information or -+ * have any questions. -+ */ -+ -+/** -+ * Action used in Context.doAs -+ */ -+public interface Action { -+ /** -+ * This method always reads a byte block and emits another one -+ */ -+ byte[] run(Context s, byte[] input) throws Exception; -+} -+ -diff -r 8b2d7e577d4a -r 3f051f3ba5bb test/sun/security/krb5/auto/BasicKrb5Test.java ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/test/sun/security/krb5/auto/BasicKrb5Test.java Fri Oct 17 13:02:00 2008 +0800 -@@ -0,0 +1,111 @@ -+/* -+ * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * This code is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. -+ * -+ * This code is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+ * version 2 for more details (a copy is included in the LICENSE file that -+ * accompanied this code). -+ * -+ * You should have received a copy of the GNU General Public License version -+ * 2 along with this work; if not, write to the Free Software Foundation, -+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -+ * CA 95054 USA or visit www.sun.com if you need additional information or -+ * have any questions. -+ */ -+ -+/* -+ * @test -+ * @bug 6706974 -+ * @summary Add krb5 test infrastructure -+ */ -+ -+import org.ietf.jgss.GSSName; -+import sun.security.jgss.GSSUtil; -+import sun.security.krb5.Config; -+import sun.security.krb5.internal.crypto.EType; -+ -+/** -+ * Basic JGSS/krb5 test with 3 parties: client, server, backend server. Each -+ * party uses JAAS login to get subjects and executes JGSS calls using -+ * Subject.doAs. -+ */ -+public class BasicKrb5Test { -+ -+ /** -+ * @param args empty or etype -+ */ -+ public static void main(String[] args) -+ throws Exception { -+ -+ String etype = null; -+ if (args.length > 0) { -+ etype = args[0]; -+ } -+ System.out.println("Testing etype " + etype); -+ if (etype != null && !EType.isSupported(Config.getInstance().getType(etype))) { -+ System.out.println("Not supported."); -+ System.exit(0); -+ } -+ -+ // Creates and starts the KDC -+ new OneKDC(etype).writeJAASConf(); -+ new BasicKrb5Test().go(OneKDC.SERVER, OneKDC.BACKEND); -+ } -+ -+ void go(final String server, final String backend) throws Exception { -+ Context c, s, s2, b; -+ c = Context.fromJAAS("client"); -+ s = Context.fromJAAS("server"); -+ b = Context.fromJAAS("backend"); -+ -+ c.startAsClient(server, GSSUtil.GSS_KRB5_MECH_OID); -+ c.x().requestCredDeleg(true); -+ s.startAsServer(GSSUtil.GSS_KRB5_MECH_OID); -+ -+ c.status(); -+ s.status(); -+ -+ Context.handshake(c, s); -+ GSSName client = c.x().getSrcName(); -+ -+ c.status(); -+ s.status(); -+ -+ Context.transmit("i say high --", c, s); -+ Context.transmit(" you say low", s, c); -+ -+ s2 = s.delegated(); -+ s.dispose(); -+ s = null; -+ -+ s2.startAsClient(backend, GSSUtil.GSS_KRB5_MECH_OID); -+ b.startAsServer(GSSUtil.GSS_KRB5_MECH_OID); -+ -+ s2.status(); -+ b.status(); -+ -+ Context.handshake(s2, b); -+ GSSName client2 = b.x().getSrcName(); -+ -+ if (!client.equals(client2)) { -+ throw new Exception("Delegation failed"); -+ } -+ -+ s2.status(); -+ b.status(); -+ -+ Context.transmit("you say hello --", s2, b); -+ Context.transmit(" i say goodbye", b, s2); -+ -+ s2.dispose(); -+ b.dispose(); -+ } -+} -diff -r 8b2d7e577d4a -r 3f051f3ba5bb test/sun/security/krb5/auto/CleanState.java ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/test/sun/security/krb5/auto/CleanState.java Fri Oct 17 13:02:00 2008 +0800 -@@ -0,0 +1,75 @@ -+/* -+ * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * This code is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. -+ * -+ * This code is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+ * version 2 for more details (a copy is included in the LICENSE file that -+ * accompanied this code). -+ * -+ * You should have received a copy of the GNU General Public License version -+ * 2 along with this work; if not, write to the Free Software Foundation, -+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -+ * CA 95054 USA or visit www.sun.com if you need additional information or -+ * have any questions. -+ */ -+ -+/* -+ * @test -+ * @bug 6716534 -+ * @summary Krb5LoginModule has not cleaned temp info between authentication attempts -+ */ -+import com.sun.security.auth.module.Krb5LoginModule; -+import java.util.HashMap; -+import java.util.Map; -+import javax.security.auth.Subject; -+import javax.security.auth.callback.Callback; -+import javax.security.auth.callback.CallbackHandler; -+import javax.security.auth.callback.NameCallback; -+import javax.security.auth.callback.PasswordCallback; -+ -+public class CleanState { -+ public static void main(String[] args) throws Exception { -+ CleanState x = new CleanState(); -+ new OneKDC(null); -+ x.go(); -+ } -+ -+ void go() throws Exception { -+ Krb5LoginModule krb5 = new Krb5LoginModule(); -+ -+ final String name = OneKDC.USER; -+ final char[] password = OneKDC.PASS; -+ char[] badpassword = "hellokitty".toCharArray(); -+ -+ Map map = new HashMap(); -+ map.put("useTicketCache", "false"); -+ map.put("doNotPrompt", "false"); -+ map.put("tryFirstPass", "true"); -+ Map shared = new HashMap(); -+ shared.put("javax.security.auth.login.name", name); -+ shared.put("javax.security.auth.login.password", badpassword); -+ -+ krb5.initialize(new Subject(), new CallbackHandler() { -+ @Override -+ public void handle(Callback[] callbacks) { -+ for(Callback callback: callbacks) { -+ if (callback instanceof NameCallback) { -+ ((NameCallback)callback).setName(name); -+ } -+ if (callback instanceof PasswordCallback) { -+ ((PasswordCallback)callback).setPassword(password); -+ } -+ } -+ } -+ }, shared, map); -+ krb5.login(); -+ } -+} -diff -r 8b2d7e577d4a -r 3f051f3ba5bb test/sun/security/krb5/auto/Context.java ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/test/sun/security/krb5/auto/Context.java Fri Oct 17 13:02:00 2008 +0800 -@@ -0,0 +1,386 @@ -+/* -+ * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * This code is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. -+ * -+ * This code is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+ * version 2 for more details (a copy is included in the LICENSE file that -+ * accompanied this code). -+ * -+ * You should have received a copy of the GNU General Public License version -+ * 2 along with this work; if not, write to the Free Software Foundation, -+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -+ * CA 95054 USA or visit www.sun.com if you need additional information or -+ * have any questions. -+ */ -+ -+import com.sun.security.auth.module.Krb5LoginModule; -+import java.security.PrivilegedActionException; -+import java.security.PrivilegedExceptionAction; -+import java.util.Arrays; -+import java.util.HashMap; -+import java.util.Map; -+import javax.security.auth.Subject; -+import javax.security.auth.kerberos.KerberosKey; -+import javax.security.auth.kerberos.KerberosTicket; -+import javax.security.auth.login.LoginContext; -+import org.ietf.jgss.GSSContext; -+import org.ietf.jgss.GSSCredential; -+import org.ietf.jgss.GSSException; -+import org.ietf.jgss.GSSManager; -+import org.ietf.jgss.GSSName; -+import org.ietf.jgss.MessageProp; -+import org.ietf.jgss.Oid; -+ -+/** -+ * Context of a JGSS subject, encapsulating Subject and GSSContext. -+ * -+ * Three "constructors", which acquire the (private) credentials and fill -+ * it into the Subject: -+ * -+ * 1. static fromJAAS(): Creates a Context using a JAAS login config entry -+ * 2. static fromUserPass(): Creates a Context using a username and a password -+ * 3. delegated(): A new context which uses the delegated credentials from a -+ * previously established acceptor Context -+ * -+ * Two context initiators, which create the GSSContext object inside: -+ * -+ * 1. startAsClient() -+ * 2. startAsServer() -+ * -+ * Privileged action: -+ * doAs(): Performs an action in the name of the Subject -+ * -+ * Handshake process: -+ * static handShake(initiator, acceptor) -+ * -+ * A four-phase typical data communication which includes all four GSS -+ * actions (wrap, unwrap, getMic and veryfyMiC): -+ * static transmit(message, from, to) -+ */ -+public class Context { -+ -+ private Subject s; -+ private GSSContext x; -+ private boolean f; // context established? -+ private String name; -+ private GSSCredential cred; // see static method delegated(). -+ -+ private Context() {} -+ -+ /** -+ * Using the delegated credentials from a previous acceptor -+ * @param c -+ */ -+ public Context delegated() throws Exception { -+ Context out = new Context(); -+ out.s = s; -+ out.cred = x.getDelegCred(); -+ out.name = name + " as " + out.cred.getName().toString(); -+ return out; -+ } -+ -+ /** -+ * Logins with a JAAS login config entry name -+ */ -+ public static Context fromJAAS(final String name) throws Exception { -+ Context out = new Context(); -+ out.name = name; -+ LoginContext lc = new LoginContext(name); -+ lc.login(); -+ out.s = lc.getSubject(); -+ return out; -+ } -+ -+ /** -+ * Logins with a username and a password, using Krb5LoginModule directly -+ * @param storeKey true if key should be saved, used on acceptor side -+ */ -+ public static Context fromUserPass(String user, char[] pass, boolean storeKey) throws Exception { -+ Context out = new Context(); -+ out.name = user; -+ out.s = new Subject(); -+ Krb5LoginModule krb5 = new Krb5LoginModule(); -+ Map map = new HashMap(); -+ map.put("tryFirstPass", "true"); -+ if (storeKey) { -+ map.put("storeKey", "true"); -+ } -+ Map shared = new HashMap(); -+ shared.put("javax.security.auth.login.name", user); -+ shared.put("javax.security.auth.login.password", pass); -+ -+ krb5.initialize(out.s, null, shared, map); -+ krb5.login(); -+ krb5.commit(); -+ return out; -+ } -+ -+ /** -+ * Starts as a client -+ * @param target communication peer -+ * @param mech GSS mech -+ * @throws java.lang.Exception -+ */ -+ public void startAsClient(final String target, final Oid mech) throws Exception { -+ doAs(new Action() { -+ @Override -+ public byte[] run(Context me, byte[] dummy) throws Exception { -+ GSSManager m = GSSManager.getInstance(); -+ me.x = m.createContext( -+ target.indexOf('@') < 0 ? -+ m.createName(target, null) : -+ m.createName(target, GSSName.NT_HOSTBASED_SERVICE), -+ mech, -+ cred, -+ GSSContext.DEFAULT_LIFETIME); -+ return null; -+ } -+ }, null); -+ f = false; -+ } -+ -+ /** -+ * Starts as a server -+ * @param mech GSS mech -+ * @throws java.lang.Exception -+ */ -+ public void startAsServer(final Oid mech) throws Exception { -+ doAs(new Action() { -+ @Override -+ public byte[] run(Context me, byte[] dummy) throws Exception { -+ GSSManager m = GSSManager.getInstance(); -+ me.x = m.createContext(m.createCredential( -+ null, -+ GSSCredential.INDEFINITE_LIFETIME, -+ mech, -+ GSSCredential.ACCEPT_ONLY)); -+ return null; -+ } -+ }, null); -+ f = false; -+ } -+ -+ /** -+ * Accesses the internal GSSContext object. Currently it's used for -- -+ * -+ * 1. calling requestXXX() before handshake -+ * 2. accessing source name -+ * -+ * Note: If the application needs to do any privileged call on this -+ * object, please use doAs(). Otherwise, it can be done directly. The -+ * methods listed above are all non-privileged calls. -+ * -+ * @return the GSSContext object -+ */ -+ public GSSContext x() { -+ return x; -+ } -+ -+ /** -+ * Disposes the GSSContext within -+ * @throws org.ietf.jgss.GSSException -+ */ -+ public void dispose() throws GSSException { -+ x.dispose(); -+ } -+ -+ /** -+ * Does something using the Subject inside -+ * @param action the action -+ * @param in the input byte -+ * @return the output byte -+ * @throws java.lang.Exception -+ */ -+ public byte[] doAs(final Action action, final byte[] in) throws Exception { -+ try { -+ return Subject.doAs(s, new PrivilegedExceptionAction() { -+ -+ @Override -+ public byte[] run() throws Exception { -+ return action.run(Context.this, in); -+ } -+ }); -+ } catch (PrivilegedActionException pae) { -+ throw pae.getException(); -+ } -+ } -+ -+ /** -+ * Prints status of GSSContext and Subject -+ * @throws java.lang.Exception -+ */ -+ public void status() throws Exception { -+ System.out.println("STATUS OF " + name.toUpperCase()); -+ try { -+ StringBuffer sb = new StringBuffer(); -+ if (x.getAnonymityState()) { -+ sb.append("anon, "); -+ } -+ if (x.getConfState()) { -+ sb.append("conf, "); -+ } -+ if (x.getCredDelegState()) { -+ sb.append("deleg, "); -+ } -+ if (x.getIntegState()) { -+ sb.append("integ, "); -+ } -+ if (x.getMutualAuthState()) { -+ sb.append("mutual, "); -+ } -+ if (x.getReplayDetState()) { -+ sb.append("rep det, "); -+ } -+ if (x.getSequenceDetState()) { -+ sb.append("seq det, "); -+ } -+ System.out.println("Context status of " + name + ": " + sb.toString()); -+ System.out.println(x.getSrcName() + " -> " + x.getTargName()); -+ } catch (Exception e) { -+ ;// Don't care -+ } -+ System.out.println("====================================="); -+ for (Object o : s.getPrivateCredentials()) { -+ System.out.println(" " + o.getClass()); -+ if (o instanceof KerberosTicket) { -+ KerberosTicket kt = (KerberosTicket) o; -+ System.out.println(" " + kt.getServer() + " for " + kt.getClient()); -+ } else if (o instanceof KerberosKey) { -+ KerberosKey kk = (KerberosKey) o; -+ System.out.print(" " + kk.getKeyType() + " " + kk.getVersionNumber() + " " + kk.getAlgorithm() + " "); -+ for (byte b : kk.getEncoded()) { -+ System.out.printf("%02X", b & 0xff); -+ } -+ System.out.println(); -+ } else if (o instanceof Map) { -+ Map map = (Map) o; -+ for (Object k : map.keySet()) { -+ System.out.println(" " + k + ": " + map.get(k)); -+ } -+ } -+ } -+ } -+ -+ /** -+ * Transmits a message from one Context to another. The sender wraps the -+ * message and sends it to the receiver. The receiver unwraps it, creates -+ * a MIC of the clear text and sends it back to the sender. The sender -+ * verifies the MIC against the message sent earlier. -+ * @param message the message -+ * @param s1 the sender -+ * @param s2 the receiver -+ * @throws java.lang.Exception If anything goes wrong -+ */ -+ static public void transmit(final String message, final Context s1, -+ final Context s2) throws Exception { -+ final byte[] messageBytes = message.getBytes(); -+ System.out.printf("-------------------- TRANSMIT from %s to %s------------------------\n", -+ s1.name, s2.name); -+ -+ byte[] t = s1.doAs(new Action() { -+ @Override -+ public byte[] run(Context me, byte[] dummy) throws Exception { -+ System.out.println("wrap"); -+ MessageProp p1 = new MessageProp(0, true); -+ byte[] out = me.x.wrap(messageBytes, 0, messageBytes.length, p1); -+ System.out.println(printProp(p1)); -+ return out; -+ } -+ }, null); -+ -+ t = s2.doAs(new Action() { -+ @Override -+ public byte[] run(Context me, byte[] input) throws Exception { -+ MessageProp p1 = new MessageProp(0, true); -+ byte[] bytes = me.x.unwrap(input, 0, input.length, p1); -+ if (!Arrays.equals(messageBytes, bytes)) -+ throw new Exception("wrap/unwrap mismatch"); -+ System.out.println("unwrap"); -+ System.out.println(printProp(p1)); -+ p1 = new MessageProp(0, true); -+ System.out.println("getMIC"); -+ bytes = me.x.getMIC(bytes, 0, bytes.length, p1); -+ System.out.println(printProp(p1)); -+ return bytes; -+ } -+ }, t); -+ // Re-unwrap should make p2.isDuplicateToken() returns true -+ s1.doAs(new Action() { -+ @Override -+ public byte[] run(Context me, byte[] input) throws Exception { -+ MessageProp p1 = new MessageProp(0, true); -+ System.out.println("verifyMIC"); -+ me.x.verifyMIC(input, 0, input.length, -+ messageBytes, 0, messageBytes.length, -+ p1); -+ System.out.println(printProp(p1)); -+ return null; -+ } -+ }, t); -+ } -+ -+ /** -+ * Returns a string description of a MessageProp object -+ * @param prop the object -+ * @return the description -+ */ -+ static public String printProp(MessageProp prop) { -+ StringBuffer sb = new StringBuffer(); -+ sb.append("MessagePop: "); -+ sb.append("QOP="+ prop.getQOP() + ", "); -+ sb.append(prop.getPrivacy()?"privacy, ":""); -+ sb.append(prop.isDuplicateToken()?"dup, ":""); -+ sb.append(prop.isGapToken()?"gap, ":""); -+ sb.append(prop.isOldToken()?"old, ":""); -+ sb.append(prop.isUnseqToken()?"unseq, ":""); -+ sb.append(prop.getMinorString()+ "(" + prop.getMinorStatus()+")"); -+ return sb.toString(); -+ } -+ -+ /** -+ * Handshake (security context establishment process) between two Contexts -+ * @param c the initiator -+ * @param s the acceptor -+ * @throws java.lang.Exception -+ */ -+ static public void handshake(final Context c, final Context s) throws Exception { -+ byte[] t = new byte[0]; -+ while (!c.f || !s.f) { -+ t = c.doAs(new Action() { -+ @Override -+ public byte[] run(Context me, byte[] input) throws Exception { -+ if (me.x.isEstablished()) { -+ me.f = true; -+ System.out.println(c.name + " side established"); -+ return null; -+ } else { -+ System.out.println(c.name + " call initSecContext"); -+ return me.x.initSecContext(input, 0, input.length); -+ } -+ } -+ }, t); -+ -+ t = s.doAs(new Action() { -+ @Override -+ public byte[] run(Context me, byte[] input) throws Exception { -+ if (me.x.isEstablished()) { -+ me.f = true; -+ System.out.println(s.name + " side established"); -+ return null; -+ } else { -+ System.out.println(s.name + " called acceptSecContext"); -+ return me.x.acceptSecContext(input, 0, input.length); -+ } -+ } -+ }, t); -+ } -+ } -+} -diff -r 8b2d7e577d4a -r 3f051f3ba5bb test/sun/security/krb5/auto/CrossRealm.java ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/test/sun/security/krb5/auto/CrossRealm.java Fri Oct 17 13:02:00 2008 +0800 -@@ -0,0 +1,101 @@ -+/* -+ * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * This code is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. -+ * -+ * This code is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+ * version 2 for more details (a copy is included in the LICENSE file that -+ * accompanied this code). -+ * -+ * You should have received a copy of the GNU General Public License version -+ * 2 along with this work; if not, write to the Free Software Foundation, -+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -+ * CA 95054 USA or visit www.sun.com if you need additional information or -+ * have any questions. -+ */ -+ -+/* -+ * @test -+ * @bug 6706974 -+ * @summary Add krb5 test infrastructure -+ */ -+import java.io.FileOutputStream; -+import java.io.IOException; -+import java.security.Security; -+import javax.security.auth.callback.Callback; -+import javax.security.auth.callback.CallbackHandler; -+import javax.security.auth.callback.NameCallback; -+import javax.security.auth.callback.PasswordCallback; -+import javax.security.auth.callback.UnsupportedCallbackException; -+import org.ietf.jgss.GSSContext; -+import org.ietf.jgss.GSSManager; -+import org.ietf.jgss.GSSName; -+import sun.security.jgss.GSSUtil; -+ -+public class CrossRealm implements CallbackHandler { -+ public static void main(String[] args) throws Exception { -+ startKDCs(); -+ xRealmAuth(); -+ } -+ -+ static void startKDCs() throws Exception { -+ // Create and start the KDC -+ KDC kdc1 = KDC.create("RABBIT.HOLE"); -+ kdc1.addPrincipal("dummy", "bogus".toCharArray()); -+ kdc1.addPrincipalRandKey("krbtgt/RABBIT.HOLE"); -+ kdc1.addPrincipal("krbtgt/SNAKE.HOLE", "sharedsec".toCharArray()); -+ -+ KDC kdc2 = KDC.create("SNAKE.HOLE"); -+ kdc2.addPrincipalRandKey("krbtgt/SNAKE.HOLE"); -+ kdc2.addPrincipal("krbtgt/RABBIT.HOLE", "sharedsec".toCharArray()); -+ kdc2.addPrincipalRandKey("host/www.snake.hole"); -+ -+ KDC.saveConfig("krb5-localkdc.conf", kdc1, kdc2, -+ "forwardable=true", -+ "[domain_realm]", -+ ".snake.hole=SNAKE.HOLE"); -+ System.setProperty("java.security.krb5.conf", "krb5-localkdc.conf"); -+ } -+ -+ static void xRealmAuth() throws Exception { -+ Security.setProperty("auth.login.defaultCallbackHandler", "CrossRealm"); -+ System.setProperty("java.security.auth.login.config", "jaas-localkdc.conf"); -+ System.setProperty("javax.security.auth.useSubjectCredsOnly", "false"); -+ FileOutputStream fos = new FileOutputStream("jaas-localkdc.conf"); -+ fos.write(("com.sun.security.jgss.krb5.initiate {\n" + -+ " com.sun.security.auth.module.Krb5LoginModule\n" + -+ " required\n" + -+ " principal=dummy\n" + -+ " doNotPrompt=false\n" + -+ " useTicketCache=false\n" + -+ " ;\n" + -+ "};").getBytes()); -+ fos.close(); -+ -+ GSSManager m = GSSManager.getInstance(); -+ m.createContext( -+ m.createName("host@www.snake.hole", GSSName.NT_HOSTBASED_SERVICE), -+ GSSUtil.GSS_KRB5_MECH_OID, -+ null, -+ GSSContext.DEFAULT_LIFETIME).initSecContext(new byte[0], 0, 0); -+ } -+ -+ @Override -+ public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { -+ for (Callback callback : callbacks) { -+ if (callback instanceof NameCallback) { -+ ((NameCallback) callback).setName("dummy"); -+ } -+ if (callback instanceof PasswordCallback) { -+ ((PasswordCallback) callback).setPassword("bogus".toCharArray()); -+ } -+ } -+ } -+} -diff -r 8b2d7e577d4a -r 3f051f3ba5bb test/sun/security/krb5/auto/KDC.java ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/test/sun/security/krb5/auto/KDC.java Fri Oct 17 13:02:00 2008 +0800 -@@ -0,0 +1,962 @@ -+/* -+ * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * This code is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. -+ * -+ * This code is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+ * version 2 for more details (a copy is included in the LICENSE file that -+ * accompanied this code). -+ * -+ * You should have received a copy of the GNU General Public License version -+ * 2 along with this work; if not, write to the Free Software Foundation, -+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -+ * CA 95054 USA or visit www.sun.com if you need additional information or -+ * have any questions. -+ */ -+ -+import java.lang.reflect.Constructor; -+import java.lang.reflect.Field; -+import java.lang.reflect.InvocationTargetException; -+import java.net.*; -+import java.io.*; -+import java.lang.reflect.Method; -+import java.security.SecureRandom; -+import java.util.*; -+import java.util.concurrent.*; -+import sun.security.krb5.*; -+import sun.security.krb5.internal.*; -+import sun.security.krb5.internal.crypto.KeyUsage; -+import sun.security.krb5.internal.ktab.KeyTab; -+import sun.security.util.DerInputStream; -+import sun.security.util.DerOutputStream; -+import sun.security.util.DerValue; -+ -+/** -+ * A KDC server. -+ *

    -+ * Features: -+ *

      -+ *
    1. Supports TCP and UDP -+ *
    2. Supports AS-REQ and TGS-REQ -+ *
    3. Principal db and other settings hard coded in application -+ *
    4. Options, say, request preauth or not -+ *
    -+ * Side effects: -+ *
      -+ *
    1. The Sun-internal class sun.security.krb5.Config is a -+ * singleton and initialized according to Kerberos settings (krb5.conf and -+ * java.security.krb5.* system properties). This means once it's initialized -+ * it will not automatically notice any changes to these settings (or file -+ * changes of krb5.conf). The KDC class normally does not touch these -+ * settings (except for the writeKtab() method). However, to make -+ * sure nothing ever goes wrong, if you want to make any changes to these -+ * settings after calling a KDC method, call Config.refresh() to -+ * make sure your changes are reflected in the Config object. -+ *
    -+ * Issues and TODOs: -+ *
      -+ *
    1. Generates krb5.conf to be used on another machine, currently the kdc is -+ * always localhost -+ *
    2. More options to KDC, say, error output, say, response nonce != -+ * request nonce -+ *
    -+ * Note: This program uses internal krb5 classes (including reflection to -+ * access private fields and methods). -+ *

    -+ * Usages: -+ *

    -+ * 1. Init and start the KDC: -+ *

    -+ * KDC kdc = KDC.create("REALM.NAME", port, isDaemon);
    -+ * KDC kdc = KDC.create("REALM.NAME");
    -+ * 
    -+ * Here, port is the UDP and TCP port number the KDC server -+ * listens on. If zero, a random port is chosen, which you can use getPort() -+ * later to retrieve the value. -+ *

    -+ * If isDaemon is true, the KDC worker threads will be daemons. -+ *

    -+ * The shortcut KDC.create("REALM.NAME") has port=0 and -+ * isDaemon=false, and is commonly used in an embedded KDC. -+ *

    -+ * 2. Adding users: -+ *

    -+ * kdc.addPrincipal(String principal_name, char[] password);
    -+ * kdc.addPrincipalRandKey(String principal_name);
    -+ * 
    -+ * A service principal's name should look like "host/f.q.d.n". The second form -+ * generates a random key. To expose this key, call writeKtab() to -+ * save the keys into a keytab file. -+ *

    -+ * Note that you need to add the principal name krbtgt/REALM.NAME yourself. -+ *

    -+ * Note that you can safely add a principal at any time after the KDC is -+ * started and before a user requests info on this principal. -+ *

    -+ * 3. Other public methods: -+ *

      -+ *
    • getPort: Returns the port number the KDC uses -+ *
    • getRealm: Returns the realm name -+ *
    • writeKtab: Writes all principals' keys into a keytab file -+ *
    • saveConfig: Saves a krb5.conf file to access this KDC -+ *
    • setOption: Sets various options -+ *
    -+ * Read the javadoc for details. Lazy developer can use OneKDC -+ * directly. -+ */ -+public class KDC { -+ -+ // Under the hood. -+ -+ // The random generator to generate random keys (including session keys) -+ private static SecureRandom secureRandom = new SecureRandom(); -+ // Principal db -+ private Map passwords = new HashMap(); -+ // Realm name -+ private String realm; -+ // The request/response job queue -+ private BlockingQueue q = new ArrayBlockingQueue(100); -+ // Service port number -+ private int port; -+ // Options -+ private Map options = new HashMap(); -+ -+ /** -+ * Option names, to be expanded forever. -+ */ -+ public static enum Option { -+ /** -+ * Whether pre-authentication is required. Default Boolean.TRUE -+ */ -+ PREAUTH_REQUIRED, -+ }; -+ -+ /** -+ * A standalone KDC server. -+ * @param args -+ * @throws java.lang.Exception -+ */ -+ public static void main(String[] args) throws Exception { -+ if (args.length > 0) { -+ if (args[0].equals("-help") || args[0].equals("--help")) { -+ System.out.println("Usage:"); -+ System.out.println(" java " + KDC.class + " " + -+ "Start KDC on port 8888"); -+ return; -+ } -+ } -+ KDC kdc = create("RABBIT.HOLE", 8888, false); -+ kdc.addPrincipal("dummy", "bogus".toCharArray()); -+ kdc.addPrincipal("foo", "bar".toCharArray()); -+ kdc.addPrincipalRandKey("krbtgt/" + kdc.realm); -+ kdc.addPrincipalRandKey("server/localhost"); -+ kdc.addPrincipalRandKey("backend/localhost"); -+ } -+ -+ /** -+ * Creates and starts a KDC running as a daemon on a random port. -+ * @param realm the realm name -+ * @return the running KDC instance -+ * @throws java.io.IOException for any socket creation error -+ */ -+ public static KDC create(String realm) throws IOException { -+ return create(realm, 0, true); -+ } -+ -+ /** -+ * Creates and starts a KDC server. -+ * @param realm the realm name -+ * @param port the TCP and UDP port to listen to. A random port will to -+ * chosen if zero. -+ * @param asDaemon if true, KDC threads will be daemons. Otherwise, not. -+ * @return the running KDC instance -+ * @throws java.io.IOException for any socket creation error -+ */ -+ public static KDC create(String realm, int port, boolean asDaemon) throws IOException { -+ return new KDC(realm, port, asDaemon); -+ } -+ -+ /** -+ * Sets an option -+ * @param key the option name -+ * @param obj the value -+ */ -+ public void setOption(Option key, Object value) { -+ options.put(key, value); -+ } -+ -+ /** -+ * Write all principals' keys into a keytab file. Note that the keys for -+ * the krbtgt principal for this realm will not be written. -+ *

    -+ * Attention: This method references krb5.conf settings. If you need to -+ * setup krb5.conf later, please call Config.refresh() after -+ * the new setting. For example: -+ *

    -+     * kdc.writeKtab("/etc/kdc/ktab");  // Config is initialized,
    -+     * System.setProperty("java.security.krb5.conf", "/home/mykrb5.conf");
    -+     * Config.refresh();
    -+     * 
    -+ * -+ * Inside this method there are 2 places krb5.conf is used: -+ *
      -+ *
    1. (Fatal) Generating keys: EncryptionKey.acquireSecretKeys -+ *
    2. (Has workaround) Creating PrincipalName -+ *
    -+ * @param tab The keytab filename to write to. -+ * @throws java.io.IOException for any file output error -+ * @throws sun.security.krb5.KrbException for any realm and/or principal -+ * name error. -+ */ -+ public void writeKtab(String tab) throws IOException, KrbException { -+ KeyTab ktab = KeyTab.create(tab); -+ for (String name : passwords.keySet()) { -+ if (name.equals("krbtgt/" + realm)) { -+ continue; -+ } -+ ktab.addEntry(new PrincipalName(name + "@" + realm, -+ name.indexOf('/') < 0 ? -+ PrincipalName.KRB_NT_UNKNOWN : -+ PrincipalName.KRB_NT_SRV_HST), passwords.get(name)); -+ } -+ ktab.save(); -+ } -+ -+ /** -+ * Adds a new principal to this realm with a given password. -+ * @param user the principal's name. For a service principal, use the -+ * form of host/f.q.d.n -+ * @param pass the password for the principal -+ */ -+ public void addPrincipal(String user, char[] pass) { -+ passwords.put(user, pass); -+ } -+ -+ /** -+ * Adds a new principal to this realm with a random password -+ * @param user the principal's name. For a service principal, use the -+ * form of host/f.q.d.n -+ */ -+ public void addPrincipalRandKey(String user) { -+ passwords.put(user, randomPassword()); -+ } -+ -+ /** -+ * Returns the name of this realm -+ * @return the name of this realm -+ */ -+ public String getRealm() { -+ return realm; -+ } -+ -+ /** -+ * Writes a krb5.conf for one or more KDC that includes KDC locations for -+ * each realm and the default realm name. You can also add extra strings -+ * into the file. The method should be called like: -+ *
    -+     *   KDC.saveConfig("krb5.conf", kdc1, kdc2, ..., line1, line2, ...);
    -+     * 
    -+ * Here you can provide one or more kdc# and zero or more line# arguments. -+ * The line# will be put after [libdefaults] and before [realms]. Therefore -+ * you can append new lines into [libdefaults] and/or create your new -+ * stanzas as well. Note that a newline character will be appended to -+ * each line# argument. -+ *

    -+ * For example: -+ *

    -+     * KDC.saveConfig("krb5.conf", this);
    -+     * 
    -+ * generates: -+ *
    -+     * [libdefaults]
    -+     * default_realm = REALM.NAME
    -+     *
    -+     * [realms]
    -+     *   REALM.NAME = {
    -+     *     kdc = localhost:port_number
    -+     *   }
    -+     * 
    -+ * -+ * Another example: -+ *
    -+     * KDC.saveConfig("krb5.conf", kdc1, kdc2, "forwardable = true", "",
    -+     *         "[domain_realm]",
    -+     *         ".kdc1.com = KDC1.NAME");
    -+     * 
    -+ * generates: -+ *
    -+     * [libdefaults]
    -+     * default_realm = KDC1.NAME
    -+     * forwardable = true
    -+     *
    -+     * [domain_realm]
    -+     * .kdc1.com = KDC1.NAME
    -+     *
    -+     * [realms]
    -+     *   KDC1.NAME = {
    -+     *     kdc = localhost:port1
    -+     *   }
    -+     *   KDC2.NAME = {
    -+     *     kdc = localhost:port2
    -+     *   }
    -+     * 
    -+ * @param file the name of the file to write into -+ * @param kdc the first (and default) KDC -+ * @param more more KDCs or extra lines (in their appearing order) to -+ * insert into the krb5.conf file. This method reads each argument's type -+ * to determine what it's for. This argument can be empty. -+ * @throws java.io.IOException for any file output error -+ */ -+ public static void saveConfig(String file, KDC kdc, Object... more) -+ throws IOException { -+ File f = new File(file); -+ StringBuffer sb = new StringBuffer(); -+ sb.append("[libdefaults]\ndefault_realm = "); -+ sb.append(kdc.realm); -+ sb.append("\n"); -+ for (Object o: more) { -+ if (o instanceof String) { -+ sb.append(o); -+ sb.append("\n"); -+ } -+ } -+ sb.append("\n[realms]\n"); -+ sb.append(realmLineForKDC(kdc)); -+ for (Object o: more) { -+ if (o instanceof KDC) { -+ sb.append(realmLineForKDC((KDC)o)); -+ } -+ } -+ FileOutputStream fos = new FileOutputStream(f); -+ fos.write(sb.toString().getBytes()); -+ fos.close(); -+ } -+ -+ /** -+ * Returns the service port of the KDC server. -+ * @return the KDC service port -+ */ -+ public int getPort() { -+ return port; -+ } -+ -+ // Private helper methods -+ -+ /** -+ * Private constructor, cannot be called outside. -+ * @param realm -+ */ -+ private KDC(String realm) { -+ this.realm = realm; -+ } -+ -+ /** -+ * A constructor that starts the KDC service also. -+ */ -+ protected KDC(String realm, int port, boolean asDaemon) -+ throws IOException { -+ this(realm); -+ startServer(port, asDaemon); -+ } -+ /** -+ * Generates a 32-char random password -+ * @return the password -+ */ -+ private static char[] randomPassword() { -+ char[] pass = new char[32]; -+ for (int i=0; i<32; i++) -+ pass[i] = (char)secureRandom.nextInt(); -+ return pass; -+ } -+ -+ /** -+ * Generates a random key for the given encryption type. -+ * @param eType the encryption type -+ * @return the generated key -+ * @throws sun.security.krb5.KrbException for unknown/unsupported etype -+ */ -+ private static EncryptionKey generateRandomKey(int eType) -+ throws KrbException { -+ // Is 32 enough for AES256? I should have generated the keys directly -+ // but different cryptos have different rules on what keys are valid. -+ char[] pass = randomPassword(); -+ String algo; -+ switch (eType) { -+ case EncryptedData.ETYPE_DES_CBC_MD5: algo = "DES"; break; -+ case EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD: algo = "DESede"; break; -+ case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA1_96: algo = "AES128"; break; -+ case EncryptedData.ETYPE_ARCFOUR_HMAC: algo = "ArcFourHMAC"; break; -+ case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96: algo = "AES256"; break; -+ default: algo = "DES"; break; -+ } -+ return new EncryptionKey(pass, "NOTHING", algo); // Silly -+ } -+ -+ /** -+ * Returns the password for a given principal -+ * @param p principal -+ * @return the password -+ * @throws sun.security.krb5.KrbException when the principal is not inside -+ * the database. -+ */ -+ private char[] getPassword(PrincipalName p) throws KrbException { -+ char[] pass = passwords.get(p.getNameString()); -+ if (pass == null) { -+ throw new KrbException(Krb5.KDC_ERR_C_PRINCIPAL_UNKNOWN); -+ } -+ return pass; -+ } -+ -+ /** -+ * Returns the salt string for the principal. For normal users, the -+ * concatenation for the realm name and the sections of the principal; -+ * for krgtgt/A@B and krbtgt/B@A, always return AB (so that inter-realm -+ * principals have the same key). -+ * @param p principal -+ * @return the salt -+ */ -+ private String getSalt(PrincipalName p) { -+ String[] ns = p.getNameStrings(); -+ if (ns[0].equals("krbtgt") && ns.length > 1) { -+ // Shared cross-realm keys must be the same -+ if (ns[1].compareTo(realm) < 0) { -+ return ns[1] + realm; -+ } else { -+ return realm + ns[1]; -+ } -+ } else { -+ String s = getRealm(); -+ for (String n: p.getNameStrings()) { -+ s += n; -+ } -+ return s; -+ } -+ } -+ -+ /** -+ * Returns the key for a given principal of the given encryption type -+ * @param p the principal -+ * @param etype the encryption type -+ * @return the key -+ * @throws sun.security.krb5.KrbException for unknown/unsupported etype -+ */ -+ private EncryptionKey keyForUser(PrincipalName p, int etype) throws KrbException { -+ try { -+ // Do not call EncryptionKey.acquireSecretKeys(), otherwise -+ // the krb5.conf config file would be loaded. -+ Method stringToKey = EncryptionKey.class.getDeclaredMethod("stringToKey", char[].class, String.class, byte[].class, Integer.TYPE); -+ stringToKey.setAccessible(true); -+ return new EncryptionKey((byte[]) stringToKey.invoke(null, getPassword(p), getSalt(p), null, etype), etype, null); -+ } catch (InvocationTargetException ex) { -+ KrbException ke = (KrbException)ex.getCause(); -+ throw ke; -+ } catch (Exception e) { -+ throw new RuntimeException(e); // should not happen -+ } -+ } -+ -+ /** -+ * Processes an incoming request and generates a response. -+ * @param in the request -+ * @return the response -+ * @throws java.lang.Exception for various errors -+ */ -+ private byte[] processMessage(byte[] in) throws Exception { -+ if ((in[0] & 0x1f) == Krb5.KRB_AS_REQ) -+ return processAsReq(in); -+ else -+ return processTgsReq(in); -+ } -+ -+ /** -+ * Processes a TGS_REQ and generates a TGS_REP (or KRB_ERROR) -+ * @param in the request -+ * @return the response -+ * @throws java.lang.Exception for various errors -+ */ -+ private byte[] processTgsReq(byte[] in) throws Exception { -+ TGSReq tgsReq = new TGSReq(in); -+ try { -+ System.out.println(realm + "> " + tgsReq.reqBody.cname + -+ " sends TGS-REQ for " + -+ tgsReq.reqBody.sname); -+ KDCReqBody body = tgsReq.reqBody; -+ int etype = 0; -+ -+ // Reflection: PAData[] pas = tgsReq.pAData; -+ Field f = KDCReq.class.getDeclaredField("pAData"); -+ f.setAccessible(true); -+ PAData[] pas = (PAData[])f.get(tgsReq); -+ -+ Ticket tkt = null; -+ EncTicketPart etp = null; -+ if (pas == null || pas.length == 0) { -+ throw new KrbException(Krb5.KDC_ERR_PADATA_TYPE_NOSUPP); -+ } else { -+ for (PAData pa: pas) { -+ if (pa.getType() == Krb5.PA_TGS_REQ) { -+ APReq apReq = new APReq(pa.getValue()); -+ EncryptedData ed = apReq.authenticator; -+ tkt = apReq.ticket; -+ etype = tkt.encPart.getEType(); -+ EncryptionKey kkey = null; -+ if (!tkt.realm.toString().equals(realm)) { -+ if (tkt.sname.getNameString().equals("krbtgt/" + realm)) { -+ kkey = keyForUser(new PrincipalName("krbtgt/" + tkt.realm.toString(), realm), etype); -+ } -+ } else { -+ kkey = keyForUser(tkt.sname, etype); -+ } -+ byte[] bb = tkt.encPart.decrypt(kkey, KeyUsage.KU_TICKET); -+ DerInputStream derIn = new DerInputStream(bb); -+ DerValue der = derIn.getDerValue(); -+ etp = new EncTicketPart(der.toByteArray()); -+ } -+ } -+ if (tkt == null) { -+ throw new KrbException(Krb5.KDC_ERR_PADATA_TYPE_NOSUPP); -+ } -+ } -+ EncryptionKey skey = keyForUser(body.sname, etype); -+ if (skey == null) { -+ throw new KrbException(Krb5.KDC_ERR_SUMTYPE_NOSUPP); // TODO -+ } -+ -+ // Session key for original ticket, TGT -+ EncryptionKey ckey = etp.key; -+ -+ // Session key for session with the service -+ EncryptionKey key = generateRandomKey(etype); -+ -+ // Check time, TODO -+ KerberosTime till = body.till; -+ if (till == null) { -+ throw new KrbException(Krb5.KDC_ERR_NEVER_VALID); // TODO -+ } else if (till.isZero()) { -+ till = new KerberosTime(new Date().getTime() + 1000 * 3600 * 11); -+ } -+ -+ boolean[] bFlags = new boolean[Krb5.TKT_OPTS_MAX+1]; -+ if (body.kdcOptions.get(KDCOptions.FORWARDABLE)) { -+ bFlags[Krb5.TKT_OPTS_FORWARDABLE] = true; -+ } -+ if (body.kdcOptions.get(KDCOptions.FORWARDED) || -+ etp.flags.get(Krb5.TKT_OPTS_FORWARDED)) { -+ bFlags[Krb5.TKT_OPTS_FORWARDED] = true; -+ } -+ if (body.kdcOptions.get(KDCOptions.RENEWABLE)) { -+ bFlags[Krb5.TKT_OPTS_RENEWABLE] = true; -+ //renew = new KerberosTime(new Date().getTime() + 1000 * 3600 * 24 * 7); -+ } -+ if (body.kdcOptions.get(KDCOptions.PROXIABLE)) { -+ bFlags[Krb5.TKT_OPTS_PROXIABLE] = true; -+ } -+ if (body.kdcOptions.get(KDCOptions.POSTDATED)) { -+ bFlags[Krb5.TKT_OPTS_POSTDATED] = true; -+ } -+ if (body.kdcOptions.get(KDCOptions.ALLOW_POSTDATE)) { -+ bFlags[Krb5.TKT_OPTS_MAY_POSTDATE] = true; -+ } -+ bFlags[Krb5.TKT_OPTS_INITIAL] = true; -+ -+ TicketFlags tFlags = new TicketFlags(bFlags); -+ EncTicketPart enc = new EncTicketPart( -+ tFlags, -+ key, -+ etp.crealm, -+ etp.cname, -+ new TransitedEncoding(1, new byte[0]), // TODO -+ new KerberosTime(new Date()), -+ body.from, -+ till, body.rtime, -+ body.addresses, -+ null); -+ Ticket t = new Ticket( -+ body.crealm, -+ body.sname, -+ new EncryptedData(skey, enc.asn1Encode(), KeyUsage.KU_TICKET) -+ ); -+ EncTGSRepPart enc_part = new EncTGSRepPart( -+ key, -+ new LastReq(new LastReqEntry[]{ -+ new LastReqEntry(0, new KerberosTime(new Date().getTime() - 10000)) -+ }), -+ body.getNonce(), // TODO: detect replay -+ new KerberosTime(new Date().getTime() + 1000 * 3600 * 24), -+ // Next 5 and last MUST be same with ticket -+ tFlags, -+ new KerberosTime(new Date()), -+ body.from, -+ till, body.rtime, -+ body.crealm, -+ body.sname, -+ body.addresses -+ ); -+ EncryptedData edata = new EncryptedData(ckey, enc_part.asn1Encode(), KeyUsage.KU_ENC_TGS_REP_PART_SESSKEY); -+ TGSRep tgsRep = new TGSRep(null, -+ etp.crealm, -+ etp.cname, -+ t, -+ edata); -+ System.out.println(" Return " + tgsRep.cname -+ + " ticket for " + tgsRep.ticket.sname); -+ -+ DerOutputStream out = new DerOutputStream(); -+ out.write(DerValue.createTag(DerValue.TAG_APPLICATION, -+ true, (byte)Krb5.KRB_TGS_REP), tgsRep.asn1Encode()); -+ return out.toByteArray(); -+ } catch (KrbException ke) { -+ ke.printStackTrace(System.out); -+ KRBError kerr = ke.getError(); -+ KDCReqBody body = tgsReq.reqBody; -+ System.out.println(" Error " + ke.returnCode() -+ + " " +ke.returnCodeMessage()); -+ if (kerr == null) { -+ kerr = new KRBError(null, null, null, -+ new KerberosTime(new Date()), -+ 0, -+ ke.returnCode(), -+ body.crealm, body.cname, -+ new Realm(getRealm()), body.sname, -+ KrbException.errorMessage(ke.returnCode()), -+ null); -+ } -+ return kerr.asn1Encode(); -+ } -+ } -+ -+ /** -+ * Processes a AS_REQ and generates a AS_REP (or KRB_ERROR) -+ * @param in the request -+ * @return the response -+ * @throws java.lang.Exception for various errors -+ */ -+ private byte[] processAsReq(byte[] in) throws Exception { -+ ASReq asReq = new ASReq(in); -+ int[] eTypes = null; -+ try { -+ System.out.println(realm + "> " + asReq.reqBody.cname + -+ " sends AS-REQ for " + -+ asReq.reqBody.sname); -+ -+ KDCReqBody body = asReq.reqBody; -+ -+ // Reflection: int[] eType = body.eType; -+ Field f = KDCReqBody.class.getDeclaredField("eType"); -+ f.setAccessible(true); -+ eTypes = (int[])f.get(body); -+ int eType = eTypes[0]; -+ -+ EncryptionKey ckey = keyForUser(body.cname, eType); -+ EncryptionKey skey = keyForUser(body.sname, eType); -+ if (ckey == null) { -+ throw new KrbException(Krb5.KDC_ERR_ETYPE_NOSUPP); -+ } -+ if (skey == null) { -+ throw new KrbException(Krb5.KDC_ERR_SUMTYPE_NOSUPP); // TODO -+ } -+ -+ // Session key -+ EncryptionKey key = generateRandomKey(eType); -+ // Check time, TODO -+ KerberosTime till = body.till; -+ if (till == null) { -+ throw new KrbException(Krb5.KDC_ERR_NEVER_VALID); // TODO -+ } else if (till.isZero()) { -+ till = new KerberosTime(new Date().getTime() + 1000 * 3600 * 11); -+ } -+ //body.from -+ boolean[] bFlags = new boolean[Krb5.TKT_OPTS_MAX+1]; -+ if (body.kdcOptions.get(KDCOptions.FORWARDABLE)) { -+ bFlags[Krb5.TKT_OPTS_FORWARDABLE] = true; -+ } -+ if (body.kdcOptions.get(KDCOptions.RENEWABLE)) { -+ bFlags[Krb5.TKT_OPTS_RENEWABLE] = true; -+ //renew = new KerberosTime(new Date().getTime() + 1000 * 3600 * 24 * 7); -+ } -+ if (body.kdcOptions.get(KDCOptions.PROXIABLE)) { -+ bFlags[Krb5.TKT_OPTS_PROXIABLE] = true; -+ } -+ if (body.kdcOptions.get(KDCOptions.POSTDATED)) { -+ bFlags[Krb5.TKT_OPTS_POSTDATED] = true; -+ } -+ if (body.kdcOptions.get(KDCOptions.ALLOW_POSTDATE)) { -+ bFlags[Krb5.TKT_OPTS_MAY_POSTDATE] = true; -+ } -+ bFlags[Krb5.TKT_OPTS_INITIAL] = true; -+ -+ f = KDCReq.class.getDeclaredField("pAData"); -+ f.setAccessible(true); -+ PAData[] pas = (PAData[])f.get(asReq); -+ if (pas == null || pas.length == 0) { -+ Object preauth = options.get(Option.PREAUTH_REQUIRED); -+ if (preauth == null || preauth.equals(Boolean.TRUE)) { -+ throw new KrbException(Krb5.KDC_ERR_PREAUTH_REQUIRED); -+ } -+ } else { -+ try { -+ Constructor ctor = EncryptedData.class.getDeclaredConstructor(DerValue.class); -+ ctor.setAccessible(true); -+ EncryptedData data = ctor.newInstance(new DerValue(pas[0].getValue())); -+ data.decrypt(ckey, KeyUsage.KU_PA_ENC_TS); -+ } catch (Exception e) { -+ throw new KrbException(Krb5.KDC_ERR_PREAUTH_FAILED); -+ } -+ bFlags[Krb5.TKT_OPTS_PRE_AUTHENT] = true; -+ } -+ -+ TicketFlags tFlags = new TicketFlags(bFlags); -+ EncTicketPart enc = new EncTicketPart( -+ tFlags, -+ key, -+ body.crealm, -+ body.cname, -+ new TransitedEncoding(1, new byte[0]), -+ new KerberosTime(new Date()), -+ body.from, -+ till, body.rtime, -+ body.addresses, -+ null); -+ Ticket t = new Ticket( -+ body.crealm, -+ body.sname, -+ new EncryptedData(skey, enc.asn1Encode(), KeyUsage.KU_TICKET) -+ ); -+ EncASRepPart enc_part = new EncASRepPart( -+ key, -+ new LastReq(new LastReqEntry[]{ -+ new LastReqEntry(0, new KerberosTime(new Date().getTime() - 10000)) -+ }), -+ body.getNonce(), // TODO: detect replay? -+ new KerberosTime(new Date().getTime() + 1000 * 3600 * 24), -+ // Next 5 and last MUST be same with ticket -+ tFlags, -+ new KerberosTime(new Date()), -+ body.from, -+ till, body.rtime, -+ body.crealm, -+ body.sname, -+ body.addresses -+ ); -+ EncryptedData edata = new EncryptedData(ckey, enc_part.asn1Encode(), KeyUsage.KU_ENC_AS_REP_PART); -+ ASRep asRep = new ASRep(null, -+ body.crealm, -+ body.cname, -+ t, -+ edata); -+ -+ System.out.println(" Return " + asRep.cname -+ + " ticket for " + asRep.ticket.sname); -+ -+ DerOutputStream out = new DerOutputStream(); -+ out.write(DerValue.createTag(DerValue.TAG_APPLICATION, -+ true, (byte)Krb5.KRB_AS_REP), asRep.asn1Encode()); -+ return out.toByteArray(); -+ } catch (KrbException ke) { -+ ke.printStackTrace(System.out); -+ KRBError kerr = ke.getError(); -+ KDCReqBody body = asReq.reqBody; -+ System.out.println(" Error " + ke.returnCode() -+ + " " +ke.returnCodeMessage()); -+ byte[] eData = null; -+ if (kerr == null) { -+ if (ke.returnCode() == Krb5.KDC_ERR_PREAUTH_REQUIRED || -+ ke.returnCode() == Krb5.KDC_ERR_PREAUTH_FAILED) { -+ PAData pa; -+ -+ ETypeInfo2 ei2 = new ETypeInfo2(eTypes[0], null, null); -+ DerOutputStream eid = new DerOutputStream(); -+ eid.write(DerValue.tag_Sequence, ei2.asn1Encode()); -+ -+ pa = new PAData(Krb5.PA_ETYPE_INFO2, eid.toByteArray()); -+ -+ DerOutputStream bytes = new DerOutputStream(); -+ bytes.write(new PAData(Krb5.PA_ENC_TIMESTAMP, new byte[0]).asn1Encode()); -+ bytes.write(pa.asn1Encode()); -+ -+ boolean allOld = true; -+ for (int i: eTypes) { -+ if (i == EncryptedData.ETYPE_AES128_CTS_HMAC_SHA1_96 || -+ i == EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96) { -+ allOld = false; -+ break; -+ } -+ } -+ if (allOld) { -+ ETypeInfo ei = new ETypeInfo(eTypes[0], null); -+ eid = new DerOutputStream(); -+ eid.write(DerValue.tag_Sequence, ei.asn1Encode()); -+ pa = new PAData(Krb5.PA_ETYPE_INFO, eid.toByteArray()); -+ bytes.write(pa.asn1Encode()); -+ } -+ DerOutputStream temp = new DerOutputStream(); -+ temp.write(DerValue.tag_Sequence, bytes); -+ eData = temp.toByteArray(); -+ } -+ kerr = new KRBError(null, null, null, -+ new KerberosTime(new Date()), -+ 0, -+ ke.returnCode(), -+ body.crealm, body.cname, -+ new Realm(getRealm()), body.sname, -+ KrbException.errorMessage(ke.returnCode()), -+ eData); -+ } -+ return kerr.asn1Encode(); -+ } -+ } -+ -+ /** -+ * Generates a line for a KDC to put inside [realms] of krb5.conf -+ * @param kdc the KDC -+ * @return REALM.NAME = { kdc = localhost:port } -+ */ -+ private static String realmLineForKDC(KDC kdc) { -+ return String.format(" %s = {\n kdc = localhost:%d\n }\n", kdc.realm, kdc.port); -+ } -+ -+ /** -+ * Start the KDC service. This server listens on both UDP and TCP using -+ * the same port number. It uses three threads to deal with requests. -+ * They can be set to daemon threads if requested. -+ * @param port the port number to listen to. If zero, a random available -+ * port no less than 8000 will be chosen and used. -+ * @param asDaemon true if the KDC threads should be daemons -+ * @throws java.io.IOException for any communication error -+ */ -+ protected void startServer(int port, boolean asDaemon) throws IOException { -+ DatagramSocket u1 = null; -+ ServerSocket t1 = null; -+ if (port > 0) { -+ u1 = new DatagramSocket(port, InetAddress.getByName("127.0.0.1")); -+ t1 = new ServerSocket(port); -+ } else { -+ while (true) { -+ // Try to find a port number that's both TCP and UDP free -+ try { -+ port = 8000 + new java.util.Random().nextInt(10000); -+ u1 = null; -+ u1 = new DatagramSocket(port, InetAddress.getByName("127.0.0.1")); -+ t1 = new ServerSocket(port); -+ break; -+ } catch (Exception e) { -+ if (u1 != null) u1.close(); -+ } -+ } -+ } -+ final DatagramSocket udp = u1; -+ final ServerSocket tcp = t1; -+ System.out.println("Start KDC on " + port); -+ -+ this.port = port; -+ -+ // The UDP consumer -+ Thread thread = new Thread() { -+ public void run() { -+ while (true) { -+ try { -+ byte[] inbuf = new byte[8192]; -+ DatagramPacket p = new DatagramPacket(inbuf, inbuf.length); -+ udp.receive(p); -+ System.out.println("-----------------------------------------------"); -+ System.out.println(">>>>> UDP packet received"); -+ q.put(new Job(processMessage(Arrays.copyOf(inbuf, p.getLength())), udp, p)); -+ } catch (Exception e) { -+ e.printStackTrace(); -+ } -+ } -+ } -+ }; -+ thread.setDaemon(asDaemon); -+ thread.start(); -+ -+ // The TCP consumer -+ thread = new Thread() { -+ public void run() { -+ while (true) { -+ try { -+ Socket socket = tcp.accept(); -+ System.out.println("-----------------------------------------------"); -+ System.out.println(">>>>> TCP connection established"); -+ DataInputStream in = new DataInputStream(socket.getInputStream()); -+ DataOutputStream out = new DataOutputStream(socket.getOutputStream()); -+ byte[] token = new byte[in.readInt()]; -+ in.readFully(token); -+ q.put(new Job(processMessage(token), socket, out)); -+ } catch (Exception e) { -+ e.printStackTrace(); -+ } -+ } -+ } -+ }; -+ thread.setDaemon(asDaemon); -+ thread.start(); -+ -+ // The dispatcher -+ thread = new Thread() { -+ public void run() { -+ while (true) { -+ try { -+ q.take().send(); -+ } catch (Exception e) { -+ } -+ } -+ } -+ }; -+ thread.setDaemon(true); -+ thread.start(); -+ } -+ -+ /** -+ * Helper class to encapsulate a job in a KDC. -+ */ -+ private static class Job { -+ byte[] token; // The received request at creation time and -+ // the response at send time -+ Socket s; // The TCP socket from where the request comes -+ DataOutputStream out; // The OutputStream of the TCP socket -+ DatagramSocket s2; // The UDP socket from where the request comes -+ DatagramPacket dp; // The incoming UDP datagram packet -+ boolean useTCP; // Whether TCP or UDP is used -+ -+ // Creates a job object for TCP -+ Job(byte[] token, Socket s, DataOutputStream out) { -+ useTCP = true; -+ this.token = token; -+ this.s = s; -+ this.out = out; -+ } -+ -+ // Creates a job object for UDP -+ Job(byte[] token, DatagramSocket s2, DatagramPacket dp) { -+ useTCP = false; -+ this.token = token; -+ this.s2 = s2; -+ this.dp = dp; -+ } -+ -+ // Sends the output back to the client -+ void send() { -+ try { -+ if (useTCP) { -+ System.out.println(">>>>> TCP request honored"); -+ out.writeInt(token.length); -+ out.write(token); -+ s.close(); -+ } else { -+ System.out.println(">>>>> UDP request honored"); -+ s2.send(new DatagramPacket(token, token.length, dp.getAddress(), dp.getPort())); -+ } -+ } catch (Exception e) { -+ e.printStackTrace(); -+ } -+ } -+ } -+} -diff -r 8b2d7e577d4a -r 3f051f3ba5bb test/sun/security/krb5/auto/KerberosHashEqualsTest.java ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/test/sun/security/krb5/auto/KerberosHashEqualsTest.java Fri Oct 17 13:02:00 2008 +0800 -@@ -0,0 +1,173 @@ -+/* -+ * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved. -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * This code is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. -+ * -+ * This code is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+ * version 2 for more details (a copy is included in the LICENSE file that -+ * accompanied this code). -+ * -+ * You should have received a copy of the GNU General Public License version -+ * 2 along with this work; if not, write to the Free Software Foundation, -+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -+ * CA 95054 USA or visit www.sun.com if you need additional information or -+ * have any questions. -+ */ -+ -+/* -+ * @test -+ * @bug 4641821 -+ * @summary hashCode() and equals() for KerberosKey and KerberosTicket -+ */ -+ -+import java.net.InetAddress; -+import java.util.Date; -+import javax.security.auth.kerberos.KerberosKey; -+import javax.security.auth.kerberos.KerberosPrincipal; -+import javax.security.auth.kerberos.KerberosTicket; -+ -+public class KerberosHashEqualsTest { -+ public static void main(String[] args) throws Exception { -+ new OneKDC(null); -+ new KerberosHashEqualsTest().check(); -+ } -+ -+ void checkSame(Object o1, Object o2) { -+ if(!o1.equals(o2)) { -+ throw new RuntimeException("equals() fails"); -+ } -+ if(o1.hashCode() != o2.hashCode()) { -+ throw new RuntimeException("hashCode() not same"); -+ } -+ } -+ -+ void checkNotSame(Object o1, Object o2) { -+ if(o1.equals(o2)) { -+ throw new RuntimeException("equals() succeeds"); -+ } -+ } -+ -+ void check() throws Exception { -+ -+ // The key part: -+ // new KerberosKey(principal, bytes, keyType, version) -+ -+ KerberosKey k1, k2; -+ KerberosPrincipal CLIENT = new KerberosPrincipal("client"); -+ KerberosPrincipal SERVER = new KerberosPrincipal("server"); -+ byte[] PASS = "pass".getBytes(); -+ -+ k1 = new KerberosKey(CLIENT, PASS, 1, 1); -+ k2 = new KerberosKey(CLIENT, PASS, 1, 1); -+ checkSame(k1, k1); // me is me -+ checkSame(k1, k2); // same -+ -+ // A destroyed key doesn't equal to any key -+ k2.destroy(); -+ checkNotSame(k1, k2); -+ checkNotSame(k2, k1); -+ k1.destroy(); -+ checkNotSame(k1, k2); // even if they are both destroyed -+ checkNotSame(k2, k1); -+ checkSame(k2, k2); -+ -+ // a little difference means not equal -+ k1 = new KerberosKey(CLIENT, PASS, 1, 1); -+ k2 = new KerberosKey(SERVER, PASS, 1, 1); -+ checkNotSame(k1, k2); // Different principal name -+ -+ k2 = new KerberosKey(CLIENT, "ssap".getBytes(), 1, 1); -+ checkNotSame(k1, k2); // Different password -+ -+ k2 = new KerberosKey(CLIENT, PASS, 2, 1); -+ checkNotSame(k1, k2); // Different keytype -+ -+ k2 = new KerberosKey(CLIENT, PASS, 1, 2); -+ checkNotSame(k1, k2); // Different version -+ -+ k2 = new KerberosKey(null, PASS, 1, 2); -+ checkNotSame(k1, k2); // null is not non-null -+ -+ k1 = new KerberosKey(null, PASS, 1, 2); -+ checkSame(k1, k2); // null is null -+ -+ checkNotSame(k1, "Another Object"); -+ -+ // The ticket part: -+ // new KerberosTicket(asn1 bytes, client, server, session key, type, flags, -+ // auth, start, end, renewUntil times, address) -+ -+ KerberosTicket t1, t2; -+ -+ byte[] ASN1 = "asn1".getBytes(); -+ boolean[] FORWARDABLE = new boolean[] {true, true}; -+ boolean[] ALLTRUE = new boolean[] {true, true, true, true, true, true, true, true, true, true}; -+ Date D0 = new Date(0); -+ -+ t1 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, D0, D0, D0, null); -+ t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, D0, D0, D0, null); -+ checkSame(t1, t1); -+ checkSame(t1, t2); -+ -+ // destroyed tickets doesn't equal to each other -+ t1.destroy(); -+ checkNotSame(t1, t2); -+ checkNotSame(t2, t1); -+ -+ t2.destroy(); -+ checkNotSame(t1, t2); // even if they are both destroyed -+ checkNotSame(t2, t1); -+ -+ checkSame(t2, t2); // unless they are the same object -+ -+ // a little difference means not equal -+ t1 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, D0, D0, D0, null); -+ t2 = new KerberosTicket("asn11".getBytes(), CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, D0, D0, D0, null); -+ checkNotSame(t1, t2); // Different ASN1 encoding -+ -+ t2 = new KerberosTicket(ASN1, new KerberosPrincipal("client1"), SERVER, PASS, 1, FORWARDABLE, D0, D0, D0, D0, null); -+ checkNotSame(t1, t2); // Different client -+ -+ t2 = new KerberosTicket(ASN1, CLIENT, new KerberosPrincipal("server1"), PASS, 1, FORWARDABLE, D0, D0, D0, D0, null); -+ checkNotSame(t1, t2); // Different server -+ -+ t2 = new KerberosTicket(ASN1, CLIENT, SERVER, "pass1".getBytes(), 1, FORWARDABLE, D0, D0, D0, D0, null); -+ checkNotSame(t1, t2); // Different session key -+ -+ t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 2, FORWARDABLE, D0, D0, D0, D0, null); -+ checkNotSame(t1, t2); // Different key type -+ -+ t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, new boolean[] {true, false}, D0, D0, D0, D0, null); -+ checkNotSame(t1, t2); // Different flags, not FORWARDABLE -+ -+ t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, new Date(1), D0, D0, D0, null); -+ checkNotSame(t1, t2); // Different authtime -+ -+ t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, new Date(1), D0, D0, null); -+ checkNotSame(t1, t2); // Different starttime -+ -+ t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, D0, new Date(1), D0, null); -+ checkNotSame(t1, t2); // Different endtime -+ -+ t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, D0, D0, D0, new InetAddress[2]); -+ checkNotSame(t1, t2); // Different client addresses -+ -+ t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, D0, D0, new Date(1), null); -+ t1 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, FORWARDABLE, D0, D0, D0, new Date(2), null); -+ checkSame(t1, t2); // renewtill is ignored when RENEWABLE ticket flag is not set. -+ -+ t2 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, ALLTRUE, D0, D0, D0, new Date(1), null); -+ t1 = new KerberosTicket(ASN1, CLIENT, SERVER, PASS, 1, ALLTRUE, D0, D0, D0, new Date(2), null); -+ checkNotSame(t1, t2); // renewtill is used when RENEWABLE is set. -+ -+ checkNotSame(t1, "Another Object"); -+ System.out.println("Good!"); -+ } -+} -diff -r 8b2d7e577d4a -r 3f051f3ba5bb test/sun/security/krb5/auto/OneKDC.java ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/test/sun/security/krb5/auto/OneKDC.java Fri Oct 17 13:02:00 2008 +0800 -@@ -0,0 +1,140 @@ -+/* -+ * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * This code is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. -+ * -+ * This code is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+ * version 2 for more details (a copy is included in the LICENSE file that -+ * accompanied this code). -+ * -+ * You should have received a copy of the GNU General Public License version -+ * 2 along with this work; if not, write to the Free Software Foundation, -+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -+ * CA 95054 USA or visit www.sun.com if you need additional information or -+ * have any questions. -+ */ -+ -+import java.io.File; -+import java.io.FileOutputStream; -+import java.io.IOException; -+import java.security.Security; -+import javax.security.auth.callback.Callback; -+import javax.security.auth.callback.CallbackHandler; -+import javax.security.auth.callback.NameCallback; -+import javax.security.auth.callback.PasswordCallback; -+import sun.security.krb5.Config; -+ -+/** -+ * This class starts a simple KDC with one realm, several typical principal -+ * names, generates delete-on-exit krb5.conf and keytab files, and setup -+ * system properties for them. There's also a helper method to generate a -+ * JAAS login config file that can be used for JAAS or JGSS apps. -+ *

    -+ * Just call this line to start everything: -+ *

    -+ * new OneKDC(null).writeJaasConf();
    -+ * 
    -+ */ -+public class OneKDC extends KDC { -+ -+ public static final String USER = "dummy"; -+ public static final char[] PASS = "bogus".toCharArray(); -+ public static final String SERVER = "server/localhost"; -+ public static final String BACKEND = "backend/localhost"; -+ public static final String KRB5_CONF = "localkdc-krb5.conf"; -+ public static final String KTAB = "localkdc.ktab"; -+ public static final String JAAS_CONF = "localkdc-jaas.conf"; -+ public static final String REALM = "RABBIT.HOLE"; -+ -+ /** -+ * Creates the KDC and starts it. -+ * @param etype Encryption type, null if not specified -+ * @throws java.lang.Exception if there's anything wrong -+ */ -+ public OneKDC(String etype) throws Exception { -+ super(REALM, 0, true); -+ addPrincipal(USER, PASS); -+ addPrincipalRandKey("krbtgt/" + REALM); -+ addPrincipalRandKey(SERVER); -+ addPrincipalRandKey(BACKEND); -+ KDC.saveConfig(KRB5_CONF, this, -+ "forwardable = true", -+ "default_keytab_name = " + KTAB, -+ etype == null ? "" : "default_tkt_enctypes=" + etype + "\ndefault_tgs_enctypes=" + etype); -+ System.setProperty("java.security.krb5.conf", KRB5_CONF); -+ // Whatever krb5.conf had been loaded before, we reload ours now. -+ Config.refresh(); -+ -+ writeKtab(KTAB); -+ new File(KRB5_CONF).deleteOnExit(); -+ new File(KTAB).deleteOnExit(); -+ } -+ -+ /** -+ * Writes a JAAS login config file, which contains as many as useful -+ * entries, including JGSS style initiator/acceptor and normal JAAS -+ * entries with names using existing OneKDC principals. -+ * @throws java.lang.Exception if anything goes wrong -+ */ -+ public void writeJAASConf() throws IOException { -+ System.setProperty("java.security.auth.login.config", JAAS_CONF); -+ File f = new File(JAAS_CONF); -+ FileOutputStream fos = new FileOutputStream(f); -+ fos.write(( -+ "com.sun.security.jgss.krb5.initiate {\n" + -+ " com.sun.security.auth.module.Krb5LoginModule required;\n};\n" + -+ "com.sun.security.jgss.krb5.accept {\n" + -+ " com.sun.security.auth.module.Krb5LoginModule required\n" + -+ " principal=\"" + SERVER + "\"\n" + -+ " useKeyTab=true\n" + -+ " isInitiator=false\n" + -+ " storeKey=true;\n};\n" + -+ "client {\n" + -+ " com.sun.security.auth.module.Krb5LoginModule required;\n};\n" + -+ "server {\n" + -+ " com.sun.security.auth.module.Krb5LoginModule required\n" + -+ " principal=\"" + SERVER + "\"\n" + -+ " useKeyTab=true\n" + -+ " storeKey=true;\n};\n" + -+ "backend {\n" + -+ " com.sun.security.auth.module.Krb5LoginModule required\n" + -+ " principal=\"" + BACKEND + "\"\n" + -+ " useKeyTab=true\n" + -+ " storeKey=true\n" + -+ " isInitiator=false;\n};\n" -+ ).getBytes()); -+ fos.close(); -+ f.deleteOnExit(); -+ Security.setProperty("auth.login.defaultCallbackHandler", "OneKDC$CallbackForClient"); -+ } -+ -+ /** -+ * The default callback handler for JAAS login. Note that this handler is -+ * hard coded to provide only info for USER1. If you need to provide info -+ * for another principal, please use Context.fromUserPass() instead. -+ */ -+ public static class CallbackForClient implements CallbackHandler { -+ public void handle(Callback[] callbacks) { -+ String user = OneKDC.USER; -+ char[] pass = OneKDC.PASS; -+ for (Callback callback : callbacks) { -+ if (callback instanceof NameCallback) { -+ System.out.println("Callback for name: " + user); -+ ((NameCallback) callback).setName(user); -+ } -+ if (callback instanceof PasswordCallback) { -+ System.out.println("Callback for pass: " -+ + new String(pass)); -+ ((PasswordCallback) callback).setPassword(pass); -+ } -+ } -+ } -+ } -+} -diff -r 8b2d7e577d4a -r 3f051f3ba5bb test/sun/security/krb5/auto/basic.sh ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/test/sun/security/krb5/auto/basic.sh Fri Oct 17 13:02:00 2008 +0800 -@@ -0,0 +1,65 @@ -+# -+# Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+# -+# This code is free software; you can redistribute it and/or modify it -+# under the terms of the GNU General Public License version 2 only, as -+# published by the Free Software Foundation. -+# -+# This code is distributed in the hope that it will be useful, but WITHOUT -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+# version 2 for more details (a copy is included in the LICENSE file that -+# accompanied this code). -+# -+# You should have received a copy of the GNU General Public License version -+# 2 along with this work; if not, write to the Free Software Foundation, -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+# -+# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -+# CA 95054 USA or visit www.sun.com if you need additional information or -+# have any questions. -+# -+ -+# @test -+# @bug 6706974 -+# @summary Add krb5 test infrastructure -+# @run shell/timeout=300 basic.sh -+# -+ -+if [ "${TESTSRC}" = "" ] ; then -+ TESTSRC="." -+fi -+if [ "${TESTJAVA}" = "" ] ; then -+ echo "TESTJAVA not set. Test cannot execute." -+ echo "FAILED!!!" -+ exit 1 -+fi -+ -+# set platform-dependent variables -+OS=`uname -s` -+case "$OS" in -+ Windows_* ) -+ FS="\\" -+ ;; -+ * ) -+ FS="/" -+ ;; -+esac -+ -+${TESTJAVA}${FS}bin${FS}javac -d . \ -+ ${TESTSRC}${FS}BasicKrb5Test.java \ -+ ${TESTSRC}${FS}KDC.java \ -+ ${TESTSRC}${FS}OneKDC.java \ -+ ${TESTSRC}${FS}Action.java \ -+ ${TESTSRC}${FS}Context.java \ -+ || exit 10 -+${TESTJAVA}${FS}bin${FS}java -Dtest.src=$TESTSRC BasicKrb5Test || exit 100 -+${TESTJAVA}${FS}bin${FS}java -Dtest.src=$TESTSRC BasicKrb5Test des-cbc-crc || exit 1 -+${TESTJAVA}${FS}bin${FS}java -Dtest.src=$TESTSRC BasicKrb5Test des-cbc-md5 || exit 3 -+${TESTJAVA}${FS}bin${FS}java -Dtest.src=$TESTSRC BasicKrb5Test des3-cbc-sha1 || exit 16 -+${TESTJAVA}${FS}bin${FS}java -Dtest.src=$TESTSRC BasicKrb5Test aes128-cts || exit 17 -+${TESTJAVA}${FS}bin${FS}java -Dtest.src=$TESTSRC BasicKrb5Test aes256-cts || exit 18 -+${TESTJAVA}${FS}bin${FS}java -Dtest.src=$TESTSRC BasicKrb5Test rc4-hmac || exit 23 -+ -+exit 0 diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/6730740-pr2186-64-bit_breakage_in_6729881.patch openjdk-6-6b34-1.13.6/patches/openjdk/6730740-pr2186-64-bit_breakage_in_6729881.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/6730740-pr2186-64-bit_breakage_in_6729881.patch 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/6730740-pr2186-64-bit_breakage_in_6729881.patch 2015-01-21 22:23:45.000000000 +0000 @@ -0,0 +1,55 @@ +# HG changeset patch +# User chegar +# Date 1217350415 25200 +# Tue Jul 29 09:53:35 2008 -0700 +# Node ID 629fa51e0281243c7341bce37e4421a7069c72ee +# Parent 31845b0edbd16232f26c266f1f79729fb83a6975 +6730740: Fix for 6729881 has apparently broken several 64 bit tests: "Bad address" +Reviewed-by: alanb, jccollet + +diff -r 31845b0edbd1 -r 629fa51e0281 src/solaris/native/java/net/linux_close.c +--- openjdk/jdk/src/solaris/native/java/net/linux_close.c Wed Jan 21 20:57:52 2015 +0000 ++++ openjdk/jdk/src/solaris/native/java/net/linux_close.c Tue Jul 29 09:53:35 2008 -0700 +@@ -281,7 +281,9 @@ + + int NET_RecvFrom(int s, void *buf, int len, unsigned int flags, + struct sockaddr *from, int *fromlen) { +- BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, (socklen_t)fromlen) ); ++ socklen_t socklen = *fromlen; ++ BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, &socklen) ); ++ *fromlen = socklen; + } + + int NET_Send(int s, void *msg, int len, unsigned int flags) { +@@ -298,7 +300,9 @@ + } + + int NET_Accept(int s, struct sockaddr *addr, int *addrlen) { +- BLOCKING_IO_RETURN_INT( s, accept(s, addr, (socklen_t)addrlen) ); ++ socklen_t socklen = *addrlen; ++ BLOCKING_IO_RETURN_INT( s, accept(s, addr, &socklen) ); ++ *addrlen = socklen; + } + + int NET_Connect(int s, struct sockaddr *addr, int addrlen) { +diff -r 31845b0edbd1 -r 629fa51e0281 src/solaris/native/java/net/net_util_md.c +--- openjdk/jdk/src/solaris/native/java/net/net_util_md.c Wed Jan 21 20:57:52 2015 +0000 ++++ openjdk/jdk/src/solaris/native/java/net/net_util_md.c Tue Jul 29 09:53:35 2008 -0700 +@@ -1104,7 +1104,16 @@ + } + #endif + +- rv = getsockopt(fd, level, opt, result, (socklen_t)len); ++#ifdef __solaris__ ++ rv = getsockopt(fd, level, opt, result, len); ++#else ++ { ++ socklen_t socklen = *len; ++ rv = getsockopt(fd, level, opt, result, &socklen); ++ *len = socklen; ++ } ++#endif ++ + if (rv < 0) { + return rv; + } diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/6761072-new_krb5_tests_fail_on_multiple_platforms.patch openjdk-6-6b34-1.13.6/patches/openjdk/6761072-new_krb5_tests_fail_on_multiple_platforms.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/6761072-new_krb5_tests_fail_on_multiple_platforms.patch 2014-10-08 18:39:25.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/6761072-new_krb5_tests_fail_on_multiple_platforms.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,94 +0,0 @@ -# HG changeset patch -# User weijun -# Date 1224469953 -28800 -# Node ID 0bf6c9c6fdc55ec5867a9c892b6a9408b8253198 -# Parent 064e6a087f775f1850e68c569e7adf092bcb1c30 -6761072: new krb5 tests fail on multiple platforms -Reviewed-by: xuelei - -diff -r 064e6a087f77 -r 0bf6c9c6fdc5 test/sun/security/krb5/auto/BasicKrb5Test.java ---- openjdk.orig/jdk/test/sun/security/krb5/auto/BasicKrb5Test.java Fri Oct 17 00:51:59 2008 -0700 -+++ openjdk/jdk/test/sun/security/krb5/auto/BasicKrb5Test.java Mon Oct 20 10:32:33 2008 +0800 -@@ -49,14 +49,17 @@ - if (args.length > 0) { - etype = args[0]; - } -+ -+ // Creates and starts the KDC. This line must be put ahead of etype check -+ // since the check needs a krb5.conf. -+ new OneKDC(etype).writeJAASConf(); -+ - System.out.println("Testing etype " + etype); - if (etype != null && !EType.isSupported(Config.getInstance().getType(etype))) { - System.out.println("Not supported."); - System.exit(0); - } - -- // Creates and starts the KDC -- new OneKDC(etype).writeJAASConf(); - new BasicKrb5Test().go(OneKDC.SERVER, OneKDC.BACKEND); - } - -diff -r 064e6a087f77 -r 0bf6c9c6fdc5 test/sun/security/krb5/auto/KDC.java ---- openjdk.orig/jdk/test/sun/security/krb5/auto/KDC.java Fri Oct 17 00:51:59 2008 -0700 -+++ openjdk/jdk/test/sun/security/krb5/auto/KDC.java Mon Oct 20 10:32:33 2008 +0800 -@@ -152,12 +152,19 @@ - return; - } - } -+ String localhost = "localhost"; -+ try { -+ localhost = InetAddress.getByName(localhost) -+ .getCanonicalHostName(); -+ } catch (UnknownHostException uhe) { -+ ; // Ignore, localhost is still "localhost" -+ } - KDC kdc = create("RABBIT.HOLE", 8888, false); - kdc.addPrincipal("dummy", "bogus".toCharArray()); - kdc.addPrincipal("foo", "bar".toCharArray()); - kdc.addPrincipalRandKey("krbtgt/" + kdc.realm); -- kdc.addPrincipalRandKey("server/localhost"); -- kdc.addPrincipalRandKey("backend/localhost"); -+ kdc.addPrincipalRandKey("server/" + localhost); -+ kdc.addPrincipalRandKey("backend/" + localhost); - } - - /** -diff -r 064e6a087f77 -r 0bf6c9c6fdc5 test/sun/security/krb5/auto/OneKDC.java ---- openjdk.orig/jdk/test/sun/security/krb5/auto/OneKDC.java Fri Oct 17 00:51:59 2008 -0700 -+++ openjdk/jdk/test/sun/security/krb5/auto/OneKDC.java Mon Oct 20 10:32:33 2008 +0800 -@@ -24,6 +24,8 @@ - import java.io.File; - import java.io.FileOutputStream; - import java.io.IOException; -+import java.net.InetAddress; -+import java.net.UnknownHostException; - import java.security.Security; - import javax.security.auth.callback.Callback; - import javax.security.auth.callback.CallbackHandler; -@@ -44,10 +46,23 @@ - */ - public class OneKDC extends KDC { - -+ // The krb5 codes would try to canonicalize hostnames before creating -+ // a service principal name, so let's find out the canonicalized form -+ // of localhost first. The following codes mimic the process inside -+ // PrincipalName.java. -+ static String localhost = "localhost"; -+ static { -+ try { -+ localhost = InetAddress.getByName(localhost) -+ .getCanonicalHostName(); -+ } catch (UnknownHostException uhe) { -+ ; // Ignore, localhost is still "localhost" -+ } -+ } - public static final String USER = "dummy"; - public static final char[] PASS = "bogus".toCharArray(); -- public static final String SERVER = "server/localhost"; -- public static final String BACKEND = "backend/localhost"; -+ public static String SERVER = "server/" + localhost; -+ public static String BACKEND = "backend/" + localhost; - public static final String KRB5_CONF = "localkdc-krb5.conf"; - public static final String KTAB = "localkdc.ktab"; - public static final String JAAS_CONF = "localkdc-jaas.conf"; diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/6821191-tz_display_names_l10n.patch openjdk-6-6b34-1.13.6/patches/openjdk/6821191-tz_display_names_l10n.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/6821191-tz_display_names_l10n.patch 2014-10-08 18:39:25.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/6821191-tz_display_names_l10n.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,125 +0,0 @@ -# HG changeset patch -# User yhuang -# Date 1262835175 28800 -# Node ID eea1cc096889cec5151c08de842a5493724cdc1c -# Parent 8bf6b2173e9f5b54ecf393e24b23d3f79968c6da -6821191: Timezone display name localization -Reviewed-by: yhuang, ogino - ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java -@@ -173,8 +173,8 @@ - "Truk Sommerzeit", "TRUST"}; - String ULAT[]= new String[] {"Ulaanbaatar Zeit", "ULAT", - "Ulaanbaatar Sommerzeit", "ULAST"}; -- String WART[] = new String[] {"Argentinische Zeit", "WART", -- "Argentinische Sommerzeit", "WARST"}; -+ String WART[] = new String[] {"Westargentinische Zeit", "WART", -+ "Westargentinische Sommerzeit", "WARST"}; - String WAT[] = new String[] {"Westafrikanische Zeit", "WAT", - "Westafrikanische Sommerzeit", "WAST"}; - String WET[] = new String[] {"Westeurop\u00e4ische Zeit", "WEZ", ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java -@@ -173,8 +173,8 @@ - "Hora de verano de Truk", "TRUST"}; - String ULAT[]= new String[] {"Hora de Ulan Bator", "ULAT", - "Hora de verano de Ulan Bator", "ULAST"}; -- String WART[] = new String[] {"Hora de Argentina", "WART", -- "Hora de verano de Argentina", "WARST"}; -+ String WART[] = new String[] {"Hora de Argentina Occidental", "WART", -+ "Hora de verano de Argentina Occidental", "WARST"}; - String WAT[] = new String[] {"Hora de \u00c1frica Occidental", "WAT", - "Hora de verano de \u00c1frica Occidental", "WAST"}; - String WET[] = new String[] {"Hora de Europa Occidental", "WET", ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java -@@ -173,8 +173,8 @@ - "Heure d'\u00e9t\u00e9 de Truk", "TRUST"}; - String ULAT[]= new String[] {"Heure de l'Ulaanbaatar", "ULAT", - "Heure d'\u00e9t\u00e9 de l'Ulaanbaatar", "ULAST"} ; -- String WART[] = new String[] {"Heure D'Argentine", "WART", -- "Heure d'\u00e9t\u00e9 D'Argentine", "WARST"} ; -+ String WART[] = new String[] {"Heure D'Argentine de l'Ouest", "WART", -+ "Heure d'\u00e9t\u00e9 D'Argentine de l'Ouest", "WARST"} ; - String WAT[] = new String[] {"Heure d'Afrique de l'Ouest", "WAT", - "Heure d'\u00e9t\u00e9 d'Afrique de l'Ouest", "WAST"} ; - String WET[] = new String[] {"Heure d'Europe de l'Ouest", "WET", ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java -@@ -173,8 +173,8 @@ - "Ora estiva di Truk", "TRUST"}; - String ULAT[]= new String[] {"Ora di Ulaanbaatar", "ULAT", - "Ora estiva di Ulaanbaatar", "ULAST"}; -- String WART[] = new String[] {"Ora dell'Argentina", "WART", -- "Ora estiva dell'Argentina", "WARST"}; -+ String WART[] = new String[] {"Ora dell'Argentina occidentale", "WART", -+ "Ora estiva dell'Argentina occidentale", "WARST"}; - String WAT[] = new String[] {"Ora dell'Africa occidentale", "WAT", - "Ora estiva dell'Africa occidentale", "WAST"}; - String WET[] = new String[] {"Ora dell'Europa occidentale", "WET", ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java -@@ -173,8 +173,8 @@ - "\u30c8\u30e9\u30c3\u30af\u590f\u6642\u9593", "TRUST"}; - String ULAT[]= new String[] {"\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u6642\u9593", "ULAT", - "\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u590f\u6642\u9593", "ULAST"}; -- String WART[] = new String[] {"\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "WART", -- "\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "WARST"}; -+ String WART[] = new String[] {"\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "WART", -+ "\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "WARST"}; - String WAT[] = new String[] {"\u897f\u30a2\u30d5\u30ea\u30ab\u6642\u9593", "WAT", - "\u897f\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "WAST"}; - String WET[] = new String[] {"\u897f\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593", "WET", ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java -@@ -173,8 +173,8 @@ - "\ud2b8\ub8e8\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TRUST"}; - String ULAT[]= new String[] {"\uc6b8\ub780\ubc14\ud0c0\ub974 \uc2dc\uac04", "ULAT", - "\uc6b8\ub780\ubc14\ud0c0\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ULAST"}; -- String WART[] = new String[] {"\uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "WART", -- "\uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WARST"}; -+ String WART[] = new String[] {"\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "WART", -+ "\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WARST"}; - String WAT[] = new String[] {"\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc2dc\uac04", "WAT", - "\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WAST"}; - String WET[] = new String[] {"\uc11c\uc720\ub7fd \uc2dc\uac04", "WET", ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java -@@ -173,8 +173,8 @@ - "Truk, sommartid", "TRUST"}; - String ULAT[]= new String[] {"Ulaanbaatar, normaltid", "ULAT", - "Ulaanbaatar, sommartid", "ULAST"}; -- String WART[] = new String[] {"Argentina, normaltid", "WART", -- "Argentina, sommartid", "WARST"}; -+ String WART[] = new String[] {"V\u00e4stargentina, normaltid", "WART", -+ "V\u00e4stargentina, sommartid", "WARST"}; - String WAT[] = new String[] {"V\u00e4stafrikansk tid", "WAT", - "V\u00e4stafrikansk sommartid", "WAST"}; - String WET[] = new String[] {"V\u00e4steuropeisk tid", "WET", ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java -@@ -173,8 +173,8 @@ - "\u7279\u9c81\u514b\u590f\u4ee4\u65f6", "TRUST"}; - String ULAT[]= new String[] {"\u5e93\u4f26\u65f6\u95f4", "ULAT", - "\u5e93\u4f26\u590f\u4ee4\u65f6", "ULAST"}; -- String WART[] = new String[] {"\u963f\u6839\u5ef7\u65f6\u95f4", "WART", -- "\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "WARST"}; -+ String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u65f6\u95f4", "WART", -+ "\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "WARST"}; - String WAT[] = new String[] {"\u897f\u975e\u65f6\u95f4", "WAT", - "\u897f\u975e\u590f\u4ee4\u65f6", "WAST"}; - String WET[] = new String[] {"\u897f\u6b27\u65f6\u95f4", "WET", ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java -@@ -173,8 +173,8 @@ - "\u7279\u9b6f\u514b\u590f\u4ee4\u6642\u9593", "TRUST"}; - String ULAT[]= new String[] {"\u5eab\u502b\u6642\u9593", "ULAT", - "\u5eab\u502b\u590f\u4ee4\u6642\u9593", "ULAST"}; -- String WART[] = new String[] {"\u963f\u6839\u5ef7\u6642\u9593", "WART", -- "\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "WARST"}; -+ String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u6642\u9593", "WART", -+ "\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "WARST"}; - String WAT[] = new String[] {"\u897f\u975e\u6642\u9593", "WAT", - "\u897f\u975e\u590f\u4ee4\u6642\u9593", "WAST"}; - String WET[] = new String[] {"\u897f\u6b50\u6642\u9593", "WET", diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/6925851-pt_br.patch openjdk-6-6b34-1.13.6/patches/openjdk/6925851-pt_br.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/6925851-pt_br.patch 2014-10-08 18:39:25.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/6925851-pt_br.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,3651 +0,0 @@ -# HG changeset patch -# User yhuang -# Date 1291285057 28800 -# Thu Dec 02 02:17:37 2010 -0800 -# Node ID e3ecd9555ff01afd93f9aed6f883eb32f71c0505 -# Parent b357910aa04aead2a16b6d6ff395a8df4b51d1dd -6925851: Localize JRE into pt_BR -Reviewed-by: mfang, psun - -diff -r b357910aa04a -r e3ecd9555ff0 make/common/Defs.gmk ---- openjdk/jdk/make/common/Defs.gmk Wed Nov 10 20:40:19 2010 -0800 -+++ openjdk/jdk/make/common/Defs.gmk Thu Dec 02 02:17:37 2010 -0800 -@@ -246,8 +246,8 @@ - # Localizations for the different parts of the product beyond English - # - --JRE_LOCALES = de es fr it ja ko sv zh_CN zh_TW zh_HK --PLUGIN_LOCALES = de es fr it ja ko sv zh_CN zh_TW zh_HK -+JRE_LOCALES = de es fr it ja ko pt_BR sv zh_CN zh_TW zh_HK -+PLUGIN_LOCALES = de es fr it ja ko pt_BR sv zh_CN zh_TW zh_HK - JDK_LOCALES = ja zh_CN - - # -diff -r b357910aa04a -r e3ecd9555ff0 make/java/util/FILES_java.gmk ---- openjdk/jdk/make/java/util/FILES_java.gmk Wed Nov 10 20:40:19 2010 -0800 -+++ openjdk/jdk/make/java/util/FILES_java.gmk Thu Dec 02 02:17:37 2010 -0800 -@@ -37,4 +37,5 @@ - sun/util/resources/TimeZoneNames_es.java \ - sun/util/resources/TimeZoneNames_fr.java \ - sun/util/resources/TimeZoneNames_it.java \ -+ sun/util/resources/TimeZoneNames_pt_BR.java \ - sun/util/resources/TimeZoneNames_sv.java -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,146 @@ -+# -+# This properties file is used to create a PropertyResourceBundle -+# It contains Locale specific strings used be the Accessibility package. -+# -+# When this file is read in, the strings are put into the -+# defaults table. This is an implementation detail of the current -+# workings of Accessibility. DO NOT DEPEND ON THIS. -+# This may change in future versions of Accessibility as we improve -+# localization support. -+# -+# @author Lynn Monsanto -+ -+# -+# accessible roles -+# -+alert=alerta -+awtcomponent=componente AWT -+checkbox=caixa de sele\u00e7\u00e3o -+colorchooser=seletor de cores -+columnheader=cabe\u00e7alho da coluna -+combobox=caixa de combina\u00e7\u00e3o -+canvas=tela -+desktopicon=\u00edcone da \u00e1rea de trabalho -+desktoppane=painel da \u00e1rea de trabalho -+dialog=caixa de di\u00e1logo -+directorypane=painel do diret\u00f3rio -+glasspane=painel transparente -+filechooser=seletor de arquivos -+filler=preenchimento -+frame=quadro -+internalframe=quadro interno -+label=r\u00f3tulo -+layeredpane=painel em camadas -+list=lista -+listitem=item da lista -+menubar=barra de menus -+menu=menu -+menuitem=item do menu -+optionpane=painel de op\u00e7\u00f5es -+pagetab=aba da p\u00e1gina -+pagetablist=lista de abas da p\u00e1gina -+panel=painel -+passwordtext=texto da senha -+popupmenu=menu pop-up -+progressbar=barra de progresso -+pushbutton=bot\u00e3o de a\u00e7\u00e3o -+radiobutton=bot\u00e3o de op\u00e7\u00e3o -+rootpane=painel base -+rowheader=cabe\u00e7alho da linha -+scrollbar=barra de rolagem -+scrollpane=painel de rolagem -+separator=separador -+slider=controle deslizante -+splitpane=painel dividido -+swingcomponent=componente swing -+table=tabela -+text=texto -+tree=\u00e1rvore -+togglebutton=bot\u00e3o de altern\u00e2ncia -+toolbar=barra de ferramentas -+tooltip=dica de ferramenta -+unknown=desconhecido -+viewport=janela de visualiza\u00e7\u00e3o -+window=janela -+# -+# accessible relations -+# -+labelFor=r\u00f3tulo de -+labeledBy=rotulado por -+memberOf=membro de -+controlledBy=controlledBy -+controllerFor=controllerFor -+# -+# accessible states -+# -+active=ativo -+armed=armado -+busy=ocupado -+checked=selecionado -+collapsed=recolhido -+editable=edit\u00e1vel -+expandable=expans\u00edvel -+expanded=expandido -+enabled=habilitado -+focusable=focaliz\u00e1vel -+focused=focalizado -+iconified=iconizado -+modal=modal -+multiline=v\u00e1rias linhas -+multiselectable=m\u00faltipla escolha -+opaque=opaco -+pressed=pressionado -+resizable=redimension\u00e1vel -+selectable=selecion\u00e1vel -+selected=selecionado -+showing=exibindo -+singleline=linha \u00fanica -+transient=transit\u00f3rio -+visible=vis\u00edvel -+vertical=vertical -+horizontal=horizontal -+# -+# accessible actions -+# -+toggle expandir=alternar expandir -+ -+# new relations, roles and states for J2SE 1.5.0 -+ -+# -+# accessible relations -+# -+flowsTo=fluxos para -+flowsFrom=fluxos de -+subwindowOf=subjanela de -+parentWindowOf=janela pai de -+embeds=integra -+embeddedBy=integrado por -+childNodeOf=n\u00f3 filho de -+ -+# -+# accessible roles -+# -+header=cabe\u00e7alho -+footer=rodap\u00e9 -+paragraph=par\u00e1grafo -+ruler=r\u00e9gua -+editbar=barra de edi\u00e7\u00e3o -+progressMonitor=monitor de progresso -+ -+# -+# accessible states -+# -+managesDescendants=gerencia descendentes -+indeterminate=indeterminado -+truncated=truncado -+ -+# new for J2SE 1.6.0 -+ -+# -+# accessible roles -+# -+htmlcontainer=cont\u00eainer HTML -+ -+# -+# END OF MATERIAL TO LOCALIZE -+# -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/com/sun/java/swing/plaf/gtk/resources/gtk_pt_BR.properties ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/resources/gtk_pt_BR.properties Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,81 @@ -+# Refer to the note in basic.properties for a description as to what -+# the mnemonics correspond to and how to calculate them. -+ -+ -+ -+# GTK specific properties -+ -+# GTK color chooser properties: -+GTKColorChooserPanel.nameText=Seletor de cores do GTK -+# mnemonic as a VK_ constant -+GTKColorChooserPanel.mnemonic=71 -+# Can also define GTKColorChooserPanel.dispalyedMnemonicIndex if you -+# want an index other than would normally be underlined by -+# GTKColorChooserPanel.mnemonic to be underlined. This is only useful -+# if GTKColorChooserPanel.nameText defines the mnemonic character more -+# than once and you want a character other than the first underlined. -+ -+# Text and mnemonics for the spinner. You can also defined a different -+# index for the mnemonic via xxxMnemonicIndex, for example -+# GTKColorChooserPanel.hueMnemonicIndex=1 would indicate the second -+# character of GTKColorChooserPanel.hueText should be underlined to -+# represent the mnemonic. -+GTKColorChooserPanel.hueText=Matiz: -+GTKColorChooserPanel.hueMnemonic=72 -+ -+GTKColorChooserPanel.redText=Vermelho: -+GTKColorChooserPanel.redMnemonic=69 -+ -+GTKColorChooserPanel.saturationText=Satura\u00e7\u00e3o: -+GTKColorChooserPanel.saturationMnemonic=83 -+ -+GTKColorChooserPanel.greenText=Verde: -+GTKColorChooserPanel.greenMnemonic=71 -+ -+GTKColorChooserPanel.valueText=Valor: -+GTKColorChooserPanel.valueMnemonic=86 -+ -+GTKColorChooserPanel.blueText=Azul: -+GTKColorChooserPanel.blueMnemonic=66 -+ -+GTKColorChooserPanel.colorNameText=Nome da cor: -+GTKColorChooserPanel.colorNameMnemonic=78 -+ -+ -+ -+############ FILE CHOOSER STRINGS ############# -+ -+FileChooser.acceptAllFileFilterText=Todos os arquivos -+FileChooser.newFolderButtonText=Nova pasta -+FileChooser.newFolderButtonMnemonic=78 -+FileChooser.newFolderDialogText=Nome da pasta: -+FileChooser.deleteFileButtonText=Excluir arquivo -+FileChooser.deleteFileButtonMnemonic=76 -+FileChooser.renameFileButtonText=Renomear arquivo -+FileChooser.renameFileButtonMnemonic=82 -+FileChooser.cancelButtonText=Cancelar -+FileChooser.cancelButtonMnemonic=67 -+FileChooser.saveButtonText=OK -+FileChooser.saveButtonMnemonic=79 -+FileChooser.openButtonText=OK -+FileChooser.openButtonMnemonic=79 -+FileChooser.saveDialogTitleText=Salvar -+FileChooser.openDialogTitleText=Abrir -+FileChooser.pathLabelText=Sele\u00e7\u00e3o: -+FileChooser.filterLabelText=Filtro: -+FileChooser.pathLabelMnemonic=83 -+FileChooser.foldersLabelText=Pastas -+FileChooser.foldersLabelMnemonic=68 -+FileChooser.filesLabelText=Arquivos -+FileChooser.filesLabelMnemonic=70 -+ -+FileChooser.cancelButtonToolTipText=Anular caixa de di\u00e1logo do seletor de arquivos. -+FileChooser.saveButtonToolTipText=Salvar arquivo selecionado. -+FileChooser.openButtonToolTipText=Abrir arquivo selecionado. -+ -+FileChooser.renameFileDialogText=Renomear arquivo "{0}" por -+FileChooser.renameFileErrorTitle=Erro -+FileChooser.renameFileErrorText=Erro ao renomear o arquivo "{0}" por "{1}" -+ -+OptionPane.okButtonMnemonic=79 -+OptionPane.cancelButtonMnemonic=67 -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_pt_BR.properties ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_pt_BR.properties Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,39 @@ -+# This properties file is used to create a PropertyResourceBundle -+# It contains Locale specific strings used be the Motif Look and Feel. -+# Currently, the following components need this for support: -+# -+# FileChooser -+# -+# When this file is read in, the strings are put into the -+# defaults table. This is an implementation detail of the current -+# workings of Swing. DO NOT DEPEND ON THIS. -+# This may change in future versions of Swing as we improve localization -+# support. -+# -+# Refer to the note in basic.properties for a description as to what -+# the mnemonics correspond to and how to calculate them. -+# -+# @author Steve Wilson -+ -+ -+############ FILE CHOOSER STRINGS ############# -+ -+FileChooser.acceptAllFileFilterText=* -+FileChooser.cancelButtonText=Cancelar -+FileChooser.saveButtonText=Salvar -+FileChooser.openButtonText=OK -+FileChooser.saveDialogTitleText=Salvar -+FileChooser.openDialogTitleText=Abrir -+FileChooser.updateButtonText=Atualizar -+FileChooser.helpButtonText=Ajuda -+FileChooser.pathLabelText=Inserir caminho ou nome da pasta: -+FileChooser.filterLabelText=Filtro -+FileChooser.foldersLabelText=Pastas -+FileChooser.filesLabelText=Arquivos -+FileChooser.enterFileNameLabelText=Inserir nome de arquivo: -+ -+FileChooser.cancelButtonToolTipText=Anular caixa de di\u00e1logo do seletor de arquivos. -+FileChooser.saveButtonToolTipText=Salvar arquivo selecionado. -+FileChooser.openButtonToolTipText=Abrir arquivo selecionado. -+FileChooser.updateButtonToolTipText=Atualizar lista de diret\u00f3rios. -+FileChooser.helpButtonToolTipText=Ajuda do FileChooser. -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_pt_BR.properties ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_pt_BR.properties Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,44 @@ -+# This properties file is used to create a PropertyResourceBundle -+# It contains Locale specific strings used be the Windows Look and Feel. -+# Currently, the following components need this for support: -+# -+# FileChooser -+# -+# When this file is read in, the strings are put into the -+# defaults table. This is an implementation detail of the current -+# workings of Swing. DO NOT DEPEND ON THIS. -+# This may change in future versions of Swing as we improve localization -+# support. -+# -+# Refer to the note in basic.properties for a description as to what -+# the mnemonics correspond to and how to calculate them. -+# -+# @author Steve Wilson -+ -+ -+############ FILE CHOOSER STRINGS ############# -+ -+FileChooser.lookInLabelText=Consultar em: -+FileChooser.saveInLabelText=Salvar em: -+FileChooser.fileNameLabelText=Nome de arquivo: -+FileChooser.filesOfTypeLabelText=Arquivos de tipo: -+FileChooser.upFolderToolTipText=Um n\u00edvel acima -+FileChooser.upFolderAccessibleName=Acima -+FileChooser.homeFolderToolTipText=In\u00edcio -+FileChooser.homeFolderAccessibleName=In\u00edcio -+FileChooser.newFolderToolTipText=Criar nova pasta -+FileChooser.newFolderAccessibleName=Nova pasta -+FileChooser.newFolderActionLabelText=Nova pasta -+FileChooser.listViewButtonToolTipText=Lista -+FileChooser.listViewButtonAccessibleName=Lista -+FileChooser.listViewActionLabelText=Lista -+FileChooser.detailsViewButtonToolTipText=Detalhes -+FileChooser.detailsViewButtonAccessibleName=Detalhes -+FileChooser.detailsViewActionLabelText=Detalhes -+FileChooser.refreshActionLabelText=Atualizar -+FileChooser.viewMenuLabelText=Exibir -+FileChooser.fileNameHeaderText=Nome -+FileChooser.fileSizeHeaderText=Tamanho -+FileChooser.fileTypeHeaderText=Tipo -+FileChooser.fileDateHeaderText=Modificado -+FileChooser.fileAttrHeaderText=Atributos -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/com/sun/rowset/RowSetResourceBundle_pt_BR.properties ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_pt_BR.properties Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,170 @@ -+# -+# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+# -+# This code is free software; you can redistribute it and/or modify it -+# under the terms of the GNU General Public License version 2 only, as -+# published by the Free Software Foundation. Oracle designates this -+# particular file as subject to the "Classpath" exception as provided -+# by Oracle in the LICENSE file that accompanied this code. -+# -+# This code is distributed in the hope that it will be useful, but WITHOUT -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+# version 2 for more details (a copy is included in the LICENSE file that -+# accompanied this code). -+# -+# You should have received a copy of the GNU General Public License version -+# 2 along with this work; if not, write to the Free Software Foundation, -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+# -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -+# or visit www.oracle.com if you need additional information or have any -+# questions. -+# -+ -+# CacheRowSetImpl exceptions -+cachedrowsetimpl.populate = Objeto ResultSet inv\u00e1lido fornecido para preencher o m\u00e9todo -+cachedrowsetimpl.invalidp = Fornecedor de persist\u00eancias inv\u00e1lido gerado -+cachedrowsetimpl.nullhash = N\u00e3o \u00e9 poss\u00edvel instanciar a inst\u00e2ncia CachedRowSetImpl. Hashtable nulo fornecido ao construtor -+cachedrowsetimpl.invalidop = Opera\u00e7\u00e3o inv\u00e1lida durante a inser\u00e7\u00e3o de linha -+cachedrowsetimpl.accfailed = acceptChanges falho -+cachedrowsetimpl.invalidcp = Posi\u00e7\u00e3o inv\u00e1lida do cursor -+cachedrowsetimpl.illegalop = Opera\u00e7\u00e3o ilegal em linha n\u00e3o inserida -+cachedrowsetimpl.clonefail = Clone falho: {0} -+cachedrowsetimpl.invalidcol = \u00cdndice de coluna inv\u00e1lido -+cachedrowsetimpl.invalcolnm = Nome de coluna inv\u00e1lido -+cachedrowsetimpl.boolfail = getBoolen falhou no valor ( {0} ) na coluna {1} -+cachedrowsetimpl.bytefail = getByte falhou no valor ( {0} ) na coluna {1} -+cachedrowsetimpl.shortfail = getShort falhou no valor ( {0} ) na coluna {1} -+cachedrowsetimpl.intfail = getInt falhou no valor ( {0} ) na coluna {1} -+cachedrowsetimpl.longfail = getLong falhou no valor ( {0} ) na coluna {1} -+cachedrowsetimpl.floatfail = getFloat falhou no valor ( {0} ) na coluna {1} -+cachedrowsetimpl.doublefail = getDouble falhou no valor ( {0} ) na coluna {1} -+cachedrowsetimpl.dtypemismt = Tipo de dados incompat\u00edvel -+cachedrowsetimpl.datefail = getDate falhou no valor ( {0} ) na coluna {1} sem convers\u00e3o dispon\u00edvel -+cachedrowsetimpl.timefail = getTime falhou no valor ( {0} ) na coluna {1} sem convers\u00e3o dispon\u00edvel -+cachedrowsetimpl.posupdate = Atualiza\u00e7\u00f5es posicionadas n\u00e3o suportadas -+cachedrowsetimpl.unableins = N\u00e3o \u00e9 poss\u00edvel instanciar: {0} -+cachedrowsetimpl.beforefirst = beforeFirst : posi\u00e7\u00e3o inv\u00e1lida do cursor -+cachedrowsetimpl.first = First : opera\u00e7\u00e3o inv\u00e1lida do cursor -+cachedrowsetimpl.last = last : TYPE_FORWARD_ONLY -+cachedrowsetimpl.absolute = absolute : posi\u00e7\u00e3o inv\u00e1lida do cursor -+cachedrowsetimpl.relative = relative : posi\u00e7\u00e3o inv\u00e1lida do cursor -+cachedrowsetimpl.asciistream = leitura falha do fluxo ascii -+cachedrowsetimpl.binstream = leitura falha em fluxo bin\u00e1rio -+cachedrowsetimpl.failedins = Falha ao inserir linha -+cachedrowsetimpl.updateins = updateRow chamado durante a inser\u00e7\u00e3o de linha -+cachedrowsetimpl.movetoins = moveToInsertRow : CONCUR_READ_ONLY -+cachedrowsetimpl.movetoins1 = moveToInsertRow : sem metadados -+cachedrowsetimpl.movetoins2 = moveToInsertRow : n\u00famero de colunas inv\u00e1lido -+cachedrowsetimpl.tablename = O nome da tabela n\u00e3o pode ser nulo -+cachedrowsetimpl.keycols = Colunas de chaves inv\u00e1lidas -+cachedrowsetimpl.invalidcol = \u00cdndice de coluna inv\u00e1lido -+cachedrowsetimpl.opnotsupp = Opera\u00e7\u00e3o n\u00e3o suportada pelo banco de dados -+cachedrowsetimpl.matchcols = As colunas correspondentes n\u00e3o s\u00e3o iguais \u00e0s colunas definidas -+cachedrowsetimpl.setmatchcols = Definir colunas correspondentes antes de obt\u00ea-las -+cachedrowsetimpl.matchcols1 = As colunas correspondentes devem ser maior do que 0 -+cachedrowsetimpl.matchcols2 = As colunas correspondentes devem ser sequ\u00eancias vazias ou nulas -+cachedrowsetimpl.unsetmatch = As colunas n\u00e3o definidas n\u00e3o s\u00e3o iguais \u00e0s colunas definidas -+cachedrowsetimpl.unsetmatch1 = Usar o nome da coluna como argumento para unsetMatchColumn -+cachedrowsetimpl.unsetmatch2 = Usar o ID da coluna como argumento para unsetMatchColumn -+cachedrowsetimpl.numrows = O n\u00famero de linhas \u00e9 menor do que zero ou menor do que o tamanho obtido -+cachedrowsetimpl.startpos = A posi\u00e7\u00e3o de in\u00edcio n\u00e3o pode ser negativa -+cachedrowsetimpl.nextpage = Preencher dados antes de chamar -+cachedrowsetimpl.pagesize = O tamanho da p\u00e1gina n\u00e3o pode ser menor do que zero -+cachedrowsetimpl.pagesize1 = O tamanho da p\u00e1gina n\u00e3o pode ser maior do que maxRows -+cachedrowsetimpl.fwdonly = ResultSet \u00e9 somente para frente -+cachedrowsetimpl.type = O tipo \u00e9 : {0} -+cachedrowsetimpl.opnotysupp = Opera\u00e7\u00e3o ainda n\u00e3o suportada -+cachedrowsetimpl.featnotsupp = Recurso n\u00e3o suportado -+ -+# WebRowSetImpl exceptions -+webrowsetimpl.nullhash = N\u00e3o \u00e9 poss\u00edvel instanciar a inst\u00e2ncia WebRowSetImpl. Hashtable nulo fornecido ao construtor -+webrowsetimpl.invalidwr = Gravador inv\u00e1lido -+webrowsetimpl.invalidrd = Leitor inv\u00e1lido -+ -+#FilteredRowSetImpl exceptions -+filteredrowsetimpl.relative = relative : opera\u00e7\u00e3o inv\u00e1lida do cursor -+filteredrowsetimpl.absolute = absolute : opera\u00e7\u00e3o inv\u00e1lida do cursor -+filteredrowsetimpl.notallowed = Este valor n\u00e3o \u00e9 permitido no filtro -+ -+#JoinRowSetImpl exceptions -+joinrowsetimpl.notinstance = N\u00e3o \u00e9 uma inst\u00e2ncia do conjunto de linhas -+joinrowsetimpl.matchnotset = Coluna correspondente n\u00e3o definida para jun\u00e7\u00e3o -+joinrowsetimpl.numnotequal = N\u00famero de elementos no conjunto de linhas diferente da coluna correspondente -+joinrowsetimpl.notdefined = N\u00e3o \u00e9 um tipo definido de jun\u00e7\u00e3o -+joinrowsetimpl.notsupported = Este tipo de jun\u00e7\u00e3o n\u00e3o \u00e9 suportada -+joinrowsetimpl.initerror = Erro de inicializa\u00e7\u00e3o do JoinRowSet -+joinrowsetimpl.genericerr = Erro inicial de joinrowset gen\u00e9rico -+joinrowsetimpl.emptyrowset = O conjunto de linha vazio n\u00e3o pode ser adicionado a este JoinRowSet -+ -+#JdbcRowSetImpl exceptions -+jdbcrowsetimpl.invalstate = Estado inv\u00e1lido -+jdbcrowsetimpl.connect = N\u00e3o \u00e9 poss\u00edvel conectar JdbcRowSet (connect) a JNDI -+jdbcrowsetimpl.paramtype = N\u00e3o \u00e9 poss\u00edvel deduzir o tipo de par\u00e2metro -+jdbcrowsetimpl.matchcols = As colunas correspondentes n\u00e3o s\u00e3o iguais \u00e0s colunas definidas -+jdbcrowsetimpl.setmatchcols = Definir as colunas correspondentes antes de obt\u00ea-las -+jdbcrowsetimpl.matchcols1 = As colunas correspondentes devem ser maior do que 0 -+jdbcrowsetimpl.matchcols2 = As colunas correspondentes n\u00e3o podem ser sequ\u00eancias vazias ou nulas -+jdbcrowsetimpl.unsetmatch = As colunas n\u00e3o definidas n\u00e3o s\u00e3o iguais \u00e0s colunas definidas -+jdbcrowsetimpl.usecolname = Usar o nome da coluna como argumento para unsetMatchColumn -+jdbcrowsetimpl.usecolid = Usar o ID da coluna como argumento para unsetMatchColumn -+jdbcrowsetimpl.resnotupd = ResultSet n\u00e3o \u00e9 atualiz\u00e1vel -+jdbcrowsetimpl.opnotysupp = Opera\u00e7\u00e3o ainda n\u00e3o suportada -+jdbcrowsetimpl.featnotsupp = Recurso n\u00e3o suportado -+ -+#CachedRowSetReader exceptions -+crsreader.connect = (JNDI) N\u00e3o \u00e9 poss\u00edvel conectar -+crsreader.paramtype = N\u00e3o \u00e9 poss\u00edvel deduzir o tipo de par\u00e2metro -+crsreader.connecterr = Erro interno no RowSetReader: sem conex\u00e3o ou comando -+crsreader.datedetected = Data detectada -+crsreader.caldetected = Calend\u00e1rio detectado -+ -+#CachedRowSetWriter exceptions -+crswriter.connect = N\u00e3o \u00e9 poss\u00edvel obter a conex\u00e3o -+crswriter.tname = writeData n\u00e3o pode determinar o nome da tabela -+crswriter.params1 = Valor de params1 : {0} -+crswriter.params2 = Valor de params2 : {0} -+crswriter.conflictsno = conflitos durante a sincroniza\u00e7\u00e3o -+ -+#InsertRow exceptions -+insertrow.novalue = Nenhum valor foi inserido -+ -+#SyncResolverImpl exceptions -+syncrsimpl.indexval = Valor de \u00edndice fora do intervalo -+syncrsimpl.noconflict = Est\u00e1 coluna n\u00e3o est\u00e1 em conflito -+syncrsimpl.syncnotpos = A sincroniza\u00e7\u00e3o n\u00e3o \u00e9 poss\u00edvel -+syncrsimpl.valtores = O valor a ser decidido pode estar no banco de dados ou no conjunto de linhas armazenado em cache -+ -+#WebRowSetXmlReader exception -+wrsxmlreader.invalidcp = Fim de RowSet atingido. Posi\u00e7\u00e3o inv\u00e1lida do cursor -+wrsxmlreader.readxml = readXML : {0} -+wrsxmlreader.parseerr = ** Analisando erro : {0} , linha : {1} , uri : {2} -+ -+#WebRowSetXmlWriter exceptions -+wrsxmlwriter.ioex = IOException : {0} -+wrsxmlwriter.sqlex = SQLException : {0} -+wrsxmlwriter.failedwrite = Falha ao gravar valor -+wsrxmlwriter.notproper = N\u00e3o \u00e9 um tipo adequado -+ -+#XmlReaderContentHandler exceptions -+xmlrch.errmap = Erro ao definir mapa : {0} -+xmlrch.errmetadata = Erro ao definir metadados : {0} -+xmlrch.errinsert = Erro ao inserir valores : {0} -+xmlrch.errconstr = Erro ao construir linha : {0} -+xmlrch.errdel = Erro ao excluir linha : {0} -+xmlrch.errinsert = Erro ao construir linha de inser\u00e7\u00e3o : {0} -+xmlrch.errinsdel = Erro ao construir linha insdel : {0} -+xmlrch.errupdate = Erro ao construir linha de atualiza\u00e7\u00e3o : {0} -+xmlrch.errupdrow = Erro ao atualizar linha : {0} -+xmlrch.chars = caracteres : -+xmlrch.badvalue = Valor incorreto ; propriedade n\u00e3o anul\u00e1vel -+xmlrch.badvalue1 = Valor incorreto ; metadado n\u00e3o anul\u00e1vel -+xmlrch.warning = ** Aviso : {0} , linha : {1} , uri : {2} -+ -+#RIOptimisticProvider Exceptions -+riop.locking = O bloqueio de classifica\u00e7\u00e3o n\u00e3o \u00e9 suportado -+ -+#RIXMLProvider exceptions -+rixml.unsupp = N\u00e3o suportado com RIXMLProvider -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_pt_BR.properties ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_pt_BR.properties Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,209 @@ -+# This properties file is used to create a PropertyResourceBundle -+# It contains Locale specific strings used in Swing -+# Currently, the following components need this for support: -+# -+# ColorChooser -+# FileChooser -+# OptionPane -+# -+# When this file is read in, the strings are put into the -+# defaults table. This is an implementation detail of the current -+# workings of Swing. DO NOT DEPEND ON THIS. -+# This may change in future versions of Swing as we improve localization -+# support. -+# -+# MNEMONIC NOTE: -+# Many of strings in this file are used by widgets that have a -+# mnemonic, for example: -+# ColorChooser.rgbNameText=RGB -+# ColorChooser.rgbMnemonic=71 -+# ColorChooser.rgbDisplayedMnemonicIndex=1 -+# Indicates that the tab in the ColorChooser for RGB colors will have -+# the text 'RGB', further the mnemonic character will be 'g' and that -+# a decoration will be provided under the 'G'. This will typically -+# look like: RGB -+# - -+# 71 corresponds to the decimal value of the VK constant defined -+# in java/awt/KeyEvent.java. VK_G is defined as: -+# -+# public static final int VK_G = 0x47; -+# -+# 0x47 is a hex number and needs to be converted to decimal. -+# A simple way to calculate this for a-z is to add 64 to the index of -+# the letter in the alphabet. As 'a' is in the 1st letter the mnemonic -+# for 'a' is 65, 'b' is 66... -+# -+# The xxDisplayedMnemonicIndex is used to indicate the index of the -+# character that should be underlined in the String, with 0 -+# corresponding to the first character in the String. -+# -+# One important thing to remember is that the mnemonic MUST exist in -+# the String, if it does not exist you should add text that makes it -+# exist. This will typically take the form 'XXXX (M)' where M is the -+# character for the mnemonic. -+# -+# @author Steve Wilson -+ -+############ FILE CHOOSER STRINGS ############# -+FileChooser.fileDescriptionText=Arquivo gen\u00e9rico -+FileChooser.directoryDescriptionText=Diret\u00f3rio -+FileChooser.newFolderErrorText=Erro ao criar nova pasta -+FileChooser.newFolderErrorSeparator= : -+FileChooser.acceptAllFileFilterText=Todos os arquivos -+FileChooser.cancelButtonText=Cancelar -+FileChooser.cancelButtonMnemonic=67 -+FileChooser.saveButtonText=Salvar -+FileChooser.saveButtonMnemonic=83 -+FileChooser.openButtonText=Abrir -+FileChooser.openButtonMnemonic=79 -+FileChooser.saveDialogTitleText=Salvar -+FileChooser.openDialogTitleText=Abrir -+FileChooser.updateButtonText=Atualizar -+FileChooser.updateButtonMnemonic=85 -+FileChooser.helpButtonText=Ajuda -+FileChooser.helpButtonMnemonic=72 -+FileChooser.directoryOpenButtonText=Abrir -+FileChooser.directoryOpenButtonMnemonic=79 -+ -+# File Size Units -+FileChooser.fileSizeKiloBytes={0} KB -+FileChooser.fileSizeMegaBytes={0} MB -+FileChooser.fileSizeGigaBytes={0} GB -+ -+# These strings are platform dependent not look and feel dependent. -+FileChooser.win32.newFolder=Nova pasta -+FileChooser.win32.newFolder.subsequent=Nova pasta ({0}) -+FileChooser.other.newFolder=NewFolder -+FileChooser.other.newFolder.subsequent=NewFolder.{0} -+ -+ -+## file chooser tooltips ### -+FileChooser.cancelButtonToolTipText=Anular caixa de di\u00e1logo do seletor de arquivos -+FileChooser.saveButtonToolTipText=Salvar arquivo selecionado -+FileChooser.openButtonToolTipText=Abrir arquivo selecionado -+FileChooser.updateButtonToolTipText=Atualizar lista de diret\u00f3rios -+FileChooser.helpButtonToolTipText=Ajuda do FileChooser -+FileChooser.directoryOpenButtonToolTipText=Abrir diret\u00f3rio selecionado -+ -+############ COLOR CHOOSER STRINGS ############# -+ColorChooser.previewText=Visualizar -+ColorChooser.okText=OK -+ColorChooser.cancelText=Cancelar -+ColorChooser.resetText=Redefinir -+# VK_XXX constant for 'ColorChooser.resetText' button to make mnemonic -+ColorChooser.resetMnemonic=82 -+ColorChooser.sampleText=Texto de amostra Texto de amostra -+ColorChooser.swatchesNameText=Amostras -+ColorChooser.swatchesMnemonic=83 -+ColorChooser.swatchesDisplayedMnemonicIndex=0 -+ColorChooser.swatchesRecentText=Recente: -+ColorChooser.hsbNameText=HSB -+# Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX -+# constant, and an index into the text to render the mnemonic as. The -+# mnemonic is xxxMnemonic and the index of the character to underline is -+# xxxDisplayedMnemonicIndex. -+ColorChooser.hsbMnemonic=72 -+ColorChooser.hsbDisplayedMnemonicIndex=0 -+ColorChooser.hsbHueText=H -+ColorChooser.hsbSaturationText=S -+ColorChooser.hsbBrightnessText=B -+ColorChooser.hsbRedText=R -+ColorChooser.hsbGreenText=G -+ColorChooser.hsbBlueText=B -+ColorChooser.rgbNameText=RGB -+ColorChooser.rgbMnemonic=71 -+ColorChooser.rgbDisplayedMnemonicIndex=1 -+ColorChooser.rgbRedText=Vermelho -+ColorChooser.rgbRedMnemonic=68 -+ColorChooser.rgbGreenText=Verde -+ColorChooser.rgbGreenMnemonic=78 -+ColorChooser.rgbBlueText=Azul -+ColorChooser.rgbBlueMnemonic=66 -+ -+############ OPTION PANE STRINGS ############# -+# Mnemonic keys correspond to KeyEvent.VK_XXX constant -+# We only define mnemonics for YES/NO, but for completeness you can -+# define mnemonics for any of the buttons. -+OptionPane.yesButtonText=Sim -+OptionPane.yesButtonMnemonic=89 -+OptionPane.noButtonText=N\u00e3o -+OptionPane.noButtonMnemonic=78 -+OptionPane.okButtonText=OK -+OptionPane.okButtonMnemonic=0 -+OptionPane.cancelButtonText=Cancelar -+OptionPane.cancelButtonMnemonic=0 -+OptionPane.titleText=Selecionar uma op\u00e7\u00e3o -+# Title for the dialog for the showInputDialog methods. Only used if -+# the developer uses one of the variants that doesn't take a title. -+OptionPane.inputDialogTitle=Entrada -+# Title for the dialog for the showMessageDialog methods. Only used if -+# the developer uses one of the variants that doesn't take a title. -+OptionPane.messageDialogTitle=Mensagem -+ -+############ Printing Dialog Strings ############ -+PrintingDialog.titleProgressText=Impress\u00e3o -+PrintingDialog.titleAbortingText=Impress\u00e3o (Anulando) -+ -+PrintingDialog.contentInitialText=Impress\u00e3o em andamento... -+ -+# The following string will be formatted by a MessageFormat -+# and {0} will be replaced by page number being printed -+PrintingDialog.contentProgressText=P\u00e1gina imprimida {0}... -+ -+PrintingDialog.contentAbortingText=Anulando impress\u00e3o... -+ -+PrintingDialog.abortButtonText=Anular -+PrintingDialog.abortButtonMnemonic=65 -+PrintingDialog.abortButtonDisplayedMnemonicIndex=0 -+PrintingDialog.abortButtonToolTipText=Anular impress\u00e3o -+ -+############ Internal Frame Strings ############ -+InternalFrame.iconButtonToolTip=Minimizar -+InternalFrame.maxButtonToolTip=Maximizar -+InternalFrame.restoreButtonToolTip=Restaurar -+InternalFrame.closeButtonToolTip=Fechar -+ -+############ Internal Frame Title Pane Strings ############ -+InternalFrameTitlePane.restoreButtonText=Restaurar -+InternalFrameTitlePane.moveButtonText=Mover -+InternalFrameTitlePane.sizeButtonText=Tamanho -+InternalFrameTitlePane.minimizeButtonText=Minimizar -+InternalFrameTitlePane.maximizeButtonText=Maximizar -+InternalFrameTitlePane.closeButtonText=Fechar -+ -+############ Text strings ############# -+# Used for html forms -+FormView.submitButtonText=Enviar consulta -+FormView.resetButtonText=Redefinir -+FormView.browseFileButtonText=Explorar... -+ -+############ Abstract Document Strings ############ -+AbstractDocument.styleChangeText=altera\u00e7\u00e3o de estilo -+AbstractDocument.additionText=adi\u00e7\u00e3o -+AbstractDocument.deletionText=exclus\u00e3o -+AbstractDocument.undoText=Desfazer -+AbstractDocument.redoText=Refazer -+ -+############ Abstract Button Strings ############ -+AbstractButton.clickText=clicar -+ -+############ Abstract Undoable Edit Strings ############ -+AbstractUndoableEdit.undoText=Desfazer -+AbstractUndoableEdit.redoText=Refazer -+ -+############ Combo Box Strings ############ -+ComboBox.togglePopupText=togglePopup -+ -+############ Progress Monitor Strings ############ -+ProgressMonitor.progressText=Progresso... -+ -+############ Split Pane Strings ############ -+SplitPane.leftButtonText=bot\u00e3o esquerdo -+SplitPane.rightButtonText=bot\u00e3o direito -+# Used for Isindex -+IsindexView.prompt=Trata-se de um \u00edndice pesquis\u00e1vel. Insira as palavras-chave de pesquisa: -+ -+############ InternalFrameTitlePane Strings ############ -+InternalFrameTitlePane.iconifyButtonAccessibleName=Iconificar -+InternalFrameTitlePane.maximizeButtonAccessibleName=Maximizar -+InternalFrameTitlePane.closeButtonAccessibleName=Fechar -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/com/sun/swing/internal/plaf/metal/resources/metal_pt_BR.properties ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/com/sun/swing/internal/plaf/metal/resources/metal_pt_BR.properties Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,55 @@ -+# This properties file is used to create a PropertyResourceBundle -+# It contains Locale specific strings used be the Metal Look and Feel. -+# Currently, the following components need this for support: -+# -+# FileChooser -+# -+# When this file is read in, the strings are put into the -+# defaults table. This is an implementation detail of the current -+# workings of Swing. DO NOT DEPEND ON THIS. -+# This may change in future versions of Swing as we improve localization -+# support. -+# -+# Refer to the note in basic.properties for a description as to what -+# the mnemonics correspond to and how to calculate them. -+# -+# @author Steve Wilson -+ -+ -+############ FILE CHOOSER STRINGS ############# -+ -+FileChooser.lookInLabelText=Consultar em: -+FileChooser.saveInLabelText=Salvar em: -+FileChooser.fileNameLabelText=Nome de arquivo: -+FileChooser.filesOfTypeLabelText=Arquivos de tipo: -+FileChooser.upFolderToolTipText=Um n\u00edvel acima -+FileChooser.upFolderAccessibleName=Acima -+FileChooser.homeFolderToolTipText=In\u00edcio -+FileChooser.homeFolderAccessibleName=In\u00edcio -+FileChooser.newFolderToolTipText=Criar nova pasta -+FileChooser.newFolderAccessibleName=Nova pasta -+FileChooser.newFolderActionLabelText=Nova pasta -+FileChooser.listViewButtonToolTipText=Lista -+FileChooser.listViewButtonAccessibleName=Lista -+FileChooser.listViewActionLabelText=Lista -+FileChooser.detailsViewButtonToolTipText=Detalhes -+FileChooser.detailsViewButtonAccessibleName=Detalhes -+FileChooser.detailsViewActionLabelText=Detalhes -+FileChooser.refreshActionLabelText=Atualizar -+FileChooser.viewMenuLabelText=Exibir -+FileChooser.fileNameHeaderText=Nome -+FileChooser.fileSizeHeaderText=Tamanho -+FileChooser.fileTypeHeaderText=Tipo -+FileChooser.fileDateHeaderText=Modificado -+FileChooser.fileAttrHeaderText=Atributos -+ -+############ Used by MetalTitlePane if rendering window decorations############ -+# All mnemonics are KeyEvent.VK_XXX as integers -+MetalTitlePane.restoreTitle=Restaurar -+MetalTitlePane.restoreMnemonic=82 -+MetalTitlePane.iconifyTitle=Minimizar -+MetalTitlePane.iconifyMnemonic=69 -+MetalTitlePane.maximizeTitle=Maximizar -+MetalTitlePane.maximizeMnemonic=88 -+MetalTitlePane.closeTitle=Fechar -+MetalTitlePane.closeMnemonic=67 -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/com/sun/swing/internal/plaf/synth/resources/synth_pt_BR.properties ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/com/sun/swing/internal/plaf/synth/resources/synth_pt_BR.properties Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,41 @@ -+# This properties file is used to create a PropertyResourceBundle -+# It contains Locale specific strings used be the Synth Look and Feel. -+# Currently, the following components need this for support: -+# -+# FileChooser -+# -+# When this file is read in, the strings are put into the -+# defaults table. This is an implementation detail of the current -+# workings of Swing. DO NOT DEPEND ON THIS. -+# This may change in future versions of Swing as we improve localization -+# support. -+# -+# @author Steve Wilson -+ -+ -+############ FILE CHOOSER STRINGS ############# -+ -+FileChooser.lookInLabelText=Consultar em: -+FileChooser.saveInLabelText=Salvar em: -+FileChooser.fileNameLabelText=Nome de arquivo: -+FileChooser.filesOfTypeLabelText=Arquivos de tipo: -+FileChooser.upFolderToolTipText=Um n\u00edvel acima -+FileChooser.upFolderAccessibleName=Acima -+FileChooser.homeFolderToolTipText=In\u00edcio -+FileChooser.homeFolderAccessibleName=In\u00edcio -+FileChooser.newFolderToolTipText=Criar nova pasta -+FileChooser.newFolderAccessibleName=Nova pasta -+FileChooser.newFolderActionLabelText=Nova pasta -+FileChooser.listViewButtonToolTipText=Lista -+FileChooser.listViewButtonAccessibleName=Lista -+FileChooser.listViewActionLabelText=Lista -+FileChooser.detailsViewButtonToolTipText=Detalhes -+FileChooser.detailsViewButtonAccessibleName=Detalhes -+FileChooser.detailsViewActionLabelText=Detalhes -+FileChooser.refreshActionLabelText=Atualizar -+FileChooser.viewMenuLabelText=Exibir -+FileChooser.fileNameHeaderText=Nome -+FileChooser.fileSizeHeaderText=Tamanho -+FileChooser.fileTypeHeaderText=Tipo -+FileChooser.fileDateHeaderText=Modificado -+FileChooser.fileAttrHeaderText=Atributos -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/sun/applet/resources/MsgAppletViewer_pt_BR.java ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/sun/applet/resources/MsgAppletViewer_pt_BR.java Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,201 @@ -+/* -+ * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved. -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * This code is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. Oracle designates this -+ * particular file as subject to the "Classpath" exception as provided -+ * by Oracle in the LICENSE file that accompanied this code. -+ * -+ * This code is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+ * version 2 for more details (a copy is included in the LICENSE file that -+ * accompanied this code). -+ * -+ * You should have received a copy of the GNU General Public License version -+ * 2 along with this work; if not, write to the Free Software Foundation, -+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -+ * or visit www.oracle.com if you need additional information or have any -+ * questions. -+ */ -+package sun.applet.resources; -+ -+import java.util.ListResourceBundle; -+ -+public class MsgAppletViewer_pt_BR extends ListResourceBundle { -+ -+ public Object[][] getContents() { -+ return new Object[][] { -+ {"textframe.button.dismiss", "Rejeitar"}, -+ {"appletviewer.tool.title", "Visualizador de applet: {0}"}, -+ {"appletviewer.menu.applet", "Applet"}, -+ {"appletviewer.menuitem.restart", "Reiniciar"}, -+ {"appletviewer.menuitem.reload", "Recarregar"}, -+ {"appletviewer.menuitem.stop", "Parar"}, -+ {"appletviewer.menuitem.save", "Salvar..."}, -+ {"appletviewer.menuitem.start", "Iniciar"}, -+ {"appletviewer.menuitem.clone", "Clonar..."}, -+ {"appletviewer.menuitem.tag", "Marca..."}, -+ {"appletviewer.menuitem.info", "Info..."}, -+ {"appletviewer.menuitem.edit", "Editar"}, -+ {"appletviewer.menuitem.encoding", "Codifica\u00e7\u00e3o de caracteres"}, -+ {"appletviewer.menuitem.print", "Imprimir..."}, -+ {"appletviewer.menuitem.props", "Propriedades..."}, -+ {"appletviewer.menuitem.close", "Fechar"}, -+ {"appletviewer.menuitem.quit", "Sair"}, -+ {"appletviewer.label.hello", "Ol\u00e1..."}, -+ {"appletviewer.status.start", "iniciando applet..."}, -+ {"appletviewer.appletsave.filedialogtitle","Serializar applet no arquivo"}, -+ {"appletviewer.appletsave.err1", "serializando um {0} para {1}"}, -+ {"appletviewer.appletsave.err2", "em appletSave: {0}"}, -+ {"appletviewer.applettag", "Marca exibida"}, -+ {"appletviewer.applettag.textframe", "Marca HTML do applet"}, -+ {"appletviewer.appletinfo.applet", "-- sem informa\u00e7\u00f5es do applet --"}, -+ {"appletviewer.appletinfo.param", "-- sem informa\u00e7\u00f5es do par\u00e2metro --"}, -+ {"appletviewer.appletinfo.textframe", "Informa\u00e7\u00f5es do applet"}, -+ {"appletviewer.appletprint.fail", "Falha na impress\u00e3o."}, -+ {"appletviewer.appletprint.finish", "Impress\u00e3o finalizada."}, -+ {"appletviewer.appletprint.cancel", "Impress\u00e3o cancelada."}, -+ {"appletviewer.appletencoding", "Codifica\u00e7\u00e3o de caracteres: {0}"}, -+ {"appletviewer.parse.warning.requiresname", "Aviso: a marca requer nome do atributo."}, -+ {"appletviewer.parse.warning.paramoutside", "Aviso: marca fora de ... ."}, -+ {"appletviewer.parse.warning.applet.requirescode", "Aviso: marca requer c\u00f3digo de atributo."}, -+ {"appletviewer.parse.warning.applet.requiresheight", "Aviso: marca requer atributo de altura."}, -+ {"appletviewer.parse.warning.applet.requireswidth", "Aviso: marca requer atributo de largura."}, -+ {"appletviewer.parse.warning.object.requirescode", "Aviso: marca requer c\u00f3digo de atributo."}, -+ {"appletviewer.parse.warning.object.requiresheight", "Aviso: marca requer atributo de altura."}, -+ {"appletviewer.parse.warning.object.requireswidth", "Aviso: marca requer atributo de largura."}, -+ {"appletviewer.parse.warning.embed.requirescode", "Aviso: marca requer c\u00f3digo de atributo."}, -+ {"appletviewer.parse.warning.embed.requiresheight", "Aviso: marca requer atributo de altura."}, -+ {"appletviewer.parse.warning.embed.requireswidth", "Aviso: marca requer atributo de largura."}, -+ {"appletviewer.parse.warning.appnotLongersupported", "Aviso: marca n\u00e3o mais suportada, usar em seu lugar:"}, -+ {"appletviewer.usage", "Uso: url(s) de do visualizador de applets\n\nem que inclui:\n -debug inicia o visualizador de applet no depurador Java\n -encoding especifica a codifica\u00e7\u00e3o de caracteres usada pelos arquivos HTML\n -J passa o argumento para o int\u00e9rprete de java\n\nA op\u00e7\u00e3o -J n\u00e3o \u00e9 padr\u00e3o e est\u00e1 sujeita a altera\u00e7\u00f5es sem aviso."}, -+ {"appletviewer.main.err.unsupportedopt", "Op\u00e7\u00e3o n\u00e3o suportada: {0}"}, -+ {"appletviewer.main.err.unrecognizedarg", "Argumento n\u00e3o reconhecido: {0}"}, -+ {"appletviewer.main.err.dupoption", "Uso duplicado da op\u00e7\u00e3o: {0}"}, -+ {"appletviewer.main.err.inputfile", "Nenhum arquivo de entrada especificado."}, -+ {"appletviewer.main.err.badurl", "URL incorreto: {0} ( {1} )"}, -+ {"appletviewer.main.err.io", "Exce\u00e7\u00e3o de E/S durante a leitura: {0}"}, -+ {"appletviewer.main.err.readablefile", "Certifique-se de que {0} seja um arquivo e seja leg\u00edvel."}, -+ {"appletviewer.main.err.correcturl", "{0} \u00e9 o URL correto?"}, -+ {"appletviewer.main.prop.store", "Propriedades espec\u00edficas do usu\u00e1rio para AppletViewer"}, -+ {"appletviewer.main.err.prop.cantread", "N\u00e3o \u00e9 poss\u00edvel ler o arquivo de propriedades do usu\u00e1rio: {0}"}, -+ {"appletviewer.main.err.prop.cantsave", "N\u00e3o \u00e9 poss\u00edvel salvar o arquivo de propriedades do usu\u00e1rio: {0}"}, -+ {"appletviewer.main.warn.nosecmgr", "Aviso: desabilitando a seguran\u00e7a."}, -+ {"appletviewer.main.debug.cantfinddebug", "N\u00e3o \u00e9 poss\u00edvel localizar o depurador!"}, -+ {"appletviewer.main.debug.cantfindmain", "N\u00e3o \u00e9 poss\u00edvel localizar o m\u00e9todo principal no depurador!"}, -+ {"appletviewer.main.debug.exceptionindebug", "Exce\u00e7\u00e3o no depurador!"}, -+ {"appletviewer.main.debug.cantaccess", "N\u00e3o \u00e9 poss\u00edvel acessar o depurador!"}, -+ {"appletviewer.main.nosecmgr", "Aviso: SecurityManager n\u00e3o instalado!"}, -+ {"appletviewer.main.warning", "Aviso: nenhum applet foi iniciado. Certifique-se de que a entrada contenha uma marca ."}, -+ {"appletviewer.main.warn.prop.overwrite", "Aviso: substituindo temporariamente a propriedade do sistema em solicita\u00e7\u00e3o do usu\u00e1rio: chave: {0} valor antigo: {1} valor novo: {2}"}, -+ {"appletviewer.main.warn.cantreadprops", "Aviso: n\u00e3o \u00e9 poss\u00edvel ler o arquivo de propriedades do AppletViewer: {0} usando padr\u00f5es."}, -+ {"appletioexception.loadclass.throw.interrupted", "carregamento de classe interrompido: {0}"}, -+ {"appletioexception.loadclass.throw.notloaded", "classe n\u00e3o carregada: {0}"}, -+ {"appletclassloader.loadcode.verbose", "Abrindo fluxo para: {0} para obter {1}"}, -+ {"appletclassloader.filenotfound", "Arquivo n\u00e3o encontrado ao procurar por: {0}"}, -+ {"appletclassloader.fileformat", "Exce\u00e7\u00e3o de formato de arquivo ao carregar: {0}"}, -+ {"appletclassloader.fileioexception", "Exce\u00e7\u00e3o de E/S ao carregar: {0}"}, -+ {"appletclassloader.fileexception", "Exce\u00e7\u00e3o {0} ao carregar: {0}"}, -+ {"appletclassloader.filedeath", "{0} eliminado ao carregar: {1}"}, -+ {"appletclassloader.fileerror", "Erro {0} ao carregar: {1}"}, -+ {"appletclassloader.findclass.verbose.findclass", "{0} encontra classe {1}"}, -+ {"appletclassloader.findclass.verbose.openstream", "Abrindo fluxo para: {0} para obter {1}"}, -+ {"appletclassloader.getresource.verbose.forname", "AppletClassLoader.getResource do nome: {0}"}, -+ {"appletclassloader.getresource.verbose.found", "Recurso encontrado: {0} como um recurso do sistema"}, -+ {"appletclassloader.getresourceasstream.verbose", "Recurso encontrado: {0} como um recurso do sistema"}, -+ {"appletpanel.runloader.err", "Par\u00e2metro de c\u00f3digo ou objeto!"}, -+ {"appletpanel.runloader.exception", "exce\u00e7\u00e3o ao desserializar {0}"}, -+ {"appletpanel.destroyed", "Applet destru\u00eddo."}, -+ {"appletpanel.loaded", "Applet carregado."}, -+ {"appletpanel.started", "Applet iniciado."}, -+ {"appletpanel.inited", "Applet inicializado."}, -+ {"appletpanel.stopped", "Applet interrompido."}, -+ {"appletpanel.disposed", "Applet descartado."}, -+ {"appletpanel.nocode", "Marca APPLET ausente no par\u00e2metro CODE."}, -+ {"appletpanel.notfound", "carregar: classe {0} n\u00e3o encontrada."}, -+ {"appletpanel.nocreate", "carregar: {0} n\u00e3o pode ser instanciado."}, -+ {"appletpanel.noconstruct", "carregar: {0} n\u00e3o \u00e9 p\u00fablico ou n\u00e3o possui um construtor p\u00fablico."}, -+ {"appletpanel.death", "eliminado"}, -+ {"appletpanel.exception", "exce\u00e7\u00e3o: {0}."}, -+ {"appletpanel.exception2", "exce\u00e7\u00e3o: {0}: {1}."}, -+ {"appletpanel.error", "erro: {0}."}, -+ {"appletpanel.error2", "erro: {0}: {1}."}, -+ {"appletpanel.notloaded", "Inicializar: applet n\u00e3o carregado."}, -+ {"appletpanel.notinited", "Iniciar: applet n\u00e3o inicializado."}, -+ {"appletpanel.notstarted", "Parar: applet n\u00e3o iniciado."}, -+ {"appletpanel.notstopped", "Destruir: applet n\u00e3o interrompido."}, -+ {"appletpanel.notdestroyed", "Descartar: applet n\u00e3o destru\u00eddo."}, -+ {"appletpanel.notdisposed", "Carregar: applet n\u00e3o descartado."}, -+ {"appletpanel.bail", "Interrompido: salvando."}, -+ {"appletpanel.filenotfound", "Arquivo n\u00e3o encontrado ao procurar por: {0}"}, -+ {"appletpanel.fileformat", "Exce\u00e7\u00e3o de formato de arquivo ao carregar: {0}"}, -+ {"appletpanel.fileioexception", "Exce\u00e7\u00e3o de E/S ao carregar: {0}"}, -+ {"appletpanel.fileexception", "Exce\u00e7\u00e3o {0} ao carregar: {0}"}, -+ {"appletpanel.filedeath", "{0} eliminado ao carregar: {1}"}, -+ {"appletpanel.fileerror", "Erro {0} ao carregar: {1}"}, -+ {"appletpanel.badattribute.exception", "An\u00e1lise de HTML: valor incorreto do atributo de largura/altura"}, -+ {"appletillegalargumentexception.objectinputstream", "AppletObjectInputStream requer carregador n\u00e3o nulo"}, -+ {"appletprops.title", "Propriedades do AppletViewer"}, -+ {"appletprops.label.http.server", "Servidor proxy de http:"}, -+ {"appletprops.label.http.proxy", "Porta do proxy de http:"}, -+ {"appletprops.label.network", "Acesso \u00e0 rede:"}, -+ {"appletprops.choice.network.item.none", "Nenhum"}, -+ {"appletprops.choice.network.item.applethost", "Host do applet"}, -+ {"appletprops.choice.network.item.unrestricted", "N\u00e3o registrado"}, -+ {"appletprops.label.class", "Acesso \u00e0 classe:"}, -+ {"appletprops.choice.class.item.restricted", "Restrito"}, -+ {"appletprops.choice.class.item.unrestricted", "N\u00e3o registrado"}, -+ {"appletprops.label.unsignedapplet", "Permitir applets n\u00e3o assinados:"}, -+ {"appletprops.choice.unsignedapplet.no", "N\u00e3o"}, -+ {"appletprops.choice.unsignedapplet.yes", "Sim"}, -+ {"appletprops.button.apply", "Aplicar"}, -+ {"appletprops.button.cancel", "Cancelar"}, -+ {"appletprops.button.reset", "Redefinir"}, -+ {"appletprops.apply.exception", "Falha ao salvar propriedades: {0}"}, -+ /* 4066432 */ -+ {"appletprops.title.invalidproxy", "Entrada inv\u00e1lida"}, -+ {"appletprops.label.invalidproxy", "A porta do proxy deve ser um valor inteiro positivo."}, -+ {"appletprops.button.ok", "OK"}, -+ /* end 4066432 */ -+ {"appletprops.prop.store", "Propriedades espec\u00edficas do usu\u00e1rio para AppletViewer"}, -+ {"appletsecurityexception.checkcreateclassloader", "Exce\u00e7\u00e3o de seguran\u00e7a: classloader"}, -+ {"appletsecurityexception.checkaccess.thread", "Exce\u00e7\u00e3o de seguran\u00e7a: thread"}, -+ {"appletsecurityexception.checkaccess.threadgroup", "Exce\u00e7\u00e3o de seguran\u00e7a: threadgroup: {0}"}, -+ {"appletsecurityexception.checkexit", "Exce\u00e7\u00e3o de seguran\u00e7a: exit: {0}"}, -+ {"appletsecurityexception.checkexec", "Exce\u00e7\u00e3o de seguran\u00e7a: exec: {0}"}, -+ {"appletsecurityexception.checklink", "Exce\u00e7\u00e3o de seguran\u00e7a: link: {0}"}, -+ {"appletsecurityexception.checkpropsaccess", "Exce\u00e7\u00e3o de seguran\u00e7a: properties"}, -+ {"appletsecurityexception.checkpropsaccess.key", "Exce\u00e7\u00e3o de seguran\u00e7a: properties access {0}"}, -+ {"appletsecurityexception.checkread.exception1", "Exce\u00e7\u00e3o de seguran\u00e7a: {0}, {1}"}, -+ {"appletsecurityexception.checkread.exception2", "Exce\u00e7\u00e3o de seguran\u00e7a: file.read: {0}"}, -+ {"appletsecurityexception.checkread", "Exce\u00e7\u00e3o de seguran\u00e7a: file.read: {0} == {1}"}, -+ {"appletsecurityexception.checkwrite.exception", "Exce\u00e7\u00e3o de seguran\u00e7a: {0}, {1}"}, -+ {"appletsecurityexception.checkwrite", "Exce\u00e7\u00e3o de seguran\u00e7a: file.write: {0} == {1}"}, -+ {"appletsecurityexception.checkread.fd", "Exce\u00e7\u00e3o de seguran\u00e7a: fd.read"}, -+ {"appletsecurityexception.checkwrite.fd", "Exce\u00e7\u00e3o de seguran\u00e7a: fd.write"}, -+ {"appletsecurityexception.checklisten", "Exce\u00e7\u00e3o de seguran\u00e7a: socket.listen: {0}"}, -+ {"appletsecurityexception.checkaccept", "Exce\u00e7\u00e3o de seguran\u00e7a: socket.accept: {0} == {1}"}, -+ {"appletsecurityexception.checkconnect.networknone", "Exce\u00e7\u00e3o de seguran\u00e7a: socket.connect: {0} == {1}"}, -+ {"appletsecurityexception.checkconnect.networkhost1", "Exce\u00e7\u00e3o de seguran\u00e7a: n\u00e3o foi poss\u00edvel conectar a {0} com a origem de {1}."}, -+ {"appletsecurityexception.checkconnect.networkhost2", "Exce\u00e7\u00e3o de seguran\u00e7a: n\u00e3o foi poss\u00edvel resolver o IP para o host {0} ou para {1}. "}, -+ {"appletsecurityexception.checkconnect.networkhost3", "Exce\u00e7\u00e3o de seguran\u00e7a: n\u00e3o foi poss\u00edvel resolver o IP para o host {0}. Consulte a propriedade trustProxy."}, -+ {"appletsecurityexception.checkconnect", "Exce\u00e7\u00e3o de seguran\u00e7a: connect: {0}->{1}"}, -+ {"appletsecurityexception.checkpackageaccess", "Exce\u00e7\u00e3o de seguran\u00e7a: n\u00e3o \u00e9 poss\u00edvel acessar o pacote: {0}"}, -+ {"appletsecurityexception.checkpackagedefinition", "Exce\u00e7\u00e3o de seguran\u00e7a: n\u00e3o \u00e9 poss\u00edvel definir o pacote: {0}"}, -+ {"appletsecurityexception.cannotsetfactory", "Exce\u00e7\u00e3o de seguran\u00e7a: n\u00e3o \u00e9 poss\u00edvel definir a f\u00e1brica"}, -+ {"appletsecurityexception.checkmemberaccess", "Exce\u00e7\u00e3o de seguran\u00e7a: verificar acesso de membro"}, -+ {"appletsecurityexception.checkgetprintjob", "Exce\u00e7\u00e3o de seguran\u00e7a: getPrintJob"}, -+ {"appletsecurityexception.checksystemclipboardaccess", "Exce\u00e7\u00e3o de seguran\u00e7a: getSystemClipboard"}, -+ {"appletsecurityexception.checkawteventqueueaccess", "Exce\u00e7\u00e3o de seguran\u00e7a: getEventQueue"}, -+ {"appletsecurityexception.checksecurityaccess", "Exce\u00e7\u00e3o de seguran\u00e7a: opera\u00e7\u00e3o de seguran\u00e7a: {0}"}, -+ {"appletsecurityexception.getsecuritycontext.unknown", "tipo desconhecido de carregador de classe. n\u00e3o \u00e9 poss\u00edvel verificar para getContext"}, -+ {"appletsecurityexception.checkread.unknown", "tipo desconhecido de carregador de classe. n\u00e3o \u00e9 poss\u00edvel verificar para verifica\u00e7\u00e3o de leitura {0}"}, -+ {"appletsecurityexception.checkconnect.unknown", "tipo desconhecido de carregador de classe. n\u00e3o \u00e9 poss\u00edvel verificar para verifica\u00e7\u00e3o de conex\u00e3o"}, -+ }; -+ } -+} -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/sun/awt/resources/awt_pt_BR.properties ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/sun/awt/resources/awt_pt_BR.properties Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,191 @@ -+# -+# AWT-specific properties -+# -+ -+# Modifier names -+AWT.shift=Shift -+AWT.control=Ctrl -+AWT.alt=Alt -+AWT.meta=Meta -+AWT.altGraph=Alt Graph -+ -+# Key names -+AWT.enter=Enter -+AWT.backSpace=Backspace -+AWT.tab=Tab -+AWT.cancel=Cancelar -+AWT.clear=Limpar -+AWT.pause=Pausar -+AWT.capsLock=Caps Lock -+AWT.escape=Escape -+AWT.space=Barra de espa\u00e7o -+AWT.pgup=P\u00e1gina acima -+AWT.pgdn=P\u00e1gina abaixo -+AWT.end=Fim -+AWT.home=In\u00edcio -+AWT.left=Esquerda -+AWT.up=Acima -+AWT.right=Direita -+AWT.down=Abaixo -+AWT.begin=Come\u00e7ar -+AWT.comma=V\u00edrgula -+AWT.period=Ponto final -+AWT.slash=Barra -+AWT.semicolon=Ponto-e-v\u00edrgula -+AWT.equals=Igual -+AWT.openBracket=Abrir par\u00eantese -+AWT.backSlash=Barra invertida -+AWT.closeBracket=Fechar par\u00eantese -+AWT.multiply=Teclado num\u00e9rico * -+AWT.add=Teclado num\u00e9rico + -+AWT.separator=Teclado num\u00e9rico , -+AWT.separater=Teclado num\u00e9rico , -+AWT.subtract=Teclado num\u00e9rico - -+AWT.decimal=Teclado num\u00e9rico . -+AWT.divide=Teclado num\u00e9rico / -+AWT.delete=Excluir -+AWT.numLock=Num Lock -+AWT.scrollLock=Scroll Lock -+AWT.f1=F1 -+AWT.f2=F2 -+AWT.f3=F3 -+AWT.f4=F4 -+AWT.f5=F5 -+AWT.f6=F6 -+AWT.f7=F7 -+AWT.f8=F8 -+AWT.f9=F9 -+AWT.f10=F10 -+AWT.f11=F11 -+AWT.f12=F12 -+AWT.f13=F13 -+AWT.f14=F14 -+AWT.f15=F15 -+AWT.f16=F16 -+AWT.f17=F17 -+AWT.f18=F18 -+AWT.f19=F19 -+AWT.f20=F20 -+AWT.f21=F21 -+AWT.f22=F22 -+AWT.f23=F23 -+AWT.f24=F24 -+AWT.printScreen=Imprimir tela -+AWT.insert=Inserir -+AWT.help=Ajuda -+AWT.windows=Windows -+AWT.context=Menu de contexto -+AWT.backQuote=Crase -+AWT.quote=Aspas -+AWT.deadGrave=Acento grave -+AWT.deadAcute=Acento agudo -+AWT.deadCircumflex=Acento circunflexo -+AWT.deadTilde=Til -+AWT.deadMacron=M\u00e1cron -+AWT.deadBreve=Braquia -+AWT.deadAboveDot=Ponto em cima -+AWT.deadDiaeresis=Trema -+AWT.deadAboveRing=S\u00edmbolo do grau -+AWT.deadDoubleAcute=Acento agudo duplo -+AWT.deadCaron=Acento circunflexo invertido -+AWT.deadCedilla=Cedilha -+AWT.deadOgonek=Ogonek -+AWT.deadIota=Iota -+AWT.deadVoicedSound=Som sonoro -+AWT.deadSemivoicedSound=Som surdo -+AWT.ampersand=E comercial -+AWT.asterisk=Asterisco -+AWT.quoteDbl=Aspas duplas -+AWT.Less=Menos -+AWT.greater=Maior -+AWT.braceLeft=Chave esquerda -+AWT.braceRight=Chave direta -+AWT.at=Arroba -+AWT.colon=V\u00edrgula -+AWT.circumflex=Circunflexo -+AWT.dollar=D\u00f3lar -+AWT.euro=Euro -+AWT.exclamationMark=Ponto de exclama\u00e7\u00e3o -+AWT.invertedExclamationMark=Ponto de exclama\u00e7\u00e3o invertido -+AWT.leftParenthesis=Par\u00eantese esquerdo -+AWT.numberSign=Sinal num\u00e9rico -+AWT.plus=Mais -+AWT.minus=Menos -+AWT.rightParenthesis=Par\u00eantese direito -+AWT.underscore=Sublinhado -+AWT.final=Final -+AWT.convert=Converter -+AWT.noconvert=N\u00e3o converter -+AWT.accept=Aceitar -+AWT.modechange=Altera\u00e7\u00e3o de modo -+AWT.kana=Kana -+AWT.kanji=Kanji -+AWT.alphanumeric=Alfanum\u00e9rico -+AWT.katakana=Katakana -+AWT.hiragana=Hiragana -+AWT.fullWidth=Largura total -+AWT.halfWidth=Meia largura -+AWT.romanCharacters=Caracteres romanos -+AWT.allCandidates=Todos os candidatos -+AWT.previousCandidate=Candidato anterior -+AWT.codeInput=Entrada de c\u00f3digo -+AWT.japaneseKatakana=Katakana japon\u00eas -+AWT.japaneseHiragana=Hiragana japon\u00eas -+AWT.japaneseRoman=Romano japon\u00eas -+AWT.kanaLock=Kana Lock -+AWT.inputMethodOnOff=M\u00e9todo de entrada ativado/desativado -+AWT.again=Novamente -+AWT.undo=Desfazer -+AWT.copy=Copiar -+AWT.paste=Colar -+AWT.cut=Recortar -+AWT.find=Localizar -+AWT.props=Props -+AWT.stop=Parar -+AWT.compose=Compor -+ -+# Numeric Keypad -+AWT.numpad=Teclado num\u00e9rico -+AWT.unknown=Desconhecido -+AWT.undefined=Indefinido -+ -+# Predefined cursor names -+AWT.DefaultCursor=Cursor padr\u00e3o -+AWT.CrosshairCursor=Cursor em forma de cruz -+AWT.TextCursor=Cursor de texto -+AWT.WaitCursor=Cursor em forma de ampulheta -+AWT.SWResizeCursor=Cursor de seta que aponta para sudoeste -+AWT.SEResizeCursor=Cursor de seta que aponta para sudeste -+AWT.NWResizeCursor=Cursor de seta que aponta para noroeste -+AWT.NEResizeCursor=Cursor de seta que aponta para nordeste -+AWT.NResizeCursor=Cursor de seta que aponta para cima -+AWT.SResizeCursor=Cursor de seta que aponta para baixo -+AWT.WResizeCursor=Cursor de seta que aponta \u00e0 esquerda -+AWT.EResizeCursor=Cursor de seta que aponta \u00e0 direita -+AWT.HandCursor=Cursor em forma de m\u00e3o -+AWT.MoveCursor=Cursor de movimento -+AWT.DefaultDragCursor=Cursor padr\u00e3o de arrastar -+AWT.DefaultNoDropCursor=Cursor padr\u00e3o sem arrasto -+AWT.DefaultDropCursor=Cursor padr\u00e3o de soltar -+ -+# Input method related strings -+AWT.CompositionWindowTitle=Janela de entrada -+AWT.InputMethodSelectionMenu=Selecionar m\u00e9todo de entrada -+AWT.HostInputMethodDisplayName=M\u00e9todos de entrada do sistema -+AWT.InputMethodLanguage.ja=Japon\u00eas -+AWT.InputMethodLanguage.ko=Coreano -+AWT.InputMethodLanguage.zh=Chin\u00eas -+AWT.InputMethodLanguage.zh_CN=Chin\u00eas simplificado -+AWT.InputMethodLanguage.zh_TW=Chin\u00eas tradicional -+AWT.InputMethodCreationFailed=N\u00e3o foi poss\u00edvel criar {0}. Raz\u00e3o: {1} -+ -+# Property to select between on-the-spot and below-the-spot -+# composition with input methods. Valid values: -+# "on-the-spot", "below-the-spot". -+# May be overridden from command line. -+java.awt.im.style=no momento -+java.awt.def.delay=30 -+ -+# Warnings -+AWT.InconsistentDLLsWarning=As opera\u00e7\u00f5es baseadas em texto podem n\u00e3o funcionar corretamente devido a um conjunto incoerente de bibliotecas de vincula\u00e7\u00e3o din\u00e2mica (DLLs) instalado no seu sistema. Para obter mais informa\u00e7\u00f5es sobre este problema e uma solu\u00e7\u00e3o recomendada, consulte as Notas de vers\u00e3o do Java(TM) 2 SDK, Standard Edition em java.sun.com. -+ -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/sun/launcher/resources/launcher_pt_BR.properties ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/sun/launcher/resources/launcher_pt_BR.properties Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,116 @@ -+# -+# Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+# -+# This code is free software; you can redistribute it and/or modify it -+# under the terms of the GNU General Public License version 2 only, as -+# published by the Free Software Foundation. Oracle designates this -+# particular file as subject to the "Classpath" exception as provided -+# by Oracle in the LICENSE file that accompanied this code. -+# -+# This code is distributed in the hope that it will be useful, but WITHOUT -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+# version 2 for more details (a copy is included in the LICENSE file that -+# accompanied this code). -+# -+# You should have received a copy of the GNU General Public License version -+# 2 along with this work; if not, write to the Free Software Foundation, -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+# -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -+# or visit www.oracle.com if you need additional information or have any -+# questions. -+# -+ -+# Translators please note do not translate the options themselves -+java.launcher.opt.header = Usage: {0} [-options] class [args...]\n\ -+\ (to execute a class)\n or {0} [-options] -jar jarfile [args...]\n\ -+\ (to execute a jar file)\n\ -+where options include:\n -+ -+java.launcher.opt.datamodel =\ -d{0}\t use a {0}-bit data model if available\n -+java.launcher.opt.vmselect =\ {0}\t to select the "{1}" VM\n -+java.launcher.opt.hotspot =\ {0}\t is a synonym for the "{1}" VM [deprecated]\n -+ -+java.launcher.ergo.message1 =\ The default VM is {0} -+java.launcher.ergo.message2 =\ because you are running on a server-class machine.\n -+ -+# Translators please note do not translate the options themselves -+java.launcher.opt.footer =\ -cp \n\ -+\ -classpath \n\ -+\ A {0} separated list of directories, JAR archives,\n\ -+\ and ZIP archives to search for class files.\n\ -+\ -D=\n\ -+\ set a system property\n\ -+\ -verbose[:class|gc|jni]\n\ -+\ enable verbose output\n\ -+\ -version print product version and exit\n\ -+\ -version:\n\ -+\ require the specified version to run\n\ -+\ -showversion print product version and continue\n\ -+\ -jre-restrict-search | -no-jre-restrict-search\n\ -+\ include/exclude user private JREs in the version search\n\ -+\ -? -help print this help message\n\ -+\ -X print help on non-standard options\n\ -+\ -ea[:...|:]\n\ -+\ -enableassertions[:...|:]\n\ -+\ enable assertions with specified granularity\n\ -+\ -da[:...|:]\n\ -+\ -disableassertions[:...|:]\n\ -+\ disable assertions with specified granularity\n\ -+\ -esa | -enablesystemassertions\n\ -+\ enable system assertions\n\ -+\ -dsa | -disablesystemassertions\n\ -+\ disable system assertions\n\ -+\ -agentlib:[=]\n\ -+\ load native agent library , e.g. -agentlib:hprof\n\ -+\ see also, -agentlib:jdwp=help and -agentlib:hprof=help\n\ -+\ -agentpath:[=]\n\ -+\ load native agent library by full pathname\n\ -+\ -javaagent:[=]\n\ -+\ load Java programming language agent, see java.lang.instrument\n\ -+\ -splash:\n\ -+\ show splash screen with specified image\n\ -+See http://java.sun.com/javase/reference for more details. -+ -+# Translators please note do not translate the options themselves -+java.launcher.X.usage=\ -+\ -Xmixed mixed mode execution (default)\n\ -+\ -Xint interpreted mode execution only\n\ -+\ -Xbootclasspath:\n\ -+\ set search path for bootstrap classes and resources\n\ -+\ -Xbootclasspath/a:\n\ -+\ append to end of bootstrap class path\n\ -+\ -Xbootclasspath/p:\n\ -+\ prepend in front of bootstrap class path\n\ -+\ -Xnoclassgc disable class garbage collection\n\ -+\ -Xincgc enable incremental garbage collection\n\ -+\ -Xloggc: log GC status to a file with time stamps\n\ -+\ -Xbatch disable background compilation\n\ -+\ -Xms set initial Java heap size\n\ -+\ -Xmx set maximum Java heap size\n\ -+\ -Xss set java thread stack size\n\ -+\ -Xprof output cpu profiling data\n\ -+\ -Xfuture enable strictest checks, anticipating future default\n\ -+\ -Xrs reduce use of OS signals by Java/VM (see documentation)\n\ -+\ -Xcheck:jni perform additional checks for JNI functions\n\ -+\ -Xshare:off do not attempt to use shared class data\n\ -+\ -Xshare:auto use shared class data if possible (default)\n\ -+\ -Xshare:on require using shared class data, otherwise fail.\n\n\ -+The -X options are non-standard and subject to change without notice.\n -+ -+java.launcher.cls.error1=\ -+ Error: Could not find main class {0} -+java.launcher.cls.error2=\ -+ Error: Main method is not {0} in class {1}, please define the main method as:\n\ -+\ public static void main(String[] args) -+java.launcher.cls.error3=\ -+ Error: Main method must return a value of type void in class {0}, please \n\ -+ define the main method as:\n\ -+\ public static void main(String[] args) -+java.launcher.cls.error4=\ -+ Error: Main method not found in class {0}, please define the main method as:\n\ -+\ public static void main(String[] args) -+ -+ -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/sun/management/resources/agent_pt_BR.properties ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/sun/management/resources/agent_pt_BR.properties Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,92 @@ -+# -+# -+# Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+# -+# This code is free software; you can redistribute it and/or modify it -+# under the terms of the GNU General Public License version 2 only, as -+# published by the Free Software Foundation. Oracle designates this -+# particular file as subject to the "Classpath" exception as provided -+# by Oracle in the LICENSE file that accompanied this code. -+# -+# This code is distributed in the hope that it will be useful, but WITHOUT -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+# version 2 for more details (a copy is included in the LICENSE file that -+# accompanied this code). -+# -+# You should have received a copy of the GNU General Public License version -+# 2 along with this work; if not, write to the Free Software Foundation, -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+# -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -+# or visit www.oracle.com if you need additional information or have any -+# questions. -+# -+ -+# Localizations for Level names. For the US locale -+# these are the same as the non-localized level name. -+ -+agent.err.error = Erro -+agent.err.exception = Exce\u00e7\u00e3o lan\u00e7ada pelo agente -+agent.err.warning = Aviso -+ -+agent.err.configfile.notfound = Arquivo de configura\u00e7\u00e3o n\u00e3o encontrado -+agent.err.configfile.failed = Falha ao ler o arquivo de configura\u00e7\u00e3o -+agent.err.configfile.closed.failed = Falha ao fechar o arquivo de configura\u00e7\u00e3o -+agent.err.configfile.access.denied = Acesso negado ao arquivo de configura\u00e7\u00e3o -+ -+agent.err.exportaddress.failed = Falha na exporta\u00e7\u00e3o do endere\u00e7o do conector JMX para o buffer de instrumenta\u00e7\u00e3o -+ -+agent.err.agentclass.notfound = Classe do agente de gerenciamento n\u00e3o encontrada -+agent.err.agentclass.failed = Classe do agente de gerenciamento falha -+agent.err.premain.notfound = premain(String) n\u00e3o existe na classe do agente -+agent.err.agentclass.access.denied = Acesso negado a premain(String) -+agent.err.invalid.agentclass = Valor inv\u00e1lido da propriedade com.sun.management.agent.class -+ -+agent.err.invalid.jmxremote.port = N\u00famero inv\u00e1lido de com.sun.management.jmxremote.port -+ -+agent.err.file.not.set = Arquivo n\u00e3o especificado -+agent.err.file.not.readable = Arquivo ileg\u00edvel -+agent.err.file.read.failed = Falha ao ler o arquivo -+agent.err.file.not.found = Arquivo n\u00e3o encontrado -+agent.err.file.access.not.restricted = O acesso de leitura do arquivo deve ser limitado -+ -+agent.err.password.file.notset = O arquivo de senha n\u00e3o est\u00e1 especificado, mas com.sun.management.jmxremote.authenticate=true -+agent.err.password.file.not.readable = Arquivo de senha ileg\u00edvel -+agent.err.password.file.read.failed = Falha ao ler o arquivo de senha -+agent.err.password.file.notfound = Arquivo de senha n\u00e3o encontrado -+agent.err.password.file.access.notrestricted = O acesso de leitura do arquivo de senha deve ser limitado -+ -+agent.err.access.file.notset = O arquivo de acesso n\u00e3o est\u00e1 especificado, mas com.sun.management.jmxremote.authenticate=true -+agent.err.access.file.not.readable = Arquivo de acesso ileg\u00edvel -+agent.err.access.file.read.failed = Falha ao ler o arquivo de acesso -+agent.err.access.file.notfound = Arquivo de acesso n\u00e3o encontrado -+ -+agent.err.connector.server.io.error = Erro de comunica\u00e7\u00e3o do servidor do conector JMX -+ -+agent.err.invalid.option = Op\u00e7\u00e3o especificada inv\u00e1lida -+agent.err.invalid.snmp.port = N\u00famero inv\u00e1lido de com.sun.management.snmp.port -+agent.err.invalid.snmp.trap.port = N\u00famero inv\u00e1lido de com.sun.management.snmp.trap -+agent.err.unknown.snmp.interface = Interface SNMP desconhecida -+agent.err.acl.file.notset = N\u00e3o h\u00e1 nenhum arquivo ACL SNMP especificado, mas com.sun.management.snmp.acl=true -+agent.err.acl.file.notfound = Arquivo ACL SNMP n\u00e3o encontrado -+agent.err.acl.file.not.readable = Arquivo ACL SNMP ileg\u00edvel -+agent.err.acl.file.read.failed = Falha ao ler o arquivo ACL SNMP -+agent.err.acl.file.access.notrestricted = O acesso de leitura do arquivo de senha deve ser limitado -+ -+agent.err.snmp.adaptor.start.failed = Falha ao iniciar o adaptador SNMP com endere\u00e7o -+agent.err.snmp.mib.init.failed = Falha ao inicializar o MIB SNMP com erro -+ -+jmxremote.ConnectorBootstrap.initialize = Iniciando o servidor do conector JMX: -+jmxremote.ConnectorBootstrap.initialize.noAuthentication = Sem autentica\u00e7\u00e3o -+jmxremote.ConnectorBootstrap.initialize.ready = Conector JMX pronto em: {0} -+jmxremote.ConnectorBootstrap.initialize.password.readonly = O acesso de leitura do arquivo de senha deve ser limitado: {0} -+jmxremote.ConnectorBootstrap.initialize.file.readonly = O acesso de leitura do arquivo deve ser limitado: {0} -+ -+jmxremote.AdaptorBootstrap.getTargetList.processing = Processando ACL -+jmxremote.AdaptorBootstrap.getTargetList.adding = Adicionando destino: {0} -+jmxremote.AdaptorBootstrap.getTargetList.starting = Iniciando o servidor do adaptador: -+jmxremote.AdaptorBootstrap.getTargetList.initialize1 = Adaptador pronto. -+jmxremote.AdaptorBootstrap.getTargetList.initialize2 = Adaptador SNMP pronto em: {0}:{1} -+jmxremote.AdaptorBootstrap.getTargetList.terminate = conclu\u00eddo {0} -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/sun/misc/resources/Messages_pt_BR.java ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/sun/misc/resources/Messages_pt_BR.java Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,53 @@ -+/* -+ * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * This code is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. Oracle designates this -+ * particular file as subject to the "Classpath" exception as provided -+ * by Oracle in the LICENSE file that accompanied this code. -+ * -+ * This code is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+ * version 2 for more details (a copy is included in the LICENSE file that -+ * accompanied this code). -+ * -+ * You should have received a copy of the GNU General Public License version -+ * 2 along with this work; if not, write to the Free Software Foundation, -+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -+ * or visit www.oracle.com if you need additional information or have any -+ * questions. -+ */ -+ -+package sun.misc.resources; -+ -+/** -+ *

    This class represents the ResourceBundle -+ * for sun.misc. -+ * -+ * @author Michael Colburn -+ * @version 1.5, 11/17/05 -+ */ -+ -+public class Messages_pt_BR extends java.util.ListResourceBundle { -+ -+ /** -+ * Returns the contents of this ResourceBundle. -+ *

    -+ * @return the contents of this ResourceBundle. -+ */ -+ public Object[][] getContents() { -+ return contents; -+ } -+ -+ private static final Object[][] contents = { -+ { "optpkg.versionerror", "ERRO: formato de vers\u00e3o inv\u00e1lido usado no arquivo jar {0}. Verifique a documenta\u00e7\u00e3o para obter o formato de vers\u00e3o suportado." }, -+ { "optpkg.attributeerror", "ERRO: o atributo de manifesto JAR {0} necess\u00e1rio n\u00e3o est\u00e1 definido no arquivo JAR {1}." }, -+ { "optpkg.attributeserror", "ERRO: alguns atributos de manifesto JAR necess\u00e1rios n\u00e3o est\u00e3o definidos no arquivo JAR {0}." } -+ }; -+ -+} -\ No newline at end of file -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/sun/print/resources/serviceui_pt_BR.properties ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/sun/print/resources/serviceui_pt_BR.properties Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,214 @@ -+# -+# -+border.chromaticity=Apar\u00eancia da cor -+border.copies=C\u00f3pias -+border.jobattributes=Atributos do trabalho -+border.media=M\u00eddia -+border.orientation=Orienta\u00e7\u00e3o -+border.printrange=Intervalo de impress\u00e3o -+border.printservice=Servi\u00e7o de impress\u00e3o -+border.quality=Qualidade -+border.sides=Lados -+border.margins=Margens -+# -+button.cancel=Cancelar -+button.ok=OK -+button.print=Imprimir -+button.properties=Propriedades... -+button.properties.mnemonic=R -+# -+checkbox.collate=Agrupar -+checkbox.collate.mnemonic=C -+checkbox.jobsheets=P\u00e1gina com cabe\u00e7alho -+checkbox.jobsheets.mnemonic=B -+checkbox.printtofile=Imprimir em arquivo -+checkbox.printtofile.mnemonic=F -+# -+dialog.printtitle=Imprimir -+dialog.pstitle=Configurar p\u00e1gina -+dialog.overwrite=Este arquivo j\u00e1 existe. Deseja substituir o arquivo existente? -+dialog.owtitle=Imprimir em arquivo -+dialog.printtofile=Imprimir em arquivo -+dialog.noprintermsg=Nenhum servi\u00e7o de impress\u00e3o encontrado. -+dialog.writeerror=N\u00e3o \u00e9 poss\u00edvel gravar no arquivo: -+# -+label.info=Info: -+label.jobname=Nome do trabalho: -+label.jobname.mnemonic=J -+label.numcopies=N\u00famero de c\u00f3pias: -+label.numcopies.mnemonic=O -+label.priority=Prioridade: -+label.priority.mnemonic=R -+label.psname=Nome: -+label.psname.mnemonic=N -+label.pstype=Tipo: -+label.rangeto=Para -+label.size=Tamanho: -+label.size.mnemonic=Z -+label.source=Fonte: -+label.source.mnemonic=C -+label.status=Status: -+label.username=Nome de usu\u00e1rio: -+label.username.mnemonic=U -+label.millimetres=(mm) -+label.inches=(pol) -+label.topmargin=superior -+label.topmargin.mnemonic=T -+label.bottommargin=inferior -+label.bottommargin.mnemonic=B -+label.leftmargin=esquerda -+label.leftmargin.mnemonic=F -+label.rightmargin=direita -+label.rightmargin.mnemonic=R -+# -+radiobutton.color=Cor -+radiobutton.color.mnemonic=C -+radiobutton.draftq=Rascunho -+radiobutton.draftq.mnemonic=F -+radiobutton.duplex=Duplex -+radiobutton.duplex.mnemonic=D -+radiobutton.highq=Alto -+radiobutton.highq.mnemonic=H -+radiobutton.landscape=Paisagem -+radiobutton.landscape.mnemonic=L -+radiobutton.monochrome=Monocrom\u00e1tico -+radiobutton.monochrome.mnemonic=M -+radiobutton.normalq=Normal -+radiobutton.normalq.mnemonic=N -+radiobutton.oneside=Um lado -+radiobutton.oneside.mnemonic=O -+radiobutton.portrait=Retrato -+radiobutton.portrait.mnemonic=P -+radiobutton.rangeall=Todas -+radiobutton.rangeall.mnemonic=L -+radiobutton.rangepages=P\u00e1ginas -+radiobutton.rangepages.mnemonic=E -+radiobutton.revlandscape=Paisagem invertida -+radiobutton.revlandscape.mnemonic=N -+radiobutton.revportrait=Retrato invertido -+radiobutton.revportrait.mnemonic=I -+radiobutton.tumble=Duplex horizontal -+radiobutton.tumble.mnemonic=T -+# The vkMnemonics correspond with the constants defined in KeyEvent, eg -+# 65 = KeyEvent.VK_A -+tab.appearance=Apar\u00eancia -+tab.appearance.vkMnemonic=65 -+tab.general=Geral -+tab.general.vkMnemonic=71 -+tab.pagesetup=Configurar p\u00e1gina -+tab.pagesetup.vkMnemonic=83 -+# -+error.pagerange=Intervalo de p\u00e1ginas inv\u00e1lido; insira novamente os valores (por exemplo, 1-3,5,7-10) -+error.destination=Nome de arquivo inv\u00e1lido; tente novamente -+# -+# The following keys match the Strings returned by MediaSizeName.toString() -+# (in some cases the space character is replaced by '-' and the pound -+# character is replaced with 'n') -+# -+iso-4a0=4A0 (ISO/DIN & JIS) -+iso-2a0=2A0 (ISO/DIN & JIS) -+iso-a0=A0 (ISO/DIN & JIS) -+iso-a1=A1 (ISO/DIN & JIS) -+iso-a2=A2 (ISO/DIN & JIS) -+iso-a3=A3 (ISO/DIN & JIS) -+iso-a4=A4 (ISO/DIN & JIS) -+iso-a5=A5 (ISO/DIN & JIS) -+iso-a6=A6 (ISO/DIN & JIS) -+iso-a7=A7 (ISO/DIN & JIS) -+iso-a8=A8 (ISO/DIN & JIS) -+iso-a9=A9 (ISO/DIN & JIS) -+iso-a10=A10 (ISO/DIN & JIS) -+iso-b0=B0 (ISO/DIN) -+iso-b1=B1 (ISO/DIN) -+iso-b2=B2 (ISO/DIN) -+iso-b3=B3 (ISO/DIN) -+iso-b4=B4 (ISO/DIN) -+iso-b5=B5 (ISO/DIN) -+iso-b6=B6 (ISO/DIN) -+iso-b7=B7 (ISO/DIN) -+iso-b8=B8 (ISO/DIN) -+iso-b9=B9 (ISO/DIN) -+iso-b10=B10 (ISO/DIN) -+jis-b0=B0 (JIS) -+jis-b1=B1 (JIS) -+jis-b2=B2 (JIS) -+jis-b3=B3 (JIS) -+jis-b4=B4 (JIS) -+jis-b5=B5 (JIS) -+jis-b6=B6 (JIS) -+jis-b7=B7 (JIS) -+jis-b8=B8 (JIS) -+jis-b9=B9 (JIS) -+jis-b10=B10 (JIS) -+iso-c0=C0 (ISO/DIN) -+iso-c1=C1 (ISO/DIN) -+iso-c2=C2 (ISO/DIN) -+iso-c3=C3 (ISO/DIN) -+iso-c4=C4 (ISO/DIN) -+iso-c5=C5 (ISO/DIN) -+iso-c6=C6 (ISO/DIN) -+iso-c7=C7 (ISO/DIN) -+iso-c8=C8 (ISO/DIN) -+iso-c9=C9 (ISO/DIN) -+iso-c10=C10 (ISO/DIN) -+na-letter=Carta -+na-legal=Of\u00edcio -+executive=Executivo -+ledger=Livro-raz\u00e3o -+tabloid=Tabl\u00f3ide -+invoice=Fatura -+folio=F\u00f3lio -+quarto=Quarto -+japanese-postcard=Cart\u00e3o-postal (JIS) -+oufuko-postcard=Cart\u00e3o-postal (JIS) -+a=Engenharia A -+b=Engenharia B -+c=Engenharia C -+d=Engenharia D -+e=Engenharia E -+iso-designated-long=Longo designado ISO -+italian-envelope=Envelope italiano -+italy-envelope=Envelope italiano -+invite-envelope=Envelope de convite -+monarch-envelope=Envelope monarca -+personal-envelope=Envelope personalizado -+na-number-9-envelope=Envelope n\u00ba 9 -+na-number-10-envelope=Envelope n\u00ba 10 -+na-number-11-envelope=Envelope n\u00ba 11 -+na-number-12-envelope=Envelope n\u00ba 12 -+na-number-14-envelope=Envelope n\u00ba 14 -+na-6x9-envelope=Envelope 6x9 -+na-7x9-envelope=Envelope 6x7 -+na-9x11-envelope=Envelope 9x11 -+na-9x12-envelope=Envelope 9x12 -+na-10x13-envelope=Envelope 10x15 -+na-10x14-envelope=Envelope 10x15 -+na-10x15-envelope=Envelope 10x15 -+na-5x7=Papel 5" x 7" -+na-8x10=Papel 8" x 10" -+# -+# The following keys match the Strings returned by MediaTray.toString() -+# -+auto-select=Selecionar automaticamente -+top=Superior -+middle=Meio -+bottom=Inferior -+envelope=Envelope -+manual=Manual -+large-capacity=Grande capacidade -+main=Principal -+side=Lado -+# Add the additional standard bins defined by win32 -+Manual-Envelope=Envelope manual -+Automatic-Feeder=Alimentador autom\u00e1tico -+Tractor-Feeder=Alimentador por tracionador -+Small-Format=Formato pequeno -+Large-Format=Formato grande -+Cassette=Cassete -+Form-Source=Fonte do formul\u00e1rio -+# -+# The following keys match the Strings returned by -+# PrinterIsAcceptingJobs.toString() -+# -+accepting-jobs=Aceitando trabalhos -+not-accepting-jobs=N\u00e3o aceitando trabalhos -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/sun/rmi/registry/resources/rmiregistry_pt_BR.properties ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/sun/rmi/registry/resources/rmiregistry_pt_BR.properties Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,28 @@ -+# -+# -+# Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved. -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+# -+# This code is free software; you can redistribute it and/or modify it -+# under the terms of the GNU General Public License version 2 only, as -+# published by the Free Software Foundation. Oracle designates this -+# particular file as subject to the "Classpath" exception as provided -+# by Oracle in the LICENSE file that accompanied this code. -+# -+# This code is distributed in the hope that it will be useful, but WITHOUT -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+# version 2 for more details (a copy is included in the LICENSE file that -+# accompanied this code). -+# -+# You should have received a copy of the GNU General Public License version -+# 2 along with this work; if not, write to the Free Software Foundation, -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+# -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -+# or visit www.oracle.com if you need additional information or have any -+# questions. -+# -+ -+rmiregistry.usage=Uso: {0} \n\nem que inclui:\n -J passa o argumento para o int\u00e9rprete de java -+rmiregistry.port.badnumber=o argumento da porta, {0}, n\u00e3o \u00e9 um n\u00famero. -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/sun/rmi/server/resources/rmid_pt_BR.properties ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/sun/rmi/server/resources/rmid_pt_BR.properties Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,96 @@ -+# -+# -+# Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved. -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+# -+# This code is free software; you can redistribute it and/or modify it -+# under the terms of the GNU General Public License version 2 only, as -+# published by the Free Software Foundation. Oracle designates this -+# particular file as subject to the "Classpath" exception as provided -+# by Oracle in the LICENSE file that accompanied this code. -+# -+# This code is distributed in the hope that it will be useful, but WITHOUT -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+# version 2 for more details (a copy is included in the LICENSE file that -+# accompanied this code). -+# -+# You should have received a copy of the GNU General Public License version -+# 2 along with this work; if not, write to the Free Software Foundation, -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+# -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -+# or visit www.oracle.com if you need additional information or have any -+# questions. -+# -+ -+# "rmid", inetd", and "wait" should not be translated. -+rmid.syntax.exec.invalid=rmid foi iniciado de inetd com um status inv\u00e1lido (deve estar em espera) -+ -+# "rmid" and "inetd" should not be translated. -+rmid.syntax.port.badarg=a porta n\u00e3o pode ser especificada se rmid for iniciado de inetd -+ -+# "port" here refers to a TCP port for the server to listen on. -+rmid.syntax.port.badnumber=a porta n\u00e3o \u00e9 um n\u00famero -+ -+# "-port" should not be translated, because it's part of command syntax. -+rmid.syntax.port.missing=a op\u00e7\u00e3o -port requer argumento -+ -+# "-log" should not be translated, because it's part of command syntax. -+rmid.syntax.log.missing=a op\u00e7\u00e3o -log requer argumento -+ -+# "-log" should not be translated, because it's part of command syntax. -+rmid.syntax.log.required=op\u00e7\u00e3o -log necess\u00e1ria -+ -+# {0} = the (string) illegal argument in question -+rmid.syntax.illegal.option=op\u00e7\u00e3o ilegal: {0} -+ -+# {0} = the (string) reason text that came with a thrown exception -+# "Activation.main" should not be translated, because it's a codepoint -+rmid.unexpected.exception=Activation.main: ocorreu uma exce\u00e7\u00e3o: {0} -+ -+# "java.home" should not be translated, because it's a property name -+# "ActivatorImpl" should not be translated, because it's a codepoint -+rmid.unfound.java.home.property=ActivatorImpl: n\u00e3o \u00e9 poss\u00edvel localizar java.home -+ -+# "rmid" should not be translated -+rmid.inherited.channel.info=inicializa\u00e7\u00e3o de rmid com canal legado -+ -+# "Activation.main" should not be translated, because it's a codepoint -+rmid.exec.policy.invalid=Activation.main: classe de pol\u00edtica de execu\u00e7\u00e3o inv\u00e1lida -+ -+# "rmid" should not be translated -+rmid.exec.policy.exception=rmid: a tentativa de obter a pol\u00edtica de execu\u00e7\u00e3o gera: -+ -+# "rmid" should not be translated -+rmid.exec.command=rmid: debugExec: executando "{0}" -+ -+# "rmid" should not be translated -+rmid.group.inactive=rmid: grupo de ativa\u00e7\u00e3o inativo: {0} -+ -+# "Activation.main", "sun.rmi.activation.execPolicy", "ExecPermission" and -+# "ExecOptionPermission" should not be translated, since they refer to -+# class/permission names. -+rmid.exec.perms.inadequate=Activation.main: aviso: propriedade do sistema sun.rmi.activation.execPolicy\nn\u00e3o registrada e nenhuma ExecPermission/ExecOptionPermission\nconcedida; as tentativas de ativa\u00e7\u00e3o seguintes podem falhar devido a verifica\u00e7\u00f5es mal sucedidas da permiss\u00e3o\nExecPermission/ExecOptionPermission. Para obter\ndocumenta\u00e7\u00e3o sobre como configurar a seguran\u00e7a rmid, conculte:\n\nhttp://java.sun.com/j2se/1.4/docs/tooldocs/solaris/rmid.html\nhttp://java.sun.com/j2se/1.4/docs/tooldocs/win32/rmid.html\n -+ -+# "rmid", "-port", "-log", "-stop", "-C" and "-J" should not be translated, -+# because they are syntax -+rmid.usage=Uso: {0} \n\nem que inclui:\n -port especifica a porta que rmid usar\u00e1\n -log especifica o diret\u00f3rio no qual o rmid grava o registro\n -stop para a chamada atual de rmid (para a porta especificada)\n -C passa o argumento para cada processo filho (grupo de ativa\u00e7\u00e3o)\n -J passa o argumento para o int\u00e9rprete de java\n -+# This means "The currently running activation daemon has been shut down, -+# and is about to exit". -+rmid.daemon.shutdown=encerramento do daemon de ativa\u00e7\u00e3o -+ -+# "rmid" should not be translated -+rmid.restart.group.warning=\nrmid: (AVISO) reiniciar grupo gera: -+ -+# "rmid" should not be translated -+rmid.restart.service.warning=\nrmid: (AVISO) reiniciar servi\u00e7o gera: -+ -+# "rmid" should not be translated -+rmid.log.update.warning=\nrmid: (AVISO) registrar atualiza\u00e7\u00e3o gera: -+ -+# "rmid" should not be translated -+rmid.log.snapshot.warning=\nrmid: (GRAVE) registrar instant\u00e2neo gera: -+ -+# "rmid" should not be translated -+rmid.log.recover.warning=\nrmid: (AVISO) {0}: ignorando registro durante a recupera\u00e7\u00e3o: -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/sun/security/util/AuthResources_pt_BR.java ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/sun/security/util/AuthResources_pt_BR.java Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,154 @@ -+/* -+ * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * This code is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. Oracle designates this -+ * particular file as subject to the "Classpath" exception as provided -+ * by Oracle in the LICENSE file that accompanied this code. -+ * -+ * This code is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+ * version 2 for more details (a copy is included in the LICENSE file that -+ * accompanied this code). -+ * -+ * You should have received a copy of the GNU General Public License version -+ * 2 along with this work; if not, write to the Free Software Foundation, -+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -+ * or visit www.oracle.com if you need additional information or have any -+ * questions. -+ */ -+ -+package sun.security.util; -+ -+/** -+ *

    This class represents the ResourceBundle -+ * for the following packages: -+ * -+ *

      -+ *
    1. com.sun.security.auth -+ *
    2. com.sun.security.auth.login -+ *
    -+ * -+ * @version 1.6, 01/23/01 -+ */ -+public class AuthResources_pt_BR extends java.util.ListResourceBundle { -+ -+ private static final Object[][] contents = { -+ -+ // NT principals -+ {"invalid null input: value", "entrada nula inv\u00e1lida: {0}"}, -+ {"NTDomainPrincipal: name", "NTDomainPrincipal: {0}"}, -+ {"NTNumericCredential: name", "NTNumericCredential: {0}"}, -+ {"Invalid NTSid value", "Valor de NTSid inv\u00e1lido"}, -+ {"NTSid: name", "NTSid: {0}"}, -+ {"NTSidDomainPrincipal: name", "NTSidDomainPrincipal: {0}"}, -+ {"NTSidGroupPrincipal: name", "NTSidGroupPrincipal: {0}"}, -+ {"NTSidPrimaryGroupPrincipal: name", "NTSidPrimaryGroupPrincipal: {0}"}, -+ {"NTSidUserPrincipal: name", "NTSidUserPrincipal: {0}"}, -+ {"NTUserPrincipal: name", "NTUserPrincipal: {0}"}, -+ -+ // UnixPrincipals -+ {"UnixNumericGroupPrincipal [Primary Group]: name", -+ "UnixNumericGroupPrincipal [grupo principal]: {0}"}, -+ {"UnixNumericGroupPrincipal [Supplementary Group]: name", -+ "UnixNumericGroupPrincipal [grupo complement\u00e1rio]: {0}"}, -+ {"UnixNumericUserPrincipal: name", "UnixNumericUserPrincipal: {0}"}, -+ {"UnixPrincipal: name", "UnixPrincipal: {0}"}, -+ -+ // com.sun.security.auth.login.ConfigFile -+ {"Unable to properly expand config", "N\u00e3o \u00e9 poss\u00edvel expandir corretamente {0}"}, -+ {"extra_config (No such file or directory)", -+ "{0} (tal arquivo ou diret\u00f3rio n\u00e3o existe)"}, -+ {"Unable to locate a login configuration", -+ "N\u00e3o \u00e9 poss\u00edvel localizar uma configura\u00e7\u00e3o de logon"}, -+ {"Configuration Error:\n\tInvalid control flag, flag", -+ "Erro de configura\u00e7\u00e3o:\n\tSinalizador de controle inv\u00e1lido, {0}"}, -+ {"Configuration Error:\n\tCan not specify multiple entries for appName", -+ "Erro de configura\u00e7\u00e3o:\n\tN\u00e3o \u00e9 poss\u00edvel especificar v\u00e1rias entradas para {0}"}, -+ {"Configuration Error:\n\texpected [expect], read [end of file]", -+ "Erro de configura\u00e7\u00e3o:\n\tesperado [{0}], lido [fim do arquivo]"}, -+ {"Configuration Error:\n\tLine line: expected [expect], found [value]", -+ "Erro de configura\u00e7\u00e3o:\n\tlinha {0}: esperado [{1}], encontrado [{2}]"}, -+ {"Configuration Error:\n\tLine line: expected [expect]", -+ "Erro de configura\u00e7\u00e3o:\n\tlinha {0}: esperado [{1}]"}, -+ {"Configuration Error:\n\tLine line: system property [value] expanded to empty value", -+ "Erro de configura\u00e7\u00e3o:\n\tlinha {0}: propriedade do sistema [{1}] expandida para valor vazio"}, -+ -+ // com.sun.security.auth.module.JndiLoginModule -+ {"username: ","nome de usu\u00e1rio: "}, -+ {"password: ","senha: "}, -+ -+ // com.sun.security.auth.module.KeyStoreLoginModule -+ {"Please enter keystore information", -+ "Insira as informa\u00e7\u00f5es do armazenamento de chaves"}, -+ {"Keystore alias: ","Alias do armazenamento de chaves: "}, -+ {"Keystore password: ","Senha do armazenamento de chaves: "}, -+ {"Private key password (optional): ", -+ "Senha da chave privada (opcional): "}, -+ -+ // com.sun.security.auth.module.Krb5LoginModule -+ {"Kerberos username [[defUsername]]: ", -+ "Nome de usu\u00e1rio de Kerberos [{0}]: "}, -+ {"Kerberos password for [username]: ", -+ "Senha de Kerberos de {0}: "}, -+ -+ /*** EVERYTHING BELOW IS DEPRECATED ***/ -+ -+ // com.sun.security.auth.PolicyFile -+ {": error parsing ", ": erro ao analisar "}, -+ {": ", ": "}, -+ {": error adding Permission ", ": erro ao adicionar permiss\u00e3o "}, -+ {" ", " "}, -+ {": error adding Entry ", ": erro ao adicionar entrada "}, -+ {"(", "("}, -+ {")", ")"}, -+ {"attempt to add a Permission to a readonly PermissionCollection", -+ "tentativa de adicionar uma permiss\u00e3o ao um PermissionCollection de somente leitura"}, -+ -+ // com.sun.security.auth.PolicyParser -+ {"expected keystore type", "tipo de armazenamento de chaves esperado"}, -+ {"can not specify Principal with a ", -+ "n\u00e3o \u00e9 poss\u00edvel especificar um principal com uma "}, -+ {"wildcard class without a wildcard name", -+ "de coringa sem um nome de coringa"}, -+ {"expected codeBase or SignedBy", "CodeBase ou SignedBy esperado"}, -+ {"only Principal-based grant entries permitted", -+ "somente \u00e9 permitido conceder entradas com base no principal"}, -+ {"expected permission entry", "entrada de permiss\u00e3o esperada"}, -+ {"number ", "n\u00famero "}, -+ {"expected ", "esperado "}, -+ {", read end of file", ", fim de arquivo lido"}, -+ {"expected ';', read end of file", "esperado ';', fim de arquivo lido"}, -+ {"line ", "linha "}, -+ {": expected '", ": esperado '"}, -+ {"', found '", "', encontrado '"}, -+ {"'", "'"}, -+ -+ // SolarisPrincipals -+ {"SolarisNumericGroupPrincipal [Primary Group]: ", -+ "SolarisNumericGroupPrincipal [grupo principal]: "}, -+ {"SolarisNumericGroupPrincipal [Supplementary Group]: ", -+ "SolarisNumericGroupPrincipal [grupo complement\u00e1rio]: "}, -+ {"SolarisNumericUserPrincipal: ", -+ "SolarisNumericUserPrincipal: "}, -+ {"SolarisPrincipal: ", "SolarisPrincipal: "}, -+ {"provided null name", "nome nulo fornecido"} -+ -+ }; -+ -+ /** -+ * Returns the contents of this ResourceBundle. -+ * -+ *

    -+ * -+ * @return the contents of this ResourceBundle. -+ */ -+ public Object[][] getContents() { -+ return contents; -+ } -+} -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/sun/security/util/Resources_pt_BR.java ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/sun/security/util/Resources_pt_BR.java Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,646 @@ -+/* -+ * Copyright (c) 2001, 2006, Oracle and/or its affiliates. All rights reserved. -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * This code is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. Oracle designates this -+ * particular file as subject to the "Classpath" exception as provided -+ * by Oracle in the LICENSE file that accompanied this code. -+ * -+ * This code is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+ * version 2 for more details (a copy is included in the LICENSE file that -+ * accompanied this code). -+ * -+ * You should have received a copy of the GNU General Public License version -+ * 2 along with this work; if not, write to the Free Software Foundation, -+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -+ * or visit www.oracle.com if you need additional information or have any -+ * questions. -+ */ -+ -+package sun.security.util; -+ -+/** -+ *

    This class represents the ResourceBundle -+ * for javax.security.auth and sun.security. -+ * -+ * @version 1.33, 12/06/05 -+ */ -+public class Resources_pt_BR extends java.util.ListResourceBundle { -+ -+ private static final Object[][] contents = { -+ -+ // shared (from jarsigner) -+ {" ", " "}, -+ {" ", " "}, -+ {" ", " "}, -+ {", ", ", "}, -+ // shared (from keytool) -+ {"\n", "\n"}, -+ {"*******************************************", -+ "*******************************************"}, -+ {"*******************************************\n\n", -+ "*******************************************\n\n"}, -+ -+ // keytool -+ {"keytool error: ", "erro de keytool: "}, -+ {"Illegal option: ", "Op\u00e7\u00e3o ilegal: "}, -+ {"Try keytool -help","Tentar keytool -help"}, -+ {"Command option needs an argument.", "A op\u00e7\u00e3o de comando {0} precisa de um argumento."}, -+ {"Warning: Different store and key passwords not supported for PKCS12 KeyStores. Ignoring user-specified value.", -+ "Aviso: senhas de chave e de armazenamento diferentes n\u00e3o suportadas para KeyStores PKCS12. Ignorando valor {0} especificado pelo usu\u00e1rio."}, -+ {"-keystore must be NONE if -storetype is {0}", -+ "-keystore deve ser NONE se -storetype for {0}"}, -+ {"Too may retries, program terminated", -+ "N\u00famero de tentativas excedido, programa finalizado"}, -+ {"-storepasswd and -keypasswd commands not supported if -storetype is {0}", -+ "comandos -storepasswd e -keypasswd n\u00e3o suportados se -storetype for {0}"}, -+ {"-keypasswd commands not supported if -storetype is PKCS12", -+ "comandos -keypasswd n\u00e3o suportados se -storetype for PKCS12"}, -+ {"-keypass and -new can not be specified if -storetype is {0}", -+ "-keypass e -new n\u00e3o podem ser especificados se -storetype for {0}"}, -+ {"if -protected is specified, then -storepass, -keypass, and -new must not be specified", -+ "se -protected estiver especificado, ent\u00e3o -storepass, -keypass e -new n\u00e3o devem ser especificados"}, -+ {"if -srcprotected is specified, then -srcstorepass and -srckeypass must not be specified", -+ "se -srcprotected estiver especificado, ent\u00e3o -srcstorepass e -srckeypass n\u00e3o devem ser especificados"}, -+ {"if keystore is not password protected, then -storepass, -keypass, and -new must not be specified", -+ "se o armazenamento de chaves n\u00e3o estiver protegido por senha, ent\u00e3o -storepass, -keypass e -new n\u00e3o devem ser especificados"}, -+ {"if source keystore is not password protected, then -srcstorepass and -srckeypass must not be specified", -+ "se o armazenamento de chaves de origem n\u00e3o estiver protegido por senha, ent\u00e3o -srcstorepass e -srckeypass n\u00e3o devem ser especificados"}, -+ {"Validity must be greater than zero", -+ "A validade deve ser maior do que zero"}, -+ {"provName not a provider", "{0} n\u00e3o \u00e9 um fornecedor"}, -+ {"Usage error: no command provided", "Erro de uso: nenhum comando fornecido"}, -+ {"Usage error, is not a legal command", "Erro de uso, {0} n\u00e3o \u00e9 um comando legal"}, -+ {"Source keystore file exists, but is empty: ", "O arquivo de armazenamento de chaves de origem existe, mas est\u00e1 vazio: "}, -+ {"Please specify -srckeystore", "Especifique -srckeystore"}, -+ {"Must not specify both -v and -rfc with 'list' command", -+ "N\u00e3o devem ser especificados -v e -rfc com o comando 'list'"}, -+ {"Key password must be at least 6 characters", -+ "A senha da chave deve ter como m\u00ednimo 6 caracteres"}, -+ {"New password must be at least 6 characters", -+ "A nova senha deve ter como m\u00ednimo 6 caracteres"}, -+ {"Keystore file exists, but is empty: ", -+ "O arquivo de armazenamento de chaves existe, mas est\u00e1 vazio: "}, -+ {"Keystore file does not exist: ", -+ "O arquivo de armazenamento de chaves n\u00e3o existe. "}, -+ {"Must specify destination alias", "Deve ser especificado um alias de destino"}, -+ {"Must specify alias", "Deve ser especificado um alias"}, -+ {"Keystore password must be at least 6 characters", -+ "A senha do armazenamento de chaves deve ter como m\u00ednimo 6 caracteres"}, -+ {"Enter keystore password: ", "Insira a senha do armazenamento de chaves: "}, -+ {"Enter source keystore password: ", "Insira a senha do armazenamento de chaves de origem: "}, -+ {"Enter destination keystore password: ", "Insira a senha do armazenamento de chaves de destino: "}, -+ {"Keystore password is too short - must be at least 6 characters", -+ "A senha do armazenamento de chaves \u00e9 muito curta - deve ter como m\u00ednimo 6 caracteres"}, -+ {"Unknown Entry Type", "Tipo de entrada desconhecido"}, -+ {"Too many failures. Alias not changed", "Excesso de falhas. Alias n\u00e3o alterado"}, -+ {"Entry for alias successfully imported.", -+ "Entrada do alias {0} importada com \u00eaxito."}, -+ {"Entry for alias not imported.", "Entrada do alias {0} n\u00e3o importada."}, -+ {"Problem importing entry for alias : .\nEntry for alias not imported.", -+ "Problema ao importar a entrada do {0}: {1}.\nEntrada do alias {0} n\u00e3o importada."}, -+ {"Import command completed: entries successfully imported, entries failed or cancelled", -+ "Comando de importa\u00e7\u00e3o conclu\u00eddo: {0} entradas importadas com \u00eaxito, {1} entradas falhas ou canceladas"}, -+ {"Warning: Overwriting existing alias in destination keystore", -+ "Aviso: substitui\u00e7\u00e3o de alias {0} existente no armazenamento de chaves de destino"}, -+ {"Existing entry alias exists, overwrite? [no]: ", -+ "Entrada j\u00e1 existente no alias {0}, substituir? [n\u00e3o]: "}, -+ {"Too many failures - try later", "Excesso de falhas - tentar mais tarde"}, -+ {"Certification request stored in file ", -+ "Solicita\u00e7\u00e3o de certificado armazenada no arquivo <{0}>"}, -+ {"Submit this to your CA", "Enviar \u00e0 CA"}, -+ {"if alias not specified, destalias, srckeypass, and destkeypass must not be specified", -+ "se o alias n\u00e3o estiver especificado, destalias, srckeypass e destkeypass n\u00e3o devem ser especificados"}, -+ {"Certificate stored in file ", -+ "Certificado armazenado no arquivo <{0}>"}, -+ {"Certificate reply was installed in keystore", -+ "Resposta do certificado foi instalada no armazenamento de chaves"}, -+ {"Certificate reply was not installed in keystore", -+ "Resposta do certificado n\u00e3o foi instalada no armazenamento de chaves"}, -+ {"Certificate was added to keystore", -+ "O certificado foi adicionado ao armazenamento de chaves"}, -+ {"Certificate was not added to keystore", -+ "O certificado n\u00e3o foi adicionado ao armazenamento de chaves"}, -+ {"[Storing ksfname]", "[Armazenando {0}]"}, -+ {"alias has no public key (certificate)", -+ "{0} n\u00e3o possui chave p\u00fablica (certificado)"}, -+ {"Cannot derive signature algorithm", -+ "N\u00e3o \u00e9 poss\u00edvel obter algoritmo de assinatura"}, -+ {"Alias does not exist", -+ "O alias <{0}> n\u00e3o existe"}, -+ {"Alias has no certificate", -+ "O alias <{0}> n\u00e3o possui certificado"}, -+ {"Key pair not generated, alias already exists", -+ "Par de chaves n\u00e3o gerado, o alias <{0}> j\u00e1 existe"}, -+ {"Cannot derive signature algorithm", -+ "N\u00e3o \u00e9 poss\u00edvel obter algoritmo de assinatura"}, -+ {"Generating keysize bit keyAlgName key pair and self-signed certificate (sigAlgName) with a validity of validality days\n\tfor: x500Name", -+ "Gerando o par de chaves {1} de {0} bit e o certificado autoassinado ({2}) com uma validade de {3} dias\n\tpara: {4}"}, -+ {"Enter key password for ", "Inserir a senha da chave de <{0}>"}, -+ {"\t(RETURN if same as keystore password): ", -+ "\t(RETURN se for igual \u00e0 senha do armazenamento de chaves): "}, -+ {"Key password is too short - must be at least 6 characters", -+ "A senha da chave \u00e9 muito curta - deve ter como m\u00ednimo 6 caracteres"}, -+ {"Too many failures - key not added to keystore", -+ "Excesso de falhas - chave n\u00e3o adicionada ao armazenamento de chaves"}, -+ {"Destination alias already exists", -+ "O alias de destino <{0}> j\u00e1 existe"}, -+ {"Password is too short - must be at least 6 characters", -+ "A senha \u00e9 muito curta - deve ter como m\u00ednimo 6 caracteres"}, -+ {"Too many failures. Key entry not cloned", -+ "Excesso de falhas. Entrada da chave n\u00e3o clonada"}, -+ {"key password for ", "senha da chave de <{0}>"}, -+ {"Keystore entry for already exists", -+ "A entrada do armazenamento de chaves de <{0}> j\u00e1 existe"}, -+ {"Creating keystore entry for ...", -+ "Criando entrada do armazenamento de chaves para <{0}> ..."}, -+ {"No entries from identity database added", -+ "Nenhuma entrada adicionada do banco de dados de identidades"}, -+ {"Alias name: alias", "Nome do alias: {0}"}, -+ {"Creation date: keyStore.getCreationDate(alias)", -+ "Data de cria\u00e7\u00e3o: {0,data}"}, -+ {"alias, keyStore.getCreationDate(alias), ", -+ "{0}, {1,data}, "}, -+ {"alias, ", "{0}, "}, -+ {"Entry type: ", "Tipo de entrada: {0}"}, -+ {"Certificate chain length: ", "Comprimento da cadeia de certificados: "}, -+ {"Certificate[(i + 1)]:", "Certificado[{0,n\u00famero,inteiro}]:"}, -+ {"Certificate fingerprint (MD5): ", "Fingerprint (MD5) do certificado: "}, -+ {"Entry type: trustedCertEntry\n", "Tipo de entrada: trustedCertEntry\n"}, -+ {"trustedCertEntry,", "trustedCertEntry,"}, -+ {"Keystore type: ", "Tipo de armazenamento de chaves: "}, -+ {"Keystore provider: ", "Fornecedor de armazenamento de chaves: "}, -+ {"Your keystore contains keyStore.size() entry", -+ "Seu armazenamento de chaves cont\u00e9m {0,n\u00famero,inteiro} entrada"}, -+ {"Your keystore contains keyStore.size() entries", -+ "Seu armazenamento de chaves cont\u00e9m {0,n\u00famero,inteiro} entradas"}, -+ {"Failed to parse input", "Falha ao analisar a entrada"}, -+ {"Empty input", "Entrada vazia"}, -+ {"Not X.509 certificate", "N\u00e3o \u00e9 um certificado X.509"}, -+ {"Cannot derive signature algorithm", -+ "N\u00e3o \u00e9 poss\u00edvel obter algoritmo de assinatura"}, -+ {"alias has no public key", "{0} n\u00e3o possui chave p\u00fablica"}, -+ {"alias has no X.509 certificate", "{0} n\u00e3o possui certificado X.509"}, -+ {"New certificate (self-signed):", "Novo certificado (autoassinado):"}, -+ {"Reply has no certificates", "A resposta n\u00e3o possui certificado"}, -+ {"Certificate not imported, alias already exists", -+ "Certificado n\u00e3o importado, o alias <{0}> j\u00e1 existe"}, -+ {"Input not an X.509 certificate", "A entrada n\u00e3o \u00e9 um certificado X.509"}, -+ {"Certificate already exists in keystore under alias ", -+ "O certificado j\u00e1 existe no armazenamento de chaves no alias <{0}>"}, -+ {"Do you still want to add it? [no]: ", -+ "Ainda deseja adicion\u00e1-lo? [n\u00e3o]: "}, -+ {"Certificate already exists in system-wide CA keystore under alias ", -+ "O certificado j\u00e1 existe no armazenamento de chaves de CA em todo o sistema no alias <{0}>"}, -+ {"Do you still want to add it to your own keystore? [no]: ", -+ "Ainda deseja adicion\u00e1-lo ao seu pr\u00f3prio armazenamento de chaves? [n\u00e3o]: "}, -+ {"Trust this certificate? [no]: ", "Confiar neste certificado? [n\u00e3o]: "}, -+ {"YES", "SIM"}, -+ {"New prompt: ", "Nova {0}: "}, -+ {"Passwords must differ", "As senhas devem ser diferentes"}, -+ {"Re-enter new prompt: ", "Insira novamente a nova {0}: "}, -+ {"Re-enter new password: ", "Insira novamente a nova senha: "}, -+ {"They don't match. Try again", "Elas n\u00e3o correspondem. Tente novamente"}, -+ {"Enter prompt alias name: ", "Insira o nome do alias {0}: "}, -+ {"Enter new alias name\t(RETURN to cancel import for this entry): ", -+ "Insira o novo nome do alias\t(RETURN para cancelar a importa\u00e7\u00e3o desta entrada): "}, -+ {"Enter alias name: ", "Insira o nome do alias: "}, -+ {"\t(RETURN if same as for )", -+ "\t(RETURN se for igual ao de <{0}>)"}, -+ {"*PATTERN* printX509Cert", -+ "Propriet\u00e1rio: {0}\nEmissor: {1}\nN\u00famero de s\u00e9rie: {2}\nV\u00e1lido de: {3} a: {4}\nFingerprints do certificado:\n\t MD5: {5}\n\t SHA1: {6}\n\t Nome do algoritmo de assinatura: {7}\n\t Vers\u00e3o: {8}"}, -+ {"What is your first and last name?", -+ "Qual \u00e9 o seu nome e o seu sobrenome?"}, -+ {"What is the name of your organizational unit?", -+ "Qual \u00e9 o nome da sua unidade organizacional?"}, -+ {"What is the name of your organization?", -+ "Qual \u00e9 o nome da sua empresa?"}, -+ {"What is the name of your City or Locality?", -+ "Qual \u00e9 o nome da sua cidade ou localidade?"}, -+ {"What is the name of your State or Province?", -+ "Qual \u00e9 o nome do seu estado ou munic\u00edpio?"}, -+ {"What is the two-letter country code for this unit?", -+ "Quais s\u00e3o as duas letras do c\u00f3digo do pa\u00eds desta unidade?"}, -+ {"Is correct?", "{0} \u00e9 correto?"}, -+ {"no", "n\u00e3o"}, -+ {"yes", "sim"}, -+ {"y", "s"}, -+ {" [defaultValue]: ", " [{0}]: "}, -+ {"Alias has no key", -+ "O alias <{0}> n\u00e3o possui chave"}, -+ {"Alias references an entry type that is not a private key entry. The -keyclone command only supports cloning of private key entries", -+ "O alias <{0}> faz refer\u00eancia a um tipo de entrada que n\u00e3o \u00e9 uma entrada de chave privada. O comando -keyclone oferece suporte somente \u00e0 clonagem de entradas de chave privada"}, -+ -+ {"***************** WARNING WARNING WARNING *****************", -+ "***************** AVISO AVISO AVISO *****************"}, -+ -+ // Translators of the following 5 pairs, ATTENTION: -+ // the next 5 string pairs are meant to be combined into 2 paragraphs, -+ // 1+3+4 and 2+3+5. make sure your translation also does. -+ {"* The integrity of the information stored in your keystore *", -+ "* A integridade das informa\u00e7\u00f5es armazenadas no seu armazenamento de chaves *"}, -+ {"* The integrity of the information stored in the srckeystore*", -+ "* A integridade das informa\u00e7\u00f5es armazenadas no srckeystore*"}, -+ {"* has NOT been verified! In order to verify its integrity, *", -+ "* N\u00c3O foi verificada! Para verificar a integridade destas informa\u00e7\u00f5es, *"}, -+ {"* you must provide your keystore password. *", -+ "* voc\u00ea deve fornecer a senha do seu armazenamento de chaves. *"}, -+ {"* you must provide the srckeystore password. *", -+ "* voc\u00ea deve fornecer a senha do srckeystore. *"}, -+ -+ -+ {"Certificate reply does not contain public key for ", -+ "A resposta do certificado n\u00e3o cont\u00e9m a chave p\u00fablica de <{0}>"}, -+ {"Incomplete certificate chain in reply", -+ "Cadeia de certificados incompleta na resposta"}, -+ {"Certificate chain in reply does not verify: ", -+ "A cadeia de certificados da resposta n\u00e3o verifica: "}, -+ {"Top-level certificate in reply:\n", -+ "Certificado de n\u00edvel superior na resposta:\n"}, -+ {"... is not trusted. ", "... n\u00e3o \u00e9 confi\u00e1vel. "}, -+ {"Install reply anyway? [no]: ", "Instalar resposta assim mesmo? [n\u00e3o]: "}, -+ {"NO", "N\u00c3O"}, -+ {"Public keys in reply and keystore don't match", -+ "As chaves p\u00fablicas da resposta e do armazenamento de chaves n\u00e3o correspondem"}, -+ {"Certificate reply and certificate in keystore are identical", -+ "O certificado da resposta e o certificado do armazenamento de chaves s\u00e3o id\u00eanticos"}, -+ {"Failed to establish chain from reply", -+ "Falha ao estabelecer a cadeia a partir da resposta"}, -+ {"n", "n"}, -+ {"Wrong answer, try again", "Resposta errada, tente novamente"}, -+ {"Secret key not generated, alias already exists", -+ "Chave secreta n\u00e3o gerada, o alias <{0}> j\u00e1 existe"}, -+ {"Please provide -keysize for secret key generation", -+ "Forne\u00e7a o -keysize para a gera\u00e7\u00e3o da chave secreta"}, -+ {"keytool usage:\n", "uso de keytool:\n"}, -+ -+ {"Extensions: ", "Extens\u00f5es: "}, -+ -+ {"-certreq [-v] [-protected]", -+ "-certreq [-v] [-protected]"}, -+ {"\t [-alias ] [-sigalg ]", -+ "\t [-alias ] [-sigalg ]"}, -+ {"\t [-file ] [-keypass ]", -+ "\t [-file ] [-keypass ]"}, -+ {"\t [-keystore ] [-storepass ]", -+ "\t [-keystore ] [-storepass ]"}, -+ {"\t [-storetype ] [-providername ]", -+ "\t [-storetype ] [-providername ]"}, -+ {"\t [-providerclass [-providerarg ]] ...", -+ "\t [-providerclass [-providerarg ]] ..."}, -+ {"\t [-providerpath ]", -+ "\t [-providerpath ]"}, -+ {"-delete [-v] [-protected] -alias ", -+ "-delete [-v] [-protected] -alias "}, -+ /** rest is same as -certreq starting from -keystore **/ -+ -+ //{"-export [-v] [-rfc] [-protected]", -+ // "-export [-v] [-rfc] [-protected]"}, -+ {"-exportcert [-v] [-rfc] [-protected]", -+ "-exportcert [-v] [-rfc] [-protected]"}, -+ {"\t [-alias ] [-file ]", -+ "\t [-alias ] [-file ]"}, -+ /** rest is same as -certreq starting from -keystore **/ -+ -+ //{"-genkey [-v] [-protected]", -+ // "-genkey [-v] [-protected]"}, -+ {"-genkeypair [-v] [-protected]", -+ "-genkeypair [-v] [-protected]"}, -+ {"\t [-alias ]", "\t [-alias ]"}, -+ {"\t [-keyalg ] [-keysize ]", -+ "\t [-keyalg ] [-keysize ]"}, -+ {"\t [-sigalg ] [-dname ]", -+ "\t [-sigalg ] [-dname ]"}, -+ {"\t [-validity ] [-keypass ]", -+ "\t [-validity ] [-keypass ]"}, -+ /** rest is same as -certreq starting from -keystore **/ -+ -+ {"-genseckey [-v] [-protected]", -+ "-genseckey [-v] [-protected]"}, -+ /** rest is same as -certreq starting from -keystore **/ -+ -+ {"-help", "-help"}, -+ //{"-identitydb [-v] [-protected]", -+ // "-identitydb [-v] [-protected]"}, -+ //{"\t [-file ]", "\t [-file ]"}, -+ /** rest is same as -certreq starting from -keystore **/ -+ -+ //{"-import [-v] [-noprompt] [-trustcacerts] [-protected]", -+ // "-import [-v] [-noprompt] [-trustcacerts] [-protected]"}, -+ {"-importcert [-v] [-noprompt] [-trustcacerts] [-protected]", -+ "-importcert [-v] [-noprompt] [-trustcacerts] [-protected]"}, -+ {"\t [-alias ]", "\t [-alias ]"}, -+ {"\t [-alias ] [-keypass ]", -+ "\t [-alias ] [-keypass ]"}, -+ {"\t [-file ] [-keypass ]", -+ "\t [-file ] [-keypass ]"}, -+ /** rest is same as -certreq starting from -keystore **/ -+ -+ {"-importkeystore [-v] ", -+ "-importkeystore [-v] "}, -+ {"\t [-srckeystore ] [-destkeystore ]", -+ "\t [-srckeystore ] [-destkeystore ]"}, -+ {"\t [-srcstoretype ] [-deststoretype ]", -+ "\t [-srcstoretype ] [-deststoretype ]"}, -+ {"\t [-srcprotected] [-destprotected]", -+ "\t [-srcprotected] [-destprotected]"}, -+ {"\t [-srcstorepass ] [-deststorepass ]", -+ "\t [-srcstorepass ] [-deststorepass ]"}, -+ {"\t [-srcprovidername ]\n\t [-destprovidername ]", // line too long, split to 2 -+ "\t [-srcprovidername ]\n\t [-destprovidername ]"}, -+ {"\t [-srcalias [-destalias ]", -+ "\t [-srcalias [-destalias ]"}, -+ {"\t [-srckeypass ] [-destkeypass ]]", -+ "\t [-srckeypass ] [-destkeypass ]]"}, -+ {"\t [-noprompt]", "\t [-noprompt]"}, -+ /** rest is same as -certreq starting from -keystore **/ -+ -+ {"-changealias [-v] [-protected] -alias -destalias ", -+ "-changealias [-v] [-protected] -alias -destalias "}, -+ {"\t [-keypass ]", "\t [-keypass ]"}, -+ -+ //{"-keyclone [-v] [-protected]", -+ // "-keyclone [-v] [-protected]"}, -+ //{"\t [-alias ] -dest ", -+ // "\t [-alias ] -dest "}, -+ //{"\t [-keypass ] [-new ]", -+ // "\t [-keypass ] [-new ]"}, -+ /** rest is same as -certreq starting from -keystore **/ -+ -+ {"-keypasswd [-v] [-alias ]", -+ "-keypasswd [-v] [-alias ]"}, -+ {"\t [-keypass ] [-new ]", -+ "\t [-keypass ] [-new ]"}, -+ /** rest is same as -certreq starting from -keystore **/ -+ -+ {"-list [-v | -rfc] [-protected]", -+ "-list [-v | -rfc] [-protected]"}, -+ {"\t [-alias ]", "\t [-alias ]"}, -+ /** rest is same as -certreq starting from -keystore **/ -+ -+ {"-printcert [-v] [-file ]", -+ "-printcert [-v] [-file ]"}, -+ -+ //{"-selfcert [-v] [-protected]", -+ // "-selfcert [-v] [-protected]"}, -+ {"\t [-alias ]", "\t [-alias ]"}, -+ //{"\t [-dname ] [-validity ]", -+ // "\t [-dname ] [-validity ]"}, -+ //{"\t [-keypass ] [-sigalg ]", -+ // "\t [-keypass ] [-sigalg ]"}, -+ /** rest is same as -certreq starting from -keystore **/ -+ -+ {"-storepasswd [-v] [-new ]", -+ "-storepasswd [-v] [-new ]"}, -+ /** rest is same as -certreq starting from -keystore **/ -+ -+ // policytool -+ {"Warning: A public key for alias 'signers[i]' does not exist. Make sure a KeyStore is properly configured.", -+ "Aviso: n\u00e3o existe uma chave p\u00fablica para o alias {0}. Certifique-se de que um KeyStore esteja configurado adequadamente."}, -+ {"Warning: Class not found: class", "Aviso: classe n\u00e3o encontrada: {0}"}, -+ {"Warning: Invalid argument(s) for constructor: arg", -+ "Aviso: argumento(s) inv\u00e1lido(s) para o construtor: {0}"}, -+ {"Illegal Principal Type: type", "Tipo principal ilegal: {0}"}, -+ {"Illegal option: option", "Op\u00e7\u00e3o ilegal: {0}"}, -+ {"Usage: policytool [options]", "Uso: policytool [op\u00e7\u00f5es]"}, -+ {" [-file ] policy file location", -+ " [-file ] local do arquivo de pol\u00edtica"}, -+ {"New", "Novo"}, -+ {"Open", "Abrir"}, -+ {"Save", "Salvar"}, -+ {"Save As", "Salvar como"}, -+ {"View Warning Log", "Visualizar registro de avisos"}, -+ {"Exit", "Sair"}, -+ {"Add Policy Entry", "Adicionar entrada de pol\u00edtica"}, -+ {"Edit Policy Entry", "Editar entrada de pol\u00edtica"}, -+ {"Remove Policy Entry", "Remover entrada de pol\u00edtica"}, -+ {"Edit", "Editar"}, -+ {"Retain", "Conservar"}, -+ -+ {"Warning: File name may include escaped backslash characters. " + -+ "It is not necessary to escape backslash characters " + -+ "(the tool escapes characters as necessary when writing " + -+ "the policy contents to the persistent store).\n\n" + -+ "Click on Retain to retain the entered name, or click on " + -+ "Edit to edit the name.", -+ "Aviso: o nome do arquivo pode incluir caracteres de escape barra invertida. N\u00e3o \u00e9 necess\u00e1rio fazer o escape dos caracteres de barra invertida (a ferramenta faz o escape dos caracteres conforme necess\u00e1rio ao gravar o conte\u00fado da pol\u00edtica no armazenamento persistente).\n\nClique em Conservar para conservar o nome da entrada ou clique em Editar para edit\u00e1-lo."}, -+ -+ {"Add Public Key Alias", "Adicionar alias de chave p\u00fablica"}, -+ {"Remove Public Key Alias", "Remover alias de chave p\u00fablica"}, -+ {"File", "Arquivo"}, -+ {"KeyStore", "KeyStore"}, -+ {"Policy File:", "Arquivo de pol\u00edtica:"}, -+ {"Could not open policy file: policyFile: e.toString()", -+ "N\u00e3o foi poss\u00edvel abrir o arquivo de pol\u00edtica: {0}: {1}"}, -+ {"Policy Tool", "Ferramenta de pol\u00edtica"}, -+ {"Errors have occurred while opening the policy configuration. View the Warning Log for more information.", -+ "Ocorreram erros ao abrir a configura\u00e7\u00e3o da pol\u00edtica. Consulte o registro de avisos para obter mais informa\u00e7\u00f5es."}, -+ {"Error", "Erro"}, -+ {"OK", "OK"}, -+ {"Status", "Status"}, -+ {"Warning", "Aviso"}, -+ {"Permission: ", -+ "Permiss\u00e3o: "}, -+ {"Principal Type:", "Tipo do principal:"}, -+ {"Principal Name:", "Nome do principal:"}, -+ {"Target Name: ", -+ "Nome de destino: "}, -+ {"Actions: ", -+ "A\u00e7\u00f5es: "}, -+ {"OK to overwrite existing file filename?", -+ "OK para substituir o arquivo existente {0}?"}, -+ {"Cancel", "Cancelar"}, -+ {"CodeBase:", "CodeBase:"}, -+ {"SignedBy:", "SignedBy:"}, -+ {"Add Principal", "Adicionar principal"}, -+ {"Edit Principal", "Editar principal"}, -+ {"Remove Principal", "Remover principal"}, -+ {"Principals:", "Principais:"}, -+ {" Add Permission", " Adicionar permiss\u00e3o"}, -+ {" Edit Permission", " Editar permiss\u00e3o"}, -+ {"Remove Permission", "Remover permiss\u00e3o"}, -+ {"Done", "Conclu\u00eddo"}, -+ {"KeyStore URL:", "URL do KeyStore:"}, -+ {"KeyStore Type:", "Tipo de KeyStore:"}, -+ {"KeyStore Provider:", "Fornecedor de KeyStore:"}, -+ {"KeyStore Password URL:", "URL da senha do KeyStore:"}, -+ {"Principals", "Principais"}, -+ {" Edit Principal:", " Editar principal:"}, -+ {" Add New Principal:", " Adicionar novo principal:"}, -+ {"Permissions", "Permiss\u00f5es"}, -+ {" Edit Permission:", " Editar permiss\u00e3o:"}, -+ {" Add New Permission:", " Adicionar nova permiss\u00e3o:"}, -+ {"Signed By:", "Assinado por:"}, -+ {"Cannot Specify Principal with a Wildcard Class without a Wildcard Name", -+ "N\u00e3o \u00e9 poss\u00edvel especificar principal com uma classe de coringa sem um nome de coringa"}, -+ {"Cannot Specify Principal without a Name", -+ "N\u00e3o \u00e9 poss\u00edvel especificar principal sem um nome"}, -+ {"Permission and Target Name must have a value", -+ "O nome de destino e a permiss\u00e3o devem ter um valor"}, -+ {"Remove this Policy Entry?", "Remover esta entrada de pol\u00edtica?"}, -+ {"Overwrite File", "Substituir arquivo"}, -+ {"Policy successfully written to filename", -+ "Pol\u00edtica gravada com \u00eaxito em {0}"}, -+ {"null filename", "nome de arquivo nulo"}, -+ {"Save changes?", "Salvar altera\u00e7\u00f5es?"}, -+ {"Yes", "Sim"}, -+ {"No", "N\u00e3o"}, -+ {"Policy Entry", "Entrada de pol\u00edtica"}, -+ {"Save Changes", "Salvar altera\u00e7\u00f5es"}, -+ {"No Policy Entry selected", "Nenhuma entrada de pol\u00edtica selecionada"}, -+ {"Unable to open KeyStore: ex.toString()", -+ "N\u00e3o \u00e9 poss\u00edvel abrir o KeyStore: {0}"}, -+ {"No principal selected", "Nenhum principal selecionado"}, -+ {"No permission selected", "Nenhuma permiss\u00e3o selecionada"}, -+ {"name", "nome"}, -+ {"configuration type", "tipo de configura\u00e7\u00e3o"}, -+ {"environment variable name", "nome da vari\u00e1vel de ambiente"}, -+ {"library name", "nome da biblioteca"}, -+ {"package name", "nome do pacote"}, -+ {"policy type", "tipo de pol\u00edtica"}, -+ {"property name", "nome da propriedade"}, -+ {"provider name", "nome do fornecedor"}, -+ {"Principal List", "Lista de principais"}, -+ {"Permission List", "Lista de permiss\u00f5es"}, -+ {"Code Base", "Base de c\u00f3digo"}, -+ {"KeyStore U R L:", "U R L do KeyStore:"}, -+ {"KeyStore Password U R L:", "U R L da senha do KeyStore:"}, -+ -+ -+ // javax.security.auth.PrivateCredentialPermission -+ {"invalid null input(s)", "entrada(s) nula(s) inv\u00e1lida(s)"}, -+ {"actions can only be 'read'", "as a\u00e7\u00f5es podem ser somente 'lidas'"}, -+ {"permission name [name] syntax invalid: ", -+ "sintaxe inv\u00e1lida do nome da permiss\u00e3o [{0}]: "}, -+ {"Credential Class not followed by a Principal Class and Name", -+ "Classe da credencial n\u00e3o seguida por um nome e classe do principal"}, -+ {"Principal Class not followed by a Principal Name", -+ "Classe do principal n\u00e3o seguida por um nome do principal"}, -+ {"Principal Name must be surrounded by quotes", -+ "O nome do principal deve estar entre aspas"}, -+ {"Principal Name missing end quote", -+ "Faltam as aspas finais no nome do principal "}, -+ {"PrivateCredentialPermission Principal Class can not be a wildcard (*) value if Principal Name is not a wildcard (*) value", -+ "A classe do principal PrivateCredentialPermission n\u00e3o pode ser um valor coringa (*) se o nome do principal n\u00e3o for um valor coringa (*)"}, -+ {"CredOwner:\n\tPrincipal Class = class\n\tPrincipal Name = name", -+ "CredOwner:\n\tClasse do principal = {0}\n\tNome do principal = {1}"}, -+ -+ // javax.security.auth.x500 -+ {"provided null name", "nome nulo fornecido"}, -+ {"provided null keyword map", "mapa de palavra-chave nulo fornecido"}, -+ {"provided null OID map", "mapa OID nulo fornecido"}, -+ -+ // javax.security.auth.Subject -+ {"invalid null AccessControlContext provided", -+ "AccessControlContext nulo inv\u00e1lido fornecido"}, -+ {"invalid null action provided", "a\u00e7\u00e3o nula inv\u00e1lida fornecida"}, -+ {"invalid null Class provided", "classe nula inv\u00e1lida fornecida"}, -+ {"Subject:\n", "Subject:\n"}, -+ {"\tPrincipal: ", "\tPrincipal: "}, -+ {"\tPublic Credential: ", "\tCredencial p\u00fablica: "}, -+ {"\tPrivate Credentials inaccessible\n", -+ "\tCredenciais privadas inacess\u00edveis\n"}, -+ {"\tPrivate Credential: ", "\tCredencial privada: "}, -+ {"\tPrivate Credential inaccessible\n", -+ "\tCredencial privada inacess\u00edvel\n"}, -+ {"Subject is read-only", "O Subject \u00e9 de somente leitura"}, -+ {"attempting to add an object which is not an instance of java.security.Principal to a Subject's Principal Set", -+ "tentativa de adicionar um objeto que n\u00e3o \u00e9 uma inst\u00e2ncia de java.security.Principal a um conjunto de principais do Subject"}, -+ {"attempting to add an object which is not an instance of class", -+ "tentativa de adicionar um objeto que n\u00e3o \u00e9 uma inst\u00e2ncia de {0}"}, -+ -+ // javax.security.auth.login.AppConfigurationEntry -+ {"LoginModuleControlFlag: ", "LoginModuleControlFlag: "}, -+ -+ // javax.security.auth.login.LoginContext -+ {"Invalid null input: name", "Entrada nula inv\u00e1lida: nome"}, -+ {"No LoginModules configured for name", -+ "Nenhum LoginModule configurado para {0}"}, -+ {"invalid null Subject provided", "Subject nulo inv\u00e1lido fornecido"}, -+ {"invalid null CallbackHandler provided", -+ "CallbackHandler nulo inv\u00e1lido fornecido"}, -+ {"null subject - logout called before login", -+ "Subject nulo - logoff chamado antes do logon"}, -+ {"unable to instantiate LoginModule, module, because it does not provide a no-argument constructor", -+ "n\u00e3o \u00e9 poss\u00edvel instanciar LoginModule, {0}, porque n\u00e3o fornece um construtor sem argumento"}, -+ {"unable to instantiate LoginModule", -+ "n\u00e3o \u00e9 poss\u00edvel instanciar LoginModule"}, -+ {"unable to instantiate LoginModule: ", -+ "n\u00e3o \u00e9 poss\u00edvel instanciar LoginModule: "}, -+ {"unable to find LoginModule class: ", -+ "n\u00e3o \u00e9 poss\u00edvel localizar a classe LoginModule: "}, -+ {"unable to access LoginModule: ", -+ "n\u00e3o \u00e9 poss\u00edvel acessar LoginModule: "}, -+ {"Login Failure: all modules ignored", -+ "Falha de logon: todos os m\u00f3dulos ignorados"}, -+ -+ // sun.security.provider.PolicyFile -+ -+ {"java.security.policy: error parsing policy:\n\tmessage", -+ "java.security.policy: erro ao analisar {0}:\n\t{1}"}, -+ {"java.security.policy: error adding Permission, perm:\n\tmessage", -+ "java.security.policy: erro ao adicionar permiss\u00e3o, {0}:\n\t{1}"}, -+ {"java.security.policy: error adding Entry:\n\tmessage", -+ "java.security.policy: erro ao adicionar entrada:\n\t{0}"}, -+ {"alias name not provided (pe.name)", "nome de alias n\u00e3o fornecido ({0})"}, -+ {"unable to perform substitution on alias, suffix", -+ "n\u00e3o \u00e9 poss\u00edvel realizar a substitui\u00e7\u00e3o no alias, {0}"}, -+ {"substitution value, prefix, unsupported", -+ "valor da substitui\u00e7\u00e3o, {0}, n\u00e3o suportado"}, -+ {"(", "("}, -+ {")", ")"}, -+ {"type can't be null","o tipo n\u00e3o pode ser nulo"}, -+ -+ // sun.security.provider.PolicyParser -+ {"keystorePasswordURL can not be specified without also specifying keystore", -+ "keystorePasswordURL n\u00e3o pode ser especificado sem que o armazenamento de chaves tamb\u00e9m seja especificado"}, -+ {"expected keystore type", "tipo de armazenamento de chaves esperado"}, -+ {"expected keystore provider", "fornecedor de armazenamento de chaves esperado"}, -+ {"multiple Codebase expressions", -+ "v\u00e1rias express\u00f5es CodeBase"}, -+ {"multiple SignedBy expressions","v\u00e1rias express\u00f5es SignedBy"}, -+ {"SignedBy has empty alias","SignedBy possui alias vazio"}, -+ {"can not specify Principal with a wildcard class without a wildcard name", -+ "n\u00e3o \u00e9 poss\u00edvel especificar principal com uma classe de coringa sem um nome de coringa"}, -+ {"expected codeBase or SignedBy or Principal", -+ "CodeBase ou SignedBy ou Principal esperado"}, -+ {"expected permission entry", "entrada de permiss\u00e3o esperada"}, -+ {"number ", "n\u00famero "}, -+ {"expected [expect], read [end of file]", -+ "esperado [{0}], lido [fim do arquivo]"}, -+ {"expected [;], read [end of file]", -+ "esperado [;], lido [fim do arquivo]"}, -+ {"line number: msg", "linha {0}: {1}"}, -+ {"line number: expected [expect], found [actual]", -+ "linha {0}: esperado [{1}], encontrado [{2}]"}, -+ {"null principalClass or principalName", -+ "principalClass ou principalName nulo "}, -+ -+ // sun.security.pkcs11.SunPKCS11 -+ {"PKCS11 Token [providerName] Password: ", -+ "Senha PKCS11 Token [{0}]: "}, -+ -+ /* --- DEPRECATED --- */ -+ // javax.security.auth.Policy -+ {"unable to instantiate Subject-based policy", -+ "n\u00e3o \u00e9 poss\u00edvel instanciar a pol\u00edtica com base em Subject"} -+ }; -+ -+ -+ /** -+ * Returns the contents of this ResourceBundle. -+ * -+ *

    -+ * -+ * @return the contents of this ResourceBundle. -+ */ -+ public Object[][] getContents() { -+ return contents; -+ } -+} -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/sun/tools/jar/resources/jar_pt_BR.properties ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/sun/tools/jar/resources/jar_pt_BR.properties Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,47 @@ -+# -+# Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved. -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+# -+# This code is free software; you can redistribute it and/or modify it -+# under the terms of the GNU General Public License version 2 only, as -+# published by the Free Software Foundation. Oracle designates this -+# particular file as subject to the "Classpath" exception as provided -+# by Oracle in the LICENSE file that accompanied this code. -+# -+# This code is distributed in the hope that it will be useful, but WITHOUT -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+# version 2 for more details (a copy is included in the LICENSE file that -+# accompanied this code). -+# -+# You should have received a copy of the GNU General Public License version -+# 2 along with this work; if not, write to the Free Software Foundation, -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+# -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -+# or visit www.oracle.com if you need additional information or have any -+# questions. -+# -+ -+error.cant.open=n\u00e3o \u00e9 poss\u00edvel abrir: {0} -+error.illegal.option=Op\u00e7\u00e3o ilegal: {0} -+error.bad.option=Uma das op\u00e7\u00f5es -{ctxu} deve ser especificada. -+error.bad.cflag=sinalizador 'c' requer que os arquivos de manifesto ou entrada sejam especificados! -+error.bad.uflag=sinalizador 'u' requer os arquivos de manifesto, o sinalizador 'e' ou os arquivos de entrada sejam especificados! -+error.bad.eflag=sinalizador 'e' manifesto com o atributo 'Main-Class' n\u00e3o podem ser especificados \njuntos! -+error.nosuch.fileordir={0} : n\u00e3o h\u00e1 tal arquivo ou diret\u00f3rio -+error.write.file=Erro ao gravar o arquivo jar existente -+error.create.dir={0} : n\u00e3o foi poss\u00edvel gravar o diret\u00f3rio -+error.incorrect.length=largura incorreta durante processamento: {0} -+out.added.manifest=manifesto adicionado -+out.update.manifest=manifesto atualizado -+out.ignore.entry=ignorando entrada {0} -+out.adding=adicionando: {0} -+out.deflated=(vazio {0}%) -+out.stored=(armazenado 0%) -+out.create=\ \ criando: {0} -+out.extracted=extra\u00eddo: {0} -+out.inflated=\ \cheio: {0} -+out.size=(dento = {0}) (fora= {1}) -+ -+usage=Uso: arquivos jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] ...\nOp\u00e7\u00f5es:\n\ \ -c cria novo arquivo de armazenamento\n\ \ -t lista o sum\u00e1rio do arquivo de armazenamento\n\ \ -x extrai arquivos nomeados (ou todos) do arquivo de armazenamento\n\ \ -u atualizar o arquivo de armazenamento existente\n\ \ -v gera sa\u00edda detalhada na sa\u00edda padr\u00e3o\n\ \ -f especifica o nome do arquivo do arquivo de armazenamento\n\ \ -m inclui as informa\u00e7\u00f5es do manifesto do arquivo de manifesto especificado\n\ \ -e especifica o ponto de entrada do aplicativo para aplicativo independente \n\ \ empacotando em um arquivo jar execut\u00e1vel\n\ \ -0 armazena somente; n\u00e3o usa compacta\u00e7\u00e3o ZIP\n\ \ -M n\u00e3o cria um arquivo de manifesto para as entradas\n\ \ -i gera informa\u00e7\u00f5es de \u00edndice para os arquivos especificados\n\ \ -C altera para o diret\u00f3rio e inclui o arquivo seguinte\nSe nenhum arquivo for um diret\u00f3rio, ent\u00e3o \u00e9 processado repetidamente.\nO nome do arquivo de manifesto, o nome do arquivo de armazenamento e o nome do ponto de entrada s\u00e3o\nespecificados na mesma ordem dos sinalizadores 'm', 'f' e 'e'.\n\nExemplo 1: para arquivar dois arquivos de classe em um arquivo de armazenamento denominado classes.jar: \n\ \ jar cvf classes.jar Foo.class Bar.class \nExemplo 2: use um arquivo de manifesto existente 'mymanifest' e arquive todos os\n\ \ arquivos no diret\u00f3rio foo/ na 'classes.jar': \n\ \ jar cvfm classes.jar mymanifest -C foo/ .\n -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/sun/util/logging/resources/logging_pt_BR.properties ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/sun/util/logging/resources/logging_pt_BR.properties Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,37 @@ -+# -+# Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved. -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+# -+# This code is free software; you can redistribute it and/or modify it -+# under the terms of the GNU General Public License version 2 only, as -+# published by the Free Software Foundation. Oracle designates this -+# particular file as subject to the "Classpath" exception as provided -+# by Oracle in the LICENSE file that accompanied this code. -+# -+# This code is distributed in the hope that it will be useful, but WITHOUT -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+# version 2 for more details (a copy is included in the LICENSE file that -+# accompanied this code). -+# -+# You should have received a copy of the GNU General Public License version -+# 2 along with this work; if not, write to the Free Software Foundation, -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+# -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -+# or visit www.oracle.com if you need additional information or have any -+# questions. -+# -+ -+# Localizations for Level names. For the US locale -+# these are the same as the non-localized level name. -+ALL=TODOS -+SEVERE=GRAVE -+WARNING=AVISO -+INFO=INFO -+CONFIG= CONFIG -+FINE=BOM -+FINER=MUITO BOM -+FINEST=EXCELENTE -+OFF=OFF -+ -diff -r b357910aa04a -r e3ecd9555ff0 src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,860 @@ -+/* -+ * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * This code is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. Oracle designates this -+ * particular file as subject to the "Classpath" exception as provided -+ * by Oracle in the LICENSE file that accompanied this code. -+ * -+ * This code is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+ * version 2 for more details (a copy is included in the LICENSE file that -+ * accompanied this code). -+ * -+ * You should have received a copy of the GNU General Public License version -+ * 2 along with this work; if not, write to the Free Software Foundation, -+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -+ * or visit www.oracle.com if you need additional information or have any -+ * questions. -+ */ -+ -+/* -+ * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved -+ * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved -+ * -+ * The original version of this source code and documentation -+ * is copyrighted and owned by Taligent, Inc., a wholly-owned -+ * subsidiary of IBM. These materials are provided under terms -+ * of a License Agreement between Taligent and Sun. This technology -+ * is protected by multiple US and International patents. -+ * -+ * This notice and attribution to Taligent may not be removed. -+ * Taligent is a registered trademark of Taligent, Inc. -+ * -+ */ -+ -+package sun.util.resources; -+ -+public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { -+ -+ protected final Object[][] getContents() { -+ String ACT[] = new String[] {"Fuso hor\u00e1rio do Acre", "ACT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Acre", "ACST"}; -+ String ADELAIDE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central (Austr\u00e1lia do Sul)", "CST", -+ "Fuso hor\u00e1rio de ver\u00e3o central (Austr\u00e1lia do Sul)", "CST"}; -+ String AGT[] = new String[] {"Fuso hor\u00e1rio da Argentina", "ART", -+ "Fuso hor\u00e1rio de ver\u00e3o da Argentina", "ARST"}; -+ String AKST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Alaska", "AKST", -+ "Hor\u00e1rio de luz natural do Alaska", "AKDT"}; -+ String AMT[] = new String[] {"Fuso hor\u00e1rio do Amazonas", "AMT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Amazonas", "AMST"}; -+ String ARAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Ar\u00e1bia", "AST", -+ "Hor\u00e1rio de luz natural da Ar\u00e1bia", "ADT"}; -+ String ARMT[] = new String[] {"Fuso hor\u00e1rio da Arm\u00eania", "AMT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Arm\u00eania", "AMST"}; -+ String AST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Atl\u00e2ntico", "AST", -+ "Hor\u00e1rio de luz natural do Atl\u00e2ntico", "ADT"}; -+ String BDT[] = new String[] {"Fuso hor\u00e1rio de Bangladesh", "BDT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Bangladesh", "BDST"}; -+ String BRISBANE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Queensland)", "EST", -+ "Fuso hor\u00e1rio de ver\u00e3o oriental (Queensland)", "EST"}; -+ String BROKEN_HILL[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central (Austr\u00e1lia do Sul/Nova Gales do Sul)", "CST", -+ "Fuso hor\u00e1rio de ver\u00e3o central (Austr\u00e1lia do Sul/Nova Gales do Sul)", "CST"}; -+ String BRT[] = new String[] {"Fuso hor\u00e1rio de Bras\u00edlia", "BRT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Bras\u00edlia", "BRST"}; -+ String BTT[] = new String[] {"Fuso hor\u00e1rio de But\u00e3o", "BTT", -+ "Fuso hor\u00e1rio de ver\u00e3o de But\u00e3o", "BTST"}; -+ String CAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Central", "CAT", -+ "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica Central", "CAST"}; -+ String CET[] = new String[] {"Fuso hor\u00e1rio da Europa Central", "CET", -+ "Fuso hor\u00e1rio de ver\u00e3o da Europa Central", "CEST"}; -+ String CHAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chatham", "CHAST", -+ "Hor\u00e1rio de luz natural de Chatham", "CHADT"}; -+ String CIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Central", "CIT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Central", "CIST"}; -+ String CLT[] = new String[] {"Fuso hor\u00e1rio do Chile", "CLT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Chile", "CLST"}; -+ String CST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central", "CST", -+ "Hor\u00e1rio de luz natural central", "CDT"}; -+ String CTT[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da China", "CST", -+ "Hor\u00e1rio de luz natural da China", "CDT"}; -+ String CUBA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Cuba", "CST", -+ "Hor\u00e1rio de luz natural de Cuba", "CDT"}; -+ String DARWIN[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central (Territ\u00f3rio do Norte)", "CST", -+ "Fuso hor\u00e1rio de ver\u00e3o central (Territ\u00f3rio do Norte)", "CST"}; -+ String DUBLIN[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Irlanda", "IST"}; -+ String EAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Oriental", "EAT", -+ "Fuso hor\u00e1rio padr\u00e3o da \u00c1frica Oriental", "EAST"}; -+ String EASTER[] = new String[] {"Fuso hor\u00e1rio da Ilha de P\u00e1scoa", "EAST", -+ "Fuso hor\u00e1rio de ver\u00e3o da Ilha de P\u00e1scoa", "EASST"}; -+ String EET[] = new String[] {"Fuso hor\u00e1rio da Europa Oriental", "EET", -+ "Fuso hor\u00e1rio de ver\u00e3o da Europa Oriental", "EEST"}; -+ String EGT[] = new String[] {"Fuso hor\u00e1rio da Groenl\u00e2ndia Oriental", "EGT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Oriental", "EGST"}; -+ String EST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental", "EST", -+ "Hor\u00e1rio de luz natural oriental", "EDT"}; -+ String EST_NSW[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Nova Gales do Sul)", "EST", -+ "Fuso hor\u00e1rio de ver\u00e3o oriental (Nova Gales do Sul)", "EST"}; -+ String GHMT[] = new String[] {"Fuso hor\u00e1rio do meridiano de Gana", "GMT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Gana", "GHST"}; -+ String GAMBIER[] = new String[] {"Fuso hor\u00e1rio de Gambier", "GAMT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Gambier", "GAMST"}; -+ String GMT[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT", -+ "Fuso hor\u00e1rio do meridiano de Greenwich", "GMT"}; -+ String GMTBST[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Gr\u00e3-Bretanha", "BST"}; -+ String GST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do golfo", "GST", -+ "Hor\u00e1rio de luz natural do golfo", "GDT"}; -+ String HAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Hava\u00ed-Aleutian", "HAST", -+ "Hor\u00e1rio de luz natural do Hava\u00ed-Aleutian", "HADT"}; -+ String HKT[] = new String[] {"Fuso hor\u00e1rio de Hong Kong", "HKT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Hong Kong", "HKST"}; -+ String HST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Hava\u00ed", "HST", -+ "Hor\u00e1rio de luz natural do Hava\u00ed", "HDT"}; -+ String ICT[] = new String[] {"Fuso hor\u00e1rio da Indochina", "ICT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Indochina", "ICST"}; -+ String IRT[] = new String[] {"Fuso hor\u00e1rio do Ir\u00e3", "IRST", -+ "Hor\u00e1rio de luz natural do Ir\u00e3", "IRDT"}; -+ String ISRAEL[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Israel", "IST", -+ "Hor\u00e1rio de luz natural de Israel", "IDT"}; -+ String IST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da \u00cdndia", "IST", -+ "Hor\u00e1rio de luz natural da \u00cdndia", "IDT"}; -+ String JST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Jap\u00e3o", "JST", -+ "Hor\u00e1rio de luz natural do Jap\u00e3o", "JDT"}; -+ String KST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Coreia", "KST", -+ "Hor\u00e1rio de luz natural da Coreia", "KDT"}; -+ String LORD_HOWE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Lord Howe", "LHST", -+ "Fuso hor\u00e1rio de ver\u00e3o de Lord Howe", "LHST"}; -+ String MHT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Marshall", "MHT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Marshall", "MHST"}; -+ String MSK[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Moscou", "MSK", -+ "Hor\u00e1rio de luz natural de Moscou", "MSD"}; -+ String MST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o das montanhas", "MST", -+ "Hor\u00e1rio de luz natural das montanhas", "MDT"}; -+ String MYT[] = new String[] {"Fuso hor\u00e1rio da Mal\u00e1sia", "MYT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Mal\u00e1sia", "MYST"}; -+ String NORONHA[] = new String[] {"Fuso hor\u00e1rio de Fernando de Noronha", "FNT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Fernando de Noronha", "FNST"}; -+ String NOVT[] = new String[] {"Fuso hor\u00e1rio de Novosibirsk", "NOVT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Novosibirsk", "NOVST"}; -+ String NPT[] = new String[] {"Fuso hor\u00e1rio do Nepal", "NPT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Nepal", "NPST"}; -+ String NST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Terra Nova", "NST", -+ "Hor\u00e1rio de luz natural de Terra Nova", "NDT"}; -+ String NZST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Nova Zel\u00e2ndia", "NZST", -+ "Hor\u00e1rio de luz natural da Nova Zel\u00e2ndia", "NZDT"}; -+ String PITCAIRN[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Pitcairn", "PST", -+ "Hor\u00e1rio de luz natural de Pitcairn", "PDT"}; -+ String PKT[] = new String[] {"Fuso hor\u00e1rio do Paquist\u00e3o", "PKT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Paquist\u00e3o", "PKST"}; -+ String PONT[] = new String[] {"Fuso hor\u00e1rio de Pohnpei", "PONT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Pohnpei", "PONST"}; -+ String PST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Pac\u00edfico", "PST", -+ "Hor\u00e1rio de luz natural do Pac\u00edfico", "PDT"}; -+ String RST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental", "EST", -+ "Hor\u00e1rio de luz natural central", "CDT"}; -+ String SAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da \u00c1frica do Sul", "SAST", -+ "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica do Sul", "SAST"}; -+ String SBT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Salom\u00e3o", "SBT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Salom\u00e3o", "SBST"}; -+ String SGT[] = new String[] {"Fuso hor\u00e1rio de Cingapura", "SGT", -+ "Fuso hor\u00e1rio de ver\u00e1 de Cingapura", "SGST"}; -+ String SLST[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Serra Leoa", "SLST"}; -+ String TASMANIA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Tasm\u00e2nia)", "EST", -+ "Fuso hor\u00e1rio de ver\u00e3o oriental (Tasm\u00e2nia)", "EST"}; -+ String TMT[] = new String[] {"Fuso hor\u00e1rio do Turcomenist\u00e3o", "TMT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Turcomenist\u00e3o", "TMST"}; -+ String TRUT[] = new String[] {"Fuso hor\u00e1rio de Chuuk", "CHUT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Chuuk", "CHUST"}; -+ String ULAT[]= new String[] {"Fuso hor\u00e1rio de Ulan Bator", "ULAT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Ulan Bator", "ULAST"}; -+ String WAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Ocidental", "WAT", -+ "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica Ocidental", "WAST"}; -+ String WET[] = new String[] {"Fuso hor\u00e1rio da Europa Ocidental", "WET", -+ "Fuso hor\u00e1rio de ver\u00e3o da Europa Ocidental", "WEST"}; -+ String WIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Ocidental", "WIT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Ocidental", "WIST"}; -+ String WST_AUS[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o ocidental (Austr\u00e1lia)", "WST", -+ "Fuso hor\u00e1rio de ver\u00e3o ocidental (Austr\u00e1lia)", "WST"}; -+ String SAMOA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Samoa", "SST", -+ "Hor\u00e1rio de luz natural de Samoa", "SDT"}; -+ String WST_SAMOA[] = new String[] {"Fuso hor\u00e1rio de Samoa Ocidental", "WST", -+ "Fuso hor\u00e1rio de ver\u00e3o de Samoa Ocidental", "WSST"}; -+ String ChST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chamorro", "ChST", -+ "Hor\u00e1rio de luz natural de Chamorro", "ChDT"}; -+ String VICTORIA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Victoria)", "EST", -+ "Fuso hor\u00e1rio de ver\u00e3o oriental (Victoria)", "EST"}; -+ String UTC[] = new String[] {"Tempo universal coordenado", "UTC", -+ "Tempo universal coordenado", "UTC"}; -+ String UZT[] = new String[] {"Fuso hor\u00e1rio do Uzbequist\u00e3o", "UZT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Uzbequist\u00e3o", "UZST"}; -+ String WART[] = new String[] {"Fuso hor\u00e1rio da Argentina Ocidental", "WART", -+ "Fuso hor\u00e1rio de ver\u00e3o da Argentina Ocidental", "WARST"}; -+ -+ -+ return new Object[][] { -+ {"America/Los_Angeles", PST}, -+ {"PST", PST}, -+ {"America/Denver", MST}, -+ {"MST", MST}, -+ {"America/Phoenix", MST}, -+ {"PNT", MST}, -+ {"America/Chicago", CST}, -+ {"CST", CST}, -+ {"America/New_York", EST}, -+ {"EST", EST}, -+ {"America/Indianapolis", EST}, -+ {"IET", EST}, -+ {"Pacific/Honolulu", HST}, -+ {"HST", HST}, -+ {"America/Anchorage", AKST}, -+ {"AST", AKST}, -+ {"America/Halifax", AST}, -+ {"America/St_Johns", NST}, -+ {"CNT", NST}, -+ {"Europe/Paris", CET}, -+ {"ECT", CET}, -+ {"GMT", GMT}, -+ {"Africa/Casablanca", WET}, -+ {"Asia/Jerusalem", ISRAEL}, -+ {"Asia/Tokyo", JST}, -+ {"JST", JST}, -+ {"Europe/Bucharest", EET}, -+ {"Asia/Shanghai", CTT}, -+ {"CTT", CTT}, -+ /* Don't change the order of the above zones -+ * to keep compatibility with the previous version. -+ */ -+ -+ {"ACT", DARWIN}, -+ {"AET", EST_NSW}, -+ {"AGT", AGT}, -+ {"ART", EET}, -+ {"Africa/Abidjan", GMT}, -+ {"Africa/Accra", GHMT}, -+ {"Africa/Addis_Ababa", EAT}, -+ {"Africa/Algiers", CET}, -+ {"Africa/Asmara", EAT}, -+ {"Africa/Asmera", EAT}, -+ {"Africa/Bamako", GMT}, -+ {"Africa/Bangui", WAT}, -+ {"Africa/Banjul", GMT}, -+ {"Africa/Bissau", GMT}, -+ {"Africa/Blantyre", CAT}, -+ {"Africa/Brazzaville", WAT}, -+ {"Africa/Bujumbura", CAT}, -+ {"Africa/Cairo", EET}, -+ {"Africa/Ceuta", CET}, -+ {"Africa/Conakry", GMT}, -+ {"Africa/Dakar", GMT}, -+ {"Africa/Dar_es_Salaam", EAT}, -+ {"Africa/Djibouti", EAT}, -+ {"Africa/Douala", WAT}, -+ {"Africa/El_Aaiun", WET}, -+ {"Africa/Freetown", SLST}, -+ {"Africa/Gaborone", CAT}, -+ {"Africa/Harare", CAT}, -+ {"Africa/Johannesburg", SAST}, -+ {"Africa/Kampala", EAT}, -+ {"Africa/Khartoum", EAT}, -+ {"Africa/Kigali", CAT}, -+ {"Africa/Kinshasa", WAT}, -+ {"Africa/Lagos", WAT}, -+ {"Africa/Libreville", WAT}, -+ {"Africa/Lome", GMT}, -+ {"Africa/Luanda", WAT}, -+ {"Africa/Lubumbashi", CAT}, -+ {"Africa/Lusaka", CAT}, -+ {"Africa/Malabo", WAT}, -+ {"Africa/Maputo", CAT}, -+ {"Africa/Maseru", SAST}, -+ {"Africa/Mbabane", SAST}, -+ {"Africa/Mogadishu", EAT}, -+ {"Africa/Monrovia", GMT}, -+ {"Africa/Nairobi", EAT}, -+ {"Africa/Ndjamena", WAT}, -+ {"Africa/Niamey", WAT}, -+ {"Africa/Nouakchott", GMT}, -+ {"Africa/Ouagadougou", GMT}, -+ {"Africa/Porto-Novo", WAT}, -+ {"Africa/Sao_Tome", GMT}, -+ {"Africa/Timbuktu", GMT}, -+ {"Africa/Tripoli", EET}, -+ {"Africa/Tunis", CET}, -+ {"Africa/Windhoek", WAT}, -+ {"America/Adak", HAST}, -+ {"America/Anguilla", AST}, -+ {"America/Antigua", AST}, -+ {"America/Araguaina", BRT}, -+ {"America/Argentina/Buenos_Aires", AGT}, -+ {"America/Argentina/Catamarca", AGT}, -+ {"America/Argentina/ComodRivadavia", AGT}, -+ {"America/Argentina/Cordoba", AGT}, -+ {"America/Argentina/Jujuy", AGT}, -+ {"America/Argentina/La_Rioja", AGT}, -+ {"America/Argentina/Mendoza", AGT}, -+ {"America/Argentina/Rio_Gallegos", AGT}, -+ {"America/Argentina/Salta", AGT}, -+ {"America/Argentina/San_Juan", AGT}, -+ {"America/Argentina/San_Luis", WART}, -+ {"America/Argentina/Tucuman", AGT}, -+ {"America/Argentina/Ushuaia", AGT}, -+ {"America/Aruba", AST}, -+ {"America/Asuncion", new String[] {"Fuso hor\u00e1rio do Paraguai", "PYT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Paraguai", "PYST"}}, -+ {"America/Atikokan", EST}, -+ {"America/Atka", HAST}, -+ {"America/Bahia", BRT}, -+ {"America/Bahia_Banderas", CST}, -+ {"America/Barbados", AST}, -+ {"America/Belem", BRT}, -+ {"America/Belize", CST}, -+ {"America/Blanc-Sablon", AST}, -+ {"America/Boa_Vista", AMT}, -+ {"America/Bogota", new String[] {"Fuso hor\u00e1rio da Col\u00f4mbia", "COT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Col\u00f4mbia", "COST"}}, -+ {"America/Boise", MST}, -+ {"America/Buenos_Aires", AGT}, -+ {"America/Cambridge_Bay", MST}, -+ {"America/Campo_Grande", AMT}, -+ {"America/Cancun", CST}, -+ {"America/Caracas", new String[] {"Fuso hor\u00e1rio da Venezuela", "VET", -+ "Fuso hor\u00e1rio de ver\u00e3o da Venezuela", "VEST"}}, -+ {"America/Catamarca", AGT}, -+ {"America/Cayenne", new String[] {"Fuso hor\u00e1rio da Guiana Francesa", "GFT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Guiana Francesa", "GFST"}}, -+ {"America/Cayman", EST}, -+ {"America/Chihuahua", MST}, -+ {"America/Coral_Harbour", EST}, -+ {"America/Cordoba", AGT}, -+ {"America/Costa_Rica", CST}, -+ {"America/Cuiaba", AMT}, -+ {"America/Curacao", AST}, -+ {"America/Danmarkshavn", GMT}, -+ {"America/Dawson", PST}, -+ {"America/Dawson_Creek", MST}, -+ {"America/Detroit", EST}, -+ {"America/Dominica", AST}, -+ {"America/Edmonton", MST}, -+ {"America/Eirunepe", AMT}, -+ {"America/El_Salvador", CST}, -+ {"America/Ensenada", PST}, -+ {"America/Fort_Wayne", EST}, -+ {"America/Fortaleza", BRT}, -+ {"America/Glace_Bay", AST}, -+ {"America/Godthab", new String[] {"Fuso hor\u00e1rio da Groenl\u00e2ndia Ocidental", "WGT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Ocidental", "WGST"}}, -+ {"America/Goose_Bay", AST}, -+ {"America/Grand_Turk", EST}, -+ {"America/Grenada", AST}, -+ {"America/Guadeloupe", AST}, -+ {"America/Guatemala", CST}, -+ {"America/Guayaquil", new String[] {"Fuso hor\u00e1rio do Equador", "ECT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Equador", "ECST"}}, -+ {"America/Guyana", new String[] {"Fuso hor\u00e1rio da Guiana", "GYT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Guiana", "GYST"}}, -+ {"America/Havana", CUBA}, -+ {"America/Hermosillo", MST}, -+ {"America/Indiana/Indianapolis", EST}, -+ {"America/Indiana/Knox", CST}, -+ {"America/Indiana/Marengo", EST}, -+ {"America/Indiana/Petersburg", EST}, -+ {"America/Indiana/Tell_City", CST}, -+ {"America/Indiana/Vevay", EST}, -+ {"America/Indiana/Vincennes", EST}, -+ {"America/Indiana/Winamac", EST}, -+ {"America/Inuvik", MST}, -+ {"America/Iqaluit", EST}, -+ {"America/Jamaica", EST}, -+ {"America/Jujuy", AGT}, -+ {"America/Juneau", AKST}, -+ {"America/Kentucky/Louisville", EST}, -+ {"America/Kentucky/Monticello", EST}, -+ {"America/Knox_IN", CST}, -+ {"America/La_Paz", new String[] {"Fuso hor\u00e1rio da Bol\u00edvia", "BOT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Bol\u00edvia", "BOST"}}, -+ {"America/Lima", new String[] {"Fuso hor\u00e1rio do Peru", "PET", -+ "Fuso hor\u00e1rio de ver\u00e3o do Peru", "PEST"}}, -+ {"America/Louisville", EST}, -+ {"America/Maceio", BRT}, -+ {"America/Managua", CST}, -+ {"America/Manaus", AMT}, -+ {"America/Marigot", AST}, -+ {"America/Martinique", AST}, -+ {"America/Mazatlan", MST}, -+ {"America/Mendoza", AGT}, -+ {"America/Menominee", CST}, -+ {"America/Merida", CST}, -+ {"America/Mexico_City", CST}, -+ {"America/Miquelon", new String[] {"Fuso hor\u00e1rio padr\u00e3o de S\u00e3o Pedro e Miquelon", "PMST", -+ "Hor\u00e1rio de luz natural de S\u00e3o Pedro e Miquelon", "PMDT"}}, -+ {"America/Moncton", AST}, -+ {"America/Montevideo", new String[] {"Fuso hor\u00e1rio do Uruguai", "UYT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Uruguai", "UYST"}}, -+ {"America/Monterrey", CST}, -+ {"America/Montreal", EST}, -+ {"America/Montserrat", AST}, -+ {"America/Nassau", EST}, -+ {"America/Nipigon", EST}, -+ {"America/Nome", AKST}, -+ {"America/Noronha", NORONHA}, -+ {"America/North_Dakota/Center", CST}, -+ {"America/North_Dakota/New_Salem", CST}, -+ {"America/Panama", EST}, -+ {"America/Pangnirtung", EST}, -+ {"America/Paramaribo", new String[] {"Fuso hor\u00e1rio do Suriname", "SRT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Suriname", "SRST"}}, -+ {"America/Port-au-Prince", EST}, -+ {"America/Port_of_Spain", AST}, -+ {"America/Porto_Acre", AMT}, -+ {"America/Porto_Velho", AMT}, -+ {"America/Puerto_Rico", AST}, -+ {"America/Rainy_River", CST}, -+ {"America/Rankin_Inlet", CST}, -+ {"America/Recife", BRT}, -+ {"America/Regina", CST}, -+ {"America/Resolute", RST}, -+ {"America/Rio_Branco", AMT}, -+ {"America/Rosario", AGT}, -+ {"America/Santarem", BRT}, -+ {"America/Santiago", CLT}, -+ {"America/Santo_Domingo", AST}, -+ {"America/Sao_Paulo", BRT}, -+ {"America/Scoresbysund", EGT}, -+ {"America/Shiprock", MST}, -+ {"America/St_Barthelemy", AST}, -+ {"America/St_Kitts", AST}, -+ {"America/St_Lucia", AST}, -+ {"America/St_Thomas", AST}, -+ {"America/St_Vincent", AST}, -+ {"America/Swift_Current", CST}, -+ {"America/Tegucigalpa", CST}, -+ {"America/Thule", AST}, -+ {"America/Thunder_Bay", EST}, -+ {"America/Tijuana", PST}, -+ {"America/Toronto", EST}, -+ {"America/Tortola", AST}, -+ {"America/Vancouver", PST}, -+ {"America/Virgin", AST}, -+ {"America/Whitehorse", PST}, -+ {"America/Winnipeg", CST}, -+ {"America/Yakutat", AKST}, -+ {"America/Yellowknife", MST}, -+ {"Antarctica/Casey", WST_AUS}, -+ {"Antarctica/Davis", new String[] {"Fuso hor\u00e1rio de Davis", "DAVT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Davis", "DAVST"}}, -+ {"Antarctica/DumontDUrville", new String[] {"Fuso hor\u00e1rio de Dumont-d'Urville", "DDUT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Dumont-d'Urville", "DDUST"}}, -+ {"Antarctica/Mawson", new String[] {"Fuso hor\u00e1rio de Mawson", "MAWT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Mawson", "MAWST"}}, -+ {"Antarctica/McMurdo", NZST}, -+ {"Antarctica/Palmer", CLT}, -+ {"Antarctica/Rothera", new String[] {"Fuso hor\u00e1rio de Rothera", "ROTT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Rothera", "ROTST"}}, -+ {"Antarctica/South_Pole", NZST}, -+ {"Antarctica/Syowa", new String[] {"Fuso hor\u00e1rio de Syowa", "SYOT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Syowa", "SYOST"}}, -+ {"Antarctica/Vostok", new String[] {"Fuso hor\u00e1rio de Vostok", "VOST", -+ "Fuso hor\u00e1rio de ver\u00e3o de Vostok", "VOSST"}}, -+ {"Arctic/Longyearbyen", CET}, -+ {"Asia/Aden", ARAST}, -+ {"Asia/Almaty", new String[] {"Fuso hor\u00e1rio de Alma-Ata", "ALMT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Alma-Ata", "ALMST"}}, -+ {"Asia/Amman", EET}, -+ {"Asia/Anadyr", new String[] {"Fuso hor\u00e1rio de Anadyr", "ANAT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Anadyr", "ANAST"}}, -+ {"Asia/Aqtau", new String[] {"Fuso hor\u00e1rio de Aqtau", "AQTT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Aqtau", "AQTST"}}, -+ {"Asia/Aqtobe", new String[] {"Fuso hor\u00e1rio de Aqtobe", "AQTT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Aqtobe", "AQTST"}}, -+ {"Asia/Ashgabat", TMT}, -+ {"Asia/Ashkhabad", TMT}, -+ {"Asia/Baghdad", ARAST}, -+ {"Asia/Bahrain", ARAST}, -+ {"Asia/Baku", new String[] {"Fuso hor\u00e1rio do Azerbaij\u00e3o", "AZT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Azerbaij\u00e3o", "AZST"}}, -+ {"Asia/Bangkok", ICT}, -+ {"Asia/Beirut", EET}, -+ {"Asia/Bishkek", new String[] {"Fuso hor\u00e1rio do Quirguist\u00e3o", "KGT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Quirguist\u00e3o", "KGST"}}, -+ {"Asia/Brunei", new String[] {"Fuso hor\u00e1rio de Brunei", "BNT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Brunei", "BNST"}}, -+ {"Asia/Calcutta", IST}, -+ {"Asia/Choibalsan", new String[] {"Fuso hor\u00e1rio de Choibalsan", "CHOT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Choibalsan", "CHOST"}}, -+ {"Asia/Chongqing", CTT}, -+ {"Asia/Chungking", CTT}, -+ {"Asia/Colombo", IST}, -+ {"Asia/Dacca", BDT}, -+ {"Asia/Dhaka", BDT}, -+ {"Asia/Dili", new String[] {"Fuso hor\u00e1rio do Timor-Leste", "TLT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Timor-Leste", "TLST"}}, -+ {"Asia/Damascus", EET}, -+ {"Asia/Dubai", GST}, -+ {"Asia/Dushanbe", new String[] {"Fuso hor\u00e1rio do Tadjiquist\u00e3o", "TJT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Tadjiquist\u00e3o", "TJST"}}, -+ {"Asia/Gaza", EET}, -+ {"Asia/Harbin", CTT}, -+ {"Asia/Ho_Chi_Minh", ICT}, -+ {"Asia/Hong_Kong", HKT}, -+ {"Asia/Hovd", new String[] {"Fuso hor\u00e1rio de Hovd", "HOVT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Hovd", "HOVST"}}, -+ {"Asia/Irkutsk", new String[] {"Fuso hor\u00e1rio de Irkutsk", "IRKT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Irkutsk", "IRKST"}}, -+ {"Asia/Istanbul", EET}, -+ {"Asia/Jakarta", WIT}, -+ {"Asia/Jayapura", new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Oriental", "EIT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Oriental", "EIST"}}, -+ {"Asia/Kabul", new String[] {"Fuso hor\u00e1rio do Afeganist\u00e3o", "AFT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Afeganist\u00e3o", "AFST"}}, -+ {"Asia/Kamchatka", new String[] {"Fuso hor\u00e1rio de Petropavlovsk-Kamchatski", "PETT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Petropavlovsk-Kamchatski", "PETST"}}, -+ {"Asia/Karachi", PKT}, -+ {"Asia/Kashgar", CTT}, -+ {"Asia/Kathmandu", NPT}, -+ {"Asia/Katmandu", NPT}, -+ {"Asia/Kolkata", IST}, -+ {"Asia/Krasnoyarsk", new String[] {"Fuso hor\u00e1rio de Krasnoyarsk", "KRAT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Krasnoyarsk", "KRAST"}}, -+ {"Asia/Kuala_Lumpur", MYT}, -+ {"Asia/Kuching", MYT}, -+ {"Asia/Kuwait", ARAST}, -+ {"Asia/Macao", CTT}, -+ {"Asia/Macau", CTT}, -+ {"Asia/Magadan", new String[] {"Fuso hor\u00e1rio de Magadan", "MAGT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Magadan", "MAGST"}}, -+ {"Asia/Makassar", CIT}, -+ {"Asia/Manila", new String[] {"Fuso hor\u00e1rio das Filipinas", "PHT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Filipinas", "PHST"}}, -+ {"Asia/Muscat", GST}, -+ {"Asia/Nicosia", EET}, -+ {"Asia/Novokuznetsk", NOVT}, -+ {"Asia/Novosibirsk", NOVT}, -+ {"Asia/Oral", new String[] {"Fuso hor\u00e1rio de Uralsk", "ORAT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Uralsk", "ORAST"}}, -+ {"Asia/Omsk", new String[] {"Fuso hor\u00e1rio de Omsk", "OMST", -+ "Fuso hor\u00e1rio de ver\u00e3o de Omsk", "OMSST"}}, -+ {"Asia/Phnom_Penh", ICT}, -+ {"Asia/Pontianak", WIT}, -+ {"Asia/Pyongyang", KST}, -+ {"Asia/Qatar", ARAST}, -+ {"Asia/Qyzylorda", new String[] {"Fuso hor\u00e1rio de Kizil-Orda", "QYZT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Kizil-Orda", "QYZST"}}, -+ {"Asia/Rangoon", new String[] {"Fuso hor\u00e1rio de Mianmar", "MMT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Mianmar", "MMST"}}, -+ {"Asia/Riyadh", ARAST}, -+ {"Asia/Saigon", ICT}, -+ {"Asia/Sakhalin", new String[] {"Fuso hor\u00e1rio de Sakhalina", "SAKT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Sakhalina", "SAKST"}}, -+ {"Asia/Samarkand", UZT}, -+ {"Asia/Seoul", KST}, -+ {"Asia/Singapore", SGT}, -+ {"Asia/Taipei", CTT}, -+ {"Asia/Tel_Aviv", ISRAEL}, -+ {"Asia/Tashkent", UZT}, -+ {"Asia/Tbilisi", new String[] {"Fuso hor\u00e1rio da Ge\u00f3rgia", "GET", -+ "Fuso hor\u00e1rio de ver\u00e3o da Ge\u00f3rgia", "GEST"}}, -+ {"Asia/Tehran", IRT}, -+ {"Asia/Thimbu", BTT}, -+ {"Asia/Thimphu", BTT}, -+ {"Asia/Ujung_Pandang", CIT}, -+ {"Asia/Ulaanbaatar", ULAT}, -+ {"Asia/Ulan_Bator", ULAT}, -+ {"Asia/Urumqi", CTT}, -+ {"Asia/Vientiane", ICT}, -+ {"Asia/Vladivostok", new String[] {"Fuso hor\u00e1rio de Vladivostok", "VLAT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Vladivostok", "VLAST"}}, -+ {"Asia/Yakutsk", new String[] {"Fuso hor\u00e1rio de Yakutsk", "YAKT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Yakutsk", "YAKST"}}, -+ {"Asia/Yekaterinburg", new String[] {"Fuso hor\u00e1rio de Yekaterinburgo", "YEKT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Yekaterinburgo", "YEKST"}}, -+ {"Asia/Yerevan", ARMT}, -+ {"Atlantic/Azores", new String[] {"Fuso hor\u00e1rio das A\u00e7ores", "AZOT", -+ "Fuso hor\u00e1rio de ver\u00e3o das A\u00e7ores", "AZOST"}}, -+ {"Atlantic/Bermuda", AST}, -+ {"Atlantic/Canary", WET}, -+ {"Atlantic/Cape_Verde", new String[] {"Fuso hor\u00e1rio de Cabo Verde", "CVT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Cabo Verde", "CVST"}}, -+ {"Atlantic/Faeroe", WET}, -+ {"Atlantic/Faroe", WET}, -+ {"Atlantic/Jan_Mayen", CET}, -+ {"Atlantic/Madeira", WET}, -+ {"Atlantic/Reykjavik", GMT}, -+ {"Atlantic/South_Georgia", new String[] {"Fuso hor\u00e1rio padr\u00e3o da Ge\u00f3rgia do Sul", "GST", -+ "Hor\u00e1rio de luz natural da Ge\u00f3rgia do Sul", "GDT"}}, -+ {"Atlantic/St_Helena", GMT}, -+ {"Atlantic/Stanley", new String[] {"Fuso hor\u00e1rio das Ilhas Falkland", "FKT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Falkland", "FKST"}}, -+ {"Australia/ACT", EST_NSW}, -+ {"Australia/Adelaide", ADELAIDE}, -+ {"Australia/Brisbane", BRISBANE}, -+ {"Australia/Broken_Hill", BROKEN_HILL}, -+ {"Australia/Canberra", EST_NSW}, -+ {"Australia/Currie", EST_NSW}, -+ {"Australia/Darwin", DARWIN}, -+ {"Australia/Eucla", new String[] {"Fuso hor\u00e1rio ocidental central (Austr\u00e1lia)", "CWST", -+ "Fuso hor\u00e1rio de ver\u00e3o ocidental central (Austr\u00e1lia)", "CWST"}}, -+ {"Australia/Hobart", TASMANIA}, -+ {"Australia/LHI", LORD_HOWE}, -+ {"Australia/Lindeman", BRISBANE}, -+ {"Australia/Lord_Howe", LORD_HOWE}, -+ {"Australia/Melbourne", VICTORIA}, -+ {"Australia/North", DARWIN}, -+ {"Australia/NSW", EST_NSW}, -+ {"Australia/Perth", WST_AUS}, -+ {"Australia/Queensland", BRISBANE}, -+ {"Australia/South", ADELAIDE}, -+ {"Australia/Sydney", EST_NSW}, -+ {"Australia/Tasmania", TASMANIA}, -+ {"Australia/Victoria", VICTORIA}, -+ {"Australia/West", WST_AUS}, -+ {"Australia/Yancowinna", BROKEN_HILL}, -+ {"BET", BRT}, -+ {"BST", BDT}, -+ {"Brazil/Acre", AMT}, -+ {"Brazil/DeNoronha", NORONHA}, -+ {"Brazil/East", BRT}, -+ {"Brazil/West", AMT}, -+ {"Canada/Atlantic", AST}, -+ {"Canada/Central", CST}, -+ {"Canada/East-Saskatchewan", CST}, -+ {"Canada/Eastern", EST}, -+ {"Canada/Mountain", MST}, -+ {"Canada/Newfoundland", NST}, -+ {"Canada/Pacific", PST}, -+ {"Canada/Yukon", PST}, -+ {"Canada/Saskatchewan", CST}, -+ {"CAT", CAT}, -+ {"CET", CET}, -+ {"Chile/Continental", CLT}, -+ {"Chile/EasterIsland", EASTER}, -+ {"CST6CDT", CST}, -+ {"Cuba", CUBA}, -+ {"EAT", EAT}, -+ {"EET", EET}, -+ {"Egypt", EET}, -+ {"Eire", DUBLIN}, -+ {"EST5EDT", EST}, -+ {"Etc/Greenwich", GMT}, -+ {"Etc/UCT", UTC}, -+ {"Etc/Universal", UTC}, -+ {"Etc/UTC", UTC}, -+ {"Etc/Zulu", UTC}, -+ {"Europe/Amsterdam", CET}, -+ {"Europe/Andorra", CET}, -+ {"Europe/Athens", EET}, -+ {"Europe/Belfast", GMTBST}, -+ {"Europe/Belgrade", CET}, -+ {"Europe/Berlin", CET}, -+ {"Europe/Bratislava", CET}, -+ {"Europe/Brussels", CET}, -+ {"Europe/Budapest", CET}, -+ {"Europe/Chisinau", EET}, -+ {"Europe/Copenhagen", CET}, -+ {"Europe/Dublin", DUBLIN}, -+ {"Europe/Gibraltar", CET}, -+ {"Europe/Guernsey", GMTBST}, -+ {"Europe/Helsinki", EET}, -+ {"Europe/Isle_of_Man", GMTBST}, -+ {"Europe/Istanbul", EET}, -+ {"Europe/Jersey", GMTBST}, -+ {"Europe/Kaliningrad", EET}, -+ {"Europe/Kiev", EET}, -+ {"Europe/Lisbon", WET}, -+ {"Europe/Ljubljana", CET}, -+ {"Europe/London", GMTBST}, -+ {"Europe/Luxembourg", CET}, -+ {"Europe/Madrid", CET}, -+ {"Europe/Malta", CET}, -+ {"Europe/Mariehamn", EET}, -+ {"Europe/Minsk", EET}, -+ {"Europe/Monaco", CET}, -+ {"Europe/Moscow", MSK}, -+ {"Europe/Nicosia", EET}, -+ {"Europe/Oslo", CET}, -+ {"Europe/Podgorica", CET}, -+ {"Europe/Prague", CET}, -+ {"Europe/Riga", EET}, -+ {"Europe/Rome", CET}, -+ {"Europe/Samara", new String[] {"Fuso hor\u00e1rio de Samara", "SAMT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Samara", "SAMST"}}, -+ {"Europe/San_Marino", CET}, -+ {"Europe/Sarajevo", CET}, -+ {"Europe/Simferopol", EET}, -+ {"Europe/Skopje", CET}, -+ {"Europe/Sofia", EET}, -+ {"Europe/Stockholm", CET}, -+ {"Europe/Tallinn", EET}, -+ {"Europe/Tirane", CET}, -+ {"Europe/Tiraspol", EET}, -+ {"Europe/Uzhgorod", EET}, -+ {"Europe/Vaduz", CET}, -+ {"Europe/Vatican", CET}, -+ {"Europe/Vienna", CET}, -+ {"Europe/Vilnius", EET}, -+ {"Europe/Volgograd", new String[] {"Fuso hor\u00e1rio de Volgogrado", "VOLT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Volgogrado", "VOLST"}}, -+ {"Europe/Warsaw", CET}, -+ {"Europe/Zagreb", CET}, -+ {"Europe/Zaporozhye", EET}, -+ {"Europe/Zurich", CET}, -+ {"GB", GMTBST}, -+ {"GB-Eire", GMTBST}, -+ {"Greenwich", GMT}, -+ {"Hongkong", HKT}, -+ {"Iceland", GMT}, -+ {"Iran", IRT}, -+ {"IST", IST}, -+ {"Indian/Antananarivo", EAT}, -+ {"Indian/Chagos", new String[] {"Fuso hor\u00e1rio dos territ\u00f3rios do Oceano \u00cdndico", "IOT", -+ "Fuso hor\u00e1rio de ver\u00e3o dos territ\u00f3rios do Oceano \u00cdndico", "IOST"}}, -+ {"Indian/Christmas", new String[] {"Fuso hor\u00e1rio das Ilhas Christmas", "CXT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Christmas", "CXST"}}, -+ {"Indian/Cocos", new String[] {"Fuso hor\u00e1rio das Ilhas Cocos", "CCT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Cocos", "CCST"}}, -+ {"Indian/Comoro", EAT}, -+ {"Indian/Kerguelen", new String[] {"Fuso hor\u00e1rio das Terras Austrais e Ant\u00e1rticas Francesas", "TFT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Terras Austrais e Ant\u00e1rticas Francesas", "TFST"}}, -+ {"Indian/Mahe", new String[] {"Fuso hor\u00e1rio das Seychelles", "SCT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Seychelles", "SCST"}}, -+ {"Indian/Maldives", new String[] {"Fuso hor\u00e1rio das Maldivas", "MVT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Maldivas", "MVST"}}, -+ {"Indian/Mauritius", new String[] {"Fuso hor\u00e1rio das Ilhas Maur\u00edcio", "MUT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Maur\u00edcio", "MUST"}}, -+ {"Indian/Mayotte", EAT}, -+ {"Indian/Reunion", new String[] {"Fuso hor\u00e1rio de Reuni\u00e3o", "RET", -+ "Fuso hor\u00e1rio de ver\u00e3o de Reuni\u00e3o", "REST"}}, -+ {"Israel", ISRAEL}, -+ {"Jamaica", EST}, -+ {"Japan", JST}, -+ {"Kwajalein", MHT}, -+ {"Libya", EET}, -+ {"MET", new String[] {"Fuso hor\u00e1rio da Europa M\u00e9dia", "MET", -+ "Fuso hor\u00e1rio de ver\u00e3o da Europa M\u00e9dia", "MEST"}}, -+ {"Mexico/BajaNorte", PST}, -+ {"Mexico/BajaSur", MST}, -+ {"Mexico/General", CST}, -+ {"MIT", WST_SAMOA}, -+ {"MST7MDT", MST}, -+ {"Navajo", MST}, -+ {"NET", ARMT}, -+ {"NST", NZST}, -+ {"NZ", NZST}, -+ {"NZ-CHAT", CHAST}, -+ {"PLT", PKT}, -+ {"Portugal", WET}, -+ {"PRT", AST}, -+ {"Pacific/Apia", WST_SAMOA}, -+ {"Pacific/Auckland", NZST}, -+ {"Pacific/Chatham", CHAST}, -+ {"Pacific/Chuuk", TRUT}, -+ {"Pacific/Easter", EASTER}, -+ {"Pacific/Efate", new String[] {"Fuso hor\u00e1rio de Vanuatu", "VUT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Vanuatu", "VUST"}}, -+ {"Pacific/Enderbury", new String[] {"Fuso hor\u00e1rio das Ilhas F\u00e9nix", "PHOT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas F\u00e9nix", "PHOST"}}, -+ {"Pacific/Fakaofo", new String[] {"Fuso hor\u00e1rio de Tokelau", "TKT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Tokelau", "TKST"}}, -+ {"Pacific/Fiji", new String[] {"Fuso hor\u00e1rio de Fiji", "FJT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Fiji", "FJST"}}, -+ {"Pacific/Funafuti", new String[] {"Fuso hor\u00e1rio de Tuvalu", "TVT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Tuvalu", "TVST"}}, -+ {"Pacific/Galapagos", new String[] {"Fuso hor\u00e1rio das Ilhas Gal\u00e1pagos", "GALT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Gal\u00e1pagos", "GALST"}}, -+ {"Pacific/Gambier", GAMBIER}, -+ {"Pacific/Guadalcanal", SBT}, -+ {"Pacific/Guam", ChST}, -+ {"Pacific/Johnston", HST}, -+ {"Pacific/Kiritimati", new String[] {"Fuso hor\u00e1rio das Esp\u00f3rades Equatoriais", "LINT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Esp\u00f3rades Equatoriais", "LINST"}}, -+ {"Pacific/Kosrae", new String[] {"Fuso hor\u00e1rio de Kosrae", "KOST", -+ "Fuso hor\u00e1rio de ver\u00e3o de Kosrae", "KOSST"}}, -+ {"Pacific/Kwajalein", MHT}, -+ {"Pacific/Majuro", MHT}, -+ {"Pacific/Marquesas", new String[] {"Fuso hor\u00e1rio das Ilhas Marquesas", "MART", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Marquesas", "MARST"}}, -+ {"Pacific/Midway", SAMOA}, -+ {"Pacific/Nauru", new String[] {"Fuso hor\u00e1rio de Nauru", "NRT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Nauru", "NRST"}}, -+ {"Pacific/Niue", new String[] {"Fuso hor\u00e1rio de Niue", "NUT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Niue", "NUST"}}, -+ {"Pacific/Norfolk", new String[] {"Fuso hor\u00e1rio da Ilha de Norfolk", "NFT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Ilha de Norfolk", "NFST"}}, -+ {"Pacific/Noumea", new String[] {"Fuso hor\u00e1rio da Nova Caled\u00f4nia", "NCT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Nova Caled\u00f4nia", "NCST"}}, -+ {"Pacific/Pago_Pago", SAMOA}, -+ {"Pacific/Palau", new String[] {"Fuso hor\u00e1rio de Palau", "PWT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Palau", "PWST"}}, -+ {"Pacific/Pitcairn", PITCAIRN}, -+ {"Pacific/Pohnpei", PONT}, -+ {"Pacific/Ponape", PONT}, -+ {"Pacific/Port_Moresby", new String[] {"Fuso hor\u00e1rio de Papua-Nova Guin\u00e9", "PGT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Papua-Nova Guin\u00e9", "PGST"}}, -+ {"Pacific/Rarotonga", new String[] {"Fuso hor\u00e1rio das Ilhas Cook", "CKT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Cook", "CKHST"}}, -+ {"Pacific/Saipan", ChST}, -+ {"Pacific/Samoa", SAMOA}, -+ {"Pacific/Tahiti", new String[] {"Fuso hor\u00e1rio do Taiti", "TAHT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Taiti", "TAHST"}}, -+ {"Pacific/Tarawa", new String[] {"Fuso hor\u00e1rio das Ilhas Gilbert", "GILT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Gilbert", "GILST"}}, -+ {"Pacific/Tongatapu", new String[] {"Fuso hor\u00e1rio de Tonga", "TOT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Tonga", "TOST"}}, -+ {"Pacific/Truk", TRUT}, -+ {"Pacific/Wake", new String[] {"Fuso hor\u00e1rio de Wake", "WAKT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Wake", "WAKST"}}, -+ {"Pacific/Wallis", new String[] {"Fuso hor\u00e1rio de Wallis e Futuna", "WFT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Wallis e Futuna", "WFST"}}, -+ {"Pacific/Yap", TRUT}, -+ {"Poland", CET}, -+ {"PRC", CTT}, -+ {"PST8PDT", PST}, -+ {"ROK", KST}, -+ {"Singapore", SGT}, -+ {"SST", SBT}, -+ {"SystemV/AST4", AST}, -+ {"SystemV/AST4ADT", AST}, -+ {"SystemV/CST6", CST}, -+ {"SystemV/CST6CDT", CST}, -+ {"SystemV/EST5", EST}, -+ {"SystemV/EST5EDT", EST}, -+ {"SystemV/HST10", HST}, -+ {"SystemV/MST7", MST}, -+ {"SystemV/MST7MDT", MST}, -+ {"SystemV/PST8", PST}, -+ {"SystemV/PST8PDT", PST}, -+ {"SystemV/YST9", AKST}, -+ {"SystemV/YST9YDT", AKST}, -+ {"Turkey", EET}, -+ {"UCT", UTC}, -+ {"Universal", UTC}, -+ {"US/Alaska", AKST}, -+ {"US/Aleutian", HAST}, -+ {"US/Arizona", MST}, -+ {"US/Central", CST}, -+ {"US/Eastern", EST}, -+ {"US/Hawaii", HST}, -+ {"US/Indiana-Starke", CST}, -+ {"US/East-Indiana", EST}, -+ {"US/Michigan", EST}, -+ {"US/Mountain", MST}, -+ {"US/Pacific", PST}, -+ {"US/Pacific-New", PST}, -+ {"US/Samoa", SAMOA}, -+ {"UTC", UTC}, -+ {"VST", ICT}, -+ {"W-SU", MSK}, -+ {"WET", WET}, -+ {"Zulu", UTC}, -+ }; -+ } -+} -+ -+ -diff -r b357910aa04a -r e3ecd9555ff0 src/windows/classes/sun/awt/windows/awtLocalization_pt_BR.properties ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ openjdk/jdk/src/windows/classes/sun/awt/windows/awtLocalization_pt_BR.properties Thu Dec 02 02:17:37 2010 -0800 -@@ -0,0 +1,10 @@ -+ -+# -+# AWT Localization Properties -+# -+ -+# Default font size for Menus and MenuItems -+menuFont=SansSerif-plain-11 -+ -+# Value for "All files" for FileDialog -+allFiles=Todos os arquivos diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/6977550-tzdata2010l.patch openjdk-6-6b34-1.13.6/patches/openjdk/6977550-tzdata2010l.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/6977550-tzdata2010l.patch 2014-10-08 18:39:25.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/6977550-tzdata2010l.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,1208 +0,0 @@ -# HG changeset patch -# User peytoia -# Date 1282540492 -32400 -# Node ID 23f72ec0d8e83e9f7e05c450e1ec230e31f579ed -# Parent 58626b4eedcbd0a316ae2bd6f5a7818702e3d97c -6977550: (tz) Support tzdata2010l -Reviewed-by: okutsu - ---- openjdk/jdk/make/sun/javazic/tzdata/VERSION -+++ openjdk/jdk/make/sun/javazic/tzdata/VERSION -@@ -21,4 +21,4 @@ - # or visit www.oracle.com if you need additional information or have any - # questions. - # --tzdata2010i -+tzdata2010l ---- openjdk/jdk/make/sun/javazic/tzdata/africa -+++ openjdk/jdk/make/sun/javazic/tzdata/africa -@@ -316,8 +316,25 @@ - # and can be found by searching for "winter" in their search engine - # (at least today). - -+# From Alexander Krivenyshev (2010-07-20): -+# According to News from Egypt - Al-Masry Al-Youm Egypt's cabinet has -+# decided that Daylight Saving Time will not be used in Egypt during -+# Ramadan. -+# -+# Arabic translation: -+# "Clocks to go back during Ramadan--and then forward again" -+# -+# http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again -+# -+# or -+# -+# http://www.worldtimezone.com/dst_news/dst_news_egypt02.html -+# -+ - Rule Egypt 2008 only - Aug lastThu 23:00s 0 - - Rule Egypt 2009 only - Aug 20 23:00s 0 - -+Rule Egypt 2010 only - Aug 11 0:00 0 - -+Rule Egypt 2010 only - Sep 10 0:00 1:00 S - Rule Egypt 2010 max - Sep lastThu 23:00s 0 - - - # Zone NAME GMTOFF RULES FORMAT [UNTIL] ---- openjdk/jdk/make/sun/javazic/tzdata/asia -+++ openjdk/jdk/make/sun/javazic/tzdata/asia -@@ -2200,6 +2200,18 @@ - # "At 12:01am Friday, clocks in Israel and the West Bank will change to - # 1:01am, while Gaza clocks will change at 12:01am Saturday morning." - -+# From Steffen Thorsen (2010-08-11): -+# According to several sources, including -+# -+# http://www.maannews.net/eng/ViewDetails.aspx?ID=306795 -+# -+# the clocks were set back one hour at 2010-08-11 00:00:00 local time in -+# Gaza and the West Bank. -+# Some more background info: -+# -+# http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html -+# -+ - # The rules for Egypt are stolen from the `africa' file. - # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S - Rule EgyptAsia 1957 only - May 10 0:00 1:00 S -@@ -2220,6 +2232,7 @@ - Rule Palestine 2009 only - Mar lastFri 0:00 1:00 S - Rule Palestine 2010 max - Mar lastSat 0:01 1:00 S - Rule Palestine 2009 max - Sep Fri>=1 2:00 0 - -+Rule Palestine 2010 only - Aug 11 0:00 0 - - - # Zone NAME GMTOFF RULES FORMAT [UNTIL] - Zone Asia/Gaza 2:17:52 - LMT 1900 Oct ---- openjdk/jdk/make/sun/javazic/tzdata/australasia -+++ openjdk/jdk/make/sun/javazic/tzdata/australasia -@@ -368,10 +368,10 @@ - - # Micronesia - # Zone NAME GMTOFF RULES FORMAT [UNTIL] --Zone Pacific/Truk 10:07:08 - LMT 1901 -- 10:00 - TRUT # Truk Time --Zone Pacific/Ponape 10:32:52 - LMT 1901 # Kolonia -- 11:00 - PONT # Ponape Time -+Zone Pacific/Chuuk 10:07:08 - LMT 1901 -+ 10:00 - CHUT # Chuuk Time -+Zone Pacific/Pohnpei 10:32:52 - LMT 1901 # Kolonia -+ 11:00 - PONT # Pohnpei Time - Zone Pacific/Kosrae 10:51:56 - LMT 1901 - 11:00 - KOST 1969 Oct # Kosrae Time - 12:00 - KOST 1999 ---- openjdk/jdk/make/sun/javazic/tzdata/backward -+++ openjdk/jdk/make/sun/javazic/tzdata/backward -@@ -112,7 +112,9 @@ - Link America/Denver Navajo - Link Asia/Shanghai PRC - Link Pacific/Pago_Pago Pacific/Samoa --Link Pacific/Truk Pacific/Yap -+Link Pacific/Chuuk Pacific/Yap -+Link Pacific/Chuuk Pacific/Truk -+Link Pacific/Pohnpei Pacific/Ponape - Link Europe/Warsaw Poland - Link Europe/Lisbon Portugal - Link Asia/Taipei ROC ---- openjdk/jdk/make/sun/javazic/tzdata/europe -+++ openjdk/jdk/make/sun/javazic/tzdata/europe -@@ -1035,22 +1035,47 @@ - 2:00 EU EE%sT - - # Finland --# -+ - # From Hannu Strang (1994-09-25 06:03:37 UTC): - # Well, here in Helsinki we're just changing from summer time to regular one, - # and it's supposed to change at 4am... -+ -+# From Janne Snabb (2010-0715): - # --# From Paul Eggert (2006-03-22): --# Shanks & Pottenger say Finland has switched at 02:00 standard time --# since 1981. Go with Strang instead. -+# I noticed that the Finland data is not accurate for years 1981 and 1982. -+# During these two first trial years the DST adjustment was made one hour -+# earlier than in forthcoming years. Starting 1983 the adjustment was made -+# according to the central European standards. - # -+# This is documented in Heikki Oja: Aikakirja 2007, published by The Almanac -+# Office of University of Helsinki, ISBN 952-10-3221-9, available online (in -+# Finnish) at -+# -+# -+# http://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf -+# -+# -+# Page 105 (56 in PDF version) has a handy table of all past daylight savings -+# transitions. It is easy enough to interpret without Finnish skills. -+# -+# This is also confirmed by Finnish Broadcasting Company's archive at: -+# -+# -+# http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401 -+# -+# -+# The news clip from 1981 says that "the time between 2 and 3 o'clock does not -+# exist tonight." -+ - # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S - Rule Finland 1942 only - Apr 3 0:00 1:00 S - Rule Finland 1942 only - Oct 3 0:00 0 - -+Rule Finland 1981 1982 - Mar lastSun 2:00 1:00 S -+Rule Finland 1981 1982 - Sep lastSun 3:00 0 - - # Zone NAME GMTOFF RULES FORMAT [UNTIL] - Zone Europe/Helsinki 1:39:52 - LMT 1878 May 31 - 1:39:52 - HMT 1921 May # Helsinki Mean Time -- 2:00 Finland EE%sT 1981 Mar 29 2:00 -+ 2:00 Finland EE%sT 1983 - 2:00 EU EE%sT - - # Aaland Is ---- openjdk/jdk/make/sun/javazic/tzdata/leapseconds -+++ openjdk/jdk/make/sun/javazic/tzdata/leapseconds -@@ -82,9 +82,9 @@ - # FAX : 33 (0) 1 40 51 22 91 - # Internet : services.iers@obspm.fr - # --# Paris, 4 July 2009 -+# Paris, 14 July 2010 - # --# Bulletin C 38 -+# Bulletin C 40 - # - # To authorities responsible - # for the measurement and -@@ -92,9 +92,9 @@ - # - # INFORMATION ON UTC - TAI - # --# NO positive leap second will be introduced at the end of December 2009. -+# NO positive leap second will be introduced at the end of December 2010. - # The difference between Coordinated Universal Time UTC and the --# International Atomic Time TAI is : -+# International Atomic Time TAI is : - # - # from 2009 January 1, 0h UTC, until further notice : UTC-TAI = -34 s - # -@@ -104,6 +104,6 @@ - # will be no time step at the next possible date. - # - # Daniel GAMBIS --# Director -+# Director - # Earth Orientation Center of IERS - # Observatoire de Paris, France ---- openjdk/jdk/make/sun/javazic/tzdata/northamerica -+++ openjdk/jdk/make/sun/javazic/tzdata/northamerica -@@ -1346,6 +1346,83 @@ - # entry since our cutoff date of 1970, so we can move - # America/Coral_Harbour to the 'backward' file. - -+# From Mark Brader (2010-03-06): -+# -+# Currently the database has: -+# -+# # Ontario -+# -+# # From Paul Eggert (2006-07-09): -+# # Shanks & Pottenger write that since 1970 most of Ontario has been like -+# # Toronto. -+# # Thunder Bay skipped DST in 1973. -+# # Many smaller locales did not observe peacetime DST until 1974; -+# # Nipigon (EST) and Rainy River (CST) are the largest that we know of. -+# -+# In the (Toronto) Globe and Mail for Saturday, 1955-09-24, in the bottom -+# right corner of page 1, it says that Toronto will return to standard -+# time at 2 am Sunday morning (which agrees with the database), and that: -+# -+# The one-hour setback will go into effect throughout most of Ontario, -+# except in areas like Windsor which remains on standard time all year. -+# -+# Windsor is, of course, a lot larger than Nipigon. -+# -+# I only came across this incidentally. I don't know if Windsor began -+# observing DST when Detroit did, or in 1974, or on some other date. -+# -+# By the way, the article continues by noting that: -+# -+# Some cities in the United States have pushed the deadline back -+# three weeks and will change over from daylight saving in October. -+ -+# From Arthur David Olson (2010-07-17): -+# -+# "Standard Time and Time Zones in Canada" appeared in -+# The Journal of The Royal Astronomical Society of Canada, -+# volume 26, number 2 (February 1932) and, as of 2010-07-17, -+# was available at -+# -+# http://adsabs.harvard.edu/full/1932JRASC..26...49S -+# -+# -+# It includes the text below (starting on page 57): -+# -+# A list of the places in Canada using daylight saving time would -+# require yearly revision. From information kindly furnished by -+# the provincial governments and by the postmasters in many cities -+# and towns, it is found that the following places used daylight sav- -+# ing in 1930. The information for the province of Quebec is definite, -+# for the other provinces only approximate: -+# -+# Province Daylight saving time used -+# Prince Edward Island Not used. -+# Nova Scotia In Halifax only. -+# New Brunswick In St. John only. -+# Quebec In the following places: -+# Montreal Lachine -+# Quebec Mont-Royal -+# Levis Iberville -+# St. Lambert Cap de la Madeleine -+# Verdun Loretteville -+# Westmount Richmond -+# Outremont St. Jerome -+# Longueuil Greenfield Park -+# Arvida Waterloo -+# Chambly-Canton Beaulieu -+# Melbourne La Tuque -+# St. Theophile Buckingham -+# Ontario Used generally in the cities and towns along -+# the southerly part of the province. Not -+# used in the northwesterlhy part. -+# Manitoba Not used. -+# Saskatchewan In Regina only. -+# Alberta Not used. -+# British Columbia Not used. -+# -+# With some exceptions, the use of daylight saving may be said to be limited -+# to those cities and towns lying between Quebec city and Windsor, Ont. -+ - # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S - Rule Toronto 1919 only - Mar 30 23:30 1:00 D - Rule Toronto 1919 only - Oct 26 0:00 0 S -@@ -2111,7 +2188,44 @@ - -8:00 - PST 1970 - -7:00 Mexico M%sT 1999 - -7:00 - MST -+ -+# From Alexander Krivenyshev (2010-04-21): -+# According to news, Bahía de Banderas (Mexican state of Nayarit) -+# changed time zone UTC-7 to new time zone UTC-6 on April 4, 2010 (to -+# share the same time zone as nearby city Puerto Vallarta, Jalisco). -+# -+# (Spanish) -+# Bahía de Banderas homologa su horario al del centro del -+# país, a partir de este domingo -+# -+# http://www.nayarit.gob.mx/notes.asp?id=20748 -+# -+# -+# Bahía de Banderas homologa su horario con el del Centro del -+# País -+# -+# http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50" -+# -+# -+# (English) -+# Puerto Vallarta and Bahía de Banderas: One Time Zone -+# -+# http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml -+# -+# -+# or -+# -+# http://www.worldtimezone.com/dst_news/dst_news_mexico08.html -+# -+# -+# "Mexico's Senate approved the amendments to the Mexican Schedule System that -+# will allow Bahía de Banderas and Puerto Vallarta to share the same time -+# zone ..." - # Baja California Sur, Nayarit, Sinaloa -+ -+# From Arthur David Olson (2010-05-01): -+# Use "Bahia_Banderas" to keep the name to fourteen characters. -+ - Zone America/Mazatlan -7:05:40 - LMT 1921 Dec 31 23:54:20 - -7:00 - MST 1927 Jun 10 23:00 - -6:00 - CST 1930 Nov 15 -@@ -2122,6 +2236,19 @@ - -7:00 - MST 1949 Jan 14 - -8:00 - PST 1970 - -7:00 Mexico M%sT -+ -+Zone America/Bahia_Banderas -7:01:00 - LMT 1921 Dec 31 23:59:00 -+ -7:00 - MST 1927 Jun 10 23:00 -+ -6:00 - CST 1930 Nov 15 -+ -7:00 - MST 1931 May 1 23:00 -+ -6:00 - CST 1931 Oct -+ -7:00 - MST 1932 Apr 1 -+ -6:00 - CST 1942 Apr 24 -+ -7:00 - MST 1949 Jan 14 -+ -8:00 - PST 1970 -+ -7:00 Mexico M%sT 2010 Apr 4 2:00 -+ -6:00 Mexico C%sT -+ - # Baja California (near US border) - Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56 - -7:00 - MST 1924 ---- openjdk/jdk/make/sun/javazic/tzdata/zone.tab -+++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab -@@ -199,8 +199,8 @@ - FI +6010+02458 Europe/Helsinki - FJ -1808+17825 Pacific/Fiji - FK -5142-05751 Atlantic/Stanley --FM +0725+15147 Pacific/Truk Truk (Chuuk) and Yap --FM +0658+15813 Pacific/Ponape Ponape (Pohnpei) -+FM +0725+15147 Pacific/Chuuk Chuuk (Truk) and Yap -+FM +0658+15813 Pacific/Pohnpei Pohnpei (Ponape) - FM +0519+16259 Pacific/Kosrae Kosrae - FO +6201-00646 Atlantic/Faroe - FR +4852+00220 Europe/Paris -@@ -310,6 +310,7 @@ - MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora - MX +3232-11701 America/Tijuana US Pacific Time - Baja California near US border - MX +3018-11452 America/Santa_Isabel Mexican Pacific Time - Baja California away from US border -+MX +2048-10515 America/Bahia_Banderas Mexican Central Time - Bahia de Banderas - MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia - MY +0133+11020 Asia/Kuching Sabah & Sarawak - MZ -2558+03235 Africa/Maputo ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java -@@ -75,6 +75,8 @@ - "Central European Summer Time", "CEST"}; - String CHAST[] = new String[] {"Chatham Standard Time", "CHAST", - "Chatham Daylight Time", "CHADT"}; -+ String CHUT[] = new String[] {"Chuuk Time", "CHUT", -+ "Chuuk Summer Time", "CHUST"}; - String CIT[] = new String[] {"Central Indonesia Time", "CIT", - "Central Indonesia Summer Time", "CIST"}; - String CLT[] = new String[] {"Chile Time", "CLT", -@@ -153,6 +155,8 @@ - "Pitcairn Daylight Time", "PDT"}; - String PKT[] = new String[] {"Pakistan Time", "PKT", - "Pakistan Summer Time", "PKST"}; -+ String PONT[] = new String[] {"Pohnpei Time", "PONT", -+ "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"Pacific Standard Time", "PST", - "Pacific Daylight Time", "PDT"}; - String RST[] = new String[] {"Eastern Standard Time", "EST", -@@ -169,8 +173,6 @@ - "Eastern Summer Time (Tasmania)", "EST"}; - String TMT[] = new String[] {"Turkmenistan Time", "TMT", - "Turkmenistan Summer Time", "TMST"}; -- String TRUT[] = new String[] {"Truk Time", "TRUT", -- "Truk Summer Time", "TRUST"}; - String ULAT[]= new String[] {"Ulaanbaatar Time", "ULAT", - "Ulaanbaatar Summer Time", "ULAST"}; - String WART[] = new String[] {"Western Argentine Time", "WART", -@@ -309,6 +311,7 @@ - {"America/Atikokan", EST}, - {"America/Atka", HAST}, - {"America/Bahia", BRT}, -+ {"America/Bahia_Banderas", CST}, - {"America/Barbados", AST}, - {"America/Belem", BRT}, - {"America/Belize", CST}, -@@ -755,6 +758,7 @@ - {"Pacific/Apia", WST_SAMOA}, - {"Pacific/Auckland", NZST}, - {"Pacific/Chatham", CHAST}, -+ {"Pacific/Chuuk", CHUT}, - {"Pacific/Easter", EASTER}, - {"Pacific/Efate", new String[] {"Vanuatu Time", "VUT", - "Vanuatu Summer Time", "VUST"}}, -@@ -793,8 +797,8 @@ - {"Pacific/Palau", new String[] {"Palau Time", "PWT", - "Palau Summer Time", "PWST"}}, - {"Pacific/Pitcairn", PITCAIRN}, -- {"Pacific/Ponape", new String[] {"Ponape Time", "PONT", -- "Ponape Summer Time", "PONST"}}, -+ {"Pacific/Pohnpei", PONT}, -+ {"Pacific/Ponape", PONT}, - {"Pacific/Port_Moresby", new String[] {"Papua New Guinea Time", "PGT", - "Papua New Guinea Summer Time", "PGST"}}, - {"Pacific/Rarotonga", new String[] {"Cook Is. Time", "CKT", -@@ -807,12 +811,12 @@ - "Gilbert Is. Summer Time", "GILST"}}, - {"Pacific/Tongatapu", new String[] {"Tonga Time", "TOT", - "Tonga Summer Time", "TOST"}}, -- {"Pacific/Truk", TRUT}, -+ {"Pacific/Truk", CHUT}, - {"Pacific/Wake", new String[] {"Wake Time", "WAKT", - "Wake Summer Time", "WAKST"}}, - {"Pacific/Wallis", new String[] {"Wallis & Futuna Time", "WFT", - "Wallis & Futuna Summer Time", "WFST"}}, -- {"Pacific/Yap", TRUT}, -+ {"Pacific/Yap", CHUT}, - {"Poland", CET}, - {"PRC", CTT}, - {"PST8PDT", PST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java -@@ -75,6 +75,8 @@ - "Mitteleurop\u00e4ische Sommerzeit", "MESZ"}; - String CHAST[] = new String[] {"Chatham Normalzeit", "CHAST", - "Chatham Sommerzeit", "CHADT"}; -+ String CHUT[] = new String[] {"Chuuk Time", "CHUT", -+ "Chuuk Summer Time", "CHUST"}; - String CIT[] = new String[] {"Zentralindonesische Zeit", "CIT", - "Zentralindonesische Sommerzeit", "CIST"}; - String CLT[] = new String[] {"Chilenische Zeit", "CLT", -@@ -153,6 +155,8 @@ - "Pitcairn Sommerzeit", "PDT"}; - String PKT[] = new String[] {"Pakistanische Zeit", "PKT", - "Pakistanische Sommerzeit", "PKST"}; -+ String PONT[] = new String[] {"Pohnpei Time", "PONT", -+ "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"Pazifische Normalzeit", "PST", - "Pazifische Sommerzeit", "PDT"}; - String RST[] = new String[] {"\u00d6stliche Normalzeit", "EST", -@@ -169,8 +173,6 @@ - "\u00d6stliche Sommerzeit (Tasmanien)", "EST"}; - String TMT[] = new String[] {"Turkmenische Zeit", "TMT", - "Turkmenische Sommerzeit", "TMST"}; -- String TRUT[] = new String[] {"Truk Zeit", "TRUT", -- "Truk Sommerzeit", "TRUST"}; - String ULAT[]= new String[] {"Ulaanbaatar Zeit", "ULAT", - "Ulaanbaatar Sommerzeit", "ULAST"}; - String WART[] = new String[] {"Westargentinische Zeit", "WART", -@@ -309,6 +311,7 @@ - {"America/Atikokan", EST}, - {"America/Atka", HAST}, - {"America/Bahia", BRT}, -+ {"America/Bahia_Banderas", CST}, - {"America/Barbados", AST}, - {"America/Belem", BRT}, - {"America/Belize", CST}, -@@ -446,10 +449,13 @@ - {"America/Winnipeg", CST}, - {"America/Yakutat", AKST}, - {"America/Yellowknife", MST}, -+ {"Antarctica/Casey", WST_AUS}, - {"Antarctica/Davis", new String[] {"Davis Zeit", "DAVT", - "Davis Sommerzeit", "DAVST"}}, - {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville Zeit", "DDUT", - "Dumont-d'Urville Sommerzeit", "DDUST"}}, -+ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", -+ "Macquarie Island Summer Time", "MIST"}}, - {"Antarctica/Mawson", new String[] {"Mawson Zeit", "MAWT", - "Mawson Sommerzeit", "MAWST"}}, - {"Antarctica/McMurdo", NZST}, -@@ -752,6 +758,7 @@ - {"Pacific/Apia", WST_SAMOA}, - {"Pacific/Auckland", NZST}, - {"Pacific/Chatham", CHAST}, -+ {"Pacific/Chuuk", CHUT}, - {"Pacific/Easter", EASTER}, - {"Pacific/Efate", new String[] {"Vanuatu Zeit", "VUT", - "Vanuatu Sommerzeit", "VUST"}}, -@@ -790,8 +797,8 @@ - {"Pacific/Palau", new String[] {"Palau Zeit", "PWT", - "Palau Sommerzeit", "PWST"}}, - {"Pacific/Pitcairn", PITCAIRN}, -- {"Pacific/Ponape", new String[] {"Ponape Zeit", "PONT", -- "Ponape Sommerzeit", "PONST"}}, -+ {"Pacific/Pohnpei", PONT}, -+ {"Pacific/Ponape", PONT}, - {"Pacific/Port_Moresby", new String[] {"Papua-Neuguinea Zeit", "PGT", - "Papua-Neuguinea Sommerzeit", "PGST"}}, - {"Pacific/Rarotonga", new String[] {"Cook-Inseln Zeit", "CKT", -@@ -804,12 +811,12 @@ - "Gilbert-Inseln Sommerzeit", "GILST"}}, - {"Pacific/Tongatapu", new String[] {"Tonga Zeit", "TOT", - "Tonga Sommerzeit", "TOST"}}, -- {"Pacific/Truk", TRUT}, -+ {"Pacific/Truk", CHUT}, - {"Pacific/Wake", new String[] {"Wake Zeit", "WAKT", - "Wake Sommerzeit", "WAKST"}}, - {"Pacific/Wallis", new String[] {"Wallis u. Futuna Zeit", "WFT", - "Wallis u. Futuna Sommerzeit", "WFST"}}, -- {"Pacific/Yap", TRUT}, -+ {"Pacific/Yap", CHUT}, - {"Poland", CET}, - {"PRC", CTT}, - {"PST8PDT", PST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java -@@ -75,6 +75,8 @@ - "Hora de verano de Europa Central", "CEST"}; - String CHAST[] = new String[] {"Hora est\u00e1ndar de Chatham", "CHAST", - "Hora de verano de Chatham", "CHADT"}; -+ String CHUT[] = new String[] {"Chuuk Time", "CHUT", -+ "Chuuk Summer Time", "CHUST"}; - String CIT[] = new String[] {"Hora de Indonesia Central", "CIT", - "Hora de verano de Indonesia Central", "CIST"}; - String CLT[] = new String[] {"Hora de Chile", "CLT", -@@ -153,6 +155,8 @@ - "Hora de verano de Pitcairn", "PDT"}; - String PKT[] = new String[] {"Hora de Pakist\u00e1n", "PKT", - "Hora de verano de Pakist\u00e1n", "PKST"}; -+ String PONT[] = new String[] {"Pohnpei Time", "PONT", -+ "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"Hora est\u00e1ndar del Pac\u00edfico", "PST", - "Hora de verano del Pac\u00edfico", "PDT"}; - String RST[] = new String[] {"Hora est\u00e1ndar Oriental", "EST", -@@ -169,8 +173,6 @@ - "Hora de verano del Este (Tasmania)", "EST"}; - String TMT[] = new String[] {"Hora de Turkmenist\u00e1n", "TMT", - "Hora de verano de Turkmenist\u00e1n", "TMST"}; -- String TRUT[] =new String[] {"Hora de Truk", "TRUT", -- "Hora de verano de Truk", "TRUST"}; - String ULAT[]= new String[] {"Hora de Ulan Bator", "ULAT", - "Hora de verano de Ulan Bator", "ULAST"}; - String WART[] = new String[] {"Hora de Argentina Occidental", "WART", -@@ -309,6 +311,7 @@ - {"America/Atikokan", EST}, - {"America/Atka", HAST}, - {"America/Bahia", BRT}, -+ {"America/Bahia_Banderas", CST}, - {"America/Barbados", AST}, - {"America/Belem", BRT}, - {"America/Belize", CST}, -@@ -446,10 +449,13 @@ - {"America/Winnipeg", CST}, - {"America/Yakutat", AKST}, - {"America/Yellowknife", MST}, -+ {"Antarctica/Casey", WST_AUS}, - {"Antarctica/Davis", new String[] {"Hora de Davis", "DAVT", - "Hora de verano de Davis", "DAVST"}}, - {"Antarctica/DumontDUrville", new String[] {"Hora de Dumont-d'Urville", "DDUT", - "Hora de verano de Dumont-d'Urville", "DDUST"}}, -+ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", -+ "Macquarie Island Summer Time", "MIST"}}, - {"Antarctica/Mawson", new String[] {"Hora de Mawson", "MAWT", - "Hora de verano de Mawson", "MAWST"}}, - {"Antarctica/McMurdo", NZST}, -@@ -533,7 +539,6 @@ - "Hora de verano de Filipinas", "PHST"}}, - {"Asia/Muscat", GST}, - {"Asia/Nicosia", EET}, -- - {"Asia/Novokuznetsk", NOVT}, - {"Asia/Novosibirsk", NOVT}, - {"Asia/Oral", new String[] {"Hora de Uralsk", "ORAT", -@@ -753,6 +758,7 @@ - {"Pacific/Apia", WST_SAMOA}, - {"Pacific/Auckland", NZST}, - {"Pacific/Chatham", CHAST}, -+ {"Pacific/Chuuk", CHUT}, - {"Pacific/Easter", EASTER}, - {"Pacific/Efate", new String[] {"Hora de Vanuatu", "VUT", - "Hora de verano de Vanuatu", "VUST"}}, -@@ -791,8 +797,8 @@ - {"Pacific/Palau", new String[] {"Hora de Palau", "PWT", - "Hora de verano de Palau", "PWST"}}, - {"Pacific/Pitcairn", PITCAIRN}, -- {"Pacific/Ponape", new String[] {"Hora de Ponape", "PONT", -- "Hora de verano de Ponape", "PONST"}}, -+ {"Pacific/Pohnpei", PONT}, -+ {"Pacific/Ponape", PONT}, - {"Pacific/Port_Moresby", new String[] {"Hora de Pap\u00faa-Nueva Guinea", "PGT", - "Hora de verano de Pap\u00faa-Nueva Guinea", "PGST"}}, - {"Pacific/Rarotonga", new String[] {"Hora de las islas Cook", "CKT", -@@ -805,12 +811,12 @@ - "Hora de verano de las islas Gilbert", "GILST"}}, - {"Pacific/Tongatapu", new String[] {"Hora de Tonga", "TOT", - "Hora de verano de Tonga", "TOST"}}, -- {"Pacific/Truk", TRUT}, -+ {"Pacific/Truk", CHUT}, - {"Pacific/Wake", new String[] {"Hora de Wake", "WAKT", - "Hora de verano de Wake", "WAKST"}}, - {"Pacific/Wallis", new String[] {"Hora de Wallis y Futuna", "WFT", - "Hora de verano de Wallis y Futuna", "WFST"}}, -- {"Pacific/Yap", TRUT}, -+ {"Pacific/Yap", CHUT}, - {"Poland", CET}, - {"PRC", CTT}, - {"PST8PDT", PST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java -@@ -75,6 +75,8 @@ - "Heure d'\u00e9t\u00e9 d'Europe centrale", "CEST"} ; - String CHAST[] = new String[] {"Heure standard de Chatham", "CHAST", - "Heure avanc\u00e9e de Chatham", "CHADT"}; -+ String CHUT[] = new String[] {"Chuuk Time", "CHUT", -+ "Chuuk Summer Time", "CHUST"}; - String CIT[] = new String[] {"Heure d'Indon\u00e9sie centrale", "CIT", - "Heure d'\u00e9t\u00e9 d'Indon\u00e9sie centrale", "CIST"}; - String CLT[] = new String[] {"Heure du Chili", "CLT", -@@ -153,6 +155,8 @@ - "heure avanc\u00e9e des Pitcairn", "PDT"}; - String PKT[] = new String[] {"Heure du Pakistan", "PKT", - "Heure d'\u00e9t\u00e9 du Pakistan", "PKST"} ; -+ String PONT[] = new String[] {"Pohnpei Time", "PONT", -+ "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"Heure normale du Pacifique", "PST", - "Heure avanc\u00e9e du Pacifique", "PDT"} ; - String RST[] = new String[] {"Heure normale de l'Est", "EST", -@@ -169,8 +173,6 @@ - "Heure d'\u00e9t\u00e9 d'Australie orientale (Tasmanie)", "EST"}; - String TMT[] = new String[] {"Heure du Turkm\u00e9nistan", "TMT", - "Heure d'\u00e9t\u00e9 du Turkm\u00e9nistan", "TMST"} ; -- String TRUT[] = new String[] {"Heure de Truk", "TRUT", -- "Heure d'\u00e9t\u00e9 de Truk", "TRUST"}; - String ULAT[]= new String[] {"Heure de l'Ulaanbaatar", "ULAT", - "Heure d'\u00e9t\u00e9 de l'Ulaanbaatar", "ULAST"} ; - String WART[] = new String[] {"Heure D'Argentine de l'Ouest", "WART", -@@ -309,6 +311,7 @@ - {"America/Atikokan", EST}, - {"America/Atka", HAST}, - {"America/Bahia", BRT}, -+ {"America/Bahia_Banderas", CST}, - {"America/Barbados", AST}, - {"America/Belem", BRT}, - {"America/Belize", CST}, -@@ -446,10 +449,13 @@ - {"America/Winnipeg", CST}, - {"America/Yakutat", AKST}, - {"America/Yellowknife", MST}, -+ {"Antarctica/Casey", WST_AUS}, - {"Antarctica/Davis", new String[] {"Heure de Davis", "DAVT", - "Heure d'\u00e9t\u00e9 de Davis", "DAVST"}}, - {"Antarctica/DumontDUrville", new String[] {"Heure de Dumont-d'Urville", "DDUT", - "Heure d'\u00e9t\u00e9 de Dumont-d'Urville", "DDUST"}}, -+ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", -+ "Macquarie Island Summer Time", "MIST"}}, - {"Antarctica/Mawson", new String[] {"Heure de Mawson", "MAWT", - "Heure d'\u00e9t\u00e9 de Mawson", "MAWST"}}, - {"Antarctica/McMurdo", NZST}, -@@ -752,6 +758,7 @@ - {"Pacific/Apia", WST_SAMOA}, - {"Pacific/Auckland", NZST}, - {"Pacific/Chatham", CHAST}, -+ {"Pacific/Chuuk", CHUT}, - {"Pacific/Easter", EASTER}, - {"Pacific/Efate", new String[] {"Heure du Vanuatu", "VUT", - "Heure d'\u00e9t\u00e9 du Vanuatu", "VUST"}}, -@@ -790,8 +797,8 @@ - {"Pacific/Palau", new String[] {"Heure de Palaos", "PWT", - "Heure d'\u00e9t\u00e9 de Palaos", "PWST"}}, - {"Pacific/Pitcairn", PITCAIRN}, -- {"Pacific/Ponape", new String[] {"Heure de Ponap\u00e9", "PONT", -- "Heure d'\u00e9t\u00e9 de Ponap\u00e9", "PONST"}}, -+ {"Pacific/Pohnpei", PONT}, -+ {"Pacific/Ponape", PONT}, - {"Pacific/Port_Moresby", new String[] {"Heure de Papouasie-Nouvelle-Guin\u00e9e", "PGT", - "Heure d'\u00e9t\u00e9 de de Papouasie-Nouvelle-Guin\u00e9e", "PGST"}}, - {"Pacific/Rarotonga", new String[] {"Heure des \u00celes Cook", "CKT", -@@ -804,12 +811,12 @@ - "Heure d'\u00e9t\u00e9 de Kiribati", "GILST"}}, - {"Pacific/Tongatapu", new String[] {"Heure de Tonga", "TOT", - "Heure d'\u00e9t\u00e9 de Tonga", "TOST"}}, -- {"Pacific/Truk", TRUT}, -+ {"Pacific/Truk", CHUT}, - {"Pacific/Wake", new String[] {"Heure de Wake", "WAKT", - "Heure d'\u00e9t\u00e9 de Wake", "WAKST"}}, - {"Pacific/Wallis", new String[] {"Heure de Wallis et Futuna", "WFT", - "Heure d'\u00e9t\u00e9 de Wallis et Futuna", "WFST"}}, -- {"Pacific/Yap", TRUT}, -+ {"Pacific/Yap", CHUT}, - {"Poland", CET}, - {"PRC", CTT}, - {"PST8PDT", PST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java -@@ -75,6 +75,8 @@ - "Ora estiva dell'Europa centrale", "CEST"}; - String CHAST[] = new String[] {"Ora di Chatham standard", "CHAST", - "Ora legale di Chatham", "CHADT"}; -+ String CHUT[] = new String[] {"Chuuk Time", "CHUT", -+ "Chuuk Summer Time", "CHUST"}; - String CIT[] = new String[] {"Ora dell'Indonesia centrale", "CIT", - "Ora estiva dell'Indonesia centrale", "CIST"}; - String CLT[] = new String[] {"Ora del Cile", "CLT", -@@ -153,6 +155,8 @@ - "Ora legale di Pitcairn", "PDT"}; - String PKT[] = new String[] {"Ora del Pakistan", "PKT", - "Ora estiva del Pakistan", "PKST"}; -+ String PONT[] = new String[] {"Pohnpei Time", "PONT", -+ "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"Ora solare della costa occidentale USA", "PST", - "Ora legale della costa occidentale USA", "PDT"}; - String RST[] = new String[] {"Ora solare USA orientale", "EST", -@@ -169,8 +173,6 @@ - "Ora estiva orientale (Tasmania)", "EST"}; - String TMT[] = new String[] {"Ora del Turkmenistan", "TMT", - "Ora estiva del Turkmenistan", "TMST"}; -- String TRUT[] = new String[] {"Ora di Truk", "TRUT", -- "Ora estiva di Truk", "TRUST"}; - String ULAT[]= new String[] {"Ora di Ulaanbaatar", "ULAT", - "Ora estiva di Ulaanbaatar", "ULAST"}; - String WART[] = new String[] {"Ora dell'Argentina occidentale", "WART", -@@ -309,6 +311,7 @@ - {"America/Atikokan", EST}, - {"America/Atka", HAST}, - {"America/Bahia", BRT}, -+ {"America/Bahia_Banderas", CST}, - {"America/Barbados", AST}, - {"America/Belem", BRT}, - {"America/Belize", CST}, -@@ -446,10 +449,13 @@ - {"America/Winnipeg", CST}, - {"America/Yakutat", AKST}, - {"America/Yellowknife", MST}, -+ {"Antarctica/Casey", WST_AUS}, - {"Antarctica/Davis", new String[] {"Ora di Davis", "DAVT", - "Ora estiva di Davis", "DAVST"}}, - {"Antarctica/DumontDUrville", new String[] {"Ora di Dumont-d'Urville", "DDUT", - "Ora estiva di Dumont-d'Urville", "DDUST"}}, -+ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", -+ "Macquarie Island Summer Time", "MIST"}}, - {"Antarctica/Mawson", new String[] {"Ora di Mawson", "MAWT", - "Ora estiva di Mawson", "MAWST"}}, - {"Antarctica/McMurdo", NZST}, -@@ -752,6 +758,7 @@ - {"Pacific/Apia", WST_SAMOA}, - {"Pacific/Auckland", NZST}, - {"Pacific/Chatham", CHAST}, -+ {"Pacific/Chuuk", CHUT}, - {"Pacific/Easter", EASTER}, - {"Pacific/Efate", new String[] {"Ora di Vanuatu", "VUT", - "Ora estiva di Vanuatu", "VUST"}}, -@@ -790,8 +797,8 @@ - {"Pacific/Palau", new String[] {"Ora di Palau", "PWT", - "Ora estiva di Palau", "PWST"}}, - {"Pacific/Pitcairn", PITCAIRN}, -- {"Pacific/Ponape", new String[] {"Ora di Ponape", "PONT", -- "Ora estiva di Ponape", "PONST"}}, -+ {"Pacific/Pohnpei", PONT}, -+ {"Pacific/Ponape", PONT}, - {"Pacific/Port_Moresby", new String[] {"Ora di Papua Nuova Guinea", "PGT", - "Ora estiva di Papua Nuova Guinea", "PGST"}}, - {"Pacific/Rarotonga", new String[] {"Ora delle Isole Cook", "CKT", -@@ -804,12 +811,12 @@ - "Ora estiva delle Isole Gilbert", "GILST"}}, - {"Pacific/Tongatapu", new String[] {"Ora di Tonga", "TOT", - "Ora estiva di Tonga", "TOST"}}, -- {"Pacific/Truk", TRUT}, -+ {"Pacific/Truk", CHUT}, - {"Pacific/Wake", new String[] {"Ora di Wake", "WAKT", - "Ora estiva di Wake", "WAKST"}}, - {"Pacific/Wallis", new String[] {"Ora di Wallis e Futuna", "WFT", - "Ora estiva di Wallis e Futuna", "WFST"}}, -- {"Pacific/Yap", TRUT}, -+ {"Pacific/Yap", CHUT}, - {"Poland", CET}, - {"PRC", CTT}, - {"PST8PDT", PST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java -@@ -75,6 +75,8 @@ - "\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "CEST"}; - String CHAST[] = new String[] {"\u30c1\u30e3\u30bf\u30e0\u6a19\u6e96\u6642", "CHAST", - "\u30c1\u30e3\u30bf\u30e0\u590f\u6642\u9593", "CHADT"}; -+ String CHUT[] = new String[] {"Chuuk Time", "CHUT", -+ "Chuuk Summer Time", "CHUST"}; - String CIT[] = new String[] {"\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "CIT", - "\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "CIST"}; - String CLT[] = new String[] {"\u30c1\u30ea\u6642\u9593", "CLT", -@@ -153,6 +155,8 @@ - "\u30d4\u30c8\u30b1\u30eb\u30f3\u5cf6\u590f\u6642\u9593", "PDT"}; - String PKT[] = new String[] {"\u30d1\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "PKT", - "\u30d1\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "PKST"}; -+ String PONT[] = new String[] {"Pohnpei Time", "PONT", -+ "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642", "PST", - "\u592a\u5e73\u6d0b\u590f\u6642\u9593", "PDT"}; - String RST[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642", "EST", -@@ -169,8 +173,6 @@ - "\u6771\u90e8\u590f\u6642\u9593 (\u30bf\u30b9\u30de\u30cb\u30a2)", "EST"}; - String TMT[] = new String[] {"\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u6642\u9593", "TMT", - "\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u590f\u6642\u9593", "TMST"}; -- String TRUT[] = new String[] {"\u30c8\u30e9\u30c3\u30af\u6642\u9593", "TRUT", -- "\u30c8\u30e9\u30c3\u30af\u590f\u6642\u9593", "TRUST"}; - String ULAT[]= new String[] {"\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u6642\u9593", "ULAT", - "\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u590f\u6642\u9593", "ULAST"}; - String WART[] = new String[] {"\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "WART", -@@ -309,6 +311,7 @@ - {"America/Atikokan", EST}, - {"America/Atka", HAST}, - {"America/Bahia", BRT}, -+ {"America/Bahia_Banderas", CST}, - {"America/Barbados", AST}, - {"America/Belem", BRT}, - {"America/Belize", CST}, -@@ -446,10 +449,13 @@ - {"America/Winnipeg", CST}, - {"America/Yakutat", AKST}, - {"America/Yellowknife", MST}, -+ {"Antarctica/Casey", WST_AUS}, - {"Antarctica/Davis", new String[] {"\u30c7\u30a4\u30d3\u30b9\u6642\u9593", "DAVT", - "\u30c7\u30a4\u30d3\u30b9\u590f\u6642\u9593", "DAVST"}}, - {"Antarctica/DumontDUrville", new String[] {"\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u6642\u9593", "DDUT", - "\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u590f\u6642\u9593", "DDUST"}}, -+ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", -+ "Macquarie Island Summer Time", "MIST"}}, - {"Antarctica/Mawson", new String[] {"\u30e2\u30fc\u30bd\u30f3\u6642\u9593", "MAWT", - "\u30e2\u30fc\u30bd\u30f3\u590f\u6642\u9593", "MAWST"}}, - {"Antarctica/McMurdo", NZST}, -@@ -752,6 +758,7 @@ - {"Pacific/Apia", WST_SAMOA}, - {"Pacific/Auckland", NZST}, - {"Pacific/Chatham", CHAST}, -+ {"Pacific/Chuuk", CHUT}, - {"Pacific/Easter", EASTER}, - {"Pacific/Efate", new String[] {"\u30d0\u30cc\u30a2\u30c4\u6642\u9593", "VUT", - "\u30d0\u30cc\u30a2\u30c4\u590f\u6642\u9593", "VUST"}}, -@@ -790,8 +797,8 @@ - {"Pacific/Palau", new String[] {"\u30d1\u30e9\u30aa\u6642\u9593", "PWT", - "\u30d1\u30e9\u30aa\u590f\u6642\u9593", "PWST"}}, - {"Pacific/Pitcairn", PITCAIRN}, -- {"Pacific/Ponape", new String[] {"\u30dd\u30ca\u30da\u6642\u9593", "PONT", -- "\u30dd\u30ca\u30da\u590f\u6642\u9593", "PONST"}}, -+ {"Pacific/Pohnpei", PONT}, -+ {"Pacific/Ponape", PONT}, - {"Pacific/Port_Moresby", new String[] {"\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2\u6642\u9593", "PGT", - "\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2\u590f\u6642\u9593", "PGST"}}, - {"Pacific/Rarotonga", new String[] {"\u30af\u30c3\u30af\u8af8\u5cf6\u6642\u9593", "CKT", -@@ -804,12 +811,12 @@ - "\u30ae\u30eb\u30d0\u30fc\u30c8\u8af8\u5cf6\u590f\u6642\u9593", "GILST"}}, - {"Pacific/Tongatapu", new String[] {"\u30c8\u30f3\u30ac\u6642\u9593", "TOT", - "\u30c8\u30f3\u30ac\u590f\u6642\u9593", "TOST"}}, -- {"Pacific/Truk", TRUT}, -+ {"Pacific/Truk", CHUT}, - {"Pacific/Wake", new String[] {"\u30a6\u30a7\u30fc\u30af\u6642\u9593", "WAKT", - "\u30a6\u30a7\u30fc\u30af\u590f\u6642\u9593", "WAKST"}}, - {"Pacific/Wallis", new String[] {"\u30ef\u30ea\u30b9\u53ca\u3073\u30d5\u30c4\u30ca\u6642\u9593", "WFT", - "\u30ef\u30ea\u30b9\u53ca\u3073\u30d5\u30c4\u30ca\u590f\u6642\u9593", "WFST"}}, -- {"Pacific/Yap", TRUT}, -+ {"Pacific/Yap", CHUT}, - {"Poland", CET}, - {"PRC", CTT}, - {"PST8PDT", PST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java -@@ -75,6 +75,8 @@ - "\uc911\uc559 \uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CEST"}; - String CHAST[] = new String[] {"Chatham \ud45c\uc900\uc2dc", "CHAST", - "Chatham \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CHADT"}; -+ String CHUT[] = new String[] {"Chuuk Time", "CHUT", -+ "Chuuk Summer Time", "CHUST"}; - String CIT[] = new String[] {"\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "CIT", - "\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CIST"}; - String CLT[] = new String[] {"\uce60\ub808 \uc2dc\uac04", "CLT", -@@ -153,6 +155,8 @@ - "Pitcairn \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"}; - String PKT[] = new String[] {"\ud30c\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "PKT", - "\ud30c\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PKST"}; -+ String PONT[] = new String[] {"Pohnpei Time", "PONT", -+ "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc", "PST", - "\ud0dc\ud3c9\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"}; - String RST[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc", "EST", -@@ -169,8 +173,6 @@ - "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ud0dc\uc988\uba54\uc774\ub2c8\uc544)", "EST"}; - String TMT[] = new String[] {"\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc2dc\uac04", "TMT", - "\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TMST"}; -- String TRUT[] = new String[] {"\ud2b8\ub8e8\ud06c \uc2dc\uac04", "TRUT", -- "\ud2b8\ub8e8\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TRUST"}; - String ULAT[]= new String[] {"\uc6b8\ub780\ubc14\ud0c0\ub974 \uc2dc\uac04", "ULAT", - "\uc6b8\ub780\ubc14\ud0c0\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ULAST"}; - String WART[] = new String[] {"\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "WART", -@@ -309,6 +311,7 @@ - {"America/Atikokan", EST}, - {"America/Atka", HAST}, - {"America/Bahia", BRT}, -+ {"America/Bahia_Banderas", CST}, - {"America/Barbados", AST}, - {"America/Belem", BRT}, - {"America/Belize", CST}, -@@ -446,10 +449,13 @@ - {"America/Winnipeg", CST}, - {"America/Yakutat", AKST}, - {"America/Yellowknife", MST}, -+ {"Antarctica/Casey", WST_AUS}, - {"Antarctica/Davis", new String[] {"Davis \uc2dc\uac04", "DAVT", - "Davis \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "DAVST"}}, - {"Antarctica/DumontDUrville", new String[] {"\ub4a4\ubabd \ub4a4\ub974\ube4c \uc2dc\uac04", "DDUT", - "\ub4a4\ubabd \ub4a4\ub974\ube4c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "DDUST"}}, -+ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", -+ "Macquarie Island Summer Time", "MIST"}}, - {"Antarctica/Mawson", new String[] {"\ubaa8\uc2a8 \uc2dc\uac04", "MAWT", - "\ubaa8\uc2a8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MAWST"}}, - {"Antarctica/McMurdo", NZST}, -@@ -752,6 +758,7 @@ - {"Pacific/Apia", WST_SAMOA}, - {"Pacific/Auckland", NZST}, - {"Pacific/Chatham", CHAST}, -+ {"Pacific/Chuuk", CHUT}, - {"Pacific/Easter", EASTER}, - {"Pacific/Efate", new String[] {"\ube44\ub204\uc544\ud22c \uc2dc\uac04", "VUT", - "\ubc14\ub204\uc544\ud22c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VUST"}}, -@@ -790,8 +797,8 @@ - {"Pacific/Palau", new String[] {"\ud314\ub77c\uc6b0 \uc2dc\uac04", "PWT", - "\ud314\ub77c\uc6b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PWST"}}, - {"Pacific/Pitcairn", PITCAIRN}, -- {"Pacific/Ponape", new String[] {"\ud3ec\ub098\ud504 \uc2dc\uac04", "PONT", -- "\ud3ec\ub098\ud504 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PONST"}}, -+ {"Pacific/Pohnpei", PONT}, -+ {"Pacific/Ponape", PONT}, - {"Pacific/Port_Moresby", new String[] {"\ud30c\ud478\uc544\ub274\uae30\ub2c8 \uc2dc\uac04", "PGT", - "\ud30c\ud478\uc544\ub274\uae30\ub2c8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PGST"}}, - {"Pacific/Rarotonga", new String[] {"\ucfe0\ud06c \uad70\ub3c4 \uc2dc\uac04", "CKT", -@@ -804,12 +811,12 @@ - "\uae38\ubc84\ud2b8 \uad70\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GILST"}}, - {"Pacific/Tongatapu", new String[] {"\ud1b5\uac00 \uc2dc\uac04", "TOT", - "\ud1b5\uac00 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TOST"}}, -- {"Pacific/Truk", TRUT}, -+ {"Pacific/Truk", CHUT}, - {"Pacific/Wake", new String[] {"\uc6e8\uc774\ud06c \uc2dc\uac04", "WAKT", - "\uc6e8\uc774\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WAKST"}}, - {"Pacific/Wallis", new String[] {"\uc6d4\ub9ac\uc2a4 \ud6c4\ud22c\ub098 \uc2dc\uac04", "WFT", - "\uc6d4\ub9ac\uc2a4 \ud6c4\ud2b8\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WFST"}}, -- {"Pacific/Yap", TRUT}, -+ {"Pacific/Yap", CHUT}, - {"Poland", CET}, - {"PRC", CTT}, - {"PST8PDT", PST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java -@@ -75,6 +75,8 @@ - "Centraleuropeisk sommartid", "CEST"}; - String CHAST[] = new String[] {"Chatham, normaltid", "CHAST", - "Chatham, sommartid", "CHADT"}; -+ String CHUT[] = new String[] {"Chuuk Time", "CHUT", -+ "Chuuk Summer Time", "CHUST"}; - String CIT[] = new String[] {"Centralindonesisk tid", "CIT", - "Centralindonesisk sommartid", "CIST"}; - String CLT[] = new String[] {"Chile, normaltid", "CLT", -@@ -153,6 +155,8 @@ - "Pitcairn, sommartid", "PDT"}; - String PKT[] = new String[] {"Pakistan, normaltid", "PKT", - "Pakistan, sommartid", "PKST"}; -+ String PONT[] = new String[] {"Pohnpei Time", "PONT", -+ "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"Stilla havet, normaltid", "PST", - "Stilla havet, sommartid", "PDT"}; - String RST[] = new String[] {"Eastern, normaltid", "EST", -@@ -169,8 +173,6 @@ - "Eastern, sommartid (Tasmanien)", "EST"}; - String TMT[] = new String[] {"Turkmenistan, normaltid", "TMT", - "Turkmenistan, sommartid", "TMST"}; -- String TRUT[] = new String[] {"Truk, normaltid", "TRUT", -- "Truk, sommartid", "TRUST"}; - String ULAT[]= new String[] {"Ulaanbaatar, normaltid", "ULAT", - "Ulaanbaatar, sommartid", "ULAST"}; - String WART[] = new String[] {"V\u00e4stargentina, normaltid", "WART", -@@ -309,6 +311,7 @@ - {"America/Atikokan", EST}, - {"America/Atka", HAST}, - {"America/Bahia", BRT}, -+ {"America/Bahia_Banderas", CST}, - {"America/Barbados", AST}, - {"America/Belem", BRT}, - {"America/Belize", CST}, -@@ -446,10 +449,13 @@ - {"America/Winnipeg", CST}, - {"America/Yakutat", AKST}, - {"America/Yellowknife", MST}, -+ {"Antarctica/Casey", WST_AUS}, - {"Antarctica/Davis", new String[] {"Davis, normaltid", "DAVT", - "Davis, sommartid", "DAVST"}}, - {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville, normaltid", "DDUT", - "Dumont-d'Urville, sommartid", "DDUST"}}, -+ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", -+ "Macquarie Island Summer Time", "MIST"}}, - {"Antarctica/Mawson", new String[] {"Mawson, normaltid", "MAWT", - "Mawson, sommartid", "MAWST"}}, - {"Antarctica/McMurdo", NZST}, -@@ -752,6 +758,7 @@ - {"Pacific/Apia", WST_SAMOA}, - {"Pacific/Auckland", NZST}, - {"Pacific/Chatham", CHAST}, -+ {"Pacific/Chuuk", CHUT}, - {"Pacific/Easter", EASTER}, - {"Pacific/Efate", new String[] {"Vanuatu, normaltid", "VUT", - "Vanuatu, sommartid", "VUST"}}, -@@ -790,8 +797,8 @@ - {"Pacific/Palau", new String[] {"Palau, normaltid", "PWT", - "Palau, sommartid", "PWST"}}, - {"Pacific/Pitcairn", PITCAIRN}, -- {"Pacific/Ponape", new String[] {"Ponape, normaltid", "PONT", -- "Ponape, sommartid", "PONST"}}, -+ {"Pacific/Pohnpei", PONT}, -+ {"Pacific/Ponape", PONT}, - {"Pacific/Port_Moresby", new String[] {"Papua Nya Guinea, normaltid", "PGT", - "Papua Nya Guinea, sommartid", "PGST"}}, - {"Pacific/Rarotonga", new String[] {"Cook\u00f6arna, normaltid", "CKT", -@@ -804,12 +811,12 @@ - "Gilbert\u00f6arna, sommartid", "GILST"}}, - {"Pacific/Tongatapu", new String[] {"Tonga, normaltid", "TOT", - "Tonga, sommartid", "TOST"}}, -- {"Pacific/Truk", TRUT}, -+ {"Pacific/Truk", CHUT}, - {"Pacific/Wake", new String[] {"Wake, normaltid", "WAKT", - "Wake, sommartid", "WAKST"}}, - {"Pacific/Wallis", new String[] {"Wallis & Futuna, normaltid", "WFT", - "Wallis & Futuna, sommartid", "WFST"}}, -- {"Pacific/Yap", TRUT}, -+ {"Pacific/Yap", CHUT}, - {"Poland", CET}, - {"PRC", CTT}, - {"PST8PDT", PST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java -@@ -75,6 +75,8 @@ - "\u4e2d\u6b27\u590f\u4ee4\u65f6", "CEST"}; - String CHAST[] = new String[] {"\u67e5\u8428\u59c6\u6807\u51c6\u65f6\u95f4", "CHAST", - "\u67e5\u8428\u59c6\u590f\u4ee4\u65f6", "CHADT"}; -+ String CHUT[] = new String[] {"Chuuk Time", "CHUT", -+ "Chuuk Summer Time", "CHUST"}; - String CIT[] = new String[] {"\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "CIT", - "\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "CIST"}; - String CLT[] = new String[] {"\u667a\u5229\u65f6\u95f4", "CLT", -@@ -153,6 +155,8 @@ - "\u76ae\u7279\u5eb7\u5c9b\u590f\u4ee4\u65f6", "PDT"}; - String PKT[] = new String[] {"\u5df4\u57fa\u65af\u5766\u65f6\u95f4", "PKT", - "\u5df4\u57fa\u65af\u5766\u590f\u4ee4\u65f6", "PKST"}; -+ String PONT[] = new String[] {"Pohnpei Time", "PONT", -+ "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4", "PST", - "\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6", "PDT"}; - String RST[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4", "EST", -@@ -169,8 +173,6 @@ - "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u5854\u65af\u9a6c\u5c3c\u4e9a\uff09", "EST"}; - String TMT[] = new String[] {"\u571f\u5e93\u66fc\u65f6\u95f4", "TMT", - "\u571f\u5e93\u66fc\u590f\u4ee4\u65f6", "TMST"}; -- String TRUT[] = new String[] {"\u7279\u9c81\u514b\u65f6\u95f4", "TRUT", -- "\u7279\u9c81\u514b\u590f\u4ee4\u65f6", "TRUST"}; - String ULAT[]= new String[] {"\u5e93\u4f26\u65f6\u95f4", "ULAT", - "\u5e93\u4f26\u590f\u4ee4\u65f6", "ULAST"}; - String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u65f6\u95f4", "WART", -@@ -309,6 +311,7 @@ - {"America/Atikokan", EST}, - {"America/Atka", HAST}, - {"America/Bahia", BRT}, -+ {"America/Bahia_Banderas", CST}, - {"America/Barbados", AST}, - {"America/Belem", BRT}, - {"America/Belize", CST}, -@@ -446,10 +449,13 @@ - {"America/Winnipeg", CST}, - {"America/Yakutat", AKST}, - {"America/Yellowknife", MST}, -+ {"Antarctica/Casey", WST_AUS}, - {"Antarctica/Davis", new String[] {"\u6234\u7ef4\u65af\u65f6\u95f4", "DAVT", - "\u6234\u7ef4\u65af\u590f\u4ee4\u65f6", "DAVST"}}, - {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u65f6\u95f4", "DDUT", - "Dumont-d'Urville \u590f\u4ee4\u65f6", "DDUST"}}, -+ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", -+ "Macquarie Island Summer Time", "MIST"}}, - {"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u65f6\u95f4", "MAWT", - "\u83ab\u68ee\u590f\u4ee4\u65f6", "MAWST"}}, - {"Antarctica/McMurdo", NZST}, -@@ -752,6 +758,7 @@ - {"Pacific/Apia", WST_SAMOA}, - {"Pacific/Auckland", NZST}, - {"Pacific/Chatham", CHAST}, -+ {"Pacific/Chuuk", CHUT}, - {"Pacific/Easter", EASTER}, - {"Pacific/Efate", new String[] {"\u74e6\u5974\u963f\u56fe\u65f6\u95f4", "VUT", - "\u74e6\u5974\u963f\u56fe\u590f\u4ee4\u65f6", "VUST"}}, -@@ -790,8 +797,8 @@ - {"Pacific/Palau", new String[] {"\u5e1b\u7409\u65f6\u95f4", "PWT", - "\u5e1b\u7409\u590f\u4ee4\u65f6", "PWST"}}, - {"Pacific/Pitcairn", PITCAIRN}, -- {"Pacific/Ponape", new String[] {"Ponape \u65f6\u95f4", "PONT", -- "Ponape \u590f\u4ee4\u65f6", "PONST"}}, -+ {"Pacific/Pohnpei", PONT}, -+ {"Pacific/Ponape", PONT}, - {"Pacific/Port_Moresby", new String[] {"\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a\u65f6\u95f4", "PGT", - "\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a\u590f\u4ee4\u65f6", "PGST"}}, - {"Pacific/Rarotonga", new String[] {"\u5e93\u514b\u7fa4\u5c9b\u65f6\u95f4", "CKT", -@@ -804,12 +811,12 @@ - "\u5409\u4f2f\u7279\u7fa4\u5c9b\u590f\u4ee4\u65f6", "GILST"}}, - {"Pacific/Tongatapu", new String[] {"\u4e1c\u52a0\u65f6\u95f4", "TOT", - "\u4e1c\u52a0\u590f\u4ee4\u65f6", "TOST"}}, -- {"Pacific/Truk", TRUT}, -+ {"Pacific/Truk", CHUT}, - {"Pacific/Wake", new String[] {"\u5a01\u514b\u65f6\u95f4", "WAKT", - "\u5a01\u514b\u590f\u4ee4\u65f6", "WAKST"}}, - {"Pacific/Wallis", new String[] {"\u74e6\u5229\u65af\u53ca\u798f\u675c\u7eb3\u7fa4\u5c9b\u65f6\u95f4", "WFT", - "\u74e6\u5229\u65af\u53ca\u798f\u675c\u7eb3\u7fa4\u5c9b\u590f\u4ee4\u65f6", "WFST"}}, -- {"Pacific/Yap", TRUT}, -+ {"Pacific/Yap", CHUT}, - {"Poland", CET}, - {"PRC", CTT}, - {"PST8PDT", PST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java -@@ -75,6 +75,8 @@ - "\u4e2d\u6b50\u590f\u4ee4\u6642\u9593", "CEST"}; - String CHAST[] = new String[] {"\u67e5\u5766\u6a19\u6e96\u6642\u9593", "CHAST", - "\u67e5\u5766\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CHADT"}; -+ String CHUT[] = new String[] {"Chuuk Time", "CHUT", -+ "Chuuk Summer Time", "CHUST"}; - String CIT[] = new String[] {"\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "CIT", - "\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u590f\u4ee4\u6642\u9593", "CIST"}; - String CLT[] = new String[] {"\u667a\u5229\u6642\u9593", "CLT", -@@ -153,6 +155,8 @@ - "\u76ae\u7279\u5eb7\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"}; - String PKT[] = new String[] {"\u5df4\u57fa\u65af\u5766\u6642\u9593", "PKT", - "\u5df4\u57fa\u65af\u5766\u590f\u4ee4\u6642\u9593", "PKST"}; -+ String PONT[] = new String[] {"Pohnpei Time", "PONT", -+ "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642\u9593", "PST", - "\u592a\u5e73\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"}; - String RST[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593", "EST", -@@ -169,8 +173,6 @@ - "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u5854\u65af\u6885\u5c3c\u4e9e\u5cf6)", "EST"}; - String TMT[] = new String[] {"\u571f\u5eab\u66fc\u6642\u9593", "TMT", - "\u571f\u5eab\u66fc\u590f\u4ee4\u6642\u9593", "TMST"}; -- String TRUT[] = new String[] {"\u7279\u9b6f\u514b\u6642\u9593", "TRUT", -- "\u7279\u9b6f\u514b\u590f\u4ee4\u6642\u9593", "TRUST"}; - String ULAT[]= new String[] {"\u5eab\u502b\u6642\u9593", "ULAT", - "\u5eab\u502b\u590f\u4ee4\u6642\u9593", "ULAST"}; - String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u6642\u9593", "WART", -@@ -309,6 +311,7 @@ - {"America/Atikokan", EST}, - {"America/Atka", HAST}, - {"America/Bahia", BRT}, -+ {"America/Bahia_Banderas", CST}, - {"America/Barbados", AST}, - {"America/Belem", BRT}, - {"America/Belize", CST}, -@@ -446,10 +449,13 @@ - {"America/Winnipeg", CST}, - {"America/Yakutat", AKST}, - {"America/Yellowknife", MST}, -+ {"Antarctica/Casey", WST_AUS}, - {"Antarctica/Davis", new String[] {"\u81fa\u7dad\u65af\u6642\u9593", "DAVT", - "\u81fa\u7dad\u65af\u590f\u4ee4\u6642\u9593", "DAVST"}}, - {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u6642\u9593", "DDUT", - "Dumont-d'Urville \u590f\u4ee4\u6642\u9593", "DDUST"}}, -+ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", -+ "Macquarie Island Summer Time", "MIST"}}, - {"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u6642\u9593", "MAWT", - "\u83ab\u68ee\u590f\u4ee4\u6642\u9593", "MAWST"}}, - {"Antarctica/McMurdo", NZST}, -@@ -753,6 +759,7 @@ - {"Pacific/Apia", WST_SAMOA}, - {"Pacific/Auckland", NZST}, - {"Pacific/Chatham", CHAST}, -+ {"Pacific/Chuuk", CHUT}, - {"Pacific/Easter", EASTER}, - {"Pacific/Efate", new String[] {"\u74e6\u5974\u963f\u5716\u6642\u9593", "VUT", - "\u74e6\u5974\u963f\u5716\u590f\u4ee4\u6642\u9593", "VUST"}}, -@@ -791,8 +798,8 @@ - {"Pacific/Palau", new String[] {"\u5e1b\u7409\u6642\u9593", "PWT", - "\u5e1b\u7409\u590f\u4ee4\u6642\u9593", "PWST"}}, - {"Pacific/Pitcairn", PITCAIRN}, -- {"Pacific/Ponape", new String[] {"Ponape \u6642\u9593", "PONT", -- "Ponape \u590f\u4ee4\u6642\u9593", "PONST"}}, -+ {"Pacific/Pohnpei", PONT}, -+ {"Pacific/Ponape", PONT}, - {"Pacific/Port_Moresby", new String[] {"\u5df4\u5e03\u4e9e\u65b0\u5e7e\u5167\u4e9e\u6642\u9593", "PGT", - "\u5df4\u5e03\u4e9e\u65b0\u5e7e\u5167\u4e9e\u590f\u4ee4\u6642\u9593", "PGST"}}, - {"Pacific/Rarotonga", new String[] {"\u5eab\u514b\u7fa4\u5cf6\u6642\u9593", "CKT", -@@ -805,12 +812,12 @@ - "\u5409\u4f2f\u7279\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "GILST"}}, - {"Pacific/Tongatapu", new String[] {"\u6771\u52a0\u6642\u9593", "TOT", - "\u6771\u52a0\u590f\u4ee4\u6642\u9593", "TOST"}}, -- {"Pacific/Truk", TRUT}, -+ {"Pacific/Truk", CHUT}, - {"Pacific/Wake", new String[] {"\u5a01\u514b\u6642\u9593", "WAKT", - "\u5a01\u514b\u590f\u4ee4\u6642\u9593", "WAKST"}}, - {"Pacific/Wallis", new String[] {"\u74e6\u5229\u65af\u53ca\u798f\u675c\u7d0d\u7fa4\u5cf6\u6642\u9593", "WFT", - "\u74e6\u5229\u65af\u53ca\u798f\u675c\u7d0d\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "WFST"}}, -- {"Pacific/Yap", TRUT}, -+ {"Pacific/Yap", CHUT}, - {"Poland", CET}, - {"PRC", CTT}, - {"PST8PDT", PST}, diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/6996686-tzdata2010o.patch openjdk-6-6b34-1.13.6/patches/openjdk/6996686-tzdata2010o.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/6996686-tzdata2010o.patch 2014-10-08 18:39:25.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/6996686-tzdata2010o.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -# HG changeset patch -# User peytoia -# Date 1288678136 -32400 -# Node ID 30bc265fa0d0385857c106a5f9bdafa19cbf2ac5 -# Parent de89eec422c3ce434605255170459e57f940d369 -6996686: (tz) Support tzdata2010o -Reviewed-by: okutsu - ---- openjdk/jdk/make/sun/javazic/tzdata/VERSION -+++ openjdk/jdk/make/sun/javazic/tzdata/VERSION -@@ -21,4 +21,4 @@ - # or visit www.oracle.com if you need additional information or have any - # questions. - # --tzdata2010l -+tzdata2010o ---- openjdk/jdk/make/sun/javazic/tzdata/asia -+++ openjdk/jdk/make/sun/javazic/tzdata/asia -@@ -569,8 +569,8 @@ - Rule HK 1954 1964 - Mar Sun>=18 3:30 1:00 S - Rule HK 1954 only - Oct 31 3:30 0 - - Rule HK 1955 1964 - Nov Sun>=1 3:30 0 - --Rule HK 1965 1977 - Apr Sun>=16 3:30 1:00 S --Rule HK 1965 1977 - Oct Sun>=16 3:30 0 - -+Rule HK 1965 1976 - Apr Sun>=16 3:30 1:00 S -+Rule HK 1965 1976 - Oct Sun>=16 3:30 0 - - Rule HK 1973 only - Dec 30 3:30 1:00 S - Rule HK 1979 only - May Sun>=8 3:30 1:00 S - Rule HK 1979 only - Oct Sun>=16 3:30 0 - ---- openjdk/jdk/make/sun/javazic/tzdata/australasia -+++ openjdk/jdk/make/sun/javazic/tzdata/australasia -@@ -306,13 +306,26 @@ - # http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html - # - -+# From Alexander Krivenyshev (2010-10-24): -+# According to Radio Fiji and Fiji Times online, Fiji will end DST 3 -+# weeks earlier than expected - on March 6, 2011, not March 27, 2011... -+# Here is confirmation from Government of the Republic of the Fiji Islands, -+# Ministry of Information (fiji.gov.fj) web site: -+# -+# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155 -+# -+# or -+# -+# http://www.worldtimezone.com/dst_news/dst_news_fiji04.html -+# -+ - # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S - Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S - Rule Fiji 1999 2000 - Feb lastSun 3:00 0 - - Rule Fiji 2009 only - Nov 29 2:00 1:00 S - Rule Fiji 2010 only - Mar lastSun 3:00 0 - - Rule Fiji 2010 only - Oct 24 2:00 1:00 S --Rule Fiji 2011 only - Mar lastSun 3:00 0 - -+Rule Fiji 2011 only - Mar Sun>=1 3:00 0 - - # Zone NAME GMTOFF RULES FORMAT [UNTIL] - Zone Pacific/Fiji 11:53:40 - LMT 1915 Oct 26 # Suva - 12:00 Fiji FJ%sT # Fiji Time -@@ -509,11 +522,21 @@ - # http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf - # - -+# From Raymond Hughes (2010-10-07): -+# Please see -+# -+# http://www.mcil.gov.ws -+# , -+# the Ministry of Commerce, Industry and Labour (sideframe) "Last Sunday -+# September 2010 (26/09/10) - adjust clocks forward from 12:00 midnight -+# to 01:00am and First Sunday April 2011 (03/04/11) - adjust clocks -+# backwards from 1:00am to 12:00am" -+ - Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5 - -11:26:56 - LMT 1911 - -11:30 - SAMT 1950 # Samoa Time - -11:00 - WST 2010 Sep 26 -- -11:00 1:00 WSDT 2011 Apr 3 -+ -11:00 1:00 WSDT 2011 Apr 3 1:00 - -11:00 - WST - - # Solomon Is ---- openjdk/jdk/make/sun/javazic/tzdata/zone.tab -+++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab -@@ -63,7 +63,7 @@ - AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay - AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills - AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula --AQ -7824+10654 Antarctica/Vostok Vostok Station, S Magnetic Pole -+AQ -7824+10654 Antarctica/Vostok Vostok Station, Lake Vostok - AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Terre Adelie - AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I - AQ -5430+15857 Antarctica/Macquarie Macquarie Island Station, Macquarie Island diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/7017800-tzdata2011b.patch openjdk-6-6b34-1.13.6/patches/openjdk/7017800-tzdata2011b.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/7017800-tzdata2011b.patch 2014-10-08 18:39:25.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/7017800-tzdata2011b.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,265 +0,0 @@ -# HG changeset patch -# User peytoia -# Date 1297242029 -32400 -# Node ID eeaad0d340b285fa17e438bb2b9de6fa39289dd1 -# Parent 842a0f8c89ea5d5b4702502594a7fe37c509aec7 -7017800: (tz) Support tzdata2011b -Reviewed-by: okutsu - ---- openjdk/jdk/make/sun/javazic/tzdata/VERSION -+++ openjdk/jdk/make/sun/javazic/tzdata/VERSION -@@ -21,4 +21,4 @@ - # or visit www.oracle.com if you need additional information or have any - # questions. - # --tzdata2010o -+tzdata2011b ---- openjdk/jdk/make/sun/javazic/tzdata/australasia -+++ openjdk/jdk/make/sun/javazic/tzdata/australasia -@@ -106,14 +106,13 @@ - Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 - - Rule AS 1972 only - Feb 27 2:00s 0 - - Rule AS 1973 1985 - Mar Sun>=1 2:00s 0 - --Rule AS 1986 1989 - Mar Sun>=15 2:00s 0 - --Rule AS 1990 only - Mar Sun>=18 2:00s 0 - --Rule AS 1991 only - Mar Sun>=1 2:00s 0 - --Rule AS 1992 only - Mar Sun>=18 2:00s 0 - --Rule AS 1993 only - Mar Sun>=1 2:00s 0 - --Rule AS 1994 only - Mar Sun>=18 2:00s 0 - -+Rule AS 1986 1990 - Mar Sun>=15 2:00s 0 - -+Rule AS 1991 only - Mar 3 2:00s 0 - -+Rule AS 1992 only - Mar 22 2:00s 0 - -+Rule AS 1993 only - Mar 7 2:00s 0 - -+Rule AS 1994 only - Mar 20 2:00s 0 - - Rule AS 1995 2005 - Mar lastSun 2:00s 0 - --Rule AS 2006 only - Apr Sun>=1 2:00s 0 - -+Rule AS 2006 only - Apr 2 2:00s 0 - - Rule AS 2007 only - Mar lastSun 2:00s 0 - - Rule AS 2008 max - Apr Sun>=1 2:00s 0 - - Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 - ---- openjdk/jdk/make/sun/javazic/tzdata/northamerica -+++ openjdk/jdk/make/sun/javazic/tzdata/northamerica -@@ -368,6 +368,27 @@ - -7:00 US M%sT 2003 Oct 26 02:00 - -6:00 US C%sT - -+# From Josh Findley (2011-01-21): -+# ...it appears that Mercer County, North Dakota, changed from the -+# mountain time zone to the central time zone at the last transition from -+# daylight-saving to standard time (on Nov. 7, 2010): -+# -+# http://www.gpo.gov/fdsys/pkg/FR-2010-09-29/html/2010-24376.htm -+# -+# -+# http://www.bismarcktribune.com/news/local/article_1eb1b588-c758-11df-b472-001cc4c03286.html -+# -+ -+# From Andy Lipscomb (2011-01-24): -+# ...according to the Census Bureau, the largest city is Beulah (although -+# it's commonly referred to as Beulah-Hazen, with Hazen being the next -+# largest city in Mercer County). Google Maps places Beulah's city hall -+# at 4715'51" north, 10146'40" west, which yields an offset of 6h47'07". -+ -+Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53 -+ -7:00 US M%sT 2010 Nov 7 2:00 -+ -6:00 US C%sT -+ - # US mountain time, represented by Denver - # - # Colorado, far western Kansas, Montana, western -@@ -493,20 +514,50 @@ - # three votes for and one against." - - # Hawaii -+ -+# From Arthur David Olson (2010-12-09): -+# "Hawaiian Time" by Robert C. Schmitt and Doak C. Cox appears on pages 207-225 -+# of volume 26 of The Hawaiian Journal of History (1992). As of 2010-12-09, -+# the article is available at -+# -+# http://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf -+# -+# and indicates that standard time was adopted effective noon, January -+# 13, 1896 (page 218), that in "1933, the Legislature decreed daylight -+# saving for the period between the last Sunday of each April and the -+# last Sunday of each September, but less than a month later repealed the -+# act," (page 220), that year-round daylight saving time was in effect -+# from 1942-02-09 to 1945-09-30 (page 221, with no time of day given for -+# when clocks changed) and that clocks were changed by 30 minutes -+# effective the second Sunday of June, 1947 (page 219, with no time of -+# day given for when clocks changed). A footnote for the 1933 changes -+# cites Session Laws of Hawaii 1933, "Act. 90 (approved 26 Apr. 1933) -+# and Act 163 (approved 21 May 1933)." -+ -+# From Arthur David Olson (2011-01-19): -+# The following is from "Laws of the Territory of Hawaii Passed by the -+# Seventeenth Legislature: Regular Session 1933," available (as of -+# 2011-01-19) at American University's Pence Law Library. Page 85: "Act -+# 90...At 2 o'clock ante meridian of the last Sunday in April of each -+# year, the standard time of this Territory shall be advanced one -+# hour...This Act shall take effect upon its approval. Approved this 26th -+# day of April, A. D. 1933. LAWRENCE M JUDD, Governor of the Territory of -+# Hawaii." Page 172: "Act 163...Act 90 of the Session Laws of 1933 is -+# hereby repealed...This Act shall take effect upon its approval, upon -+# which date the standard time of this Territory shall be restored to -+# that existing immediately prior to the taking effect of said Act 90. -+# Approved this 21st day of May, A. D. 1933. LAWRENCE M. JUDD, Governor -+# of the Territory of Hawaii." - # --# From Arthur David Olson: --# And then there's Hawaii. --# DST was observed for one day in 1933; --# standard time was changed by half an hour in 1947; --# it's always standard as of 1986. --# --# From Paul Eggert: --# Shanks says the 1933 experiment lasted for three weeks. Go with Shanks. --# --Zone Pacific/Honolulu -10:31:26 - LMT 1900 Jan 1 12:00 -- -10:30 - HST 1933 Apr 30 2:00 -- -10:30 1:00 HDT 1933 May 21 2:00 -- -10:30 US H%sT 1947 Jun 8 2:00 -+# Note that 1933-05-21 was a Sunday. -+# We're left to guess the time of day when Act 163 was approved; guess noon. -+ -+Zone Pacific/Honolulu -10:31:26 - LMT 1896 Jan 13 12:00 #Schmitt&Cox -+ -10:30 - HST 1933 Apr 30 2:00 #Laws 1933 -+ -10:30 1:00 HDT 1933 May 21 12:00 #Laws 1933+12 -+ -10:30 - HST 1942 Feb 09 2:00 #Schmitt&Cox+2 -+ -10:30 1:00 HDT 1945 Sep 30 2:00 #Schmitt&Fox+2 -+ -10:30 US H%sT 1947 Jun 8 2:00 #Schmitt&Fox+2 - -10:00 - HST - - # Now we turn to US areas that have diverged from the consensus since 1970. ---- openjdk/jdk/make/sun/javazic/tzdata/zone.tab -+++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab -@@ -233,8 +233,8 @@ - HU +4730+01905 Europe/Budapest - ID -0610+10648 Asia/Jakarta Java & Sumatra - ID -0002+10920 Asia/Pontianak west & central Borneo --ID -0507+11924 Asia/Makassar east & south Borneo, Celebes, Bali, Nusa Tengarra, west Timor --ID -0232+14042 Asia/Jayapura Irian Jaya & the Moluccas -+ID -0507+11924 Asia/Makassar east & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor -+ID -0232+14042 Asia/Jayapura west New Guinea (Irian Jaya) & Malukus (Moluccas) - IE +5320-00615 Europe/Dublin - IL +3146+03514 Asia/Jerusalem - IM +5409-00428 Europe/Isle_of_Man -@@ -426,6 +426,7 @@ - US +450628-0873651 America/Menominee Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties - US +470659-1011757 America/North_Dakota/Center Central Time - North Dakota - Oliver County - US +465042-1012439 America/North_Dakota/New_Salem Central Time - North Dakota - Morton County (except Mandan area) -+US +471551-1014640 America/North_Dakota/Beulah Central Time - North Dakota - Mercer County - US +394421-1045903 America/Denver Mountain Time - US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon - US +364708-1084111 America/Shiprock Mountain Time - Navajo ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java -@@ -405,6 +405,7 @@ - {"America/Nipigon", EST}, - {"America/Nome", AKST}, - {"America/Noronha", NORONHA}, -+ {"America/North_Dakota/Beulah", CST}, - {"America/North_Dakota/Center", CST}, - {"America/North_Dakota/New_Salem", CST}, - {"America/Ojinaga", MST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java -@@ -405,6 +405,7 @@ - {"America/Nipigon", EST}, - {"America/Nome", AKST}, - {"America/Noronha", NORONHA}, -+ {"America/North_Dakota/Beulah", CST}, - {"America/North_Dakota/Center", CST}, - {"America/North_Dakota/New_Salem", CST}, - {"America/Ojinaga", MST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java -@@ -405,6 +405,7 @@ - {"America/Nipigon", EST}, - {"America/Nome", AKST}, - {"America/Noronha", NORONHA}, -+ {"America/North_Dakota/Beulah", CST}, - {"America/North_Dakota/Center", CST}, - {"America/North_Dakota/New_Salem", CST}, - {"America/Ojinaga", MST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java -@@ -405,6 +405,7 @@ - {"America/Nipigon", EST}, - {"America/Nome", AKST}, - {"America/Noronha", NORONHA}, -+ {"America/North_Dakota/Beulah", CST}, - {"America/North_Dakota/Center", CST}, - {"America/North_Dakota/New_Salem", CST}, - {"America/Ojinaga", MST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java -@@ -405,6 +405,7 @@ - {"America/Nipigon", EST}, - {"America/Nome", AKST}, - {"America/Noronha", NORONHA}, -+ {"America/North_Dakota/Beulah", CST}, - {"America/North_Dakota/Center", CST}, - {"America/North_Dakota/New_Salem", CST}, - {"America/Ojinaga", MST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java -@@ -405,6 +405,7 @@ - {"America/Nipigon", EST}, - {"America/Nome", AKST}, - {"America/Noronha", NORONHA}, -+ {"America/North_Dakota/Beulah", CST}, - {"America/North_Dakota/Center", CST}, - {"America/North_Dakota/New_Salem", CST}, - {"America/Ojinaga", MST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java -@@ -405,6 +405,7 @@ - {"America/Nipigon", EST}, - {"America/Nome", AKST}, - {"America/Noronha", NORONHA}, -+ {"America/North_Dakota/Beulah", CST}, - {"America/North_Dakota/Center", CST}, - {"America/North_Dakota/New_Salem", CST}, - {"America/Ojinaga", MST}, -diff -r 842a0f8c89ea -r eeaad0d340b2 src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java Tue Feb 08 09:04:30 2011 -0800 -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java Wed Feb 09 18:00:29 2011 +0900 -@@ -405,6 +405,7 @@ - {"America/Nipigon", EST}, - {"America/Nome", AKST}, - {"America/Noronha", NORONHA}, -+ {"America/North_Dakota/Beulah", CST}, - {"America/North_Dakota/Center", CST}, - {"America/North_Dakota/New_Salem", CST}, - {"America/Panama", EST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java -@@ -405,6 +405,7 @@ - {"America/Nipigon", EST}, - {"America/Nome", AKST}, - {"America/Noronha", NORONHA}, -+ {"America/North_Dakota/Beulah", CST}, - {"America/North_Dakota/Center", CST}, - {"America/North_Dakota/New_Salem", CST}, - {"America/Ojinaga", MST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java -@@ -405,6 +405,7 @@ - {"America/Nipigon", EST}, - {"America/Nome", AKST}, - {"America/Noronha", NORONHA}, -+ {"America/North_Dakota/Beulah", CST}, - {"America/North_Dakota/Center", CST}, - {"America/North_Dakota/New_Salem", CST}, - {"America/Ojinaga", MST}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java -@@ -405,6 +405,7 @@ - {"America/Nipigon", EST}, - {"America/Nome", AKST}, - {"America/Noronha", NORONHA}, -+ {"America/North_Dakota/Beulah", CST}, - {"America/North_Dakota/Center", CST}, - {"America/North_Dakota/New_Salem", CST}, - {"America/Ojinaga", MST}, diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/7027387-tzdata2011d.patch openjdk-6-6b34-1.13.6/patches/openjdk/7027387-tzdata2011d.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/7027387-tzdata2011d.patch 2014-10-08 18:39:25.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/7027387-tzdata2011d.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,522 +0,0 @@ -# HG changeset patch -# User peytoia -# Date 1300405325 -32400 -# Node ID 55f97ad0a36eeb8b2dff095760c8b427188a761b -# Parent c53260a00454507cf651b03ad165e32a5be8298d -7027387: (tz) Support tzdata2011d -Reviewed-by: okutsu - ---- openjdk/jdk/make/sun/javazic/tzdata/VERSION -+++ openjdk/jdk/make/sun/javazic/tzdata/VERSION -@@ -21,4 +21,4 @@ - # or visit www.oracle.com if you need additional information or have any - # questions. - # --tzdata2011b -+tzdata2011d ---- openjdk/jdk/make/sun/javazic/tzdata/australasia -+++ openjdk/jdk/make/sun/javazic/tzdata/australasia -@@ -531,11 +531,31 @@ - # to 01:00am and First Sunday April 2011 (03/04/11) - adjust clocks - # backwards from 1:00am to 12:00am" - -+# From Raymond Hughes (2011-03-07) -+# I believe this will be posted shortly on the website -+# -+# www.mcil.gov.ws -+# -+# -+# PUBLIC NOTICE ON DAYLIGHT SAVING TIME -+# -+# Pursuant to the Daylight Saving Act 2009 and Cabinets decision, -+# businesses and the general public are hereby advised that daylight -+# saving time is on the first Saturday of April 2011 (02/04/11). -+# -+# The public is therefore advised that when the standard time strikes -+# the hour of four oclock (4.00am or 0400 Hours) on the 2nd April 2011, -+# then all instruments used to measure standard time are to be -+# adjusted/changed to three oclock (3:00am or 0300Hrs). -+# -+# Margaret Fruean ACTING CHIEF EXECUTIVE OFFICER MINISTRY OF COMMERCE, -+# INDUSTRY AND LABOUR 28th February 2011 -+ - Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5 - -11:26:56 - LMT 1911 - -11:30 - SAMT 1950 # Samoa Time - -11:00 - WST 2010 Sep 26 -- -11:00 1:00 WSDT 2011 Apr 3 1:00 -+ -11:00 1:00 WSDT 2011 Apr 2 4:00 - -11:00 - WST - - # Solomon Is ---- openjdk/jdk/make/sun/javazic/tzdata/etcetera -+++ openjdk/jdk/make/sun/javazic/tzdata/etcetera -@@ -58,8 +58,7 @@ - # (i.e. west of Greenwich) even though many people would expect it to - # mean 4 hours ahead of UTC (i.e. east of Greenwich). - # --# In the draft 5 of POSIX 1003.1-200x, the angle bracket notation --# (which is not yet supported by the tz code) allows for -+# In the draft 5 of POSIX 1003.1-200x, the angle bracket notation allows for - # TZ='+4'; if you want time zone abbreviations conforming to - # ISO 8601 you can use TZ='<-0400>+4'. Thus the commonly-expected - # offset is kept within the angle bracket (and is used for display) ---- openjdk/jdk/make/sun/javazic/tzdata/europe -+++ openjdk/jdk/make/sun/javazic/tzdata/europe -@@ -2505,25 +2505,18 @@ - # (on a non-government server though) describing dates between 2002 and 2006: - # http://www.alomaliye.com/bkk_2002_3769.htm - --# From Sue Williams (2008-08-11): --# I spotted this news article about a potential change in Turkey. --# --# --# http://www.hurriyet.com.tr/english/domestic/9626174.asp?scr=1 -+# From Gökdeniz Karadağ (2011-03-10): -+# -+# According to the articles linked below, Turkey will change into summer -+# time zone (GMT+3) on March 28, 2011 at 3:00 a.m. instead of March 27. -+# This change is due to a nationwide exam on 27th. -+# -+# -+# http://www.worldbulletin.net/?aType=haber&ArticleID=70872 - # -- --# From Sue Williams (2008-08-20): --# This article says that around the end of March 2011, Turkey wants to --# adjust the clocks forward by 1/2 hour and stay that way permanently. --# The article indicates that this is a change in timezone offset in addition --# to stopping observance of DST. --# This proposal has not yet been approved. --# --# Read more here... --# --# Turkey to abandon daylight saving time in 2011 --# --# http://www.turkishdailynews.com.tr/article.php?enewsid=112989 -+# Turkish: -+# -+# http://www.hurriyet.com.tr/ekonomi/17230464.asp?gid=373 - # - - # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -@@ -2591,6 +2584,8 @@ - 2:00 Turkey EE%sT 1978 Oct 15 - 3:00 Turkey TR%sT 1985 Apr 20 # Turkey Time - 2:00 Turkey EE%sT 2007 -+ 2:00 EU EE%sT 2011 Mar 27 1:00u -+ 2:00 - EET 2011 Mar 28 1:00u - 2:00 EU EE%sT - Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents. - ---- openjdk/jdk/make/sun/javazic/tzdata/leapseconds -+++ openjdk/jdk/make/sun/javazic/tzdata/leapseconds -@@ -78,13 +78,13 @@ - # SERVICE DE LA ROTATION TERRESTRE - # OBSERVATOIRE DE PARIS - # 61, Av. de l'Observatoire 75014 PARIS (France) --# Tel. : 33 (0) 1 40 51 22 26 -+# Tel. : 33 (0) 1 40 51 22 29 - # FAX : 33 (0) 1 40 51 22 91 - # Internet : services.iers@obspm.fr - # --# Paris, 14 July 2010 -+# Paris, 2 February 2011 - # --# Bulletin C 40 -+# Bulletin C 41 - # - # To authorities responsible - # for the measurement and -@@ -92,9 +92,9 @@ - # - # INFORMATION ON UTC - TAI - # --# NO positive leap second will be introduced at the end of December 2010. -+# NO positive leap second will be introduced at the end of June 2011. - # The difference between Coordinated Universal Time UTC and the --# International Atomic Time TAI is : -+# International Atomic Time TAI is : - # - # from 2009 January 1, 0h UTC, until further notice : UTC-TAI = -34 s - # -@@ -104,6 +104,6 @@ - # will be no time step at the next possible date. - # - # Daniel GAMBIS --# Director --# Earth Orientation Center of IERS -+# Head -+# Earth Orientation Center of the IERS - # Observatoire de Paris, France ---- openjdk/jdk/make/sun/javazic/tzdata/northamerica -+++ openjdk/jdk/make/sun/javazic/tzdata/northamerica -@@ -448,15 +448,74 @@ - # were nearby inhabitants in some cases and for our purposes perhaps - # it's best to simply use the official transition. - # -+ -+# From Steve Ferguson (2011-01-31): -+# The author lives in Alaska and many of the references listed are only -+# available to Alaskan residents. -+# -+# -+# http://www.alaskahistoricalsociety.org/index.cfm?section=discover%20alaska&page=Glimpses%20of%20the%20Past&viewpost=2&ContentId=98 -+# -+ -+# From Arthur David Olson (2011-02-01): -+# Here's database-relevant material from the 2001 "Alaska History" article: -+# -+# On September 20 [1979]...DOT...officials decreed that on April 27, -+# 1980, Juneau and other nearby communities would move to Yukon Time. -+# Sitka, Petersburg, Wrangell, and Ketchikan, however, would remain on -+# Pacific Time. -+# -+# ...on September 22, 1980, DOT Secretary Neil E. Goldschmidt rescinded the -+# Department's September 1979 decision. Juneau and other communities in -+# northern Southeast reverted to Pacific Time on October 26. -+# -+# On October 28 [1983]...the Metlakatla Indian Community Council voted -+# unanimously to keep the reservation on Pacific Time. -+# -+# According to DOT official Joanne Petrie, Indian reservations are not -+# bound to follow time zones imposed by neighboring jurisdictions. -+# -+# (The last is consistent with how the database now handles the Navajo -+# Nation.) -+ -+# From Arthur David Olson (2011-02-09): -+# I just spoke by phone with a staff member at the Metlakatla Indian -+# Community office (using contact information available at -+# -+# http://www.commerce.state.ak.us/dca/commdb/CIS.cfm?Comm_Boro_name=Metlakatla -+# ). -+# It's shortly after 1:00 here on the east coast of the United States; -+# the staffer said it was shortly after 10:00 there. When I asked whether -+# that meant they were on Pacific time, they said no--they were on their -+# own time. I asked about daylight saving; they said it wasn't used. I -+# did not inquire about practices in the past. -+ - # Zone NAME GMTOFF RULES FORMAT [UNTIL] - Zone America/Juneau 15:02:19 - LMT 1867 Oct 18 - -8:57:41 - LMT 1900 Aug 20 12:00 - -8:00 - PST 1942 - -8:00 US P%sT 1946 - -8:00 - PST 1969 -+ -8:00 US P%sT 1980 Apr 27 2:00 -+ -9:00 US Y%sT 1980 Oct 26 2:00 - -8:00 US P%sT 1983 Oct 30 2:00 - -9:00 US Y%sT 1983 Nov 30 - -9:00 US AK%sT -+Zone America/Sitka -14:58:47 - LMT 1867 Oct 18 -+ -9:01:13 - LMT 1900 Aug 20 12:00 -+ -8:00 - PST 1942 -+ -8:00 US P%sT 1946 -+ -8:00 - PST 1969 -+ -8:00 US P%sT 1983 Oct 30 2:00 -+ -9:00 US Y%sT 1983 Nov 30 -+ -9:00 US AK%sT -+Zone America/Metlakatla 15:13:42 - LMT 1867 Oct 18 -+ -8:46:18 - LMT 1900 Aug 20 12:00 -+ -8:00 - PST 1942 -+ -8:00 US P%sT 1946 -+ -8:00 - PST 1969 -+ -8:00 US P%sT 1983 Oct 30 2:00 -+ -8:00 US MeST - Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18 - -9:18:55 - LMT 1900 Aug 20 12:00 - -9:00 - YST 1942 -@@ -2569,6 +2628,21 @@ - # the time was announced as "diez cinco"--the same time as here, indicating - # that has indeed switched to DST. Assume second Sunday from 2009 forward. - -+# From Steffen Thorsen (2011-03-08): -+# Granma announced that Cuba is going to start DST on 2011-03-20 00:00:00 -+# this year. Nothing about the end date known so far (if that has -+# changed at all). -+# -+# Source: -+# -+# http://granma.co.cu/2011/03/08/nacional/artic01.html -+# -+# -+# Our info: -+# -+# http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html -+# -+ - # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S - Rule Cuba 1928 only - Jun 10 0:00 1:00 D - Rule Cuba 1928 only - Oct 10 0:00 0 S -@@ -2602,7 +2676,9 @@ - Rule Cuba 2006 max - Oct lastSun 0:00s 0 S - Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D - Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D --Rule Cuba 2009 max - Mar Sun>=8 0:00s 1:00 D -+Rule Cuba 2009 2010 - Mar Sun>=8 0:00s 1:00 D -+Rule Cuba 2011 only - Mar Sun>=15 0:00s 1:00 D -+Rule Cuba 2012 max - Mar Sun>=8 0:00s 1:00 D - - # Zone NAME GMTOFF RULES FORMAT [UNTIL] - Zone America/Havana -5:29:28 - LMT 1890 ---- openjdk/jdk/make/sun/javazic/tzdata/southamerica -+++ openjdk/jdk/make/sun/javazic/tzdata/southamerica -@@ -1176,6 +1176,23 @@ - # From Arthur Daivd Olson (2010-03-06): - # Angel Chiang's message confirmed by Julio Pacheco; Julio provided a patch. - -+# From Glenn Eychaner (2011-03-02): [geychaner@mac.com] -+# It appears that the Chilean government has decided to postpone the -+# change from summer time to winter time again, by three weeks to April -+# 2nd: -+# -+# http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651 -+# -+# -+# This is not yet reflected in the offical "cambio de hora" site, but -+# probably will be soon: -+# -+# http://www.horaoficial.cl/cambio.htm -+# -+ -+# From Arthur David Olson (2011-03-02): -+# The emol.com article mentions a water shortage as the cause of the -+# postponement, which may mean that it's not a permanent change. - # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S - Rule Chile 1927 1932 - Sep 1 0:00 1:00 S - Rule Chile 1928 1932 - Apr 1 0:00 0 - -@@ -1211,8 +1228,8 @@ - # which is used below in specifying the transition. - Rule Chile 2008 only - Mar 30 3:00u 0 - - Rule Chile 2009 only - Mar Sun>=9 3:00u 0 - --Rule Chile 2010 only - Apr 4 3:00u 0 - --Rule Chile 2011 max - Mar Sun>=9 3:00u 0 - -+Rule Chile 2010 2011 - Apr Sun>=1 3:00u 0 - -+Rule Chile 2012 max - Mar Sun>=9 3:00u 0 - - # IATA SSIM anomalies: (1992-02) says 1992-03-14; - # (1996-09) says 1998-03-08. Ignore these. - # Zone NAME GMTOFF RULES FORMAT [UNTIL] ---- openjdk/jdk/make/sun/javazic/tzdata/zone.tab -+++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab -@@ -434,9 +434,11 @@ - US +340308-1181434 America/Los_Angeles Pacific Time - US +611305-1495401 America/Anchorage Alaska Time - US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle -+US +571035-1351807 America/Sitka Alaska Time - southeast Alaska panhandle - US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck - US +643004-1652423 America/Nome Alaska Time - west Alaska - US +515248-1763929 America/Adak Aleutian Islands -+US +550737-1313435 America/Metlakatla Metlakatla Time - Annette Island - US +211825-1575130 Pacific/Honolulu Hawaii - UY -3453-05611 America/Montevideo - UZ +3940+06648 Asia/Samarkand west Uzbekistan ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java -@@ -216,6 +216,7 @@ - {"America/Anchorage", AKST}, - {"AST", AKST}, - {"America/Halifax", AST}, -+ {"America/Sitka", AKST}, - {"America/St_Johns", NST}, - {"CNT", NST}, - {"Europe/Paris", CET}, -@@ -392,6 +393,8 @@ - {"America/Mendoza", AGT}, - {"America/Menominee", CST}, - {"America/Merida", CST}, -+ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", -+ "Metlakatla Daylight Time", "MeDT"}}, - {"America/Mexico_City", CST}, - {"America/Miquelon", new String[] {"Pierre & Miquelon Standard Time", "PMST", - "Pierre & Miquelon Daylight Time", "PMDT"}}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java -@@ -216,6 +216,7 @@ - {"America/Anchorage", AKST}, - {"AST", AKST}, - {"America/Halifax", AST}, -+ {"America/Sitka", AKST}, - {"America/St_Johns", NST}, - {"CNT", NST}, - {"Europe/Paris", CET}, -@@ -392,6 +393,8 @@ - {"America/Mendoza", AGT}, - {"America/Menominee", CST}, - {"America/Merida", CST}, -+ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", -+ "Metlakatla Daylight Time", "MeDT"}}, - {"America/Mexico_City", CST}, - {"America/Miquelon", new String[] {"Pierre & Miquelon Normalzeit", "PMST", - "Pierre & Miquelon Sommerzeit", "PMDT"}}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java -@@ -216,6 +216,7 @@ - {"America/Anchorage", AKST}, - {"AST", AKST}, - {"America/Halifax", AST}, -+ {"America/Sitka", AKST}, - {"America/St_Johns", NST}, - {"CNT", NST}, - {"Europe/Paris", CET}, -@@ -392,6 +393,8 @@ - {"America/Mendoza", AGT}, - {"America/Menominee", CST}, - {"America/Merida", CST}, -+ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", -+ "Metlakatla Daylight Time", "MeDT"}}, - {"America/Mexico_City", CST}, - {"America/Miquelon", new String[] {"Hora est\u00e1ndar de Pierre & Miquelon", "PMST", - "Hora de verano de Pierre & Miquelon", "PMDT"}}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java -@@ -216,6 +216,7 @@ - {"America/Anchorage", AKST}, - {"AST", AKST}, - {"America/Halifax", AST}, -+ {"America/Sitka", AKST}, - {"America/St_Johns", NST}, - {"CNT", NST}, - {"Europe/Paris", CET}, -@@ -392,6 +393,8 @@ - {"America/Mendoza", AGT}, - {"America/Menominee", CST}, - {"America/Merida", CST}, -+ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", -+ "Metlakatla Daylight Time", "MeDT"}}, - {"America/Mexico_City", CST}, - {"America/Miquelon", new String[] {"Heure normale de Saint-Pierre et Miquelon", "PMST", - "Heure avanc\u00e9e de Saint-Pierre et Miquelon", "PMDT"}}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java -@@ -216,6 +216,7 @@ - {"America/Anchorage", AKST}, - {"AST", AKST}, - {"America/Halifax", AST}, -+ {"America/Sitka", AKST}, - {"America/St_Johns", NST}, - {"CNT", NST}, - {"Europe/Paris", CET}, -@@ -392,6 +393,8 @@ - {"America/Mendoza", AGT}, - {"America/Menominee", CST}, - {"America/Merida", CST}, -+ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", -+ "Metlakatla Daylight Time", "MeDT"}}, - {"America/Mexico_City", CST}, - {"America/Miquelon", new String[] {"Ora solare di Saint-Pierre e Miquelon", "PMST", - "Ora legale di Saint-Pierre e Miquelon", "PMDT"}}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java -@@ -216,6 +216,7 @@ - {"America/Anchorage", AKST}, - {"AST", AKST}, - {"America/Halifax", AST}, -+ {"America/Sitka", AKST}, - {"America/St_Johns", NST}, - {"CNT", NST}, - {"Europe/Paris", CET}, -@@ -392,6 +393,8 @@ - {"America/Mendoza", AGT}, - {"America/Menominee", CST}, - {"America/Merida", CST}, -+ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", -+ "Metlakatla Daylight Time", "MeDT"}}, - {"America/Mexico_City", CST}, - {"America/Miquelon", new String[] {"\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u6a19\u6e96\u6642", "PMST", - "\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u590f\u6642\u9593", "PMDT"}}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java -@@ -216,6 +216,7 @@ - {"America/Anchorage", AKST}, - {"AST", AKST}, - {"America/Halifax", AST}, -+ {"America/Sitka", AKST}, - {"America/St_Johns", NST}, - {"CNT", NST}, - {"Europe/Paris", CET}, -@@ -392,6 +393,8 @@ - {"America/Mendoza", AGT}, - {"America/Menominee", CST}, - {"America/Merida", CST}, -+ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", -+ "Metlakatla Daylight Time", "MeDT"}}, - {"America/Mexico_City", CST}, - {"America/Miquelon", new String[] {"\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \ud45c\uc900\uc2dc", "PMST", - "\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PMDT"}}, -diff -r c53260a00454 -r 55f97ad0a36e src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java Thu Mar 17 18:22:54 2011 +0300 -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java Fri Mar 18 08:42:05 2011 +0900 -@@ -217,6 +217,7 @@ - {"America/Anchorage", AKST}, - {"AST", AKST}, - {"America/Halifax", AST}, -+ {"America/Sitka", AKST}, - {"America/St_Johns", NST}, - {"CNT", NST}, - {"Europe/Paris", CET}, -@@ -392,6 +393,8 @@ - {"America/Mendoza", AGT}, - {"America/Menominee", CST}, - {"America/Merida", CST}, -+ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", -+ "Metlakatla Daylight Time", "MeDT"}}, - {"America/Mexico_City", CST}, - {"America/Miquelon", new String[] {"Fuso hor\u00e1rio padr\u00e3o de S\u00e3o Pedro e Miquelon", "PMST", - "Hor\u00e1rio de luz natural de S\u00e3o Pedro e Miquelon", "PMDT"}}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java -@@ -216,6 +216,7 @@ - {"America/Anchorage", AKST}, - {"AST", AKST}, - {"America/Halifax", AST}, -+ {"America/Sitka", AKST}, - {"America/St_Johns", NST}, - {"CNT", NST}, - {"Europe/Paris", CET}, -@@ -392,6 +393,8 @@ - {"America/Mendoza", AGT}, - {"America/Menominee", CST}, - {"America/Merida", CST}, -+ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", -+ "Metlakatla Daylight Time", "MeDT"}}, - {"America/Mexico_City", CST}, - {"America/Miquelon", new String[] {"Saint-Pierre-et-Miquelon, normaltid", "PMST", - "Saint-Pierre-et-Miquelon, sommartid", "PMDT"}}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java -@@ -216,6 +216,7 @@ - {"America/Anchorage", AKST}, - {"AST", AKST}, - {"America/Halifax", AST}, -+ {"America/Sitka", AKST}, - {"America/St_Johns", NST}, - {"CNT", NST}, - {"Europe/Paris", CET}, -@@ -392,6 +393,8 @@ - {"America/Mendoza", AGT}, - {"America/Menominee", CST}, - {"America/Merida", CST}, -+ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", -+ "Metlakatla Daylight Time", "MeDT"}}, - {"America/Mexico_City", CST}, - {"America/Miquelon", new String[] {"\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u6807\u51c6\u65f6\u95f4", "PMST", - "\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u590f\u4ee4\u65f6", "PMDT"}}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java -@@ -216,6 +216,7 @@ - {"America/Anchorage", AKST}, - {"AST", AKST}, - {"America/Halifax", AST}, -+ {"America/Sitka", AKST}, - {"America/St_Johns", NST}, - {"CNT", NST}, - {"Europe/Paris", CET}, -@@ -392,6 +393,8 @@ - {"America/Mendoza", AGT}, - {"America/Menominee", CST}, - {"America/Merida", CST}, -+ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", -+ "Metlakatla Daylight Time", "MeDT"}}, - {"America/Mexico_City", CST}, - {"America/Miquelon", new String[] {"\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u6a19\u6e96\u6642\u9593", "PMST", - "\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PMDT"}}, diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/7031830-pr2183-bad_record_mac_failure.patch openjdk-6-6b34-1.13.6/patches/openjdk/7031830-pr2183-bad_record_mac_failure.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/7031830-pr2183-bad_record_mac_failure.patch 1970-01-01 00:00:00.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/7031830-pr2183-bad_record_mac_failure.patch 2015-01-21 22:23:45.000000000 +0000 @@ -0,0 +1,522 @@ +# HG changeset patch +# User wetmore +# Date 1421871245 0 +# Wed Jan 21 20:14:05 2015 +0000 +# Node ID 8b1568063cd45ed88422dd8d98f019f9971708e8 +# Parent bbff2a7acd335d23a7946a1b7eedd42946946311 +7031830: bad_record_mac failure on TLSv1.2 enabled connection with SSLEngine +Reviewed-by: xuelei, weijun, asaha + +diff -r bbff2a7acd33 -r 8b1568063cd4 src/share/classes/sun/security/ssl/CipherBox.java +--- openjdk/jdk/src/share/classes/sun/security/ssl/CipherBox.java Wed Jan 21 20:02:14 2015 +0000 ++++ openjdk/jdk/src/share/classes/sun/security/ssl/CipherBox.java Wed Jan 21 20:14:05 2015 +0000 +@@ -312,9 +312,11 @@ + byte[] buf = null; + int limit = bb.limit(); + if (bb.hasArray()) { ++ int arrayOffset = bb.arrayOffset(); + buf = bb.array(); +- System.arraycopy(buf, pos, +- buf, pos + prefix.length, limit - pos); ++ System.arraycopy(buf, arrayOffset + pos, ++ buf, arrayOffset + pos + prefix.length, ++ limit - pos); + bb.limit(limit + prefix.length); + } else { + buf = new byte[limit - pos]; +@@ -500,9 +502,10 @@ + byte[] buf = null; + int limit = bb.limit(); + if (bb.hasArray()) { ++ int arrayOffset = bb.arrayOffset(); + buf = bb.array(); +- System.arraycopy(buf, pos + blockSize, +- buf, pos, limit - pos - blockSize); ++ System.arraycopy(buf, arrayOffset + pos + blockSize, ++ buf, arrayOffset + pos, limit - pos - blockSize); + bb.limit(limit - blockSize); + } else { + buf = new byte[limit - pos - blockSize]; +diff -r bbff2a7acd33 -r 8b1568063cd4 test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineBadBufferArrayAccess.java +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ openjdk/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineBadBufferArrayAccess.java Wed Jan 21 20:14:05 2015 +0000 +@@ -0,0 +1,479 @@ ++/* ++ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++/* ++ * @test ++ * @bug 7031830 ++ * @summary bad_record_mac failure on TLSv1.2 enabled connection with SSLEngine ++ * @run main/othervm SSLEngineBadBufferArrayAccess ++ * ++ * SunJSSE does not support dynamic system properties, no way to re-use ++ * system properties in samevm/agentvm mode. ++ */ ++ ++/** ++ * A SSLSocket/SSLEngine interop test case. This is not the way to ++ * code SSLEngine-based servers, but works for what we need to do here, ++ * which is to make sure that SSLEngine/SSLSockets can talk to each other. ++ * SSLEngines can use direct or indirect buffers, and different code ++ * is used to get at the buffer contents internally, so we test that here. ++ * ++ * The test creates one SSLSocket (client) and one SSLEngine (server). ++ * The SSLSocket talks to a raw ServerSocket, and the server code ++ * does the translation between byte [] and ByteBuffers that the SSLEngine ++ * can use. The "transport" layer consists of a Socket Input/OutputStream ++ * and two byte buffers for the SSLEngines: think of them ++ * as directly connected pipes. ++ * ++ * Again, this is a *very* simple example: real code will be much more ++ * involved. For example, different threading and I/O models could be ++ * used, transport mechanisms could close unexpectedly, and so on. ++ * ++ * When this application runs, notice that several messages ++ * (wrap/unwrap) pass before any application data is consumed or ++ * produced. (For more information, please see the SSL/TLS ++ * specifications.) There may several steps for a successful handshake, ++ * so it's typical to see the following series of operations: ++ * ++ * client server message ++ * ====== ====== ======= ++ * write() ... ClientHello ++ * ... unwrap() ClientHello ++ * ... wrap() ServerHello/Certificate ++ * read() ... ServerHello/Certificate ++ * write() ... ClientKeyExchange ++ * write() ... ChangeCipherSpec ++ * write() ... Finished ++ * ... unwrap() ClientKeyExchange ++ * ... unwrap() ChangeCipherSpec ++ * ... unwrap() Finished ++ * ... wrap() ChangeCipherSpec ++ * ... wrap() Finished ++ * read() ... ChangeCipherSpec ++ * read() ... Finished ++ * ++ * This particular bug had a problem where byte buffers backed by an ++ * array didn't offset correctly, and we got bad MAC errors. ++ */ ++import javax.net.ssl.*; ++import javax.net.ssl.SSLEngineResult.*; ++import java.io.*; ++import java.net.*; ++import java.security.*; ++import java.nio.*; ++ ++public class SSLEngineBadBufferArrayAccess { ++ ++ /* ++ * Enables logging of the SSL/TLS operations. ++ */ ++ private static boolean logging = true; ++ ++ /* ++ * Enables the JSSE system debugging system property: ++ * ++ * -Djavax.net.debug=all ++ * ++ * This gives a lot of low-level information about operations underway, ++ * including specific handshake messages, and might be best examined ++ * after gaining some familiarity with this application. ++ */ ++ private static boolean debug = false; ++ private SSLContext sslc; ++ private SSLEngine serverEngine; // server-side SSLEngine ++ private SSLSocket sslSocket; // client-side socket ++ private ServerSocket serverSocket; // server-side Socket, generates the... ++ private Socket socket; // server-side socket that will read ++ ++ private final byte[] serverMsg = "Hi there Client, I'm a Server".getBytes(); ++ private final byte[] clientMsg = "Hello Server, I'm a Client".getBytes(); ++ ++ private ByteBuffer serverOut; // write side of serverEngine ++ private ByteBuffer serverIn; // read side of serverEngine ++ ++ private volatile Exception clientException; ++ private volatile Exception serverException; ++ ++ /* ++ * For data transport, this example uses local ByteBuffers. ++ */ ++ private ByteBuffer cTOs; // "reliable" transport client->server ++ private ByteBuffer sTOc; // "reliable" transport server->client ++ ++ /* ++ * The following is to set up the keystores/trust material. ++ */ ++ private static final String pathToStores = "../../../../../../../etc/"; ++ private static final String keyStoreFile = "keystore"; ++ private static final String trustStoreFile = "truststore"; ++ private static final String passwd = "passphrase"; ++ private static String keyFilename = ++ System.getProperty("test.src", ".") + "/" + pathToStores ++ + "/" + keyStoreFile; ++ private static String trustFilename = ++ System.getProperty("test.src", ".") + "/" + pathToStores ++ + "/" + trustStoreFile; ++ ++ /* ++ * Main entry point for this test. ++ */ ++ public static void main(String args[]) throws Exception { ++ if (debug) { ++ System.setProperty("javax.net.debug", "all"); ++ } ++ ++ String [] protocols = new String [] { ++ "SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2" }; ++ ++ for (String protocol : protocols) { ++ log("Testing " + protocol); ++ /* ++ * Run the tests with direct and indirect buffers. ++ */ ++ SSLEngineBadBufferArrayAccess test = ++ new SSLEngineBadBufferArrayAccess(protocol); ++ test.runTest(true); ++ test.runTest(false); ++ } ++ ++ System.out.println("Test Passed."); ++ } ++ ++ /* ++ * Create an initialized SSLContext to use for these tests. ++ */ ++ public SSLEngineBadBufferArrayAccess(String protocol) throws Exception { ++ ++ KeyStore ks = KeyStore.getInstance("JKS"); ++ KeyStore ts = KeyStore.getInstance("JKS"); ++ ++ char[] passphrase = "passphrase".toCharArray(); ++ ++ ks.load(new FileInputStream(keyFilename), passphrase); ++ ts.load(new FileInputStream(trustFilename), passphrase); ++ ++ KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); ++ kmf.init(ks, passphrase); ++ ++ TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); ++ tmf.init(ts); ++ ++ SSLContext sslCtx = SSLContext.getInstance(protocol); ++ ++ sslCtx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); ++ ++ sslc = sslCtx; ++ } ++ ++ /* ++ * Run the test. ++ * ++ * Sit in a tight loop, with the server engine calling wrap/unwrap ++ * regardless of whether data is available or not. We do this until ++ * we get the application data. Then we shutdown and go to the next one. ++ * ++ * The main loop handles all of the I/O phases of the SSLEngine's ++ * lifetime: ++ * ++ * initial handshaking ++ * application data transfer ++ * engine closing ++ * ++ * One could easily separate these phases into separate ++ * sections of code. ++ */ ++ private void runTest(boolean direct) throws Exception { ++ boolean serverClose = direct; ++ ++ serverSocket = new ServerSocket(0); ++ int port = serverSocket.getLocalPort(); ++ Thread thread = createClientThread(port, serverClose); ++ ++ socket = serverSocket.accept(); ++ socket.setSoTimeout(500); ++ serverSocket.close(); ++ ++ createSSLEngine(); ++ createBuffers(direct); ++ ++ try { ++ boolean closed = false; ++ ++ InputStream is = socket.getInputStream(); ++ OutputStream os = socket.getOutputStream(); ++ ++ SSLEngineResult serverResult; // results from last operation ++ ++ /* ++ * Examining the SSLEngineResults could be much more involved, ++ * and may alter the overall flow of the application. ++ * ++ * For example, if we received a BUFFER_OVERFLOW when trying ++ * to write to the output pipe, we could reallocate a larger ++ * pipe, but instead we wait for the peer to drain it. ++ */ ++ byte[] inbound = new byte[8192]; ++ byte[] outbound = new byte[8192]; ++ ++ while (!isEngineClosed(serverEngine)) { ++ int len = 0; ++ ++ // Inbound data ++ log("================"); ++ ++ // Read from the Client side. ++ try { ++ len = is.read(inbound); ++ if (len == -1) { ++ throw new Exception("Unexpected EOF"); ++ } ++ cTOs.put(inbound, 0, len); ++ } catch (SocketTimeoutException ste) { ++ // swallow. Nothing yet, probably waiting on us. ++ } ++ ++ cTOs.flip(); ++ ++ serverResult = serverEngine.unwrap(cTOs, serverIn); ++ log("server unwrap: ", serverResult); ++ runDelegatedTasks(serverResult, serverEngine); ++ cTOs.compact(); ++ ++ // Outbound data ++ log("----"); ++ ++ serverResult = serverEngine.wrap(serverOut, sTOc); ++ log("server wrap: ", serverResult); ++ runDelegatedTasks(serverResult, serverEngine); ++ ++ sTOc.flip(); ++ ++ if ((len = sTOc.remaining()) != 0) { ++ sTOc.get(outbound, 0, len); ++ os.write(outbound, 0, len); ++ // Give the other side a chance to process ++ } ++ ++ sTOc.compact(); ++ ++ if (!closed && (serverOut.remaining() == 0)) { ++ closed = true; ++ ++ /* ++ * We'll alternate initiatating the shutdown. ++ * When the server initiates, it will take one more ++ * loop, but tests the orderly shutdown. ++ */ ++ if (serverClose) { ++ serverEngine.closeOutbound(); ++ } ++ serverIn.flip(); ++ ++ /* ++ * A sanity check to ensure we got what was sent. ++ */ ++ if (serverIn.remaining() != clientMsg.length) { ++ throw new Exception("Client: Data length error"); ++ } ++ ++ for (int i = 0; i < clientMsg.length; i++) { ++ if (clientMsg[i] != serverIn.get()) { ++ throw new Exception("Client: Data content error"); ++ } ++ } ++ serverIn.compact(); ++ } ++ } ++ return; ++ } catch (Exception e) { ++ serverException = e; ++ } finally { ++ socket.close(); ++ ++ // Wait for the client to join up with us. ++ thread.join(); ++ if (serverException != null) { ++ throw serverException; ++ } ++ if (clientException != null) { ++ throw clientException; ++ } ++ } ++ } ++ ++ /* ++ * Create a client thread which does simple SSLSocket operations. ++ * We'll write and read one data packet. ++ */ ++ private Thread createClientThread(final int port, ++ final boolean serverClose) throws Exception { ++ ++ Thread t = new Thread("ClientThread") { ++ ++ @Override ++ public void run() { ++ try { ++ Thread.sleep(1000); // Give server time to finish setup. ++ ++ sslSocket = (SSLSocket) sslc.getSocketFactory(). ++ createSocket("localhost", port); ++ OutputStream os = sslSocket.getOutputStream(); ++ InputStream is = sslSocket.getInputStream(); ++ ++ // write(byte[]) goes in one shot. ++ os.write(clientMsg); ++ ++ byte[] inbound = new byte[2048]; ++ int pos = 0; ++ ++ int len; ++done: ++ while ((len = is.read(inbound, pos, 2048 - pos)) != -1) { ++ pos += len; ++ // Let the client do the closing. ++ if ((pos == serverMsg.length) && !serverClose) { ++ sslSocket.close(); ++ break done; ++ } ++ } ++ ++ if (pos != serverMsg.length) { ++ throw new Exception("Client: Data length error"); ++ } ++ ++ for (int i = 0; i < serverMsg.length; i++) { ++ if (inbound[i] != serverMsg[i]) { ++ throw new Exception("Client: Data content error"); ++ } ++ } ++ } catch (Exception e) { ++ clientException = e; ++ } ++ } ++ }; ++ t.start(); ++ return t; ++ } ++ ++ /* ++ * Using the SSLContext created during object creation, ++ * create/configure the SSLEngines we'll use for this test. ++ */ ++ private void createSSLEngine() throws Exception { ++ /* ++ * Configure the serverEngine to act as a server in the SSL/TLS ++ * handshake. ++ */ ++ serverEngine = sslc.createSSLEngine(); ++ serverEngine.setUseClientMode(false); ++ serverEngine.getNeedClientAuth(); ++ } ++ ++ /* ++ * Create and size the buffers appropriately. ++ */ ++ private void createBuffers(boolean direct) { ++ ++ SSLSession session = serverEngine.getSession(); ++ int appBufferMax = session.getApplicationBufferSize(); ++ int netBufferMax = session.getPacketBufferSize(); ++ ++ /* ++ * We'll make the input buffers a bit bigger than the max needed ++ * size, so that unwrap()s following a successful data transfer ++ * won't generate BUFFER_OVERFLOWS. ++ * ++ * We'll use a mix of direct and indirect ByteBuffers for ++ * tutorial purposes only. In reality, only use direct ++ * ByteBuffers when they give a clear performance enhancement. ++ */ ++ if (direct) { ++ serverIn = ByteBuffer.allocateDirect(appBufferMax + 50); ++ cTOs = ByteBuffer.allocateDirect(netBufferMax); ++ sTOc = ByteBuffer.allocateDirect(netBufferMax); ++ } else { ++ serverIn = ByteBuffer.allocate(appBufferMax + 50); ++ cTOs = ByteBuffer.allocate(netBufferMax); ++ sTOc = ByteBuffer.allocate(netBufferMax); ++ } ++ ++ serverOut = ByteBuffer.wrap(serverMsg); ++ } ++ ++ /* ++ * If the result indicates that we have outstanding tasks to do, ++ * go ahead and run them in this thread. ++ */ ++ private static void runDelegatedTasks(SSLEngineResult result, ++ SSLEngine engine) throws Exception { ++ ++ if (result.getHandshakeStatus() == HandshakeStatus.NEED_TASK) { ++ Runnable runnable; ++ while ((runnable = engine.getDelegatedTask()) != null) { ++ log("\trunning delegated task..."); ++ runnable.run(); ++ } ++ HandshakeStatus hsStatus = engine.getHandshakeStatus(); ++ if (hsStatus == HandshakeStatus.NEED_TASK) { ++ throw new Exception( ++ "handshake shouldn't need additional tasks"); ++ } ++ log("\tnew HandshakeStatus: " + hsStatus); ++ } ++ } ++ ++ private static boolean isEngineClosed(SSLEngine engine) { ++ return (engine.isOutboundDone() && engine.isInboundDone()); ++ } ++ ++ /* ++ * Logging code ++ */ ++ private static boolean resultOnce = true; ++ ++ private static void log(String str, SSLEngineResult result) { ++ if (!logging) { ++ return; ++ } ++ if (resultOnce) { ++ resultOnce = false; ++ System.out.println("The format of the SSLEngineResult is: \n" ++ + "\t\"getStatus() / getHandshakeStatus()\" +\n" ++ + "\t\"bytesConsumed() / bytesProduced()\"\n"); ++ } ++ HandshakeStatus hsStatus = result.getHandshakeStatus(); ++ log(str ++ + result.getStatus() + "/" + hsStatus + ", " ++ + result.bytesConsumed() + "/" + result.bytesProduced() ++ + " bytes"); ++ if (hsStatus == HandshakeStatus.FINISHED) { ++ log("\t...ready for application data"); ++ } ++ } ++ ++ private static void log(String str) { ++ if (logging) { ++ System.out.println(str); ++ } ++ } ++} diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/7033174-tzdata2011e.patch openjdk-6-6b34-1.13.6/patches/openjdk/7033174-tzdata2011e.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/7033174-tzdata2011e.patch 2014-10-08 18:39:25.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/7033174-tzdata2011e.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,117 +0,0 @@ -# HG changeset patch -# User peytoia -# Date 1301898245 -32400 -# Node ID 8093f407d57d53d9744e3eb14a63c353a15896ff -# Parent 379a6504216e77569ee257cd5c1ece67521e9d3a -7033174: (tz) Support tzdata2011e -Reviewed-by: okutsu - ---- openjdk/jdk/make/sun/javazic/tzdata/VERSION -+++ openjdk/jdk/make/sun/javazic/tzdata/VERSION -@@ -21,4 +21,4 @@ - # or visit www.oracle.com if you need additional information or have any - # questions. - # --tzdata2011d -+tzdata2011e ---- openjdk/jdk/make/sun/javazic/tzdata/africa -+++ openjdk/jdk/make/sun/javazic/tzdata/africa -@@ -734,6 +734,48 @@ - # http://www.timeanddate.com/news/time/morocco-starts-dst-2010.html - # - -+# From Dan Abitol (2011-03-30): -+# ...Rules for Africa/Casablanca are the following (24h format) -+# The 3rd april 2011 at 00:00:00, [it] will be 3rd april 1:00:00 -+# The 31th july 2011 at 00:59:59, [it] will be 31th July 00:00:00 -+# ...Official links of change in morocco -+# The change was broadcast on the FM Radio -+# I ve called ANRT (telecom regulations in Morocco) at -+# +212.537.71.84.00 -+# -+# http://www.anrt.net.ma/fr/ -+# -+# They said that -+# -+# http://www.map.ma/fr/sections/accueil/l_heure_legale_au_ma/view -+# -+# is the official publication to look at. -+# They said that the decision was already taken. -+# -+# More articles in the press -+# -+# http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-lev -+# -+# e.html -+# -+# http://www.lematin.ma/Actualite/Express/Article.asp?id=148923 -+# -+# -+# http://www.lavieeco.com/actualite/Le-Maroc-passe-sur-GMT%2B1-a-partir-de-dim -+# anche-prochain-5538.html -+# -+ -+# From Petr Machata (2011-03-30): -+# They have it written in English here: -+# -+# http://www.map.ma/eng/sections/home/morocco_to_spring_fo/view -+# -+# -+# It says there that "Morocco will resume its standard time on July 31, -+# 2011 at midnight." Now they don't say whether they mean midnight of -+# wall clock time (i.e. 11pm UTC), but that's what I would assume. It has -+# also been like that in the past. -+ - # RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S - - Rule Morocco 1939 only - Sep 12 0:00 1:00 S -@@ -757,6 +799,8 @@ - Rule Morocco 2009 only - Aug 21 0:00 0 - - Rule Morocco 2010 only - May 2 0:00 1:00 S - Rule Morocco 2010 only - Aug 8 0:00 0 - -+Rule Morocco 2011 only - Apr 3 0:00 1:00 S -+Rule Morocco 2011 only - Jul 31 0 0 - - # Zone NAME GMTOFF RULES FORMAT [UNTIL] - Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26 - 0:00 Morocco WE%sT 1984 Mar 16 ---- openjdk/jdk/make/sun/javazic/tzdata/southamerica -+++ openjdk/jdk/make/sun/javazic/tzdata/southamerica -@@ -1193,6 +1193,19 @@ - # From Arthur David Olson (2011-03-02): - # The emol.com article mentions a water shortage as the cause of the - # postponement, which may mean that it's not a permanent change. -+ -+# From Glenn Eychaner (2011-03-28): -+# The article: -+# -+# http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E} -+# -+# -+# In English: -+# Chile's clocks will go back an hour this year on the 7th of May instead -+# of this Saturday. They will go forward again the 3rd Saturday in -+# August, not in October as they have since 1968. This is a pilot plan -+# which will be reevaluated in 2012. -+ - # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S - Rule Chile 1927 1932 - Sep 1 0:00 1:00 S - Rule Chile 1928 1932 - Apr 1 0:00 0 - -@@ -1222,13 +1235,16 @@ - Rule Chile 1998 only - Mar Sun>=9 3:00u 0 - - Rule Chile 1998 only - Sep 27 4:00u 1:00 S - Rule Chile 1999 only - Apr 4 3:00u 0 - --Rule Chile 1999 max - Oct Sun>=9 4:00u 1:00 S -+Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 S -+Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 S -+Rule Chile 2012 max - Oct Sun>=9 4:00u 1:00 S - Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 - - # N.B.: the end of March 29 in Chile is March 30 in Universal time, - # which is used below in specifying the transition. - Rule Chile 2008 only - Mar 30 3:00u 0 - - Rule Chile 2009 only - Mar Sun>=9 3:00u 0 - --Rule Chile 2010 2011 - Apr Sun>=1 3:00u 0 - -+Rule Chile 2010 only - Apr Sun>=1 3:00u 0 - -+Rule Chile 2011 only - May Sun>=2 3:00u 0 - - Rule Chile 2012 max - Mar Sun>=9 3:00u 0 - - # IATA SSIM anomalies: (1992-02) says 1992-03-14; - # (1996-09) says 1998-03-08. Ignore these. diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/7035073-missing_pt_br_timezones.patch openjdk-6-6b34-1.13.6/patches/openjdk/7035073-missing_pt_br_timezones.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/7035073-missing_pt_br_timezones.patch 2014-10-08 18:39:25.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/7035073-missing_pt_br_timezones.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,1644 +0,0 @@ -# HG changeset patch -# User peytoia -# Date 1302592601 -32400 -# Tue Apr 12 16:16:41 2011 +0900 -# Node ID e392becfd94f67beaf41432807a0eb0397f3f783 -# Parent 44b9482e9efb734a1290f1c6026e7d785a1f5e1e -7035073: Add missing timezones to TimeZoneNames_pt_BR.java -Reviewed-by: okutsu - -diff -r 44b9482e9efb -r e392becfd94f src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java Tue Apr 12 10:15:26 2011 +0400 -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java Tue Apr 12 16:16:41 2011 +0900 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -43,822 +43,824 @@ - public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { - - protected final Object[][] getContents() { -- String ACT[] = new String[] {"Fuso hor\u00e1rio do Acre", "ACT", -- "Fuso hor\u00e1rio de ver\u00e3o do Acre", "ACST"}; -- String ADELAIDE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central (Austr\u00e1lia do Sul)", "CST", -- "Fuso hor\u00e1rio de ver\u00e3o central (Austr\u00e1lia do Sul)", "CST"}; -- String AGT[] = new String[] {"Fuso hor\u00e1rio da Argentina", "ART", -- "Fuso hor\u00e1rio de ver\u00e3o da Argentina", "ARST"}; -- String AKST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Alaska", "AKST", -- "Hor\u00e1rio de luz natural do Alaska", "AKDT"}; -- String AMT[] = new String[] {"Fuso hor\u00e1rio do Amazonas", "AMT", -- "Fuso hor\u00e1rio de ver\u00e3o do Amazonas", "AMST"}; -- String ARAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Ar\u00e1bia", "AST", -- "Hor\u00e1rio de luz natural da Ar\u00e1bia", "ADT"}; -- String ARMT[] = new String[] {"Fuso hor\u00e1rio da Arm\u00eania", "AMT", -- "Fuso hor\u00e1rio de ver\u00e3o da Arm\u00eania", "AMST"}; -- String AST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Atl\u00e2ntico", "AST", -- "Hor\u00e1rio de luz natural do Atl\u00e2ntico", "ADT"}; -- String BDT[] = new String[] {"Fuso hor\u00e1rio de Bangladesh", "BDT", -- "Fuso hor\u00e1rio de ver\u00e3o de Bangladesh", "BDST"}; -- String BRISBANE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Queensland)", "EST", -- "Fuso hor\u00e1rio de ver\u00e3o oriental (Queensland)", "EST"}; -- String BROKEN_HILL[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central (Austr\u00e1lia do Sul/Nova Gales do Sul)", "CST", -- "Fuso hor\u00e1rio de ver\u00e3o central (Austr\u00e1lia do Sul/Nova Gales do Sul)", "CST"}; -- String BRT[] = new String[] {"Fuso hor\u00e1rio de Bras\u00edlia", "BRT", -- "Fuso hor\u00e1rio de ver\u00e3o de Bras\u00edlia", "BRST"}; -- String BTT[] = new String[] {"Fuso hor\u00e1rio de But\u00e3o", "BTT", -- "Fuso hor\u00e1rio de ver\u00e3o de But\u00e3o", "BTST"}; -- String CAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Central", "CAT", -- "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica Central", "CAST"}; -- String CET[] = new String[] {"Fuso hor\u00e1rio da Europa Central", "CET", -- "Fuso hor\u00e1rio de ver\u00e3o da Europa Central", "CEST"}; -- String CHAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chatham", "CHAST", -- "Hor\u00e1rio de luz natural de Chatham", "CHADT"}; -- String CIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Central", "CIT", -- "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Central", "CIST"}; -- String CLT[] = new String[] {"Fuso hor\u00e1rio do Chile", "CLT", -- "Fuso hor\u00e1rio de ver\u00e3o do Chile", "CLST"}; -- String CST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central", "CST", -- "Hor\u00e1rio de luz natural central", "CDT"}; -- String CTT[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da China", "CST", -- "Hor\u00e1rio de luz natural da China", "CDT"}; -- String CUBA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Cuba", "CST", -- "Hor\u00e1rio de luz natural de Cuba", "CDT"}; -- String DARWIN[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central (Territ\u00f3rio do Norte)", "CST", -- "Fuso hor\u00e1rio de ver\u00e3o central (Territ\u00f3rio do Norte)", "CST"}; -- String DUBLIN[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT", -- "Fuso hor\u00e1rio de ver\u00e3o da Irlanda", "IST"}; -- String EAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Oriental", "EAT", -- "Fuso hor\u00e1rio padr\u00e3o da \u00c1frica Oriental", "EAST"}; -- String EASTER[] = new String[] {"Fuso hor\u00e1rio da Ilha de P\u00e1scoa", "EAST", -- "Fuso hor\u00e1rio de ver\u00e3o da Ilha de P\u00e1scoa", "EASST"}; -- String EET[] = new String[] {"Fuso hor\u00e1rio da Europa Oriental", "EET", -- "Fuso hor\u00e1rio de ver\u00e3o da Europa Oriental", "EEST"}; -- String EGT[] = new String[] {"Fuso hor\u00e1rio da Groenl\u00e2ndia Oriental", "EGT", -- "Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Oriental", "EGST"}; -- String EST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental", "EST", -- "Hor\u00e1rio de luz natural oriental", "EDT"}; -- String EST_NSW[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Nova Gales do Sul)", "EST", -- "Fuso hor\u00e1rio de ver\u00e3o oriental (Nova Gales do Sul)", "EST"}; -- String GHMT[] = new String[] {"Fuso hor\u00e1rio do meridiano de Gana", "GMT", -- "Fuso hor\u00e1rio de ver\u00e3o de Gana", "GHST"}; -- String GAMBIER[] = new String[] {"Fuso hor\u00e1rio de Gambier", "GAMT", -- "Fuso hor\u00e1rio de ver\u00e3o de Gambier", "GAMST"}; -- String GMT[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT", -- "Fuso hor\u00e1rio do meridiano de Greenwich", "GMT"}; -- String GMTBST[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT", -- "Fuso hor\u00e1rio de ver\u00e3o da Gr\u00e3-Bretanha", "BST"}; -- String GST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do golfo", "GST", -- "Hor\u00e1rio de luz natural do golfo", "GDT"}; -- String HAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Hava\u00ed-Aleutian", "HAST", -- "Hor\u00e1rio de luz natural do Hava\u00ed-Aleutian", "HADT"}; -- String HKT[] = new String[] {"Fuso hor\u00e1rio de Hong Kong", "HKT", -- "Fuso hor\u00e1rio de ver\u00e3o de Hong Kong", "HKST"}; -- String HST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Hava\u00ed", "HST", -- "Hor\u00e1rio de luz natural do Hava\u00ed", "HDT"}; -- String ICT[] = new String[] {"Fuso hor\u00e1rio da Indochina", "ICT", -- "Fuso hor\u00e1rio de ver\u00e3o da Indochina", "ICST"}; -- String IRT[] = new String[] {"Fuso hor\u00e1rio do Ir\u00e3", "IRST", -- "Hor\u00e1rio de luz natural do Ir\u00e3", "IRDT"}; -- String ISRAEL[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Israel", "IST", -- "Hor\u00e1rio de luz natural de Israel", "IDT"}; -- String IST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da \u00cdndia", "IST", -- "Hor\u00e1rio de luz natural da \u00cdndia", "IDT"}; -- String JST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Jap\u00e3o", "JST", -- "Hor\u00e1rio de luz natural do Jap\u00e3o", "JDT"}; -- String KST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Coreia", "KST", -- "Hor\u00e1rio de luz natural da Coreia", "KDT"}; -- String LORD_HOWE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Lord Howe", "LHST", -- "Fuso hor\u00e1rio de ver\u00e3o de Lord Howe", "LHST"}; -- String MHT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Marshall", "MHT", -- "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Marshall", "MHST"}; -- String MSK[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Moscou", "MSK", -- "Hor\u00e1rio de luz natural de Moscou", "MSD"}; -- String MST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o das montanhas", "MST", -- "Hor\u00e1rio de luz natural das montanhas", "MDT"}; -- String MYT[] = new String[] {"Fuso hor\u00e1rio da Mal\u00e1sia", "MYT", -- "Fuso hor\u00e1rio de ver\u00e3o da Mal\u00e1sia", "MYST"}; -- String NORONHA[] = new String[] {"Fuso hor\u00e1rio de Fernando de Noronha", "FNT", -- "Fuso hor\u00e1rio de ver\u00e3o de Fernando de Noronha", "FNST"}; -- String NOVT[] = new String[] {"Fuso hor\u00e1rio de Novosibirsk", "NOVT", -- "Fuso hor\u00e1rio de ver\u00e3o de Novosibirsk", "NOVST"}; -+ String ACT[] = new String[] {"Fuso hor\u00e1rio do Acre", "ACT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Acre", "ACST"}; -+ String ADELAIDE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central (Austr\u00e1lia do Sul)", "CST", -+ "Fuso hor\u00e1rio de ver\u00e3o central (Austr\u00e1lia do Sul)", "CST"}; -+ String AGT[] = new String[] {"Fuso hor\u00e1rio da Argentina", "ART", -+ "Fuso hor\u00e1rio de ver\u00e3o da Argentina", "ARST"}; -+ String AKST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Alaska", "AKST", -+ "Hor\u00e1rio de luz natural do Alaska", "AKDT"}; -+ String AMT[] = new String[] {"Fuso hor\u00e1rio do Amazonas", "AMT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Amazonas", "AMST"}; -+ String ARAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Ar\u00e1bia", "AST", -+ "Hor\u00e1rio de luz natural da Ar\u00e1bia", "ADT"}; -+ String ARMT[] = new String[] {"Fuso hor\u00e1rio da Arm\u00eania", "AMT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Arm\u00eania", "AMST"}; -+ String AST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Atl\u00e2ntico", "AST", -+ "Hor\u00e1rio de luz natural do Atl\u00e2ntico", "ADT"}; -+ String BDT[] = new String[] {"Fuso hor\u00e1rio de Bangladesh", "BDT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Bangladesh", "BDST"}; -+ String BRISBANE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Queensland)", "EST", -+ "Fuso hor\u00e1rio de ver\u00e3o oriental (Queensland)", "EST"}; -+ String BROKEN_HILL[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central (Austr\u00e1lia do Sul/Nova Gales do Sul)", "CST", -+ "Fuso hor\u00e1rio de ver\u00e3o central (Austr\u00e1lia do Sul/Nova Gales do Sul)", "CST"}; -+ String BRT[] = new String[] {"Fuso hor\u00e1rio de Bras\u00edlia", "BRT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Bras\u00edlia", "BRST"}; -+ String BTT[] = new String[] {"Fuso hor\u00e1rio de But\u00e3o", "BTT", -+ "Fuso hor\u00e1rio de ver\u00e3o de But\u00e3o", "BTST"}; -+ String CAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Central", "CAT", -+ "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica Central", "CAST"}; -+ String CET[] = new String[] {"Fuso hor\u00e1rio da Europa Central", "CET", -+ "Fuso hor\u00e1rio de ver\u00e3o da Europa Central", "CEST"}; -+ String CHAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chatham", "CHAST", -+ "Hor\u00e1rio de luz natural de Chatham", "CHADT"}; -+ String CIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Central", "CIT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Central", "CIST"}; -+ String CLT[] = new String[] {"Fuso hor\u00e1rio do Chile", "CLT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Chile", "CLST"}; -+ String CST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central", "CST", -+ "Hor\u00e1rio de luz natural central", "CDT"}; -+ String CTT[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da China", "CST", -+ "Hor\u00e1rio de luz natural da China", "CDT"}; -+ String CUBA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Cuba", "CST", -+ "Hor\u00e1rio de luz natural de Cuba", "CDT"}; -+ String DARWIN[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central (Territ\u00f3rio do Norte)", "CST", -+ "Fuso hor\u00e1rio de ver\u00e3o central (Territ\u00f3rio do Norte)", "CST"}; -+ String DUBLIN[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Irlanda", "IST"}; -+ String EAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Oriental", "EAT", -+ "Fuso hor\u00e1rio padr\u00e3o da \u00c1frica Oriental", "EAST"}; -+ String EASTER[] = new String[] {"Fuso hor\u00e1rio da Ilha de P\u00e1scoa", "EAST", -+ "Fuso hor\u00e1rio de ver\u00e3o da Ilha de P\u00e1scoa", "EASST"}; -+ String EET[] = new String[] {"Fuso hor\u00e1rio da Europa Oriental", "EET", -+ "Fuso hor\u00e1rio de ver\u00e3o da Europa Oriental", "EEST"}; -+ String EGT[] = new String[] {"Fuso hor\u00e1rio da Groenl\u00e2ndia Oriental", "EGT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Oriental", "EGST"}; -+ String EST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental", "EST", -+ "Hor\u00e1rio de luz natural oriental", "EDT"}; -+ String EST_NSW[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Nova Gales do Sul)", "EST", -+ "Fuso hor\u00e1rio de ver\u00e3o oriental (Nova Gales do Sul)", "EST"}; -+ String GHMT[] = new String[] {"Fuso hor\u00e1rio do meridiano de Gana", "GMT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Gana", "GHST"}; -+ String GAMBIER[] = new String[] {"Fuso hor\u00e1rio de Gambier", "GAMT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Gambier", "GAMST"}; -+ String GMT[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT", -+ "Fuso hor\u00e1rio do meridiano de Greenwich", "GMT"}; -+ String GMTBST[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Gr\u00e3-Bretanha", "BST"}; -+ String GST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do golfo", "GST", -+ "Hor\u00e1rio de luz natural do golfo", "GDT"}; -+ String HAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Hava\u00ed-Aleutian", "HAST", -+ "Hor\u00e1rio de luz natural do Hava\u00ed-Aleutian", "HADT"}; -+ String HKT[] = new String[] {"Fuso hor\u00e1rio de Hong Kong", "HKT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Hong Kong", "HKST"}; -+ String HST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Hava\u00ed", "HST", -+ "Hor\u00e1rio de luz natural do Hava\u00ed", "HDT"}; -+ String ICT[] = new String[] {"Fuso hor\u00e1rio da Indochina", "ICT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Indochina", "ICST"}; -+ String IRT[] = new String[] {"Fuso hor\u00e1rio do Ir\u00e3", "IRST", -+ "Hor\u00e1rio de luz natural do Ir\u00e3", "IRDT"}; -+ String ISRAEL[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Israel", "IST", -+ "Hor\u00e1rio de luz natural de Israel", "IDT"}; -+ String IST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da \u00cdndia", "IST", -+ "Hor\u00e1rio de luz natural da \u00cdndia", "IDT"}; -+ String JST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Jap\u00e3o", "JST", -+ "Hor\u00e1rio de luz natural do Jap\u00e3o", "JDT"}; -+ String KST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Coreia", "KST", -+ "Hor\u00e1rio de luz natural da Coreia", "KDT"}; -+ String LORD_HOWE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Lord Howe", "LHST", -+ "Fuso hor\u00e1rio de ver\u00e3o de Lord Howe", "LHST"}; -+ String MHT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Marshall", "MHT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Marshall", "MHST"}; -+ String MSK[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Moscou", "MSK", -+ "Hor\u00e1rio de luz natural de Moscou", "MSD"}; -+ String MST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o das montanhas", "MST", -+ "Hor\u00e1rio de luz natural das montanhas", "MDT"}; -+ String MYT[] = new String[] {"Fuso hor\u00e1rio da Mal\u00e1sia", "MYT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Mal\u00e1sia", "MYST"}; -+ String NORONHA[] = new String[] {"Fuso hor\u00e1rio de Fernando de Noronha", "FNT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Fernando de Noronha", "FNST"}; -+ String NOVT[] = new String[] {"Fuso hor\u00e1rio de Novosibirsk", "NOVT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Novosibirsk", "NOVST"}; - String NPT[] = new String[] {"Fuso hor\u00e1rio do Nepal", "NPT", - "Fuso hor\u00e1rio de ver\u00e3o do Nepal", "NPST"}; -- String NST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Terra Nova", "NST", -- "Hor\u00e1rio de luz natural de Terra Nova", "NDT"}; -- String NZST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Nova Zel\u00e2ndia", "NZST", -- "Hor\u00e1rio de luz natural da Nova Zel\u00e2ndia", "NZDT"}; -+ String NST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Terra Nova", "NST", -+ "Hor\u00e1rio de luz natural de Terra Nova", "NDT"}; -+ String NZST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Nova Zel\u00e2ndia", "NZST", -+ "Hor\u00e1rio de luz natural da Nova Zel\u00e2ndia", "NZDT"}; - String PITCAIRN[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Pitcairn", "PST", -- "Hor\u00e1rio de luz natural de Pitcairn", "PDT"}; -- String PKT[] = new String[] {"Fuso hor\u00e1rio do Paquist\u00e3o", "PKT", -- "Fuso hor\u00e1rio de ver\u00e3o do Paquist\u00e3o", "PKST"}; -- String PONT[] = new String[] {"Fuso hor\u00e1rio de Pohnpei", "PONT", -- "Fuso hor\u00e1rio de ver\u00e3o de Pohnpei", "PONST"}; -- String PST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Pac\u00edfico", "PST", -- "Hor\u00e1rio de luz natural do Pac\u00edfico", "PDT"}; -+ "Hor\u00e1rio de luz natural de Pitcairn", "PDT"}; -+ String PKT[] = new String[] {"Fuso hor\u00e1rio do Paquist\u00e3o", "PKT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Paquist\u00e3o", "PKST"}; -+ String PONT[] = new String[] {"Fuso hor\u00e1rio de Pohnpei", "PONT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Pohnpei", "PONST"}; -+ String PST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Pac\u00edfico", "PST", -+ "Hor\u00e1rio de luz natural do Pac\u00edfico", "PDT"}; - String RST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental", "EST", - "Hor\u00e1rio de luz natural central", "CDT"}; -- String SAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da \u00c1frica do Sul", "SAST", -- "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica do Sul", "SAST"}; -- String SBT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Salom\u00e3o", "SBT", -- "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Salom\u00e3o", "SBST"}; -- String SGT[] = new String[] {"Fuso hor\u00e1rio de Cingapura", "SGT", -- "Fuso hor\u00e1rio de ver\u00e1 de Cingapura", "SGST"}; -- String SLST[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT", -- "Fuso hor\u00e1rio de ver\u00e3o de Serra Leoa", "SLST"}; -- String TASMANIA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Tasm\u00e2nia)", "EST", -- "Fuso hor\u00e1rio de ver\u00e3o oriental (Tasm\u00e2nia)", "EST"}; -- String TMT[] = new String[] {"Fuso hor\u00e1rio do Turcomenist\u00e3o", "TMT", -- "Fuso hor\u00e1rio de ver\u00e3o do Turcomenist\u00e3o", "TMST"}; -- String TRUT[] = new String[] {"Fuso hor\u00e1rio de Chuuk", "CHUT", -- "Fuso hor\u00e1rio de ver\u00e3o de Chuuk", "CHUST"}; -- String ULAT[]= new String[] {"Fuso hor\u00e1rio de Ulan Bator", "ULAT", -- "Fuso hor\u00e1rio de ver\u00e3o de Ulan Bator", "ULAST"}; -- String WAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Ocidental", "WAT", -- "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica Ocidental", "WAST"}; -- String WET[] = new String[] {"Fuso hor\u00e1rio da Europa Ocidental", "WET", -- "Fuso hor\u00e1rio de ver\u00e3o da Europa Ocidental", "WEST"}; -- String WIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Ocidental", "WIT", -- "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Ocidental", "WIST"}; -- String WST_AUS[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o ocidental (Austr\u00e1lia)", "WST", -- "Fuso hor\u00e1rio de ver\u00e3o ocidental (Austr\u00e1lia)", "WST"}; -- String SAMOA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Samoa", "SST", -- "Hor\u00e1rio de luz natural de Samoa", "SDT"}; -- String WST_SAMOA[] = new String[] {"Fuso hor\u00e1rio de Samoa Ocidental", "WST", -- "Fuso hor\u00e1rio de ver\u00e3o de Samoa Ocidental", "WSST"}; -- String ChST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chamorro", "ChST", -- "Hor\u00e1rio de luz natural de Chamorro", "ChDT"}; -- String VICTORIA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Victoria)", "EST", -- "Fuso hor\u00e1rio de ver\u00e3o oriental (Victoria)", "EST"}; -- String UTC[] = new String[] {"Tempo universal coordenado", "UTC", -- "Tempo universal coordenado", "UTC"}; -- String UZT[] = new String[] {"Fuso hor\u00e1rio do Uzbequist\u00e3o", "UZT", -- "Fuso hor\u00e1rio de ver\u00e3o do Uzbequist\u00e3o", "UZST"}; -- String WART[] = new String[] {"Fuso hor\u00e1rio da Argentina Ocidental", "WART", -- "Fuso hor\u00e1rio de ver\u00e3o da Argentina Ocidental", "WARST"}; -+ String SAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da \u00c1frica do Sul", "SAST", -+ "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica do Sul", "SAST"}; -+ String SBT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Salom\u00e3o", "SBT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Salom\u00e3o", "SBST"}; -+ String SGT[] = new String[] {"Fuso hor\u00e1rio de Cingapura", "SGT", -+ "Fuso hor\u00e1rio de ver\u00e1 de Cingapura", "SGST"}; -+ String SLST[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Serra Leoa", "SLST"}; -+ String TASMANIA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Tasm\u00e2nia)", "EST", -+ "Fuso hor\u00e1rio de ver\u00e3o oriental (Tasm\u00e2nia)", "EST"}; -+ String TMT[] = new String[] {"Fuso hor\u00e1rio do Turcomenist\u00e3o", "TMT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Turcomenist\u00e3o", "TMST"}; -+ String TRUT[] = new String[] {"Fuso hor\u00e1rio de Chuuk", "CHUT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Chuuk", "CHUST"}; -+ String ULAT[]= new String[] {"Fuso hor\u00e1rio de Ulan Bator", "ULAT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Ulan Bator", "ULAST"}; -+ String WAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Ocidental", "WAT", -+ "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica Ocidental", "WAST"}; -+ String WET[] = new String[] {"Fuso hor\u00e1rio da Europa Ocidental", "WET", -+ "Fuso hor\u00e1rio de ver\u00e3o da Europa Ocidental", "WEST"}; -+ String WIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Ocidental", "WIT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Ocidental", "WIST"}; -+ String WST_AUS[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o ocidental (Austr\u00e1lia)", "WST", -+ "Fuso hor\u00e1rio de ver\u00e3o ocidental (Austr\u00e1lia)", "WST"}; -+ String SAMOA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Samoa", "SST", -+ "Hor\u00e1rio de luz natural de Samoa", "SDT"}; -+ String WST_SAMOA[] = new String[] {"Fuso hor\u00e1rio de Samoa Ocidental", "WST", -+ "Fuso hor\u00e1rio de ver\u00e3o de Samoa Ocidental", "WSST"}; -+ String ChST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chamorro", "ChST", -+ "Hor\u00e1rio de luz natural de Chamorro", "ChDT"}; -+ String VICTORIA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Victoria)", "EST", -+ "Fuso hor\u00e1rio de ver\u00e3o oriental (Victoria)", "EST"}; -+ String UTC[] = new String[] {"Tempo universal coordenado", "UTC", -+ "Tempo universal coordenado", "UTC"}; -+ String UZT[] = new String[] {"Fuso hor\u00e1rio do Uzbequist\u00e3o", "UZT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Uzbequist\u00e3o", "UZST"}; -+ String WART[] = new String[] {"Fuso hor\u00e1rio da Argentina Ocidental", "WART", -+ "Fuso hor\u00e1rio de ver\u00e3o da Argentina Ocidental", "WARST"}; - -+ return new Object[][] { -+ {"America/Los_Angeles", PST}, -+ {"PST", PST}, -+ {"America/Denver", MST}, -+ {"MST", MST}, -+ {"America/Phoenix", MST}, -+ {"PNT", MST}, -+ {"America/Chicago", CST}, -+ {"CST", CST}, -+ {"America/New_York", EST}, -+ {"EST", EST}, -+ {"America/Indianapolis", EST}, -+ {"IET", EST}, -+ {"Pacific/Honolulu", HST}, -+ {"HST", HST}, -+ {"America/Anchorage", AKST}, -+ {"AST", AKST}, -+ {"America/Halifax", AST}, -+ {"America/Sitka", AKST}, -+ {"America/St_Johns", NST}, -+ {"CNT", NST}, -+ {"Europe/Paris", CET}, -+ {"ECT", CET}, -+ {"GMT", GMT}, -+ {"Africa/Casablanca", WET}, -+ {"Asia/Jerusalem", ISRAEL}, -+ {"Asia/Tokyo", JST}, -+ {"JST", JST}, -+ {"Europe/Bucharest", EET}, -+ {"Asia/Shanghai", CTT}, -+ {"CTT", CTT}, -+ /* Don't change the order of the above zones -+ * to keep compatibility with the previous version. -+ */ - -- return new Object[][] { -- {"America/Los_Angeles", PST}, -- {"PST", PST}, -- {"America/Denver", MST}, -- {"MST", MST}, -- {"America/Phoenix", MST}, -- {"PNT", MST}, -- {"America/Chicago", CST}, -- {"CST", CST}, -- {"America/New_York", EST}, -- {"EST", EST}, -- {"America/Indianapolis", EST}, -- {"IET", EST}, -- {"Pacific/Honolulu", HST}, -- {"HST", HST}, -- {"America/Anchorage", AKST}, -- {"AST", AKST}, -- {"America/Halifax", AST}, -- {"America/Sitka", AKST}, -- {"America/St_Johns", NST}, -- {"CNT", NST}, -- {"Europe/Paris", CET}, -- {"ECT", CET}, -- {"GMT", GMT}, -- {"Africa/Casablanca", WET}, -- {"Asia/Jerusalem", ISRAEL}, -- {"Asia/Tokyo", JST}, -- {"JST", JST}, -- {"Europe/Bucharest", EET}, -- {"Asia/Shanghai", CTT}, -- {"CTT", CTT}, -- /* Don't change the order of the above zones -- * to keep compatibility with the previous version. -- */ -- -- {"ACT", DARWIN}, -- {"AET", EST_NSW}, -- {"AGT", AGT}, -- {"ART", EET}, -- {"Africa/Abidjan", GMT}, -- {"Africa/Accra", GHMT}, -- {"Africa/Addis_Ababa", EAT}, -- {"Africa/Algiers", CET}, -- {"Africa/Asmara", EAT}, -- {"Africa/Asmera", EAT}, -- {"Africa/Bamako", GMT}, -- {"Africa/Bangui", WAT}, -- {"Africa/Banjul", GMT}, -- {"Africa/Bissau", GMT}, -- {"Africa/Blantyre", CAT}, -- {"Africa/Brazzaville", WAT}, -- {"Africa/Bujumbura", CAT}, -- {"Africa/Cairo", EET}, -- {"Africa/Ceuta", CET}, -- {"Africa/Conakry", GMT}, -- {"Africa/Dakar", GMT}, -- {"Africa/Dar_es_Salaam", EAT}, -- {"Africa/Djibouti", EAT}, -- {"Africa/Douala", WAT}, -- {"Africa/El_Aaiun", WET}, -- {"Africa/Freetown", SLST}, -- {"Africa/Gaborone", CAT}, -- {"Africa/Harare", CAT}, -- {"Africa/Johannesburg", SAST}, -- {"Africa/Kampala", EAT}, -- {"Africa/Khartoum", EAT}, -- {"Africa/Kigali", CAT}, -- {"Africa/Kinshasa", WAT}, -- {"Africa/Lagos", WAT}, -- {"Africa/Libreville", WAT}, -- {"Africa/Lome", GMT}, -- {"Africa/Luanda", WAT}, -- {"Africa/Lubumbashi", CAT}, -- {"Africa/Lusaka", CAT}, -- {"Africa/Malabo", WAT}, -- {"Africa/Maputo", CAT}, -- {"Africa/Maseru", SAST}, -- {"Africa/Mbabane", SAST}, -- {"Africa/Mogadishu", EAT}, -- {"Africa/Monrovia", GMT}, -- {"Africa/Nairobi", EAT}, -- {"Africa/Ndjamena", WAT}, -- {"Africa/Niamey", WAT}, -- {"Africa/Nouakchott", GMT}, -- {"Africa/Ouagadougou", GMT}, -- {"Africa/Porto-Novo", WAT}, -- {"Africa/Sao_Tome", GMT}, -- {"Africa/Timbuktu", GMT}, -- {"Africa/Tripoli", EET}, -- {"Africa/Tunis", CET}, -- {"Africa/Windhoek", WAT}, -- {"America/Adak", HAST}, -- {"America/Anguilla", AST}, -- {"America/Antigua", AST}, -- {"America/Araguaina", BRT}, -- {"America/Argentina/Buenos_Aires", AGT}, -- {"America/Argentina/Catamarca", AGT}, -- {"America/Argentina/ComodRivadavia", AGT}, -- {"America/Argentina/Cordoba", AGT}, -- {"America/Argentina/Jujuy", AGT}, -- {"America/Argentina/La_Rioja", AGT}, -- {"America/Argentina/Mendoza", AGT}, -- {"America/Argentina/Rio_Gallegos", AGT}, -- {"America/Argentina/Salta", AGT}, -- {"America/Argentina/San_Juan", AGT}, -- {"America/Argentina/San_Luis", WART}, -- {"America/Argentina/Tucuman", AGT}, -- {"America/Argentina/Ushuaia", AGT}, -- {"America/Aruba", AST}, -- {"America/Asuncion", new String[] {"Fuso hor\u00e1rio do Paraguai", "PYT", -- "Fuso hor\u00e1rio de ver\u00e3o do Paraguai", "PYST"}}, -+ {"ACT", DARWIN}, -+ {"AET", EST_NSW}, -+ {"AGT", AGT}, -+ {"ART", EET}, -+ {"Africa/Abidjan", GMT}, -+ {"Africa/Accra", GHMT}, -+ {"Africa/Addis_Ababa", EAT}, -+ {"Africa/Algiers", CET}, -+ {"Africa/Asmara", EAT}, -+ {"Africa/Asmera", EAT}, -+ {"Africa/Bamako", GMT}, -+ {"Africa/Bangui", WAT}, -+ {"Africa/Banjul", GMT}, -+ {"Africa/Bissau", GMT}, -+ {"Africa/Blantyre", CAT}, -+ {"Africa/Brazzaville", WAT}, -+ {"Africa/Bujumbura", CAT}, -+ {"Africa/Cairo", EET}, -+ {"Africa/Ceuta", CET}, -+ {"Africa/Conakry", GMT}, -+ {"Africa/Dakar", GMT}, -+ {"Africa/Dar_es_Salaam", EAT}, -+ {"Africa/Djibouti", EAT}, -+ {"Africa/Douala", WAT}, -+ {"Africa/El_Aaiun", WET}, -+ {"Africa/Freetown", SLST}, -+ {"Africa/Gaborone", CAT}, -+ {"Africa/Harare", CAT}, -+ {"Africa/Johannesburg", SAST}, -+ {"Africa/Kampala", EAT}, -+ {"Africa/Khartoum", EAT}, -+ {"Africa/Kigali", CAT}, -+ {"Africa/Kinshasa", WAT}, -+ {"Africa/Lagos", WAT}, -+ {"Africa/Libreville", WAT}, -+ {"Africa/Lome", GMT}, -+ {"Africa/Luanda", WAT}, -+ {"Africa/Lubumbashi", CAT}, -+ {"Africa/Lusaka", CAT}, -+ {"Africa/Malabo", WAT}, -+ {"Africa/Maputo", CAT}, -+ {"Africa/Maseru", SAST}, -+ {"Africa/Mbabane", SAST}, -+ {"Africa/Mogadishu", EAT}, -+ {"Africa/Monrovia", GMT}, -+ {"Africa/Nairobi", EAT}, -+ {"Africa/Ndjamena", WAT}, -+ {"Africa/Niamey", WAT}, -+ {"Africa/Nouakchott", GMT}, -+ {"Africa/Ouagadougou", GMT}, -+ {"Africa/Porto-Novo", WAT}, -+ {"Africa/Sao_Tome", GMT}, -+ {"Africa/Timbuktu", GMT}, -+ {"Africa/Tripoli", EET}, -+ {"Africa/Tunis", CET}, -+ {"Africa/Windhoek", WAT}, -+ {"America/Adak", HAST}, -+ {"America/Anguilla", AST}, -+ {"America/Antigua", AST}, -+ {"America/Araguaina", BRT}, -+ {"America/Argentina/Buenos_Aires", AGT}, -+ {"America/Argentina/Catamarca", AGT}, -+ {"America/Argentina/ComodRivadavia", AGT}, -+ {"America/Argentina/Cordoba", AGT}, -+ {"America/Argentina/Jujuy", AGT}, -+ {"America/Argentina/La_Rioja", AGT}, -+ {"America/Argentina/Mendoza", AGT}, -+ {"America/Argentina/Rio_Gallegos", AGT}, -+ {"America/Argentina/Salta", AGT}, -+ {"America/Argentina/San_Juan", AGT}, -+ {"America/Argentina/San_Luis", WART}, -+ {"America/Argentina/Tucuman", AGT}, -+ {"America/Argentina/Ushuaia", AGT}, -+ {"America/Aruba", AST}, -+ {"America/Asuncion", new String[] {"Fuso hor\u00e1rio do Paraguai", "PYT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Paraguai", "PYST"}}, - {"America/Atikokan", EST}, -- {"America/Atka", HAST}, -- {"America/Bahia", BRT}, -- {"America/Bahia_Banderas", CST}, -- {"America/Barbados", AST}, -- {"America/Belem", BRT}, -- {"America/Belize", CST}, -+ {"America/Atka", HAST}, -+ {"America/Bahia", BRT}, -+ {"America/Bahia_Banderas", CST}, -+ {"America/Barbados", AST}, -+ {"America/Belem", BRT}, -+ {"America/Belize", CST}, - {"America/Blanc-Sablon", AST}, -- {"America/Boa_Vista", AMT}, -- {"America/Bogota", new String[] {"Fuso hor\u00e1rio da Col\u00f4mbia", "COT", -- "Fuso hor\u00e1rio de ver\u00e3o da Col\u00f4mbia", "COST"}}, -- {"America/Boise", MST}, -- {"America/Buenos_Aires", AGT}, -- {"America/Cambridge_Bay", MST}, -- {"America/Campo_Grande", AMT}, -- {"America/Cancun", CST}, -- {"America/Caracas", new String[] {"Fuso hor\u00e1rio da Venezuela", "VET", -- "Fuso hor\u00e1rio de ver\u00e3o da Venezuela", "VEST"}}, -- {"America/Catamarca", AGT}, -- {"America/Cayenne", new String[] {"Fuso hor\u00e1rio da Guiana Francesa", "GFT", -- "Fuso hor\u00e1rio de ver\u00e3o da Guiana Francesa", "GFST"}}, -- {"America/Cayman", EST}, -- {"America/Chihuahua", MST}, -- {"America/Coral_Harbour", EST}, -- {"America/Cordoba", AGT}, -- {"America/Costa_Rica", CST}, -- {"America/Cuiaba", AMT}, -- {"America/Curacao", AST}, -- {"America/Danmarkshavn", GMT}, -- {"America/Dawson", PST}, -- {"America/Dawson_Creek", MST}, -- {"America/Detroit", EST}, -- {"America/Dominica", AST}, -- {"America/Edmonton", MST}, -- {"America/Eirunepe", AMT}, -- {"America/El_Salvador", CST}, -- {"America/Ensenada", PST}, -- {"America/Fort_Wayne", EST}, -- {"America/Fortaleza", BRT}, -- {"America/Glace_Bay", AST}, -- {"America/Godthab", new String[] {"Fuso hor\u00e1rio da Groenl\u00e2ndia Ocidental", "WGT", -- "Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Ocidental", "WGST"}}, -- {"America/Goose_Bay", AST}, -- {"America/Grand_Turk", EST}, -- {"America/Grenada", AST}, -- {"America/Guadeloupe", AST}, -- {"America/Guatemala", CST}, -- {"America/Guayaquil", new String[] {"Fuso hor\u00e1rio do Equador", "ECT", -- "Fuso hor\u00e1rio de ver\u00e3o do Equador", "ECST"}}, -- {"America/Guyana", new String[] {"Fuso hor\u00e1rio da Guiana", "GYT", -- "Fuso hor\u00e1rio de ver\u00e3o da Guiana", "GYST"}}, -- {"America/Havana", CUBA}, -- {"America/Hermosillo", MST}, -- {"America/Indiana/Indianapolis", EST}, -- {"America/Indiana/Knox", CST}, -- {"America/Indiana/Marengo", EST}, -- {"America/Indiana/Petersburg", EST}, -- {"America/Indiana/Tell_City", CST}, -- {"America/Indiana/Vevay", EST}, -- {"America/Indiana/Vincennes", EST}, -- {"America/Indiana/Winamac", EST}, -- {"America/Inuvik", MST}, -- {"America/Iqaluit", EST}, -- {"America/Jamaica", EST}, -- {"America/Jujuy", AGT}, -- {"America/Juneau", AKST}, -- {"America/Kentucky/Louisville", EST}, -- {"America/Kentucky/Monticello", EST}, -- {"America/Knox_IN", CST}, -- {"America/La_Paz", new String[] {"Fuso hor\u00e1rio da Bol\u00edvia", "BOT", -- "Fuso hor\u00e1rio de ver\u00e3o da Bol\u00edvia", "BOST"}}, -- {"America/Lima", new String[] {"Fuso hor\u00e1rio do Peru", "PET", -- "Fuso hor\u00e1rio de ver\u00e3o do Peru", "PEST"}}, -- {"America/Louisville", EST}, -- {"America/Maceio", BRT}, -- {"America/Managua", CST}, -- {"America/Manaus", AMT}, -- {"America/Marigot", AST}, -- {"America/Martinique", AST}, -- {"America/Mazatlan", MST}, -- {"America/Mendoza", AGT}, -- {"America/Menominee", CST}, -- {"America/Merida", CST}, -- {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", -- "Metlakatla Daylight Time", "MeDT"}}, -- {"America/Mexico_City", CST}, -- {"America/Miquelon", new String[] {"Fuso hor\u00e1rio padr\u00e3o de S\u00e3o Pedro e Miquelon", "PMST", -- "Hor\u00e1rio de luz natural de S\u00e3o Pedro e Miquelon", "PMDT"}}, -- {"America/Moncton", AST}, -- {"America/Montevideo", new String[] {"Fuso hor\u00e1rio do Uruguai", "UYT", -- "Fuso hor\u00e1rio de ver\u00e3o do Uruguai", "UYST"}}, -- {"America/Monterrey", CST}, -- {"America/Montreal", EST}, -- {"America/Montserrat", AST}, -- {"America/Nassau", EST}, -- {"America/Nipigon", EST}, -- {"America/Nome", AKST}, -- {"America/Noronha", NORONHA}, -+ {"America/Boa_Vista", AMT}, -+ {"America/Bogota", new String[] {"Fuso hor\u00e1rio da Col\u00f4mbia", "COT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Col\u00f4mbia", "COST"}}, -+ {"America/Boise", MST}, -+ {"America/Buenos_Aires", AGT}, -+ {"America/Cambridge_Bay", MST}, -+ {"America/Campo_Grande", AMT}, -+ {"America/Cancun", CST}, -+ {"America/Caracas", new String[] {"Fuso hor\u00e1rio da Venezuela", "VET", -+ "Fuso hor\u00e1rio de ver\u00e3o da Venezuela", "VEST"}}, -+ {"America/Catamarca", AGT}, -+ {"America/Cayenne", new String[] {"Fuso hor\u00e1rio da Guiana Francesa", "GFT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Guiana Francesa", "GFST"}}, -+ {"America/Cayman", EST}, -+ {"America/Chihuahua", MST}, -+ {"America/Coral_Harbour", EST}, -+ {"America/Cordoba", AGT}, -+ {"America/Costa_Rica", CST}, -+ {"America/Cuiaba", AMT}, -+ {"America/Curacao", AST}, -+ {"America/Danmarkshavn", GMT}, -+ {"America/Dawson", PST}, -+ {"America/Dawson_Creek", MST}, -+ {"America/Detroit", EST}, -+ {"America/Dominica", AST}, -+ {"America/Edmonton", MST}, -+ {"America/Eirunepe", AMT}, -+ {"America/El_Salvador", CST}, -+ {"America/Ensenada", PST}, -+ {"America/Fort_Wayne", EST}, -+ {"America/Fortaleza", BRT}, -+ {"America/Glace_Bay", AST}, -+ {"America/Godthab", new String[] {"Fuso hor\u00e1rio da Groenl\u00e2ndia Ocidental", "WGT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Ocidental", "WGST"}}, -+ {"America/Goose_Bay", AST}, -+ {"America/Grand_Turk", EST}, -+ {"America/Grenada", AST}, -+ {"America/Guadeloupe", AST}, -+ {"America/Guatemala", CST}, -+ {"America/Guayaquil", new String[] {"Fuso hor\u00e1rio do Equador", "ECT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Equador", "ECST"}}, -+ {"America/Guyana", new String[] {"Fuso hor\u00e1rio da Guiana", "GYT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Guiana", "GYST"}}, -+ {"America/Havana", CUBA}, -+ {"America/Hermosillo", MST}, -+ {"America/Indiana/Indianapolis", EST}, -+ {"America/Indiana/Knox", CST}, -+ {"America/Indiana/Marengo", EST}, -+ {"America/Indiana/Petersburg", EST}, -+ {"America/Indiana/Tell_City", CST}, -+ {"America/Indiana/Vevay", EST}, -+ {"America/Indiana/Vincennes", EST}, -+ {"America/Indiana/Winamac", EST}, -+ {"America/Inuvik", MST}, -+ {"America/Iqaluit", EST}, -+ {"America/Jamaica", EST}, -+ {"America/Jujuy", AGT}, -+ {"America/Juneau", AKST}, -+ {"America/Kentucky/Louisville", EST}, -+ {"America/Kentucky/Monticello", EST}, -+ {"America/Knox_IN", CST}, -+ {"America/La_Paz", new String[] {"Fuso hor\u00e1rio da Bol\u00edvia", "BOT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Bol\u00edvia", "BOST"}}, -+ {"America/Lima", new String[] {"Fuso hor\u00e1rio do Peru", "PET", -+ "Fuso hor\u00e1rio de ver\u00e3o do Peru", "PEST"}}, -+ {"America/Louisville", EST}, -+ {"America/Maceio", BRT}, -+ {"America/Managua", CST}, -+ {"America/Manaus", AMT}, -+ {"America/Marigot", AST}, -+ {"America/Martinique", AST}, -+ {"America/Matamoros", CST}, -+ {"America/Mazatlan", MST}, -+ {"America/Mendoza", AGT}, -+ {"America/Menominee", CST}, -+ {"America/Merida", CST}, -+ {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", -+ "Metlakatla Daylight Time", "MeDT"}}, -+ {"America/Mexico_City", CST}, -+ {"America/Miquelon", new String[] {"Fuso hor\u00e1rio padr\u00e3o de S\u00e3o Pedro e Miquelon", "PMST", -+ "Hor\u00e1rio de luz natural de S\u00e3o Pedro e Miquelon", "PMDT"}}, -+ {"America/Moncton", AST}, -+ {"America/Montevideo", new String[] {"Fuso hor\u00e1rio do Uruguai", "UYT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Uruguai", "UYST"}}, -+ {"America/Monterrey", CST}, -+ {"America/Montreal", EST}, -+ {"America/Montserrat", AST}, -+ {"America/Nassau", EST}, -+ {"America/Nipigon", EST}, -+ {"America/Nome", AKST}, -+ {"America/Noronha", NORONHA}, - {"America/North_Dakota/Beulah", CST}, -- {"America/North_Dakota/Center", CST}, -+ {"America/North_Dakota/Center", CST}, - {"America/North_Dakota/New_Salem", CST}, -- {"America/Panama", EST}, -- {"America/Pangnirtung", EST}, -- {"America/Paramaribo", new String[] {"Fuso hor\u00e1rio do Suriname", "SRT", -- "Fuso hor\u00e1rio de ver\u00e3o do Suriname", "SRST"}}, -- {"America/Port-au-Prince", EST}, -- {"America/Port_of_Spain", AST}, -- {"America/Porto_Acre", AMT}, -- {"America/Porto_Velho", AMT}, -- {"America/Puerto_Rico", AST}, -- {"America/Rainy_River", CST}, -- {"America/Rankin_Inlet", CST}, -- {"America/Recife", BRT}, -- {"America/Regina", CST}, -- {"America/Resolute", RST}, -- {"America/Rio_Branco", AMT}, -- {"America/Rosario", AGT}, -- {"America/Santarem", BRT}, -- {"America/Santiago", CLT}, -- {"America/Santo_Domingo", AST}, -- {"America/Sao_Paulo", BRT}, -- {"America/Scoresbysund", EGT}, -- {"America/Shiprock", MST}, -- {"America/St_Barthelemy", AST}, -- {"America/St_Kitts", AST}, -- {"America/St_Lucia", AST}, -- {"America/St_Thomas", AST}, -- {"America/St_Vincent", AST}, -- {"America/Swift_Current", CST}, -- {"America/Tegucigalpa", CST}, -- {"America/Thule", AST}, -- {"America/Thunder_Bay", EST}, -- {"America/Tijuana", PST}, -- {"America/Toronto", EST}, -- {"America/Tortola", AST}, -- {"America/Vancouver", PST}, -- {"America/Virgin", AST}, -- {"America/Whitehorse", PST}, -- {"America/Winnipeg", CST}, -- {"America/Yakutat", AKST}, -- {"America/Yellowknife", MST}, -- {"Antarctica/Casey", WST_AUS}, -- {"Antarctica/Davis", new String[] {"Fuso hor\u00e1rio de Davis", "DAVT", -- "Fuso hor\u00e1rio de ver\u00e3o de Davis", "DAVST"}}, -- {"Antarctica/DumontDUrville", new String[] {"Fuso hor\u00e1rio de Dumont-d'Urville", "DDUT", -- "Fuso hor\u00e1rio de ver\u00e3o de Dumont-d'Urville", "DDUST"}}, -- {"Antarctica/Mawson", new String[] {"Fuso hor\u00e1rio de Mawson", "MAWT", -- "Fuso hor\u00e1rio de ver\u00e3o de Mawson", "MAWST"}}, -- {"Antarctica/McMurdo", NZST}, -- {"Antarctica/Palmer", CLT}, -- {"Antarctica/Rothera", new String[] {"Fuso hor\u00e1rio de Rothera", "ROTT", -- "Fuso hor\u00e1rio de ver\u00e3o de Rothera", "ROTST"}}, -- {"Antarctica/South_Pole", NZST}, -- {"Antarctica/Syowa", new String[] {"Fuso hor\u00e1rio de Syowa", "SYOT", -- "Fuso hor\u00e1rio de ver\u00e3o de Syowa", "SYOST"}}, -- {"Antarctica/Vostok", new String[] {"Fuso hor\u00e1rio de Vostok", "VOST", -- "Fuso hor\u00e1rio de ver\u00e3o de Vostok", "VOSST"}}, -- {"Arctic/Longyearbyen", CET}, -- {"Asia/Aden", ARAST}, -- {"Asia/Almaty", new String[] {"Fuso hor\u00e1rio de Alma-Ata", "ALMT", -- "Fuso hor\u00e1rio de ver\u00e3o de Alma-Ata", "ALMST"}}, -- {"Asia/Amman", EET}, -- {"Asia/Anadyr", new String[] {"Fuso hor\u00e1rio de Anadyr", "ANAT", -- "Fuso hor\u00e1rio de ver\u00e3o de Anadyr", "ANAST"}}, -- {"Asia/Aqtau", new String[] {"Fuso hor\u00e1rio de Aqtau", "AQTT", -- "Fuso hor\u00e1rio de ver\u00e3o de Aqtau", "AQTST"}}, -- {"Asia/Aqtobe", new String[] {"Fuso hor\u00e1rio de Aqtobe", "AQTT", -- "Fuso hor\u00e1rio de ver\u00e3o de Aqtobe", "AQTST"}}, -- {"Asia/Ashgabat", TMT}, -- {"Asia/Ashkhabad", TMT}, -- {"Asia/Baghdad", ARAST}, -- {"Asia/Bahrain", ARAST}, -- {"Asia/Baku", new String[] {"Fuso hor\u00e1rio do Azerbaij\u00e3o", "AZT", -- "Fuso hor\u00e1rio de ver\u00e3o do Azerbaij\u00e3o", "AZST"}}, -- {"Asia/Bangkok", ICT}, -- {"Asia/Beirut", EET}, -- {"Asia/Bishkek", new String[] {"Fuso hor\u00e1rio do Quirguist\u00e3o", "KGT", -- "Fuso hor\u00e1rio de ver\u00e3o do Quirguist\u00e3o", "KGST"}}, -- {"Asia/Brunei", new String[] {"Fuso hor\u00e1rio de Brunei", "BNT", -- "Fuso hor\u00e1rio de ver\u00e3o de Brunei", "BNST"}}, -- {"Asia/Calcutta", IST}, -- {"Asia/Choibalsan", new String[] {"Fuso hor\u00e1rio de Choibalsan", "CHOT", -- "Fuso hor\u00e1rio de ver\u00e3o de Choibalsan", "CHOST"}}, -- {"Asia/Chongqing", CTT}, -- {"Asia/Chungking", CTT}, -- {"Asia/Colombo", IST}, -- {"Asia/Dacca", BDT}, -- {"Asia/Dhaka", BDT}, -- {"Asia/Dili", new String[] {"Fuso hor\u00e1rio do Timor-Leste", "TLT", -- "Fuso hor\u00e1rio de ver\u00e3o do Timor-Leste", "TLST"}}, -- {"Asia/Damascus", EET}, -- {"Asia/Dubai", GST}, -- {"Asia/Dushanbe", new String[] {"Fuso hor\u00e1rio do Tadjiquist\u00e3o", "TJT", -- "Fuso hor\u00e1rio de ver\u00e3o do Tadjiquist\u00e3o", "TJST"}}, -- {"Asia/Gaza", EET}, -- {"Asia/Harbin", CTT}, -- {"Asia/Ho_Chi_Minh", ICT}, -- {"Asia/Hong_Kong", HKT}, -- {"Asia/Hovd", new String[] {"Fuso hor\u00e1rio de Hovd", "HOVT", -- "Fuso hor\u00e1rio de ver\u00e3o de Hovd", "HOVST"}}, -- {"Asia/Irkutsk", new String[] {"Fuso hor\u00e1rio de Irkutsk", "IRKT", -- "Fuso hor\u00e1rio de ver\u00e3o de Irkutsk", "IRKST"}}, -- {"Asia/Istanbul", EET}, -- {"Asia/Jakarta", WIT}, -- {"Asia/Jayapura", new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Oriental", "EIT", -- "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Oriental", "EIST"}}, -- {"Asia/Kabul", new String[] {"Fuso hor\u00e1rio do Afeganist\u00e3o", "AFT", -- "Fuso hor\u00e1rio de ver\u00e3o do Afeganist\u00e3o", "AFST"}}, -- {"Asia/Kamchatka", new String[] {"Fuso hor\u00e1rio de Petropavlovsk-Kamchatski", "PETT", -- "Fuso hor\u00e1rio de ver\u00e3o de Petropavlovsk-Kamchatski", "PETST"}}, -- {"Asia/Karachi", PKT}, -- {"Asia/Kashgar", CTT}, -- {"Asia/Kathmandu", NPT}, -- {"Asia/Katmandu", NPT}, -- {"Asia/Kolkata", IST}, -- {"Asia/Krasnoyarsk", new String[] {"Fuso hor\u00e1rio de Krasnoyarsk", "KRAT", -- "Fuso hor\u00e1rio de ver\u00e3o de Krasnoyarsk", "KRAST"}}, -- {"Asia/Kuala_Lumpur", MYT}, -- {"Asia/Kuching", MYT}, -- {"Asia/Kuwait", ARAST}, -- {"Asia/Macao", CTT}, -- {"Asia/Macau", CTT}, -- {"Asia/Magadan", new String[] {"Fuso hor\u00e1rio de Magadan", "MAGT", -- "Fuso hor\u00e1rio de ver\u00e3o de Magadan", "MAGST"}}, -- {"Asia/Makassar", CIT}, -- {"Asia/Manila", new String[] {"Fuso hor\u00e1rio das Filipinas", "PHT", -- "Fuso hor\u00e1rio de ver\u00e3o das Filipinas", "PHST"}}, -- {"Asia/Muscat", GST}, -- {"Asia/Nicosia", EET}, -- {"Asia/Novokuznetsk", NOVT}, -- {"Asia/Novosibirsk", NOVT}, -- {"Asia/Oral", new String[] {"Fuso hor\u00e1rio de Uralsk", "ORAT", -- "Fuso hor\u00e1rio de ver\u00e3o de Uralsk", "ORAST"}}, -- {"Asia/Omsk", new String[] {"Fuso hor\u00e1rio de Omsk", "OMST", -- "Fuso hor\u00e1rio de ver\u00e3o de Omsk", "OMSST"}}, -- {"Asia/Phnom_Penh", ICT}, -- {"Asia/Pontianak", WIT}, -- {"Asia/Pyongyang", KST}, -- {"Asia/Qatar", ARAST}, -- {"Asia/Qyzylorda", new String[] {"Fuso hor\u00e1rio de Kizil-Orda", "QYZT", -- "Fuso hor\u00e1rio de ver\u00e3o de Kizil-Orda", "QYZST"}}, -- {"Asia/Rangoon", new String[] {"Fuso hor\u00e1rio de Mianmar", "MMT", -- "Fuso hor\u00e1rio de ver\u00e3o de Mianmar", "MMST"}}, -- {"Asia/Riyadh", ARAST}, -- {"Asia/Saigon", ICT}, -- {"Asia/Sakhalin", new String[] {"Fuso hor\u00e1rio de Sakhalina", "SAKT", -- "Fuso hor\u00e1rio de ver\u00e3o de Sakhalina", "SAKST"}}, -- {"Asia/Samarkand", UZT}, -- {"Asia/Seoul", KST}, -- {"Asia/Singapore", SGT}, -- {"Asia/Taipei", CTT}, -- {"Asia/Tel_Aviv", ISRAEL}, -- {"Asia/Tashkent", UZT}, -- {"Asia/Tbilisi", new String[] {"Fuso hor\u00e1rio da Ge\u00f3rgia", "GET", -- "Fuso hor\u00e1rio de ver\u00e3o da Ge\u00f3rgia", "GEST"}}, -- {"Asia/Tehran", IRT}, -- {"Asia/Thimbu", BTT}, -- {"Asia/Thimphu", BTT}, -- {"Asia/Ujung_Pandang", CIT}, -- {"Asia/Ulaanbaatar", ULAT}, -- {"Asia/Ulan_Bator", ULAT}, -- {"Asia/Urumqi", CTT}, -- {"Asia/Vientiane", ICT}, -- {"Asia/Vladivostok", new String[] {"Fuso hor\u00e1rio de Vladivostok", "VLAT", -- "Fuso hor\u00e1rio de ver\u00e3o de Vladivostok", "VLAST"}}, -- {"Asia/Yakutsk", new String[] {"Fuso hor\u00e1rio de Yakutsk", "YAKT", -- "Fuso hor\u00e1rio de ver\u00e3o de Yakutsk", "YAKST"}}, -- {"Asia/Yekaterinburg", new String[] {"Fuso hor\u00e1rio de Yekaterinburgo", "YEKT", -- "Fuso hor\u00e1rio de ver\u00e3o de Yekaterinburgo", "YEKST"}}, -- {"Asia/Yerevan", ARMT}, -- {"Atlantic/Azores", new String[] {"Fuso hor\u00e1rio das A\u00e7ores", "AZOT", -- "Fuso hor\u00e1rio de ver\u00e3o das A\u00e7ores", "AZOST"}}, -- {"Atlantic/Bermuda", AST}, -- {"Atlantic/Canary", WET}, -- {"Atlantic/Cape_Verde", new String[] {"Fuso hor\u00e1rio de Cabo Verde", "CVT", -- "Fuso hor\u00e1rio de ver\u00e3o de Cabo Verde", "CVST"}}, -- {"Atlantic/Faeroe", WET}, -- {"Atlantic/Faroe", WET}, -- {"Atlantic/Jan_Mayen", CET}, -- {"Atlantic/Madeira", WET}, -- {"Atlantic/Reykjavik", GMT}, -- {"Atlantic/South_Georgia", new String[] {"Fuso hor\u00e1rio padr\u00e3o da Ge\u00f3rgia do Sul", "GST", -- "Hor\u00e1rio de luz natural da Ge\u00f3rgia do Sul", "GDT"}}, -- {"Atlantic/St_Helena", GMT}, -- {"Atlantic/Stanley", new String[] {"Fuso hor\u00e1rio das Ilhas Falkland", "FKT", -- "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Falkland", "FKST"}}, -- {"Australia/ACT", EST_NSW}, -- {"Australia/Adelaide", ADELAIDE}, -- {"Australia/Brisbane", BRISBANE}, -- {"Australia/Broken_Hill", BROKEN_HILL}, -- {"Australia/Canberra", EST_NSW}, -- {"Australia/Currie", EST_NSW}, -- {"Australia/Darwin", DARWIN}, -- {"Australia/Eucla", new String[] {"Fuso hor\u00e1rio ocidental central (Austr\u00e1lia)", "CWST", -- "Fuso hor\u00e1rio de ver\u00e3o ocidental central (Austr\u00e1lia)", "CWST"}}, -- {"Australia/Hobart", TASMANIA}, -- {"Australia/LHI", LORD_HOWE}, -- {"Australia/Lindeman", BRISBANE}, -- {"Australia/Lord_Howe", LORD_HOWE}, -- {"Australia/Melbourne", VICTORIA}, -- {"Australia/North", DARWIN}, -- {"Australia/NSW", EST_NSW}, -- {"Australia/Perth", WST_AUS}, -- {"Australia/Queensland", BRISBANE}, -- {"Australia/South", ADELAIDE}, -- {"Australia/Sydney", EST_NSW}, -- {"Australia/Tasmania", TASMANIA}, -- {"Australia/Victoria", VICTORIA}, -- {"Australia/West", WST_AUS}, -- {"Australia/Yancowinna", BROKEN_HILL}, -- {"BET", BRT}, -- {"BST", BDT}, -- {"Brazil/Acre", AMT}, -- {"Brazil/DeNoronha", NORONHA}, -- {"Brazil/East", BRT}, -- {"Brazil/West", AMT}, -- {"Canada/Atlantic", AST}, -- {"Canada/Central", CST}, -- {"Canada/East-Saskatchewan", CST}, -- {"Canada/Eastern", EST}, -- {"Canada/Mountain", MST}, -- {"Canada/Newfoundland", NST}, -- {"Canada/Pacific", PST}, -- {"Canada/Yukon", PST}, -- {"Canada/Saskatchewan", CST}, -- {"CAT", CAT}, -- {"CET", CET}, -- {"Chile/Continental", CLT}, -- {"Chile/EasterIsland", EASTER}, -- {"CST6CDT", CST}, -- {"Cuba", CUBA}, -- {"EAT", EAT}, -- {"EET", EET}, -- {"Egypt", EET}, -- {"Eire", DUBLIN}, -- {"EST5EDT", EST}, -- {"Etc/Greenwich", GMT}, -- {"Etc/UCT", UTC}, -- {"Etc/Universal", UTC}, -- {"Etc/UTC", UTC}, -- {"Etc/Zulu", UTC}, -- {"Europe/Amsterdam", CET}, -- {"Europe/Andorra", CET}, -- {"Europe/Athens", EET}, -- {"Europe/Belfast", GMTBST}, -- {"Europe/Belgrade", CET}, -- {"Europe/Berlin", CET}, -- {"Europe/Bratislava", CET}, -- {"Europe/Brussels", CET}, -- {"Europe/Budapest", CET}, -- {"Europe/Chisinau", EET}, -- {"Europe/Copenhagen", CET}, -- {"Europe/Dublin", DUBLIN}, -- {"Europe/Gibraltar", CET}, -+ {"America/Ojinaga", MST}, -+ {"America/Panama", EST}, -+ {"America/Pangnirtung", EST}, -+ {"America/Paramaribo", new String[] {"Fuso hor\u00e1rio do Suriname", "SRT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Suriname", "SRST"}}, -+ {"America/Port-au-Prince", EST}, -+ {"America/Port_of_Spain", AST}, -+ {"America/Porto_Acre", AMT}, -+ {"America/Porto_Velho", AMT}, -+ {"America/Puerto_Rico", AST}, -+ {"America/Rainy_River", CST}, -+ {"America/Rankin_Inlet", CST}, -+ {"America/Recife", BRT}, -+ {"America/Regina", CST}, -+ {"America/Resolute", RST}, -+ {"America/Rio_Branco", AMT}, -+ {"America/Rosario", AGT}, -+ {"America/Santa_Isabel", PST}, -+ {"America/Santarem", BRT}, -+ {"America/Santiago", CLT}, -+ {"America/Santo_Domingo", AST}, -+ {"America/Sao_Paulo", BRT}, -+ {"America/Scoresbysund", EGT}, -+ {"America/Shiprock", MST}, -+ {"America/St_Barthelemy", AST}, -+ {"America/St_Kitts", AST}, -+ {"America/St_Lucia", AST}, -+ {"America/St_Thomas", AST}, -+ {"America/St_Vincent", AST}, -+ {"America/Swift_Current", CST}, -+ {"America/Tegucigalpa", CST}, -+ {"America/Thule", AST}, -+ {"America/Thunder_Bay", EST}, -+ {"America/Tijuana", PST}, -+ {"America/Toronto", EST}, -+ {"America/Tortola", AST}, -+ {"America/Vancouver", PST}, -+ {"America/Virgin", AST}, -+ {"America/Whitehorse", PST}, -+ {"America/Winnipeg", CST}, -+ {"America/Yakutat", AKST}, -+ {"America/Yellowknife", MST}, -+ {"Antarctica/Casey", WST_AUS}, -+ {"Antarctica/Davis", new String[] {"Fuso hor\u00e1rio de Davis", "DAVT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Davis", "DAVST"}}, -+ {"Antarctica/DumontDUrville", new String[] {"Fuso hor\u00e1rio de Dumont-d'Urville", "DDUT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Dumont-d'Urville", "DDUST"}}, -+ {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", -+ "Macquarie Island Summer Time", "MIST"}}, -+ {"Antarctica/Mawson", new String[] {"Fuso hor\u00e1rio de Mawson", "MAWT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Mawson", "MAWST"}}, -+ {"Antarctica/McMurdo", NZST}, -+ {"Antarctica/Palmer", CLT}, -+ {"Antarctica/Rothera", new String[] {"Fuso hor\u00e1rio de Rothera", "ROTT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Rothera", "ROTST"}}, -+ {"Antarctica/South_Pole", NZST}, -+ {"Antarctica/Syowa", new String[] {"Fuso hor\u00e1rio de Syowa", "SYOT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Syowa", "SYOST"}}, -+ {"Antarctica/Vostok", new String[] {"Fuso hor\u00e1rio de Vostok", "VOST", -+ "Fuso hor\u00e1rio de ver\u00e3o de Vostok", "VOSST"}}, -+ {"Arctic/Longyearbyen", CET}, -+ {"Asia/Aden", ARAST}, -+ {"Asia/Almaty", new String[] {"Fuso hor\u00e1rio de Alma-Ata", "ALMT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Alma-Ata", "ALMST"}}, -+ {"Asia/Amman", EET}, -+ {"Asia/Anadyr", new String[] {"Fuso hor\u00e1rio de Anadyr", "ANAT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Anadyr", "ANAST"}}, -+ {"Asia/Aqtau", new String[] {"Fuso hor\u00e1rio de Aqtau", "AQTT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Aqtau", "AQTST"}}, -+ {"Asia/Aqtobe", new String[] {"Fuso hor\u00e1rio de Aqtobe", "AQTT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Aqtobe", "AQTST"}}, -+ {"Asia/Ashgabat", TMT}, -+ {"Asia/Ashkhabad", TMT}, -+ {"Asia/Baghdad", ARAST}, -+ {"Asia/Bahrain", ARAST}, -+ {"Asia/Baku", new String[] {"Fuso hor\u00e1rio do Azerbaij\u00e3o", "AZT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Azerbaij\u00e3o", "AZST"}}, -+ {"Asia/Bangkok", ICT}, -+ {"Asia/Beirut", EET}, -+ {"Asia/Bishkek", new String[] {"Fuso hor\u00e1rio do Quirguist\u00e3o", "KGT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Quirguist\u00e3o", "KGST"}}, -+ {"Asia/Brunei", new String[] {"Fuso hor\u00e1rio de Brunei", "BNT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Brunei", "BNST"}}, -+ {"Asia/Calcutta", IST}, -+ {"Asia/Choibalsan", new String[] {"Fuso hor\u00e1rio de Choibalsan", "CHOT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Choibalsan", "CHOST"}}, -+ {"Asia/Chongqing", CTT}, -+ {"Asia/Chungking", CTT}, -+ {"Asia/Colombo", IST}, -+ {"Asia/Dacca", BDT}, -+ {"Asia/Dhaka", BDT}, -+ {"Asia/Dili", new String[] {"Fuso hor\u00e1rio do Timor-Leste", "TLT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Timor-Leste", "TLST"}}, -+ {"Asia/Damascus", EET}, -+ {"Asia/Dubai", GST}, -+ {"Asia/Dushanbe", new String[] {"Fuso hor\u00e1rio do Tadjiquist\u00e3o", "TJT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Tadjiquist\u00e3o", "TJST"}}, -+ {"Asia/Gaza", EET}, -+ {"Asia/Harbin", CTT}, -+ {"Asia/Ho_Chi_Minh", ICT}, -+ {"Asia/Hong_Kong", HKT}, -+ {"Asia/Hovd", new String[] {"Fuso hor\u00e1rio de Hovd", "HOVT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Hovd", "HOVST"}}, -+ {"Asia/Irkutsk", new String[] {"Fuso hor\u00e1rio de Irkutsk", "IRKT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Irkutsk", "IRKST"}}, -+ {"Asia/Istanbul", EET}, -+ {"Asia/Jakarta", WIT}, -+ {"Asia/Jayapura", new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Oriental", "EIT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Oriental", "EIST"}}, -+ {"Asia/Kabul", new String[] {"Fuso hor\u00e1rio do Afeganist\u00e3o", "AFT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Afeganist\u00e3o", "AFST"}}, -+ {"Asia/Kamchatka", new String[] {"Fuso hor\u00e1rio de Petropavlovsk-Kamchatski", "PETT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Petropavlovsk-Kamchatski", "PETST"}}, -+ {"Asia/Karachi", PKT}, -+ {"Asia/Kashgar", CTT}, -+ {"Asia/Kathmandu", NPT}, -+ {"Asia/Katmandu", NPT}, -+ {"Asia/Kolkata", IST}, -+ {"Asia/Krasnoyarsk", new String[] {"Fuso hor\u00e1rio de Krasnoyarsk", "KRAT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Krasnoyarsk", "KRAST"}}, -+ {"Asia/Kuala_Lumpur", MYT}, -+ {"Asia/Kuching", MYT}, -+ {"Asia/Kuwait", ARAST}, -+ {"Asia/Macao", CTT}, -+ {"Asia/Macau", CTT}, -+ {"Asia/Magadan", new String[] {"Fuso hor\u00e1rio de Magadan", "MAGT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Magadan", "MAGST"}}, -+ {"Asia/Makassar", CIT}, -+ {"Asia/Manila", new String[] {"Fuso hor\u00e1rio das Filipinas", "PHT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Filipinas", "PHST"}}, -+ {"Asia/Muscat", GST}, -+ {"Asia/Nicosia", EET}, -+ {"Asia/Novokuznetsk", NOVT}, -+ {"Asia/Novosibirsk", NOVT}, -+ {"Asia/Oral", new String[] {"Fuso hor\u00e1rio de Uralsk", "ORAT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Uralsk", "ORAST"}}, -+ {"Asia/Omsk", new String[] {"Fuso hor\u00e1rio de Omsk", "OMST", -+ "Fuso hor\u00e1rio de ver\u00e3o de Omsk", "OMSST"}}, -+ {"Asia/Phnom_Penh", ICT}, -+ {"Asia/Pontianak", WIT}, -+ {"Asia/Pyongyang", KST}, -+ {"Asia/Qatar", ARAST}, -+ {"Asia/Qyzylorda", new String[] {"Fuso hor\u00e1rio de Kizil-Orda", "QYZT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Kizil-Orda", "QYZST"}}, -+ {"Asia/Rangoon", new String[] {"Fuso hor\u00e1rio de Mianmar", "MMT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Mianmar", "MMST"}}, -+ {"Asia/Riyadh", ARAST}, -+ {"Asia/Saigon", ICT}, -+ {"Asia/Sakhalin", new String[] {"Fuso hor\u00e1rio de Sakhalina", "SAKT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Sakhalina", "SAKST"}}, -+ {"Asia/Samarkand", UZT}, -+ {"Asia/Seoul", KST}, -+ {"Asia/Singapore", SGT}, -+ {"Asia/Taipei", CTT}, -+ {"Asia/Tel_Aviv", ISRAEL}, -+ {"Asia/Tashkent", UZT}, -+ {"Asia/Tbilisi", new String[] {"Fuso hor\u00e1rio da Ge\u00f3rgia", "GET", -+ "Fuso hor\u00e1rio de ver\u00e3o da Ge\u00f3rgia", "GEST"}}, -+ {"Asia/Tehran", IRT}, -+ {"Asia/Thimbu", BTT}, -+ {"Asia/Thimphu", BTT}, -+ {"Asia/Ujung_Pandang", CIT}, -+ {"Asia/Ulaanbaatar", ULAT}, -+ {"Asia/Ulan_Bator", ULAT}, -+ {"Asia/Urumqi", CTT}, -+ {"Asia/Vientiane", ICT}, -+ {"Asia/Vladivostok", new String[] {"Fuso hor\u00e1rio de Vladivostok", "VLAT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Vladivostok", "VLAST"}}, -+ {"Asia/Yakutsk", new String[] {"Fuso hor\u00e1rio de Yakutsk", "YAKT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Yakutsk", "YAKST"}}, -+ {"Asia/Yekaterinburg", new String[] {"Fuso hor\u00e1rio de Yekaterinburgo", "YEKT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Yekaterinburgo", "YEKST"}}, -+ {"Asia/Yerevan", ARMT}, -+ {"Atlantic/Azores", new String[] {"Fuso hor\u00e1rio das A\u00e7ores", "AZOT", -+ "Fuso hor\u00e1rio de ver\u00e3o das A\u00e7ores", "AZOST"}}, -+ {"Atlantic/Bermuda", AST}, -+ {"Atlantic/Canary", WET}, -+ {"Atlantic/Cape_Verde", new String[] {"Fuso hor\u00e1rio de Cabo Verde", "CVT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Cabo Verde", "CVST"}}, -+ {"Atlantic/Faeroe", WET}, -+ {"Atlantic/Faroe", WET}, -+ {"Atlantic/Jan_Mayen", CET}, -+ {"Atlantic/Madeira", WET}, -+ {"Atlantic/Reykjavik", GMT}, -+ {"Atlantic/South_Georgia", new String[] {"Fuso hor\u00e1rio padr\u00e3o da Ge\u00f3rgia do Sul", "GST", -+ "Hor\u00e1rio de luz natural da Ge\u00f3rgia do Sul", "GDT"}}, -+ {"Atlantic/St_Helena", GMT}, -+ {"Atlantic/Stanley", new String[] {"Fuso hor\u00e1rio das Ilhas Falkland", "FKT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Falkland", "FKST"}}, -+ {"Australia/ACT", EST_NSW}, -+ {"Australia/Adelaide", ADELAIDE}, -+ {"Australia/Brisbane", BRISBANE}, -+ {"Australia/Broken_Hill", BROKEN_HILL}, -+ {"Australia/Canberra", EST_NSW}, -+ {"Australia/Currie", EST_NSW}, -+ {"Australia/Darwin", DARWIN}, -+ {"Australia/Eucla", new String[] {"Fuso hor\u00e1rio ocidental central (Austr\u00e1lia)", "CWST", -+ "Fuso hor\u00e1rio de ver\u00e3o ocidental central (Austr\u00e1lia)", "CWST"}}, -+ {"Australia/Hobart", TASMANIA}, -+ {"Australia/LHI", LORD_HOWE}, -+ {"Australia/Lindeman", BRISBANE}, -+ {"Australia/Lord_Howe", LORD_HOWE}, -+ {"Australia/Melbourne", VICTORIA}, -+ {"Australia/North", DARWIN}, -+ {"Australia/NSW", EST_NSW}, -+ {"Australia/Perth", WST_AUS}, -+ {"Australia/Queensland", BRISBANE}, -+ {"Australia/South", ADELAIDE}, -+ {"Australia/Sydney", EST_NSW}, -+ {"Australia/Tasmania", TASMANIA}, -+ {"Australia/Victoria", VICTORIA}, -+ {"Australia/West", WST_AUS}, -+ {"Australia/Yancowinna", BROKEN_HILL}, -+ {"BET", BRT}, -+ {"BST", BDT}, -+ {"Brazil/Acre", AMT}, -+ {"Brazil/DeNoronha", NORONHA}, -+ {"Brazil/East", BRT}, -+ {"Brazil/West", AMT}, -+ {"Canada/Atlantic", AST}, -+ {"Canada/Central", CST}, -+ {"Canada/East-Saskatchewan", CST}, -+ {"Canada/Eastern", EST}, -+ {"Canada/Mountain", MST}, -+ {"Canada/Newfoundland", NST}, -+ {"Canada/Pacific", PST}, -+ {"Canada/Yukon", PST}, -+ {"Canada/Saskatchewan", CST}, -+ {"CAT", CAT}, -+ {"CET", CET}, -+ {"Chile/Continental", CLT}, -+ {"Chile/EasterIsland", EASTER}, -+ {"CST6CDT", CST}, -+ {"Cuba", CUBA}, -+ {"EAT", EAT}, -+ {"EET", EET}, -+ {"Egypt", EET}, -+ {"Eire", DUBLIN}, -+ {"EST5EDT", EST}, -+ {"Etc/Greenwich", GMT}, -+ {"Etc/UCT", UTC}, -+ {"Etc/Universal", UTC}, -+ {"Etc/UTC", UTC}, -+ {"Etc/Zulu", UTC}, -+ {"Europe/Amsterdam", CET}, -+ {"Europe/Andorra", CET}, -+ {"Europe/Athens", EET}, -+ {"Europe/Belfast", GMTBST}, -+ {"Europe/Belgrade", CET}, -+ {"Europe/Berlin", CET}, -+ {"Europe/Bratislava", CET}, -+ {"Europe/Brussels", CET}, -+ {"Europe/Budapest", CET}, -+ {"Europe/Chisinau", EET}, -+ {"Europe/Copenhagen", CET}, -+ {"Europe/Dublin", DUBLIN}, -+ {"Europe/Gibraltar", CET}, - {"Europe/Guernsey", GMTBST}, -- {"Europe/Helsinki", EET}, -+ {"Europe/Helsinki", EET}, - {"Europe/Isle_of_Man", GMTBST}, -- {"Europe/Istanbul", EET}, -+ {"Europe/Istanbul", EET}, - {"Europe/Jersey", GMTBST}, -- {"Europe/Kaliningrad", EET}, -- {"Europe/Kiev", EET}, -- {"Europe/Lisbon", WET}, -- {"Europe/Ljubljana", CET}, -- {"Europe/London", GMTBST}, -- {"Europe/Luxembourg", CET}, -- {"Europe/Madrid", CET}, -- {"Europe/Malta", CET}, -- {"Europe/Mariehamn", EET}, -- {"Europe/Minsk", EET}, -- {"Europe/Monaco", CET}, -- {"Europe/Moscow", MSK}, -- {"Europe/Nicosia", EET}, -- {"Europe/Oslo", CET}, -- {"Europe/Podgorica", CET}, -- {"Europe/Prague", CET}, -- {"Europe/Riga", EET}, -- {"Europe/Rome", CET}, -- {"Europe/Samara", new String[] {"Fuso hor\u00e1rio de Samara", "SAMT", -- "Fuso hor\u00e1rio de ver\u00e3o de Samara", "SAMST"}}, -- {"Europe/San_Marino", CET}, -- {"Europe/Sarajevo", CET}, -- {"Europe/Simferopol", EET}, -- {"Europe/Skopje", CET}, -- {"Europe/Sofia", EET}, -- {"Europe/Stockholm", CET}, -- {"Europe/Tallinn", EET}, -- {"Europe/Tirane", CET}, -- {"Europe/Tiraspol", EET}, -- {"Europe/Uzhgorod", EET}, -- {"Europe/Vaduz", CET}, -- {"Europe/Vatican", CET}, -- {"Europe/Vienna", CET}, -- {"Europe/Vilnius", EET}, -+ {"Europe/Kaliningrad", EET}, -+ {"Europe/Kiev", EET}, -+ {"Europe/Lisbon", WET}, -+ {"Europe/Ljubljana", CET}, -+ {"Europe/London", GMTBST}, -+ {"Europe/Luxembourg", CET}, -+ {"Europe/Madrid", CET}, -+ {"Europe/Malta", CET}, -+ {"Europe/Mariehamn", EET}, -+ {"Europe/Minsk", EET}, -+ {"Europe/Monaco", CET}, -+ {"Europe/Moscow", MSK}, -+ {"Europe/Nicosia", EET}, -+ {"Europe/Oslo", CET}, -+ {"Europe/Podgorica", CET}, -+ {"Europe/Prague", CET}, -+ {"Europe/Riga", EET}, -+ {"Europe/Rome", CET}, -+ {"Europe/Samara", new String[] {"Fuso hor\u00e1rio de Samara", "SAMT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Samara", "SAMST"}}, -+ {"Europe/San_Marino", CET}, -+ {"Europe/Sarajevo", CET}, -+ {"Europe/Simferopol", EET}, -+ {"Europe/Skopje", CET}, -+ {"Europe/Sofia", EET}, -+ {"Europe/Stockholm", CET}, -+ {"Europe/Tallinn", EET}, -+ {"Europe/Tirane", CET}, -+ {"Europe/Tiraspol", EET}, -+ {"Europe/Uzhgorod", EET}, -+ {"Europe/Vaduz", CET}, -+ {"Europe/Vatican", CET}, -+ {"Europe/Vienna", CET}, -+ {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"Fuso hor\u00e1rio de Volgogrado", "VOLT", - "Fuso hor\u00e1rio de ver\u00e3o de Volgogrado", "VOLST"}}, -- {"Europe/Warsaw", CET}, -- {"Europe/Zagreb", CET}, -- {"Europe/Zaporozhye", EET}, -- {"Europe/Zurich", CET}, -- {"GB", GMTBST}, -- {"GB-Eire", GMTBST}, -- {"Greenwich", GMT}, -- {"Hongkong", HKT}, -- {"Iceland", GMT}, -- {"Iran", IRT}, -- {"IST", IST}, -- {"Indian/Antananarivo", EAT}, -- {"Indian/Chagos", new String[] {"Fuso hor\u00e1rio dos territ\u00f3rios do Oceano \u00cdndico", "IOT", -- "Fuso hor\u00e1rio de ver\u00e3o dos territ\u00f3rios do Oceano \u00cdndico", "IOST"}}, -- {"Indian/Christmas", new String[] {"Fuso hor\u00e1rio das Ilhas Christmas", "CXT", -- "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Christmas", "CXST"}}, -- {"Indian/Cocos", new String[] {"Fuso hor\u00e1rio das Ilhas Cocos", "CCT", -- "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Cocos", "CCST"}}, -- {"Indian/Comoro", EAT}, -- {"Indian/Kerguelen", new String[] {"Fuso hor\u00e1rio das Terras Austrais e Ant\u00e1rticas Francesas", "TFT", -- "Fuso hor\u00e1rio de ver\u00e3o das Terras Austrais e Ant\u00e1rticas Francesas", "TFST"}}, -- {"Indian/Mahe", new String[] {"Fuso hor\u00e1rio das Seychelles", "SCT", -- "Fuso hor\u00e1rio de ver\u00e3o das Seychelles", "SCST"}}, -- {"Indian/Maldives", new String[] {"Fuso hor\u00e1rio das Maldivas", "MVT", -- "Fuso hor\u00e1rio de ver\u00e3o das Maldivas", "MVST"}}, -- {"Indian/Mauritius", new String[] {"Fuso hor\u00e1rio das Ilhas Maur\u00edcio", "MUT", -- "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Maur\u00edcio", "MUST"}}, -- {"Indian/Mayotte", EAT}, -- {"Indian/Reunion", new String[] {"Fuso hor\u00e1rio de Reuni\u00e3o", "RET", -- "Fuso hor\u00e1rio de ver\u00e3o de Reuni\u00e3o", "REST"}}, -- {"Israel", ISRAEL}, -- {"Jamaica", EST}, -- {"Japan", JST}, -- {"Kwajalein", MHT}, -- {"Libya", EET}, -- {"MET", new String[] {"Fuso hor\u00e1rio da Europa M\u00e9dia", "MET", -- "Fuso hor\u00e1rio de ver\u00e3o da Europa M\u00e9dia", "MEST"}}, -- {"Mexico/BajaNorte", PST}, -- {"Mexico/BajaSur", MST}, -- {"Mexico/General", CST}, -- {"MIT", WST_SAMOA}, -- {"MST7MDT", MST}, -- {"Navajo", MST}, -- {"NET", ARMT}, -- {"NST", NZST}, -- {"NZ", NZST}, -- {"NZ-CHAT", CHAST}, -- {"PLT", PKT}, -- {"Portugal", WET}, -- {"PRT", AST}, -- {"Pacific/Apia", WST_SAMOA}, -- {"Pacific/Auckland", NZST}, -- {"Pacific/Chatham", CHAST}, -- {"Pacific/Chuuk", TRUT}, -- {"Pacific/Easter", EASTER}, -- {"Pacific/Efate", new String[] {"Fuso hor\u00e1rio de Vanuatu", "VUT", -- "Fuso hor\u00e1rio de ver\u00e3o de Vanuatu", "VUST"}}, -- {"Pacific/Enderbury", new String[] {"Fuso hor\u00e1rio das Ilhas F\u00e9nix", "PHOT", -- "Fuso hor\u00e1rio de ver\u00e3o das Ilhas F\u00e9nix", "PHOST"}}, -- {"Pacific/Fakaofo", new String[] {"Fuso hor\u00e1rio de Tokelau", "TKT", -- "Fuso hor\u00e1rio de ver\u00e3o de Tokelau", "TKST"}}, -- {"Pacific/Fiji", new String[] {"Fuso hor\u00e1rio de Fiji", "FJT", -- "Fuso hor\u00e1rio de ver\u00e3o de Fiji", "FJST"}}, -- {"Pacific/Funafuti", new String[] {"Fuso hor\u00e1rio de Tuvalu", "TVT", -- "Fuso hor\u00e1rio de ver\u00e3o de Tuvalu", "TVST"}}, -- {"Pacific/Galapagos", new String[] {"Fuso hor\u00e1rio das Ilhas Gal\u00e1pagos", "GALT", -- "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Gal\u00e1pagos", "GALST"}}, -- {"Pacific/Gambier", GAMBIER}, -- {"Pacific/Guadalcanal", SBT}, -- {"Pacific/Guam", ChST}, -- {"Pacific/Johnston", HST}, -- {"Pacific/Kiritimati", new String[] {"Fuso hor\u00e1rio das Esp\u00f3rades Equatoriais", "LINT", -- "Fuso hor\u00e1rio de ver\u00e3o das Esp\u00f3rades Equatoriais", "LINST"}}, -- {"Pacific/Kosrae", new String[] {"Fuso hor\u00e1rio de Kosrae", "KOST", -- "Fuso hor\u00e1rio de ver\u00e3o de Kosrae", "KOSST"}}, -- {"Pacific/Kwajalein", MHT}, -- {"Pacific/Majuro", MHT}, -- {"Pacific/Marquesas", new String[] {"Fuso hor\u00e1rio das Ilhas Marquesas", "MART", -- "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Marquesas", "MARST"}}, -- {"Pacific/Midway", SAMOA}, -- {"Pacific/Nauru", new String[] {"Fuso hor\u00e1rio de Nauru", "NRT", -- "Fuso hor\u00e1rio de ver\u00e3o de Nauru", "NRST"}}, -- {"Pacific/Niue", new String[] {"Fuso hor\u00e1rio de Niue", "NUT", -- "Fuso hor\u00e1rio de ver\u00e3o de Niue", "NUST"}}, -- {"Pacific/Norfolk", new String[] {"Fuso hor\u00e1rio da Ilha de Norfolk", "NFT", -- "Fuso hor\u00e1rio de ver\u00e3o da Ilha de Norfolk", "NFST"}}, -- {"Pacific/Noumea", new String[] {"Fuso hor\u00e1rio da Nova Caled\u00f4nia", "NCT", -- "Fuso hor\u00e1rio de ver\u00e3o da Nova Caled\u00f4nia", "NCST"}}, -- {"Pacific/Pago_Pago", SAMOA}, -- {"Pacific/Palau", new String[] {"Fuso hor\u00e1rio de Palau", "PWT", -- "Fuso hor\u00e1rio de ver\u00e3o de Palau", "PWST"}}, -- {"Pacific/Pitcairn", PITCAIRN}, -- {"Pacific/Pohnpei", PONT}, -- {"Pacific/Ponape", PONT}, -- {"Pacific/Port_Moresby", new String[] {"Fuso hor\u00e1rio de Papua-Nova Guin\u00e9", "PGT", -- "Fuso hor\u00e1rio de ver\u00e3o de Papua-Nova Guin\u00e9", "PGST"}}, -- {"Pacific/Rarotonga", new String[] {"Fuso hor\u00e1rio das Ilhas Cook", "CKT", -- "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Cook", "CKHST"}}, -- {"Pacific/Saipan", ChST}, -- {"Pacific/Samoa", SAMOA}, -- {"Pacific/Tahiti", new String[] {"Fuso hor\u00e1rio do Taiti", "TAHT", -- "Fuso hor\u00e1rio de ver\u00e3o do Taiti", "TAHST"}}, -- {"Pacific/Tarawa", new String[] {"Fuso hor\u00e1rio das Ilhas Gilbert", "GILT", -- "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Gilbert", "GILST"}}, -- {"Pacific/Tongatapu", new String[] {"Fuso hor\u00e1rio de Tonga", "TOT", -- "Fuso hor\u00e1rio de ver\u00e3o de Tonga", "TOST"}}, -- {"Pacific/Truk", TRUT}, -- {"Pacific/Wake", new String[] {"Fuso hor\u00e1rio de Wake", "WAKT", -- "Fuso hor\u00e1rio de ver\u00e3o de Wake", "WAKST"}}, -- {"Pacific/Wallis", new String[] {"Fuso hor\u00e1rio de Wallis e Futuna", "WFT", -- "Fuso hor\u00e1rio de ver\u00e3o de Wallis e Futuna", "WFST"}}, -- {"Pacific/Yap", TRUT}, -- {"Poland", CET}, -- {"PRC", CTT}, -- {"PST8PDT", PST}, -- {"ROK", KST}, -- {"Singapore", SGT}, -- {"SST", SBT}, -- {"SystemV/AST4", AST}, -- {"SystemV/AST4ADT", AST}, -- {"SystemV/CST6", CST}, -- {"SystemV/CST6CDT", CST}, -- {"SystemV/EST5", EST}, -- {"SystemV/EST5EDT", EST}, -- {"SystemV/HST10", HST}, -- {"SystemV/MST7", MST}, -- {"SystemV/MST7MDT", MST}, -- {"SystemV/PST8", PST}, -- {"SystemV/PST8PDT", PST}, -- {"SystemV/YST9", AKST}, -- {"SystemV/YST9YDT", AKST}, -- {"Turkey", EET}, -- {"UCT", UTC}, -- {"Universal", UTC}, -- {"US/Alaska", AKST}, -- {"US/Aleutian", HAST}, -- {"US/Arizona", MST}, -- {"US/Central", CST}, -- {"US/Eastern", EST}, -- {"US/Hawaii", HST}, -- {"US/Indiana-Starke", CST}, -- {"US/East-Indiana", EST}, -- {"US/Michigan", EST}, -- {"US/Mountain", MST}, -- {"US/Pacific", PST}, -- {"US/Pacific-New", PST}, -- {"US/Samoa", SAMOA}, -- {"UTC", UTC}, -- {"VST", ICT}, -- {"W-SU", MSK}, -- {"WET", WET}, -- {"Zulu", UTC}, -+ {"Europe/Warsaw", CET}, -+ {"Europe/Zagreb", CET}, -+ {"Europe/Zaporozhye", EET}, -+ {"Europe/Zurich", CET}, -+ {"GB", GMTBST}, -+ {"GB-Eire", GMTBST}, -+ {"Greenwich", GMT}, -+ {"Hongkong", HKT}, -+ {"Iceland", GMT}, -+ {"Iran", IRT}, -+ {"IST", IST}, -+ {"Indian/Antananarivo", EAT}, -+ {"Indian/Chagos", new String[] {"Fuso hor\u00e1rio dos territ\u00f3rios do Oceano \u00cdndico", "IOT", -+ "Fuso hor\u00e1rio de ver\u00e3o dos territ\u00f3rios do Oceano \u00cdndico", "IOST"}}, -+ {"Indian/Christmas", new String[] {"Fuso hor\u00e1rio das Ilhas Christmas", "CXT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Christmas", "CXST"}}, -+ {"Indian/Cocos", new String[] {"Fuso hor\u00e1rio das Ilhas Cocos", "CCT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Cocos", "CCST"}}, -+ {"Indian/Comoro", EAT}, -+ {"Indian/Kerguelen", new String[] {"Fuso hor\u00e1rio das Terras Austrais e Ant\u00e1rticas Francesas", "TFT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Terras Austrais e Ant\u00e1rticas Francesas", "TFST"}}, -+ {"Indian/Mahe", new String[] {"Fuso hor\u00e1rio das Seychelles", "SCT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Seychelles", "SCST"}}, -+ {"Indian/Maldives", new String[] {"Fuso hor\u00e1rio das Maldivas", "MVT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Maldivas", "MVST"}}, -+ {"Indian/Mauritius", new String[] {"Fuso hor\u00e1rio das Ilhas Maur\u00edcio", "MUT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Maur\u00edcio", "MUST"}}, -+ {"Indian/Mayotte", EAT}, -+ {"Indian/Reunion", new String[] {"Fuso hor\u00e1rio de Reuni\u00e3o", "RET", -+ "Fuso hor\u00e1rio de ver\u00e3o de Reuni\u00e3o", "REST"}}, -+ {"Israel", ISRAEL}, -+ {"Jamaica", EST}, -+ {"Japan", JST}, -+ {"Kwajalein", MHT}, -+ {"Libya", EET}, -+ {"MET", new String[] {"Fuso hor\u00e1rio da Europa M\u00e9dia", "MET", -+ "Fuso hor\u00e1rio de ver\u00e3o da Europa M\u00e9dia", "MEST"}}, -+ {"Mexico/BajaNorte", PST}, -+ {"Mexico/BajaSur", MST}, -+ {"Mexico/General", CST}, -+ {"MIT", WST_SAMOA}, -+ {"MST7MDT", MST}, -+ {"Navajo", MST}, -+ {"NET", ARMT}, -+ {"NST", NZST}, -+ {"NZ", NZST}, -+ {"NZ-CHAT", CHAST}, -+ {"PLT", PKT}, -+ {"Portugal", WET}, -+ {"PRT", AST}, -+ {"Pacific/Apia", WST_SAMOA}, -+ {"Pacific/Auckland", NZST}, -+ {"Pacific/Chatham", CHAST}, -+ {"Pacific/Chuuk", TRUT}, -+ {"Pacific/Easter", EASTER}, -+ {"Pacific/Efate", new String[] {"Fuso hor\u00e1rio de Vanuatu", "VUT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Vanuatu", "VUST"}}, -+ {"Pacific/Enderbury", new String[] {"Fuso hor\u00e1rio das Ilhas F\u00e9nix", "PHOT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas F\u00e9nix", "PHOST"}}, -+ {"Pacific/Fakaofo", new String[] {"Fuso hor\u00e1rio de Tokelau", "TKT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Tokelau", "TKST"}}, -+ {"Pacific/Fiji", new String[] {"Fuso hor\u00e1rio de Fiji", "FJT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Fiji", "FJST"}}, -+ {"Pacific/Funafuti", new String[] {"Fuso hor\u00e1rio de Tuvalu", "TVT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Tuvalu", "TVST"}}, -+ {"Pacific/Galapagos", new String[] {"Fuso hor\u00e1rio das Ilhas Gal\u00e1pagos", "GALT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Gal\u00e1pagos", "GALST"}}, -+ {"Pacific/Gambier", GAMBIER}, -+ {"Pacific/Guadalcanal", SBT}, -+ {"Pacific/Guam", ChST}, -+ {"Pacific/Johnston", HST}, -+ {"Pacific/Kiritimati", new String[] {"Fuso hor\u00e1rio das Esp\u00f3rades Equatoriais", "LINT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Esp\u00f3rades Equatoriais", "LINST"}}, -+ {"Pacific/Kosrae", new String[] {"Fuso hor\u00e1rio de Kosrae", "KOST", -+ "Fuso hor\u00e1rio de ver\u00e3o de Kosrae", "KOSST"}}, -+ {"Pacific/Kwajalein", MHT}, -+ {"Pacific/Majuro", MHT}, -+ {"Pacific/Marquesas", new String[] {"Fuso hor\u00e1rio das Ilhas Marquesas", "MART", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Marquesas", "MARST"}}, -+ {"Pacific/Midway", SAMOA}, -+ {"Pacific/Nauru", new String[] {"Fuso hor\u00e1rio de Nauru", "NRT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Nauru", "NRST"}}, -+ {"Pacific/Niue", new String[] {"Fuso hor\u00e1rio de Niue", "NUT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Niue", "NUST"}}, -+ {"Pacific/Norfolk", new String[] {"Fuso hor\u00e1rio da Ilha de Norfolk", "NFT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Ilha de Norfolk", "NFST"}}, -+ {"Pacific/Noumea", new String[] {"Fuso hor\u00e1rio da Nova Caled\u00f4nia", "NCT", -+ "Fuso hor\u00e1rio de ver\u00e3o da Nova Caled\u00f4nia", "NCST"}}, -+ {"Pacific/Pago_Pago", SAMOA}, -+ {"Pacific/Palau", new String[] {"Fuso hor\u00e1rio de Palau", "PWT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Palau", "PWST"}}, -+ {"Pacific/Pitcairn", PITCAIRN}, -+ {"Pacific/Pohnpei", PONT}, -+ {"Pacific/Ponape", PONT}, -+ {"Pacific/Port_Moresby", new String[] {"Fuso hor\u00e1rio de Papua-Nova Guin\u00e9", "PGT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Papua-Nova Guin\u00e9", "PGST"}}, -+ {"Pacific/Rarotonga", new String[] {"Fuso hor\u00e1rio das Ilhas Cook", "CKT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Cook", "CKHST"}}, -+ {"Pacific/Saipan", ChST}, -+ {"Pacific/Samoa", SAMOA}, -+ {"Pacific/Tahiti", new String[] {"Fuso hor\u00e1rio do Taiti", "TAHT", -+ "Fuso hor\u00e1rio de ver\u00e3o do Taiti", "TAHST"}}, -+ {"Pacific/Tarawa", new String[] {"Fuso hor\u00e1rio das Ilhas Gilbert", "GILT", -+ "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Gilbert", "GILST"}}, -+ {"Pacific/Tongatapu", new String[] {"Fuso hor\u00e1rio de Tonga", "TOT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Tonga", "TOST"}}, -+ {"Pacific/Truk", TRUT}, -+ {"Pacific/Wake", new String[] {"Fuso hor\u00e1rio de Wake", "WAKT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Wake", "WAKST"}}, -+ {"Pacific/Wallis", new String[] {"Fuso hor\u00e1rio de Wallis e Futuna", "WFT", -+ "Fuso hor\u00e1rio de ver\u00e3o de Wallis e Futuna", "WFST"}}, -+ {"Pacific/Yap", TRUT}, -+ {"Poland", CET}, -+ {"PRC", CTT}, -+ {"PST8PDT", PST}, -+ {"ROK", KST}, -+ {"Singapore", SGT}, -+ {"SST", SBT}, -+ {"SystemV/AST4", AST}, -+ {"SystemV/AST4ADT", AST}, -+ {"SystemV/CST6", CST}, -+ {"SystemV/CST6CDT", CST}, -+ {"SystemV/EST5", EST}, -+ {"SystemV/EST5EDT", EST}, -+ {"SystemV/HST10", HST}, -+ {"SystemV/MST7", MST}, -+ {"SystemV/MST7MDT", MST}, -+ {"SystemV/PST8", PST}, -+ {"SystemV/PST8PDT", PST}, -+ {"SystemV/YST9", AKST}, -+ {"SystemV/YST9YDT", AKST}, -+ {"Turkey", EET}, -+ {"UCT", UTC}, -+ {"Universal", UTC}, -+ {"US/Alaska", AKST}, -+ {"US/Aleutian", HAST}, -+ {"US/Arizona", MST}, -+ {"US/Central", CST}, -+ {"US/Eastern", EST}, -+ {"US/Hawaii", HST}, -+ {"US/Indiana-Starke", CST}, -+ {"US/East-Indiana", EST}, -+ {"US/Michigan", EST}, -+ {"US/Mountain", MST}, -+ {"US/Pacific", PST}, -+ {"US/Pacific-New", PST}, -+ {"US/Samoa", SAMOA}, -+ {"UTC", UTC}, -+ {"VST", ICT}, -+ {"W-SU", MSK}, -+ {"WET", WET}, -+ {"Zulu", UTC}, - }; - } - } -- -- diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/7039469-tzdata2011g.patch openjdk-6-6b34-1.13.6/patches/openjdk/7039469-tzdata2011g.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/7039469-tzdata2011g.patch 2014-10-08 18:39:25.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/7039469-tzdata2011g.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -# HG changeset patch -# User peytoia -# Date 1303782379 -32400 -# Node ID 78890acd99e4981483a90a218fd19f8773ed6b68 -# Parent 91a590306e020f9cee4d0a96245e2a27235ba23d -7039469: (tz) Support tzdata2011g -Reviewed-by: okutsu - ---- openjdk/jdk/make/sun/javazic/tzdata/VERSION -+++ openjdk/jdk/make/sun/javazic/tzdata/VERSION -@@ -21,4 +21,4 @@ - # or visit www.oracle.com if you need additional information or have any - # questions. - # --tzdata2011e -+tzdata2011g ---- openjdk/jdk/make/sun/javazic/tzdata/africa -+++ openjdk/jdk/make/sun/javazic/tzdata/africa -@@ -234,7 +234,21 @@ - Rule Egypt 1990 1994 - May 1 1:00 1:00 S - # IATA (after 1990) says transitions are at 0:00. - # Go with IATA starting in 1995, except correct 1995 entry from 09-30 to 09-29. --Rule Egypt 1995 max - Apr lastFri 0:00s 1:00 S -+ -+# From Alexander Krivenyshev (2011-04-20): -+# "...Egypt's interim cabinet decided on Wednesday to cancel daylight -+# saving time after a poll posted on its website showed the majority of -+# Egyptians would approve the cancellation." -+# -+# Egypt to cancel daylight saving time -+# -+# http://www.almasryalyoum.com/en/node/407168 -+# -+# or -+# -+# http://www.worldtimezone.com/dst_news/dst_news_egypt04.html -+# -+Rule Egypt 1995 2010 - Apr lastFri 0:00s 1:00 S - Rule Egypt 1995 2005 - Sep lastThu 23:00s 0 - - # From Steffen Thorsen (2006-09-19): - # The Egyptian Gazette, issue 41,090 (2006-09-18), page 1, reports: -@@ -335,7 +349,7 @@ - Rule Egypt 2009 only - Aug 20 23:00s 0 - - Rule Egypt 2010 only - Aug 11 0:00 0 - - Rule Egypt 2010 only - Sep 10 0:00 1:00 S --Rule Egypt 2010 max - Sep lastThu 23:00s 0 - -+Rule Egypt 2010 only - Sep lastThu 23:00s 0 - - - # Zone NAME GMTOFF RULES FORMAT [UNTIL] - Zone Africa/Cairo 2:05:00 - LMT 1900 Oct ---- openjdk/jdk/make/sun/javazic/tzdata/europe -+++ openjdk/jdk/make/sun/javazic/tzdata/europe -@@ -168,7 +168,7 @@ - # A monument to Willett was unveiled on 1927-05-21, in an open space in - # a 45-acre wood near Chislehurst, Kent that was purchased by popular - # subscription and open to the public. On the south face of the monolith, --# designed by G. W. Miller, is the the William Willett Memorial Sundial, -+# designed by G. W. Miller, is the...William Willett Memorial Sundial, - # which is permanently set to Summer Time. - - # From Winston Churchill (1934-04-28): -@@ -1808,7 +1808,7 @@ - # - # All these events predate our cutoff date of 1970. Unless we can - # come up with more definitive info about the timekeeping during the --# war years it's probably best just do do the following for now: -+# war years it's probably best just do...the following for now: - Link Europe/Oslo Arctic/Longyearbyen - - # Poland ---- openjdk/jdk/make/sun/javazic/tzdata/southamerica -+++ openjdk/jdk/make/sun/javazic/tzdata/southamerica -@@ -767,7 +767,7 @@ - # - # As a result of the above Decree I believe the America/Rio_Branco - # timezone shall be modified from UTC-5 to UTC-4 and a new timezone shall --# be created to represent the the west side of the Para State. I -+# be created to represent the...west side of the Para State. I - # suggest this new timezone be called Santarem as the most - # important/populated city in the affected area. - # -@@ -1365,6 +1365,24 @@ - # For now, we'll just record the time in Stanley, since we have no - # better info. - -+# From Steffen Thorsen (2011-04-01): -+# The Falkland Islands will not turn back clocks this winter, but stay on -+# daylight saving time. -+# -+# One source: -+# -+# http://www.falklandnews.com/public/story.cfm?get=5914&source=3 -+# -+# -+# We have gotten this confirmed by a clerk of the legislative assembly: -+# Normally the clocks revert to Local Mean Time (UTC/GMT -4 hours) on the -+# third Sunday of April at 0200hrs and advance to Summer Time (UTC/GMT -3 -+# hours) on the first Sunday of September at 0200hrs. -+# -+# IMPORTANT NOTE: During 2011, on a trial basis, the Falkland Islands -+# will not revert to local mean time, but clocks will remain on Summer -+# time (UTC/GMT - 3 hours) throughout the whole of 2011. Any long term -+# change to local time following the trial period will be notified. - # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S - Rule Falk 1937 1938 - Sep lastSun 0:00 1:00 S - Rule Falk 1938 1942 - Mar Sun>=19 0:00 0 - -@@ -1376,7 +1394,8 @@ - Rule Falk 1984 only - Sep 16 0:00 1:00 S - Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 S - Rule Falk 1986 2000 - Apr Sun>=16 0:00 0 - --Rule Falk 2001 max - Apr Sun>=15 2:00 0 - -+Rule Falk 2001 2010 - Apr Sun>=15 2:00 0 - -+Rule Falk 2012 max - Apr Sun>=15 2:00 0 - - Rule Falk 2001 max - Sep Sun>=1 2:00 1:00 S - # Zone NAME GMTOFF RULES FORMAT [UNTIL] - Zone Atlantic/Stanley -3:51:24 - LMT 1890 diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/7044060-support_nsa_suite_b.patch openjdk-6-6b34-1.13.6/patches/openjdk/7044060-support_nsa_suite_b.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/7044060-support_nsa_suite_b.patch 2014-10-09 02:07:22.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/7044060-support_nsa_suite_b.patch 2015-01-20 09:12:43.000000000 +0000 @@ -1,14 +1,14 @@ diff -Nru openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/AESCipher.java openjdk/jdk/src/share/classes/com/sun/crypto/provider/AESCipher.java ---- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/AESCipher.java 2014-07-14 04:24:43.000000000 +0100 -+++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/AESCipher.java 2014-10-08 23:42:37.517304235 +0100 +--- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/AESCipher.java 2014-12-24 18:49:01.952432946 +0000 ++++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/AESCipher.java 2014-12-24 20:19:58.491124251 +0000 @@ -1,5 +1,5 @@ /* -- * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. +- * Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it -@@ -47,12 +47,115 @@ +@@ -47,18 +47,122 @@ * @see OutputFeedback */ @@ -125,19 +125,15 @@ /** * Creates an instance of AES cipher with default ECB mode and * PKCS5Padding. -@@ -60,9 +163,9 @@ - * @exception SecurityException if this constructor fails to verify - * its own integrity */ - public AESCipher() { -- SunJCE.ensureIntegrity(getClass()); + protected AESCipher(int keySize) { core = new CipherCore(new AESCrypt(), AESConstants.AES_BLOCK_SIZE); + fixedKeySize = keySize; } /** -@@ -187,6 +290,7 @@ +@@ -183,6 +287,7 @@ */ protected void engineInit(int opmode, Key key, SecureRandom random) throws InvalidKeyException { @@ -145,7 +141,7 @@ core.init(opmode, key, random); } -@@ -218,6 +322,7 @@ +@@ -214,6 +319,7 @@ AlgorithmParameterSpec params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException { @@ -153,7 +149,7 @@ core.init(opmode, key, params, random); } -@@ -225,6 +330,7 @@ +@@ -221,6 +327,7 @@ AlgorithmParameters params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException { @@ -162,11 +158,11 @@ } diff -Nru openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/AESWrapCipher.java openjdk/jdk/src/share/classes/com/sun/crypto/provider/AESWrapCipher.java ---- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/AESWrapCipher.java 2014-07-14 04:24:43.000000000 +0100 -+++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/AESWrapCipher.java 2014-10-08 23:39:30.602719423 +0100 +--- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/AESWrapCipher.java 2014-12-24 18:49:01.952432946 +0000 ++++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/AESWrapCipher.java 2014-12-24 20:19:27.306753452 +0000 @@ -1,5 +1,5 @@ /* -- * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved. +- * Copyright (c) 2004, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -201,7 +197,7 @@ private static final byte[] IV = { (byte) 0xA6, (byte) 0xA6, (byte) 0xA6, (byte) 0xA6, (byte) 0xA6, (byte) 0xA6, (byte) 0xA6, (byte) 0xA6 -@@ -62,6 +81,12 @@ +@@ -62,12 +81,19 @@ */ private boolean decrypting = false; @@ -214,20 +210,15 @@ /** * Creates an instance of AES KeyWrap cipher with default * mode, i.e. "ECB" and padding scheme, i.e. "NoPadding". -@@ -69,9 +94,11 @@ - * @exception SecurityException if this constructor fails to verify - * its own integrity */ - public AESWrapCipher() { + public AESWrapCipher(int keySize) { - SunJCE.ensureIntegrity(getClass()); cipher = new AESCrypt(); + fixedKeySize = keySize; -+ } /** -@@ -174,6 +201,7 @@ +@@ -170,6 +196,7 @@ throw new UnsupportedOperationException("This cipher can " + "only be used for key wrapping and unwrapping"); } @@ -236,8 +227,8 @@ } diff -Nru openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/DHKeyPairGenerator.java openjdk/jdk/src/share/classes/com/sun/crypto/provider/DHKeyPairGenerator.java ---- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/DHKeyPairGenerator.java 2014-07-14 04:24:43.000000000 +0100 -+++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/DHKeyPairGenerator.java 2014-10-08 23:37:10.076777154 +0100 +--- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/DHKeyPairGenerator.java 2013-08-21 20:33:03.876325741 +0100 ++++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/DHKeyPairGenerator.java 2014-12-24 20:18:40.126192669 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. @@ -288,8 +279,8 @@ BigInteger x; diff -Nru openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/DHParameterGenerator.java openjdk/jdk/src/share/classes/com/sun/crypto/provider/DHParameterGenerator.java ---- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/DHParameterGenerator.java 2014-07-14 04:24:43.000000000 +0100 -+++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/DHParameterGenerator.java 2014-10-08 23:37:10.076777154 +0100 +--- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/DHParameterGenerator.java 2013-08-21 20:33:03.892325999 +0100 ++++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/DHParameterGenerator.java 2014-12-24 20:18:40.126192669 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. @@ -324,9 +315,9 @@ exponentSize = dhParamSpec.getExponentSize(); diff -Nru openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java openjdk/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java ---- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java 2014-10-08 23:36:49.400491428 +0100 -+++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java 2014-10-08 23:37:10.076777154 +0100 -@@ -176,16 +176,67 @@ +--- openjdk.orig/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java 2014-12-24 20:10:36.400459042 +0000 ++++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java 2014-12-24 20:18:40.130192717 +0000 +@@ -172,16 +172,67 @@ put("Cipher.Blowfish SupportedKeyFormats", "RAW"); put("Cipher.AES", "com.sun.crypto.provider.AESCipher"); @@ -395,7 +386,7 @@ put("Cipher.RC2", "com.sun.crypto.provider.RC2Cipher"); put("Cipher.RC2 SupportedModes", BLOCK_MODES); -@@ -200,7 +251,7 @@ +@@ -196,7 +247,7 @@ put("Cipher.ARCFOUR SupportedKeyFormats", "RAW"); /* @@ -404,7 +395,7 @@ */ put("KeyGenerator.DES", "com.sun.crypto.provider.DESKeyGenerator"); -@@ -229,6 +280,8 @@ +@@ -225,6 +276,8 @@ put("KeyGenerator.HmacSHA1", "com.sun.crypto.provider.HmacSHA1KeyGenerator"); @@ -413,7 +404,7 @@ put("KeyGenerator.HmacSHA224", "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA2KG$SHA224"); -@@ -411,6 +464,8 @@ +@@ -407,6 +460,8 @@ */ put("Mac.HmacMD5", "com.sun.crypto.provider.HmacMD5"); put("Mac.HmacSHA1", "com.sun.crypto.provider.HmacSHA1"); @@ -423,8 +414,8 @@ "com.sun.crypto.provider.HmacCore$HmacSHA224"); put("Alg.Alias.Mac.OID.1.2.840.113549.2.8", "HmacSHA224"); diff -Nru openjdk.orig/jdk/src/share/classes/java/security/interfaces/DSAKeyPairGenerator.java openjdk/jdk/src/share/classes/java/security/interfaces/DSAKeyPairGenerator.java ---- openjdk.orig/jdk/src/share/classes/java/security/interfaces/DSAKeyPairGenerator.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/java/security/interfaces/DSAKeyPairGenerator.java 2014-10-08 23:37:10.076777154 +0100 +--- openjdk.orig/jdk/src/share/classes/java/security/interfaces/DSAKeyPairGenerator.java 2013-08-21 20:33:07.800389240 +0100 ++++ openjdk/jdk/src/share/classes/java/security/interfaces/DSAKeyPairGenerator.java 2014-12-24 20:18:40.130192717 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved. @@ -475,8 +466,8 @@ public void initialize(int modlen, boolean genParams, SecureRandom random) throws InvalidParameterException; diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java openjdk/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java ---- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java 2014-10-08 23:36:47.440464344 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java 2014-10-08 23:38:45.190091692 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java 2014-12-24 20:10:34.252433649 +0000 ++++ openjdk/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java 2014-12-24 20:18:40.130192717 +0000 @@ -164,6 +164,10 @@ // if we do the padding private int bytesBuffered; @@ -536,9 +527,9 @@ case Cipher.ENCRYPT_MODE: encrypt = true; diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java openjdk/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java ---- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java 2014-10-08 23:36:49.512492977 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java 2014-10-08 23:38:03.717518477 +0100 -@@ -401,12 +401,8 @@ +--- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java 2014-12-24 20:10:36.604461454 +0000 ++++ openjdk/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java 2014-12-24 20:18:40.130192717 +0000 +@@ -383,12 +383,8 @@ return System.identityHashCode(this); } @@ -553,7 +544,7 @@ } private static final class Descriptor { -@@ -523,7 +519,8 @@ +@@ -505,7 +501,8 @@ m(CKM_MD2)); d(MD, "MD5", P11Digest, m(CKM_MD5)); @@ -563,7 +554,7 @@ m(CKM_SHA_1)); d(MD, "SHA-224", P11Digest, -@@ -542,6 +539,7 @@ +@@ -524,6 +521,7 @@ d(MAC, "HmacMD5", P11MAC, m(CKM_MD5_HMAC)); d(MAC, "HmacSHA1", P11MAC, @@ -571,7 +562,7 @@ m(CKM_SHA_1_HMAC)); d(MAC, "HmacSHA224", P11MAC, s("1.2.840.113549.2.8", "OID.1.2.840.113549.2.8"), -@@ -563,6 +561,7 @@ +@@ -545,6 +543,7 @@ d(KPG, "RSA", P11KeyPairGenerator, m(CKM_RSA_PKCS_KEY_PAIR_GEN)); d(KPG, "DSA", P11KeyPairGenerator, @@ -579,7 +570,7 @@ m(CKM_DSA_KEY_PAIR_GEN)); d(KPG, "DH", P11KeyPairGenerator, s("DiffieHellman"), m(CKM_DH_PKCS_KEY_PAIR_GEN)); -@@ -585,6 +584,7 @@ +@@ -567,6 +566,7 @@ d(KF, "RSA", P11RSAKeyFactory, m(CKM_RSA_PKCS_KEY_PAIR_GEN, CKM_RSA_PKCS, CKM_RSA_X_509)); d(KF, "DSA", P11DSAKeyFactory, @@ -587,7 +578,7 @@ m(CKM_DSA_KEY_PAIR_GEN, CKM_DSA, CKM_DSA_SHA1)); d(KF, "DH", P11DHKeyFactory, s("DiffieHellman"), m(CKM_DH_PKCS_KEY_PAIR_GEN, CKM_DH_PKCS_DERIVE)); -@@ -608,6 +608,7 @@ +@@ -590,6 +590,7 @@ d(SKF, "DESede", P11SecretKeyFactory, m(CKM_DES3_CBC)); d(SKF, "AES", P11SecretKeyFactory, @@ -595,7 +586,7 @@ m(CKM_AES_CBC)); d(SKF, "Blowfish", P11SecretKeyFactory, m(CKM_BLOWFISH_CBC)); -@@ -633,10 +634,28 @@ +@@ -615,10 +616,28 @@ m(CKM_DES3_ECB)); d(CIP, "AES/CBC/NoPadding", P11Cipher, m(CKM_AES_CBC)); @@ -624,7 +615,7 @@ d(CIP, "AES/ECB/PKCS5Padding", P11Cipher, s("AES"), m(CKM_AES_ECB)); d(CIP, "AES/CTR/NoPadding", P11Cipher, -@@ -650,13 +669,16 @@ +@@ -632,13 +651,16 @@ d(CIP, "RSA/ECB/PKCS1Padding", P11RSACipher, m(CKM_RSA_PKCS)); @@ -644,7 +635,7 @@ m(CKM_ECDSA_SHA1, CKM_ECDSA)); d(SIG, "SHA224withECDSA", P11Signature, s("1.2.840.10045.4.3.1", "OID.1.2.840.10045.4.3.1"), -@@ -671,10 +693,14 @@ +@@ -653,10 +675,14 @@ s("1.2.840.10045.4.3.4", "OID.1.2.840.10045.4.3.4"), m(CKM_ECDSA)); d(SIG, "MD2withRSA", P11Signature, @@ -660,8 +651,8 @@ d(SIG, "SHA224withRSA", P11Signature, s("1.2.840.113549.1.1.14", "OID.1.2.840.113549.1.1.14"), diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/provider/DSA.java openjdk/jdk/src/share/classes/sun/security/provider/DSA.java ---- openjdk.orig/jdk/src/share/classes/sun/security/provider/DSA.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/provider/DSA.java 2014-10-08 23:37:11.636798712 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/provider/DSA.java 2013-08-21 20:33:03.312316612 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/provider/DSA.java 2014-12-24 20:18:40.130192717 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2004, Oracle and/or its affiliates. All rights reserved. @@ -1588,8 +1579,8 @@ } } diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/provider/DSAKeyPairGenerator.java openjdk/jdk/src/share/classes/sun/security/provider/DSAKeyPairGenerator.java ---- openjdk.orig/jdk/src/share/classes/sun/security/provider/DSAKeyPairGenerator.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/provider/DSAKeyPairGenerator.java 2014-10-08 23:37:11.636798712 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/provider/DSAKeyPairGenerator.java 2013-08-21 20:33:03.316316678 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/provider/DSAKeyPairGenerator.java 2014-12-24 20:18:40.130192717 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved. @@ -1751,8 +1742,8 @@ /** diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/provider/DSAParameterGenerator.java openjdk/jdk/src/share/classes/sun/security/provider/DSAParameterGenerator.java ---- openjdk.orig/jdk/src/share/classes/sun/security/provider/DSAParameterGenerator.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/provider/DSAParameterGenerator.java 2014-10-08 23:37:11.636798712 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/provider/DSAParameterGenerator.java 2013-08-21 20:33:03.316316678 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/provider/DSAParameterGenerator.java 2014-12-24 20:18:40.130192717 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. @@ -2131,8 +2122,8 @@ - } } diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/provider/ParameterCache.java openjdk/jdk/src/share/classes/sun/security/provider/ParameterCache.java ---- openjdk.orig/jdk/src/share/classes/sun/security/provider/ParameterCache.java 2014-07-14 04:24:45.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/provider/ParameterCache.java 2014-10-08 23:37:11.636798712 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/provider/ParameterCache.java 2013-08-21 20:33:03.320316743 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/provider/ParameterCache.java 2014-12-24 20:18:40.130192717 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. @@ -2371,8 +2362,8 @@ } diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/provider/SunEntries.java openjdk/jdk/src/share/classes/sun/security/provider/SunEntries.java ---- openjdk.orig/jdk/src/share/classes/sun/security/provider/SunEntries.java 2014-10-08 23:36:49.404491484 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/provider/SunEntries.java 2014-10-08 23:37:11.636798712 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/provider/SunEntries.java 2014-12-24 20:10:36.404459089 +0000 ++++ openjdk/jdk/src/share/classes/sun/security/provider/SunEntries.java 2014-12-24 20:18:40.130192717 +0000 @@ -47,6 +47,10 @@ * SHA-2 family of hash functions includes SHA-224, SHA-256, SHA-384, * and SHA-512. @@ -2458,7 +2449,7 @@ * Implementation type: software or hardware diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/spec/DSAGenParameterSpec.java openjdk/jdk/src/share/classes/sun/security/spec/DSAGenParameterSpec.java --- openjdk.orig/jdk/src/share/classes/sun/security/spec/DSAGenParameterSpec.java 1970-01-01 01:00:00.000000000 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/spec/DSAGenParameterSpec.java 2014-10-08 23:37:11.636798712 +0100 ++++ openjdk/jdk/src/share/classes/sun/security/spec/DSAGenParameterSpec.java 2014-12-24 20:18:40.130192717 +0000 @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. @@ -2590,8 +2581,8 @@ + } +} diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/x509/AlgorithmId.java openjdk/jdk/src/share/classes/sun/security/x509/AlgorithmId.java ---- openjdk.orig/jdk/src/share/classes/sun/security/x509/AlgorithmId.java 2014-10-08 23:36:49.476492479 +0100 -+++ openjdk/jdk/src/share/classes/sun/security/x509/AlgorithmId.java 2014-10-08 23:37:11.636798712 +0100 +--- openjdk.orig/jdk/src/share/classes/sun/security/x509/AlgorithmId.java 2014-12-24 20:10:36.520460461 +0000 ++++ openjdk/jdk/src/share/classes/sun/security/x509/AlgorithmId.java 2014-12-24 20:18:40.130192717 +0000 @@ -508,6 +508,9 @@ if (name.equalsIgnoreCase("EC")) { return EC_oid; @@ -2661,8 +2652,8 @@ nameTable.put(sha1WithRSAEncryption_OIW_oid, "SHA1withRSA"); nameTable.put(sha224WithRSAEncryption_oid, "SHA224withRSA"); diff -Nru openjdk.orig/jdk/test/com/sun/crypto/provider/KeyAgreement/TestExponentSize.java openjdk/jdk/test/com/sun/crypto/provider/KeyAgreement/TestExponentSize.java ---- openjdk.orig/jdk/test/com/sun/crypto/provider/KeyAgreement/TestExponentSize.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/com/sun/crypto/provider/KeyAgreement/TestExponentSize.java 2014-10-08 23:37:11.636798712 +0100 +--- openjdk.orig/jdk/test/com/sun/crypto/provider/KeyAgreement/TestExponentSize.java 2013-08-21 20:32:58.224234259 +0100 ++++ openjdk/jdk/test/com/sun/crypto/provider/KeyAgreement/TestExponentSize.java 2014-12-24 20:18:40.130192717 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. @@ -2722,7 +2713,7 @@ diff -Nru openjdk.orig/jdk/test/sun/security/pkcs11/ec/TestECDH2.java openjdk/jdk/test/sun/security/pkcs11/ec/TestECDH2.java --- openjdk.orig/jdk/test/sun/security/pkcs11/ec/TestECDH2.java 1970-01-01 01:00:00.000000000 +0100 -+++ openjdk/jdk/test/sun/security/pkcs11/ec/TestECDH2.java 2014-10-08 23:37:11.636798712 +0100 ++++ openjdk/jdk/test/sun/security/pkcs11/ec/TestECDH2.java 2014-12-24 20:18:40.134192764 +0000 @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. @@ -2853,7 +2844,7 @@ +} diff -Nru openjdk.orig/jdk/test/sun/security/pkcs11/ec/TestECDSA2.java openjdk/jdk/test/sun/security/pkcs11/ec/TestECDSA2.java --- openjdk.orig/jdk/test/sun/security/pkcs11/ec/TestECDSA2.java 1970-01-01 01:00:00.000000000 +0100 -+++ openjdk/jdk/test/sun/security/pkcs11/ec/TestECDSA2.java 2014-10-08 23:37:11.636798712 +0100 ++++ openjdk/jdk/test/sun/security/pkcs11/ec/TestECDSA2.java 2014-12-24 20:18:40.134192764 +0000 @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. @@ -2979,7 +2970,7 @@ +} diff -Nru openjdk.orig/jdk/test/sun/security/provider/DSA/TestAlgParameterGenerator.java openjdk/jdk/test/sun/security/provider/DSA/TestAlgParameterGenerator.java --- openjdk.orig/jdk/test/sun/security/provider/DSA/TestAlgParameterGenerator.java 1970-01-01 01:00:00.000000000 +0100 -+++ openjdk/jdk/test/sun/security/provider/DSA/TestAlgParameterGenerator.java 2014-10-08 23:37:11.636798712 +0100 ++++ openjdk/jdk/test/sun/security/provider/DSA/TestAlgParameterGenerator.java 2014-12-24 20:18:40.134192764 +0000 @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. @@ -3100,7 +3091,7 @@ +} diff -Nru openjdk.orig/jdk/test/sun/security/provider/DSA/TestDSA2.java openjdk/jdk/test/sun/security/provider/DSA/TestDSA2.java --- openjdk.orig/jdk/test/sun/security/provider/DSA/TestDSA2.java 1970-01-01 01:00:00.000000000 +0100 -+++ openjdk/jdk/test/sun/security/provider/DSA/TestDSA2.java 2014-10-08 23:37:11.636798712 +0100 ++++ openjdk/jdk/test/sun/security/provider/DSA/TestDSA2.java 2014-12-24 20:18:40.134192764 +0000 @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. @@ -3199,8 +3190,8 @@ + } +} diff -Nru openjdk.orig/jdk/test/sun/security/provider/DSA/TestKeyPairGenerator.java openjdk/jdk/test/sun/security/provider/DSA/TestKeyPairGenerator.java ---- openjdk.orig/jdk/test/sun/security/provider/DSA/TestKeyPairGenerator.java 2014-07-14 04:24:44.000000000 +0100 -+++ openjdk/jdk/test/sun/security/provider/DSA/TestKeyPairGenerator.java 2014-10-08 23:37:11.636798712 +0100 +--- openjdk.orig/jdk/test/sun/security/provider/DSA/TestKeyPairGenerator.java 2013-08-21 20:32:58.044231344 +0100 ++++ openjdk/jdk/test/sun/security/provider/DSA/TestKeyPairGenerator.java 2014-12-24 20:18:40.134192764 +0000 @@ -24,7 +24,7 @@ /* * @test diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/7090843-tzdata2011j.patch openjdk-6-6b34-1.13.6/patches/openjdk/7090843-tzdata2011j.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/7090843-tzdata2011j.patch 2014-10-08 18:39:25.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/7090843-tzdata2011j.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,1281 +0,0 @@ -# HG changeset patch -# User peytoia -# Date 1316071034 -32400 -# Node ID e97325a7fe7b037be1cfcb33acd5ed5aea25a24e -# Parent 6b1e65e73b804bb5eeee4cb2d8ba15db7e6ad73f -7090843: (tz) Support tzdata2011j -Reviewed-by: okutsu - ---- openjdk/jdk/make/sun/javazic/tzdata/VERSION -+++ openjdk/jdk/make/sun/javazic/tzdata/VERSION -@@ -21,4 +21,4 @@ - # or visit www.oracle.com if you need additional information or have any - # questions. - # --tzdata2011g -+tzdata2011j ---- openjdk/jdk/make/sun/javazic/tzdata/africa -+++ openjdk/jdk/make/sun/javazic/tzdata/africa -@@ -80,7 +80,7 @@ - # I invented the following abbreviations; corrections are welcome! - # 2:00 WAST West Africa Summer Time - # 2:30 BEAT British East Africa Time (no longer used) --# 2:44:45 BEAUT British East Africa Unified Time (no longer used) -+# 2:45 BEAUT British East Africa Unified Time (no longer used) - # 3:00 CAST Central Africa Summer Time (no longer used) - # 3:00 SAST South Africa Summer Time (no longer used) - # 3:00 EAT East Africa Time -@@ -418,7 +418,7 @@ - Zone Africa/Nairobi 2:27:16 - LMT 1928 Jul - 3:00 - EAT 1930 - 2:30 - BEAT 1940 -- 2:44:45 - BEAUT 1960 -+ 2:45 - BEAUT 1960 - 3:00 - EAT - - # Lesotho -@@ -979,6 +979,11 @@ - 2:00 Sudan CA%sT 2000 Jan 15 12:00 - 3:00 - EAT - -+# South Sudan -+Zone Africa/Juba 2:06:24 - LMT 1931 -+ 2:00 Sudan CA%sT 2000 Jan 15 12:00 -+ 3:00 - EAT -+ - # Swaziland - # Zone NAME GMTOFF RULES FORMAT [UNTIL] - Zone Africa/Mbabane 2:04:24 - LMT 1903 Mar -@@ -988,7 +993,7 @@ - # Zone NAME GMTOFF RULES FORMAT [UNTIL] - Zone Africa/Dar_es_Salaam 2:37:08 - LMT 1931 - 3:00 - EAT 1948 -- 2:44:45 - BEAUT 1961 -+ 2:45 - BEAUT 1961 - 3:00 - EAT - - # Togo -@@ -1114,7 +1119,7 @@ - Zone Africa/Kampala 2:09:40 - LMT 1928 Jul - 3:00 - EAT 1930 - 2:30 - BEAT 1948 -- 2:44:45 - BEAUT 1957 -+ 2:45 - BEAUT 1957 - 3:00 - EAT - - # Zambia ---- openjdk/jdk/make/sun/javazic/tzdata/antarctica -+++ openjdk/jdk/make/sun/javazic/tzdata/antarctica -@@ -41,18 +41,6 @@ - # I made up all time zone abbreviations mentioned here; corrections welcome! - # FORMAT is `zzz' and GMTOFF is 0 for locations while uninhabited. - --# These rules are stolen from the `europe' file. --# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S --Rule RussAQ 1981 1984 - Apr 1 0:00 1:00 S --Rule RussAQ 1981 1983 - Oct 1 0:00 0 - --Rule RussAQ 1984 1991 - Sep lastSun 2:00s 0 - --Rule RussAQ 1985 1991 - Mar lastSun 2:00s 1:00 S --Rule RussAQ 1992 only - Mar lastSat 23:00 1:00 S --Rule RussAQ 1992 only - Sep lastSat 23:00 0 - --Rule RussAQ 1993 max - Mar lastSun 2:00s 1:00 S --Rule RussAQ 1993 1995 - Sep lastSun 2:00s 0 - --Rule RussAQ 1996 max - Oct lastSun 2:00s 0 - -- - # These rules are stolen from the `southamerica' file. - # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S - Rule ArgAQ 1964 1966 - Mar 1 0:00 0 - ---- openjdk/jdk/make/sun/javazic/tzdata/asia -+++ openjdk/jdk/make/sun/javazic/tzdata/asia -@@ -99,6 +99,10 @@ - Rule RussiaAsia 1993 1995 - Sep lastSun 2:00s 0 - - Rule RussiaAsia 1996 max - Oct lastSun 2:00s 0 - - -+# From Arthur David Olson (2011-06-15): -+# While Russia abandoned DST in 2011, Armenia may choose to -+# follow Russia's "old" rules. -+ - # Afghanistan - # Zone NAME GMTOFF RULES FORMAT [UNTIL] - Zone Asia/Kabul 4:36:48 - LMT 1890 ---- openjdk/jdk/make/sun/javazic/tzdata/australasia -+++ openjdk/jdk/make/sun/javazic/tzdata/australasia -@@ -521,7 +521,7 @@ - # http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf - # - --# From Raymond Hughes (2010-10-07): -+# From Laupue Raymond Hughes (2010-10-07): - # Please see - # - # http://www.mcil.gov.ws -@@ -531,7 +531,7 @@ - # to 01:00am and First Sunday April 2011 (03/04/11) - adjust clocks - # backwards from 1:00am to 12:00am" - --# From Raymond Hughes (2011-03-07) -+# From Laupue Raymond Hughes (2011-03-07): - # I believe this will be posted shortly on the website - # - # www.mcil.gov.ws -@@ -551,12 +551,74 @@ - # Margaret Fruean ACTING CHIEF EXECUTIVE OFFICER MINISTRY OF COMMERCE, - # INDUSTRY AND LABOUR 28th February 2011 - -+# From David Zuelke (2011-05-09): -+# Subject: Samoa to move timezone from east to west of international date line -+# -+# -+# http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963 -+# -+ -+# From Mark Sim-Smith (2011-08-17): -+# I have been in contact with Leilani Tuala Warren from the Samoa Law -+# Reform Commission, and she has sent me a copy of the Bill that she -+# confirmed has been passed...Most of the sections are about maps rather -+# than the time zone change, but I'll paste the relevant bits below. But -+# the essence is that at midnight 29 Dec (UTC-11 I suppose), Samoa -+# changes from UTC-11 to UTC+13: -+# -+# International Date Line Bill 2011 -+# -+# AN ACT to provide for the change to standard time in Samoa and to make -+# consequential amendments to the position of the International Date -+# Line, and for related purposes. -+# -+# BE IT ENACTED by the Legislative Assembly of Samoa in Parliament -+# assembled as follows: -+# -+# 1. Short title and commencement-(1) This Act may be cited as the -+# International Date Line Act 2011. (2) Except for section 5(3) this Act -+# commences at 12 o'clock midnight, on Thursday 29th December 2011. (3) -+# Section 5(3) commences on the date of assent by the Head of State. -+# -+# [snip] -+# -+# 3. Interpretation - [snip] "Samoa standard time" in this Act and any -+# other statute of Samoa which refers to 'Samoa standard time' means the -+# time 13 hours in advance of Co-ordinated Universal Time. -+# -+# 4. Samoa standard time - (1) Upon the commencement of this Act, Samoa -+# standard time shall be set at 13 hours in advance of Co-ordinated -+# Universal Time for the whole of Samoa. (2) All references to Samoa's -+# time zone and to Samoa standard time in Samoa in all legislation and -+# instruments after the commencement of this Act shall be references to -+# Samoa standard time as provided for in this Act. (3) Nothing in this -+# Act affects the provisions of the Daylight Saving Act 2009, except that -+# it defines Samoa standard time.... -+ -+# From Laupue Raymond Hughes (2011-09-02): -+# -+# http://www.mcil.gov.ws/mcil_publications.html -+# -+# -+# here is the official website publication for Samoa DST and dateline change -+# -+# DST -+# Year End Time Start Time -+# 2011 - - - - - - 24 September 3:00am to 4:00am -+# 2012 01 April 4:00am to 3:00am - - - - - - -+# -+# Dateline Change skip Friday 30th Dec 2011 -+# Thursday 29th December 2011 23:59:59 Hours -+# Saturday 31st December 2011 00:00:00 Hours - Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5 - -11:26:56 - LMT 1911 - -11:30 - SAMT 1950 # Samoa Time - -11:00 - WST 2010 Sep 26 - -11:00 1:00 WSDT 2011 Apr 2 4:00 -- -11:00 - WST -+ -11:00 - WST 2011 Sep 24 3:00 -+ -11:00 1:00 WSDT 2011 Dec 30 -+ 13:00 1:00 WSDT 2012 Apr 1 4:00 -+ 13:00 - WST - - # Solomon Is - # excludes Bougainville, for which see Papua New Guinea -@@ -1228,7 +1290,7 @@ - # Lord Howe Island Board (controlling authority for the Island) is - # seeking the community's views on various options for summer time - # arrangements on the Island, e.g. advance clocks by 1 full hour --# instead of only 30 minutes. Dependant on the wishes of residents -+# instead of only 30 minutes. [Dependent] on the wishes of residents - # the Board may approach the NSW government to change the existing - # arrangements. The starting date for summer time on the Island will - # however always coincide with the rest of NSW. -@@ -1354,7 +1416,7 @@ - - # From Paul Eggert (1996-01-22): - # Today's _Wall Street Journal_ (page 1) reports that Kiribati --# ``declared it the same day throught the country as of Jan. 1, 1995'' -+# ``declared it the same day [throughout] the country as of Jan. 1, 1995'' - # as part of the competition to be first into the 21st century. - - ---- openjdk/jdk/make/sun/javazic/tzdata/europe -+++ openjdk/jdk/make/sun/javazic/tzdata/europe -@@ -587,6 +587,26 @@ - Rule Russia 1993 1995 - Sep lastSun 2:00s 0 - - Rule Russia 1996 max - Oct lastSun 2:00s 0 - - -+# From Alexander Krivenyshev (2011-06-14): -+# According to Kremlin press service, Russian President Dmitry Medvedev -+# signed a federal law "On calculation of time" on June 9, 2011. -+# According to the law Russia is abolishing daylight saving time. -+# -+# Medvedev signed a law "On the Calculation of Time" (in russian): -+# -+# http://bmockbe.ru/events/?ID=7583 -+# -+# -+# Medvedev signed a law on the calculation of the time (in russian): -+# -+# http://www.regnum.ru/news/polit/1413906.html -+# -+ -+# From Arthur David Olson (2011-06-15): -+# Take "abolishing daylight saving time" to mean that time is now considered -+# to be standard. -+# At least for now, keep the "old" Russia rules for the benefit of Belarus. -+ - # These are for backward compatibility with older versions. - - # Zone NAME GMTOFF RULES FORMAT [UNTIL] -@@ -2035,7 +2055,8 @@ - 1:00 C-Eur CE%sT 1945 - 2:00 Poland CE%sT 1946 - 3:00 Russia MSK/MSD 1991 Mar 31 2:00s -- 2:00 Russia EE%sT -+ 2:00 Russia EE%sT 2011 Mar 27 2:00s -+ 3:00 - KALT - # - # From Oscar van Vlijmen (2001-08-25): [This region consists of] - # Respublika Adygeya, Arkhangel'skaya oblast', -@@ -2064,7 +2085,8 @@ - 2:00 - EET 1930 Jun 21 - 3:00 Russia MSK/MSD 1991 Mar 31 2:00s - 2:00 Russia EE%sT 1992 Jan 19 2:00s -- 3:00 Russia MSK/MSD -+ 3:00 Russia MSK/MSD 2011 Mar 27 2:00s -+ 4:00 - MSK - # - # Astrakhanskaya oblast', Kirovskaya oblast', Saratovskaya oblast', - # Volgogradskaya oblast'. Shanks & Pottenger say Kirov is still at +0400 -@@ -2077,7 +2099,8 @@ - 4:00 Russia VOL%sT 1989 Mar 26 2:00s # Volgograd T - 3:00 Russia VOL%sT 1991 Mar 31 2:00s - 4:00 - VOLT 1992 Mar 29 2:00s -- 3:00 Russia VOL%sT -+ 3:00 Russia VOL%sT 2011 Mar 27 2:00s -+ 4:00 - VOLT - # - # From Oscar van Vlijmen (2001-08-25): [This region consists of] - # Samarskaya oblast', Udmyrtskaya respublika -@@ -2089,7 +2112,8 @@ - 2:00 Russia KUY%sT 1991 Sep 29 2:00s - 3:00 - KUYT 1991 Oct 20 3:00 - 4:00 Russia SAM%sT 2010 Mar 28 2:00s # Samara Time -- 3:00 Russia SAM%sT -+ 3:00 Russia SAM%sT 2011 Mar 27 2:00s -+ 4:00 - SAMT - - # - # From Oscar van Vlijmen (2001-08-25): [This region consists of] -@@ -2102,7 +2126,8 @@ - 4:00 - SVET 1930 Jun 21 # Sverdlovsk Time - 5:00 Russia SVE%sT 1991 Mar 31 2:00s - 4:00 Russia SVE%sT 1992 Jan 19 2:00s -- 5:00 Russia YEK%sT # Yekaterinburg Time -+ 5:00 Russia YEK%sT 2011 Mar 27 2:00s -+ 6:00 - YEKT # Yekaterinburg Time - # - # From Oscar van Vlijmen (2001-08-25): [This region consists of] - # Respublika Altaj, Altajskij kraj, Omskaya oblast'. -@@ -2110,7 +2135,8 @@ - 5:00 - OMST 1930 Jun 21 # Omsk TIme - 6:00 Russia OMS%sT 1991 Mar 31 2:00s - 5:00 Russia OMS%sT 1992 Jan 19 2:00s -- 6:00 Russia OMS%sT -+ 6:00 Russia OMS%sT 2011 Mar 27 2:00s -+ 7:00 - OMST - # - # From Paul Eggert (2006-08-19): I'm guessing about Tomsk here; it's - # not clear when it switched from +7 to +6. -@@ -2120,7 +2146,8 @@ - 7:00 Russia NOV%sT 1991 Mar 31 2:00s - 6:00 Russia NOV%sT 1992 Jan 19 2:00s - 7:00 Russia NOV%sT 1993 May 23 # say Shanks & P. -- 6:00 Russia NOV%sT -+ 6:00 Russia NOV%sT 2011 Mar 27 2:00s -+ 7:00 - NOVT - - # From Alexander Krivenyshev (2009-10-13): - # Kemerovo oblast' (Kemerovo region) in Russia will change current time zone on -@@ -2153,7 +2180,8 @@ - 7:00 Russia KRA%sT 1991 Mar 31 2:00s - 6:00 Russia KRA%sT 1992 Jan 19 2:00s - 7:00 Russia KRA%sT 2010 Mar 28 2:00s -- 6:00 Russia NOV%sT # Novosibirsk/Novokuznetsk Time -+ 6:00 Russia NOV%sT 2011 Mar 27 2:00s -+ 7:00 - NOVT # Novosibirsk/Novokuznetsk Time - - # - # From Oscar van Vlijmen (2001-08-25): [This region consists of] -@@ -2164,7 +2192,8 @@ - 6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time - 7:00 Russia KRA%sT 1991 Mar 31 2:00s - 6:00 Russia KRA%sT 1992 Jan 19 2:00s -- 7:00 Russia KRA%sT -+ 7:00 Russia KRA%sT 2011 Mar 27 2:00s -+ 8:00 - KRAT - # - # From Oscar van Vlijmen (2001-08-25): [This region consists of] - # Respublika Buryatiya, Irkutskaya oblast', -@@ -2174,7 +2203,8 @@ - 7:00 - IRKT 1930 Jun 21 # Irkutsk Time - 8:00 Russia IRK%sT 1991 Mar 31 2:00s - 7:00 Russia IRK%sT 1992 Jan 19 2:00s -- 8:00 Russia IRK%sT -+ 8:00 Russia IRK%sT 2011 Mar 27 2:00s -+ 9:00 - IRKT - # - # From Oscar van Vlijmen (2003-10-18): [This region consists of] - # Aginskij Buryatskij avtonomnyj okrug, Amurskaya oblast', -@@ -2197,7 +2227,8 @@ - 8:00 - YAKT 1930 Jun 21 # Yakutsk Time - 9:00 Russia YAK%sT 1991 Mar 31 2:00s - 8:00 Russia YAK%sT 1992 Jan 19 2:00s -- 9:00 Russia YAK%sT -+ 9:00 Russia YAK%sT 2011 Mar 27 2:00s -+ 10:00 - YAKT - # - # From Oscar van Vlijmen (2003-10-18): [This region consists of] - # Evrejskaya avtonomnaya oblast', Khabarovskij kraj, Primorskij kraj, -@@ -2210,7 +2241,8 @@ - 9:00 - VLAT 1930 Jun 21 # Vladivostok Time - 10:00 Russia VLA%sT 1991 Mar 31 2:00s - 9:00 Russia VLA%sST 1992 Jan 19 2:00s -- 10:00 Russia VLA%sT -+ 10:00 Russia VLA%sT 2011 Mar 27 2:00s -+ 11:00 - VLAT - # - # Sakhalinskaya oblast'. - # The Zone name should be Yuzhno-Sakhalinsk, but that's too long. -@@ -2220,7 +2252,8 @@ - 11:00 Russia SAK%sT 1991 Mar 31 2:00s # Sakhalin T. - 10:00 Russia SAK%sT 1992 Jan 19 2:00s - 11:00 Russia SAK%sT 1997 Mar lastSun 2:00s -- 10:00 Russia SAK%sT -+ 10:00 Russia SAK%sT 2011 Mar 27 2:00s -+ 11:00 - SAKT - # - # From Oscar van Vlijmen (2003-10-18): [This region consists of] - # Magadanskaya oblast', Respublika Sakha (Yakutiya). -@@ -2233,7 +2266,8 @@ - 10:00 - MAGT 1930 Jun 21 # Magadan Time - 11:00 Russia MAG%sT 1991 Mar 31 2:00s - 10:00 Russia MAG%sT 1992 Jan 19 2:00s -- 11:00 Russia MAG%sT -+ 11:00 Russia MAG%sT 2011 Mar 27 2:00s -+ 12:00 - MAGT - # - # From Oscar van Vlijmen (2001-08-25): [This region consists of] - # Kamchatskaya oblast', Koryakskij avtonomnyj okrug. -@@ -2244,7 +2278,8 @@ - 12:00 Russia PET%sT 1991 Mar 31 2:00s - 11:00 Russia PET%sT 1992 Jan 19 2:00s - 12:00 Russia PET%sT 2010 Mar 28 2:00s -- 11:00 Russia PET%sT -+ 11:00 Russia PET%sT 2011 Mar 27 2:00s -+ 12:00 - PETT - # - # Chukotskij avtonomnyj okrug - Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2 -@@ -2253,7 +2288,8 @@ - 12:00 Russia ANA%sT 1991 Mar 31 2:00s - 11:00 Russia ANA%sT 1992 Jan 19 2:00s - 12:00 Russia ANA%sT 2010 Mar 28 2:00s -- 11:00 Russia ANA%sT -+ 11:00 Russia ANA%sT 2011 Mar 27 2:00s -+ 12:00 - ANAT - - # Serbia - # Zone NAME GMTOFF RULES FORMAT [UNTIL] ---- openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab -+++ openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab -@@ -43,6 +43,9 @@ - # - # Lines beginning with `#' are comments. - # -+# From Arthur David Olson (2011-08-17): -+# Resynchronized today with the ISO 3166 site (adding SS for South Sudan). -+# - #country- - #code country name - AD Andorra -@@ -52,7 +55,6 @@ - AI Anguilla - AL Albania - AM Armenia --AN Netherlands Antilles - AO Angola - AQ Antarctica - AR Argentina -@@ -75,6 +77,7 @@ - BM Bermuda - BN Brunei - BO Bolivia -+BQ Bonaire Sint Eustatius & Saba - BR Brazil - BS Bahamas - BT Bhutan -@@ -97,6 +100,7 @@ - CR Costa Rica - CU Cuba - CV Cape Verde -+CW Curacao - CX Christmas Island - CY Cyprus - CZ Czech Republic -@@ -251,8 +255,10 @@ - SN Senegal - SO Somalia - SR Suriname -+SS South Sudan - ST Sao Tome & Principe - SV El Salvador -+SX Sint Maarten - SY Syria - SZ Swaziland - TC Turks & Caicos Is ---- openjdk/jdk/make/sun/javazic/tzdata/northamerica -+++ openjdk/jdk/make/sun/javazic/tzdata/northamerica -@@ -490,6 +490,10 @@ - # own time. I asked about daylight saving; they said it wasn't used. I - # did not inquire about practices in the past. - -+# From Arthur David Olson (2011-08-17): -+# For lack of better information, assume that Metlakatla's -+# abandonment of use of daylight saving resulted from the 1983 vote. -+ - # Zone NAME GMTOFF RULES FORMAT [UNTIL] - Zone America/Juneau 15:02:19 - LMT 1867 Oct 18 - -8:57:41 - LMT 1900 Aug 20 12:00 -@@ -515,7 +519,7 @@ - -8:00 US P%sT 1946 - -8:00 - PST 1969 - -8:00 US P%sT 1983 Oct 30 2:00 -- -8:00 US MeST -+ -8:00 - MeST - Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18 - -9:18:55 - LMT 1900 Aug 20 12:00 - -9:00 - YST 1942 -@@ -615,8 +619,8 @@ - -10:30 - HST 1933 Apr 30 2:00 #Laws 1933 - -10:30 1:00 HDT 1933 May 21 12:00 #Laws 1933+12 - -10:30 - HST 1942 Feb 09 2:00 #Schmitt&Cox+2 -- -10:30 1:00 HDT 1945 Sep 30 2:00 #Schmitt&Fox+2 -- -10:30 US H%sT 1947 Jun 8 2:00 #Schmitt&Fox+2 -+ -10:30 1:00 HDT 1945 Sep 30 2:00 #Schmitt&Cox+2 -+ -10:30 - HST 1947 Jun 8 2:00 #Schmitt&Cox+2 - -10:00 - HST - - # Now we turn to US areas that have diverged from the consensus since 1970. -@@ -1185,12 +1189,39 @@ - # From Paul Eggert (2000-10-02): - # INMS (2000-09-12) says that, since 1988 at least, Newfoundland switches - # at 00:01 local time. For now, assume it started in 1987. -+ -+# From Michael Pelley (2011-08-05): -+# The Government of Newfoundland and Labrador has pending changes to -+# modify the hour for daylight savings time to come into effect in -+# November 2011. This modification would change the time from 12:01AM to -+# 2:00AM on the dates of the switches of Daylight Savings Time to/from -+# Standard Time. -+# -+# As a matter of reference, in Canada provinces have the authority of -+# setting time zone information. The legislation has passed our -+# legislative body (The House of Assembly) and is awaiting the -+# proclamation to come into effect. You may find this information at: -+# -+# http://www.assembly.nl.ca/legislation/sr/lists/Proclamation.htm -+# -+# and -+# search within that web page for Standard Time (Amendment) Act. The Act -+# may be found at: -+# -+# http://www.assembly.nl.ca/business/bills/Bill1106.htm -+# -+# ... -+# MICHAEL PELLEY | Manager of Enterprise Architecture - Solution Delivery -+# Office of the Chief Information Officer Executive Council Government of -+# Newfoundland & Labrador P.O. Box 8700, 40 Higgins Line, St. John's NL -+# A1B 4J6 -+ - Rule StJohns 1987 only - Apr Sun>=1 0:01 1:00 D - Rule StJohns 1987 2006 - Oct lastSun 0:01 0 S - Rule StJohns 1988 only - Apr Sun>=1 0:01 2:00 DD - Rule StJohns 1989 2006 - Apr Sun>=1 0:01 1:00 D --Rule StJohns 2007 max - Mar Sun>=8 0:01 1:00 D --Rule StJohns 2007 max - Nov Sun>=1 0:01 0 S -+Rule StJohns 2007 2011 - Mar Sun>=8 0:01 1:00 D -+Rule StJohns 2007 2010 - Nov Sun>=1 0:01 0 S - # - # St John's has an apostrophe, but Posix file names can't have apostrophes. - # Zone NAME GMTOFF RULES FORMAT [UNTIL] -@@ -1200,7 +1231,8 @@ - -3:30:52 StJohns N%sT 1935 Mar 30 - -3:30 StJohns N%sT 1942 May 11 - -3:30 Canada N%sT 1946 -- -3:30 StJohns N%sT -+ -3:30 StJohns N%sT 2011 Nov -+ -3:30 Canada N%sT - - # most of east Labrador - -@@ -1214,7 +1246,8 @@ - -3:30 StJohns N%sT 1942 May 11 - -3:30 Canada N%sT 1946 - -3:30 StJohns N%sT 1966 Mar 15 2:00 -- -4:00 StJohns A%sT -+ -4:00 StJohns A%sT 2011 Nov -+ -4:00 Canada A%sT - - - # west Labrador, Nova Scotia, Prince Edward I -@@ -1946,20 +1979,69 @@ - # daylight saving.... - # http://www.nnsl.com/frames/newspapers/2006-11/nov13_06none.html - --# From Chris Walton (2007-03-14): --# Today I phoned the "hamlet office" to find out what Resolute was doing with --# its clocks. -+# From Chris Walton (2011-03-21): -+# Back in 2007 I initiated the creation of a new "zone file" for Resolute -+# Bay. Resolute Bay is a small community located about 900km north of -+# the Arctic Circle. The zone file was required because Resolute Bay had -+# decided to use UTC-5 instead of UTC-6 for the winter of 2006-2007. - # --# The individual that answered the phone confirmed that the clocks did not --# move at the end of daylight saving on October 29/2006. He also told me that --# the clocks did not move this past weekend (March 11/2007).... -- --# From Chris Walton (2008-11-13): --# ...the residents of Resolute believe that they are changing "time zones" --# twice a year. In winter months, local time is qualified with "Eastern --# Time" which is really "Eastern Standard Time (UTC-5)". In summer --# months, local time is qualified with "Central Time" which is really --# "Central Daylight Time (UTC-5)"... -+# According to new information which I received last week, Resolute Bay -+# went back to using UTC-6 in the winter of 2007-2008... -+# -+# On March 11/2007 most of Canada went onto daylight saving. On March -+# 14/2007 I phoned the Resolute Bay hamlet office to do a "time check." I -+# talked to somebody that was both knowledgeable and helpful. I was able -+# to confirm that Resolute Bay was still operating on UTC-5. It was -+# explained to me that Resolute Bay had been on the Eastern Time zone -+# (EST) in the winter, and was now back on the Central Time zone (CDT). -+# i.e. the time zone had changed twice in the last year but the clocks -+# had not moved. The residents had to know which time zone they were in -+# so they could follow the correct TV schedule... -+# -+# On Nov 02/2008 most of Canada went onto standard time. On Nov 03/2008 I -+# phoned the Resolute Bay hamlet office...[D]ue to the challenging nature -+# of the phone call, I decided to seek out an alternate source of -+# information. I found an e-mail address for somebody by the name of -+# Stephanie Adams whose job was listed as "Inns North Support Officer for -+# Arctic Co-operatives." I was under the impression that Stephanie lived -+# and worked in Resolute Bay... -+# -+# On March 14/2011 I phoned the hamlet office again. I was told that -+# Resolute Bay had been using Central Standard Time over the winter of -+# 2010-2011 and that the clocks had therefore been moved one hour ahead -+# on March 13/2011. The person I talked to was aware that Resolute Bay -+# had previously experimented with Eastern Standard Time but he could not -+# tell me when the practice had stopped. -+# -+# On March 17/2011 I searched the Web to find an e-mail address of -+# somebody that might be able to tell me exactly when Resolute Bay went -+# off Eastern Standard Time. I stumbled on the name "Aziz Kheraj." Aziz -+# used to be the mayor of Resolute Bay and he apparently owns half the -+# businesses including "South Camp Inn." This website has some info on -+# Aziz: -+# -+# http://www.uphere.ca/node/493 -+# -+# -+# I sent Aziz an e-mail asking when Resolute Bay had stopped using -+# Eastern Standard Time. -+# -+# Aziz responded quickly with this: "hi, The time was not changed for the -+# 1 year only, the following year, the community went back to the old way -+# of "spring ahead-fall behind" currently we are zulu plus 5 hrs and in -+# the winter Zulu plus 6 hrs" -+# -+# This of course conflicted with everything I had ascertained in November 2008. -+# -+# I sent Aziz a copy of my 2008 e-mail exchange with Stephanie. Aziz -+# responded with this: "Hi, Stephanie lives in Winnipeg. I live here, You -+# may want to check with the weather office in Resolute Bay or do a -+# search on the weather through Env. Canada. web site" -+# -+# If I had realized the Stephanie did not live in Resolute Bay I would -+# never have contacted her. I now believe that all the information I -+# obtained in November 2008 should be ignored... -+# I apologize for reporting incorrect information in 2008. - - # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S - Rule NT_YK 1918 only - Apr 14 2:00 1:00 D -@@ -1987,14 +2069,12 @@ - -6:00 Canada C%sT 2000 Oct 29 2:00 - -5:00 Canada E%sT - # aka Qausuittuq --# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S --Rule Resolute 2006 max - Nov Sun>=1 2:00 0 ES --Rule Resolute 2007 max - Mar Sun>=8 2:00 0 CD - Zone America/Resolute 0 - zzz 1947 Aug 31 # Resolute founded - -6:00 NT_YK C%sT 2000 Oct 29 2:00 - -5:00 - EST 2001 Apr 1 3:00 - -6:00 Canada C%sT 2006 Oct 29 2:00 -- -5:00 Resolute %sT -+ -5:00 - EST 2007 Mar 11 3:00 -+ -6:00 Canada C%sT - # aka Kangiqiniq - Zone America/Rankin_Inlet 0 - zzz 1957 # Rankin Inlet founded - -6:00 NT_YK C%sT 2000 Oct 29 2:00 ---- openjdk/jdk/make/sun/javazic/tzdata/southamerica -+++ openjdk/jdk/make/sun/javazic/tzdata/southamerica -@@ -1298,6 +1298,14 @@ - -4:30 - ANT 1965 # Netherlands Antilles Time - -4:00 - AST - -+# From Arthur David Olson (2011-06-15): -+# At least for now, use links for places with new iso3166 codes. -+# The name "Lower Prince's Quarter" is both longer than fourteen charaters -+# and contains an apostrophe; use "Lower_Princes" below. -+ -+Link America/Curacao America/Lower_Princes # Sint Maarten -+Link America/Curacao America/Kralendijk # Bonaire, Sint Estatius and Saba -+ - # Ecuador - # - # From Paul Eggert (2007-03-04): ---- openjdk/jdk/make/sun/javazic/tzdata/zone.tab -+++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab -@@ -54,7 +54,6 @@ - AI +1812-06304 America/Anguilla - AL +4120+01950 Europe/Tirane - AM +4011+04430 Asia/Yerevan --AN +1211-06900 America/Curacao - AO -0848+01314 Africa/Luanda - AQ -7750+16636 Antarctica/McMurdo McMurdo Station, Ross Island - AQ -9000+00000 Antarctica/South_Pole Amundsen-Scott Station, South Pole -@@ -109,6 +108,7 @@ - BM +3217-06446 Atlantic/Bermuda - BN +0456+11455 Asia/Brunei - BO -1630-06809 America/La_Paz -+BQ +120903-0681636 America/Kralendijk - BR -0351-03225 America/Noronha Atlantic islands - BR -0127-04829 America/Belem Amapa, E Para - BR -0343-03830 America/Fortaleza NE Brazil (MA, PI, CE, RN, PB) -@@ -142,7 +142,7 @@ - CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario - CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations - CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut --CA +744144-0944945 America/Resolute Eastern Standard Time - Resolute, Nunavut -+CA +744144-0944945 America/Resolute Central Standard Time - Resolute, Nunavut - CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut - CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut - CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario -@@ -177,6 +177,7 @@ - CR +0956-08405 America/Costa_Rica - CU +2308-08222 America/Havana - CV +1455-02331 Atlantic/Cape_Verde -+CW +1211-06900 America/Curacao - CX -1025+10543 Indian/Christmas - CY +3510+03322 Asia/Nicosia - CZ +5005+01426 Europe/Prague -@@ -382,8 +383,10 @@ - SN +1440-01726 Africa/Dakar - SO +0204+04522 Africa/Mogadishu - SR +0550-05510 America/Paramaribo -+SS +0451+03136 Africa/Juba - ST +0020+00644 Africa/Sao_Tome - SV +1342-08912 America/El_Salvador -+SX +180305-0630250 America/Lower_Princes - SY +3330+03618 Asia/Damascus - SZ -2618+03106 Africa/Mbabane - TC +2128-07108 America/Grand_Turk ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java -@@ -159,8 +159,6 @@ - "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"Pacific Standard Time", "PST", - "Pacific Daylight Time", "PDT"}; -- String RST[] = new String[] {"Eastern Standard Time", "EST", -- "Central Daylight Time", "CDT"}; - String SAST[] = new String[] {"South Africa Standard Time", "SAST", - "South Africa Summer Time", "SAST"}; - String SBT[] = new String[] {"Solomon Is. Time", "SBT", -@@ -262,6 +260,7 @@ - {"Africa/Gaborone", CAT}, - {"Africa/Harare", CAT}, - {"Africa/Johannesburg", SAST}, -+ {"Africa/Juba", EAT}, - {"Africa/Kampala", EAT}, - {"Africa/Khartoum", EAT}, - {"Africa/Kigali", CAT}, -@@ -378,11 +377,13 @@ - {"America/Kentucky/Louisville", EST}, - {"America/Kentucky/Monticello", EST}, - {"America/Knox_IN", CST}, -+ {"America/Kralendijk", AST}, - {"America/La_Paz", new String[] {"Bolivia Time", "BOT", - "Bolivia Summer Time", "BOST"}}, - {"America/Lima", new String[] {"Peru Time", "PET", - "Peru Summer Time", "PEST"}}, - {"America/Louisville", EST}, -+ {"America/Lower_Princes", AST}, - {"America/Maceio", BRT}, - {"America/Managua", CST}, - {"America/Manaus", AMT}, -@@ -425,7 +426,7 @@ - {"America/Rankin_Inlet", CST}, - {"America/Recife", BRT}, - {"America/Regina", CST}, -- {"America/Resolute", RST}, -+ {"America/Resolute", CST}, - {"America/Rio_Branco", AMT}, - {"America/Rosario", AGT}, - {"America/Santa_Isabel", PST}, -@@ -673,7 +674,8 @@ - {"Europe/Isle_of_Man", GMTBST}, - {"Europe/Istanbul", EET}, - {"Europe/Jersey", GMTBST}, -- {"Europe/Kaliningrad", EET}, -+ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", -+ "Kaliningrad Summer Time", "KALST"}}, - {"Europe/Kiev", EET}, - {"Europe/Lisbon", WET}, - {"Europe/Ljubljana", CET}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java -@@ -159,8 +159,6 @@ - "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"Pazifische Normalzeit", "PST", - "Pazifische Sommerzeit", "PDT"}; -- String RST[] = new String[] {"\u00d6stliche Normalzeit", "EST", -- "Zentrale Sommerzeit", "CDT"}; - String SAST[] = new String[] {"S\u00fcdafrikanische Normalzeit", "SAST", - "S\u00fcdafrikanische Sommerzeit", "SAST"}; - String SBT[] = new String[] {"Salomoninseln Zeit", "SBT", -@@ -262,6 +260,7 @@ - {"Africa/Gaborone", CAT}, - {"Africa/Harare", CAT}, - {"Africa/Johannesburg", SAST}, -+ {"Africa/Juba", EAT}, - {"Africa/Kampala", EAT}, - {"Africa/Khartoum", EAT}, - {"Africa/Kigali", CAT}, -@@ -378,11 +377,13 @@ - {"America/Kentucky/Louisville", EST}, - {"America/Kentucky/Monticello", EST}, - {"America/Knox_IN", CST}, -+ {"America/Kralendijk", AST}, - {"America/La_Paz", new String[] {"Bolivianische Zeit", "BOT", - "Bolivianische Sommerzeit", "BOST"}}, - {"America/Lima", new String[] {"Peruanische Zeit", "PET", - "Peruanische Sommerzeit", "PEST"}}, - {"America/Louisville", EST}, -+ {"America/Lower_Princes", AST}, - {"America/Maceio", BRT}, - {"America/Managua", CST}, - {"America/Manaus", AMT}, -@@ -425,7 +426,7 @@ - {"America/Rankin_Inlet", CST}, - {"America/Recife", BRT}, - {"America/Regina", CST}, -- {"America/Resolute", RST}, -+ {"America/Resolute", CST}, - {"America/Rio_Branco", AMT}, - {"America/Rosario", AGT}, - {"America/Santa_Isabel", PST}, -@@ -673,7 +674,8 @@ - {"Europe/Isle_of_Man", GMTBST}, - {"Europe/Istanbul", EET}, - {"Europe/Jersey", GMTBST}, -- {"Europe/Kaliningrad", EET}, -+ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", -+ "Kaliningrad Summer Time", "KALST"}}, - {"Europe/Kiev", EET}, - {"Europe/Lisbon", WET}, - {"Europe/Ljubljana", CET}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java -@@ -159,8 +159,6 @@ - "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"Hora est\u00e1ndar del Pac\u00edfico", "PST", - "Hora de verano del Pac\u00edfico", "PDT"}; -- String RST[] = new String[] {"Hora est\u00e1ndar Oriental", "EST", -- "Hora de verano Central", "CDT"}; - String SAST[] = new String[] {"Hora est\u00e1ndar de Sud\u00e1frica", "SAST", - "Hora de verano de Sud\u00e1frica", "SAST"}; - String SBT[] = new String[] {"Hora de las Islas Solomon", "SBT", -@@ -262,6 +260,7 @@ - {"Africa/Gaborone", CAT}, - {"Africa/Harare", CAT}, - {"Africa/Johannesburg", SAST}, -+ {"Africa/Juba", EAT}, - {"Africa/Kampala", EAT}, - {"Africa/Khartoum", EAT}, - {"Africa/Kigali", CAT}, -@@ -378,11 +377,13 @@ - {"America/Kentucky/Louisville", EST}, - {"America/Kentucky/Monticello", EST}, - {"America/Knox_IN", CST}, -+ {"America/Kralendijk", AST}, - {"America/La_Paz", new String[] {"Hora de Bolivia", "BOT", - "Hora de verano de Bolivia", "BOST"}}, - {"America/Lima", new String[] {"Hora de Per\u00fa", "PET", - "Hora de verano de Per\u00fa", "PEST"}}, - {"America/Louisville", EST}, -+ {"America/Lower_Princes", AST}, - {"America/Maceio", BRT}, - {"America/Managua", CST}, - {"America/Manaus", AMT}, -@@ -425,7 +426,7 @@ - {"America/Rankin_Inlet", CST}, - {"America/Recife", BRT}, - {"America/Regina", CST}, -- {"America/Resolute", RST}, -+ {"America/Resolute", CST}, - {"America/Rio_Branco", AMT}, - {"America/Rosario", AGT}, - {"America/Santa_Isabel", PST}, -@@ -673,7 +674,8 @@ - {"Europe/Isle_of_Man", GMTBST}, - {"Europe/Istanbul", EET}, - {"Europe/Jersey", GMTBST}, -- {"Europe/Kaliningrad", EET}, -+ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", -+ "Kaliningrad Summer Time", "KALST"}}, - {"Europe/Kiev", EET}, - {"Europe/Lisbon", WET}, - {"Europe/Ljubljana", CET}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java -@@ -159,8 +159,6 @@ - "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"Heure normale du Pacifique", "PST", - "Heure avanc\u00e9e du Pacifique", "PDT"} ; -- String RST[] = new String[] {"Heure normale de l'Est", "EST", -- "Heure avanc\u00e9e du Centre", "CDT"} ; - String SAST[] = new String[] {"Heure normale d'Afrique du Sud", "SAST", - "Heure d'\u00e9t\u00e9 d'Afrique du Sud", "SAST"} ; - String SBT[] = new String[] {"Heure des \u00celes Salomon", "SBT", -@@ -262,6 +260,7 @@ - {"Africa/Gaborone", CAT}, - {"Africa/Harare", CAT}, - {"Africa/Johannesburg", SAST}, -+ {"Africa/Juba", EAT}, - {"Africa/Kampala", EAT}, - {"Africa/Khartoum", EAT}, - {"Africa/Kigali", CAT}, -@@ -378,11 +377,13 @@ - {"America/Kentucky/Louisville", EST}, - {"America/Kentucky/Monticello", EST}, - {"America/Knox_IN", CST}, -+ {"America/Kralendijk", AST}, - {"America/La_Paz", new String[] {"Heure de Bolivie", "BOT", - "Heure d'\u00e9t\u00e9 de Bolivie", "BOST"}}, - {"America/Lima", new String[] {"Heure du P\u00e9rou", "PET", - "Heure d'\u00e9t\u00e9 du P\u00e9rou", "PEST"}}, - {"America/Louisville", EST}, -+ {"America/Lower_Princes", AST}, - {"America/Maceio", BRT}, - {"America/Managua", CST}, - {"America/Manaus", AMT}, -@@ -425,7 +426,7 @@ - {"America/Rankin_Inlet", CST}, - {"America/Recife", BRT}, - {"America/Regina", CST}, -- {"America/Resolute", RST}, -+ {"America/Resolute", CST}, - {"America/Rio_Branco", AMT}, - {"America/Rosario", AGT}, - {"America/Santa_Isabel", PST}, -@@ -673,7 +674,8 @@ - {"Europe/Isle_of_Man", GMTBST}, - {"Europe/Istanbul", EET}, - {"Europe/Jersey", GMTBST}, -- {"Europe/Kaliningrad", EET}, -+ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", -+ "Kaliningrad Summer Time", "KALST"}}, - {"Europe/Kiev", EET}, - {"Europe/Lisbon", WET}, - {"Europe/Ljubljana", CET}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java -@@ -159,8 +159,6 @@ - "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"Ora solare della costa occidentale USA", "PST", - "Ora legale della costa occidentale USA", "PDT"}; -- String RST[] = new String[] {"Ora solare USA orientale", "EST", -- "Ora legale USA centrale", "CDT"}; - String SAST[] = new String[] {"Ora solare del Sudafrica", "SAST", - "Ora estiva del Sudafrica", "SAST"}; - String SBT[] = new String[] {"Ora delle Isole Salomone", "SBT", -@@ -262,6 +260,7 @@ - {"Africa/Gaborone", CAT}, - {"Africa/Harare", CAT}, - {"Africa/Johannesburg", SAST}, -+ {"Africa/Juba", EAT}, - {"Africa/Kampala", EAT}, - {"Africa/Khartoum", EAT}, - {"Africa/Kigali", CAT}, -@@ -378,11 +377,13 @@ - {"America/Kentucky/Louisville", EST}, - {"America/Kentucky/Monticello", EST}, - {"America/Knox_IN", CST}, -+ {"America/Kralendijk", AST}, - {"America/La_Paz", new String[] {"Ora della Bolivia", "BOT", - "Ora estiva della Bolivia", "BOST"}}, - {"America/Lima", new String[] {"Ora del Per\u00f9", "PET", - "Ora estiva del Per\u00f9", "PEST"}}, - {"America/Louisville", EST}, -+ {"America/Lower_Princes", AST}, - {"America/Maceio", BRT}, - {"America/Managua", CST}, - {"America/Manaus", AMT}, -@@ -425,7 +426,7 @@ - {"America/Rankin_Inlet", CST}, - {"America/Recife", BRT}, - {"America/Regina", CST}, -- {"America/Resolute", RST}, -+ {"America/Resolute", CST}, - {"America/Rio_Branco", AMT}, - {"America/Rosario", AGT}, - {"America/Santa_Isabel", PST}, -@@ -673,7 +674,8 @@ - {"Europe/Isle_of_Man", GMTBST}, - {"Europe/Istanbul", EET}, - {"Europe/Jersey", GMTBST}, -- {"Europe/Kaliningrad", EET}, -+ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", -+ "Kaliningrad Summer Time", "KALST"}}, - {"Europe/Kiev", EET}, - {"Europe/Lisbon", WET}, - {"Europe/Ljubljana", CET}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java -@@ -159,8 +159,6 @@ - "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642", "PST", - "\u592a\u5e73\u6d0b\u590f\u6642\u9593", "PDT"}; -- String RST[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642", "EST", -- "\u4e2d\u90e8\u590f\u6642\u9593", "CDT"}; - String SAST[] = new String[] {"\u5357\u30a2\u30d5\u30ea\u30ab\u6a19\u6e96\u6642", "SAST", - "\u5357\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "SAST"}; - String SBT[] = new String[] {"\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6\u6642\u9593", "SBT", -@@ -262,6 +260,7 @@ - {"Africa/Gaborone", CAT}, - {"Africa/Harare", CAT}, - {"Africa/Johannesburg", SAST}, -+ {"Africa/Juba", EAT}, - {"Africa/Kampala", EAT}, - {"Africa/Khartoum", EAT}, - {"Africa/Kigali", CAT}, -@@ -378,11 +377,13 @@ - {"America/Kentucky/Louisville", EST}, - {"America/Kentucky/Monticello", EST}, - {"America/Knox_IN", CST}, -+ {"America/Kralendijk", AST}, - {"America/La_Paz", new String[] {"\u30dc\u30ea\u30d3\u30a2\u6642\u9593", "BOT", - "\u30dc\u30ea\u30d3\u30a2\u590f\u6642\u9593", "BOST"}}, - {"America/Lima", new String[] {"\u30da\u30eb\u30fc\u6642\u9593", "PET", - "\u30da\u30eb\u30fc\u590f\u6642\u9593", "PEST"}}, - {"America/Louisville", EST}, -+ {"America/Lower_Princes", AST}, - {"America/Maceio", BRT}, - {"America/Managua", CST}, - {"America/Manaus", AMT}, -@@ -425,7 +426,7 @@ - {"America/Rankin_Inlet", CST}, - {"America/Recife", BRT}, - {"America/Regina", CST}, -- {"America/Resolute", RST}, -+ {"America/Resolute", CST}, - {"America/Rio_Branco", AMT}, - {"America/Rosario", AGT}, - {"America/Santa_Isabel", PST}, -@@ -673,7 +674,8 @@ - {"Europe/Isle_of_Man", GMTBST}, - {"Europe/Istanbul", EET}, - {"Europe/Jersey", GMTBST}, -- {"Europe/Kaliningrad", EET}, -+ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", -+ "Kaliningrad Summer Time", "KALST"}}, - {"Europe/Kiev", EET}, - {"Europe/Lisbon", WET}, - {"Europe/Ljubljana", CET}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java -@@ -159,8 +159,6 @@ - "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc", "PST", - "\ud0dc\ud3c9\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"}; -- String RST[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc", "EST", -- "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"}; - String SAST[] = new String[] {"\ub0a8\uc544\ud504\ub9ac\uce74 \ud45c\uc900\uc2dc", "SAST", - "\ub0a8\uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SAST"}; - String SBT[] = new String[] {"\uc194\ub85c\ubaac \uad70\ub3c4 \uc2dc\uac04", "SBT", -@@ -262,6 +260,7 @@ - {"Africa/Gaborone", CAT}, - {"Africa/Harare", CAT}, - {"Africa/Johannesburg", SAST}, -+ {"Africa/Juba", EAT}, - {"Africa/Kampala", EAT}, - {"Africa/Khartoum", EAT}, - {"Africa/Kigali", CAT}, -@@ -378,11 +377,13 @@ - {"America/Kentucky/Louisville", EST}, - {"America/Kentucky/Monticello", EST}, - {"America/Knox_IN", CST}, -+ {"America/Kralendijk", AST}, - {"America/La_Paz", new String[] {"\ubcfc\ub9ac\ube44\uc544 \uc2dc\uac04", "BOT", - "\ubcfc\ub9ac\ube44\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BOST"}}, - {"America/Lima", new String[] {"\ud398\ub8e8 \uc2dc\uac04", "PET", - "\ud398\ub8e8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PEST"}}, - {"America/Louisville", EST}, -+ {"America/Lower_Princes", AST}, - {"America/Maceio", BRT}, - {"America/Managua", CST}, - {"America/Manaus", AMT}, -@@ -425,7 +426,7 @@ - {"America/Rankin_Inlet", CST}, - {"America/Recife", BRT}, - {"America/Regina", CST}, -- {"America/Resolute", RST}, -+ {"America/Resolute", CST}, - {"America/Rio_Branco", AMT}, - {"America/Rosario", AGT}, - {"America/Santa_Isabel", PST}, -@@ -673,7 +674,8 @@ - {"Europe/Isle_of_Man", GMTBST}, - {"Europe/Istanbul", EET}, - {"Europe/Jersey", GMTBST}, -- {"Europe/Kaliningrad", EET}, -+ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", -+ "Kaliningrad Summer Time", "KALST"}}, - {"Europe/Kiev", EET}, - {"Europe/Lisbon", WET}, - {"Europe/Ljubljana", CET}, -diff -r 6b1e65e73b80 -r e97325a7fe7b src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java Thu Sep 15 16:09:20 2011 +0900 -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java Thu Sep 15 16:17:14 2011 +0900 -@@ -157,8 +157,6 @@ - "Fuso hor\u00e1rio de ver\u00e3o de Pohnpei", "PONST"}; - String PST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Pac\u00edfico", "PST", - "Hor\u00e1rio de luz natural do Pac\u00edfico", "PDT"}; -- String RST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental", "EST", -- "Hor\u00e1rio de luz natural central", "CDT"}; - String SAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da \u00c1frica do Sul", "SAST", - "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica do Sul", "SAST"}; - String SBT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Salom\u00e3o", "SBT", -@@ -262,6 +260,7 @@ - {"Africa/Gaborone", CAT}, - {"Africa/Harare", CAT}, - {"Africa/Johannesburg", SAST}, -+ {"Africa/Juba", EAT}, - {"Africa/Kampala", EAT}, - {"Africa/Khartoum", EAT}, - {"Africa/Kigali", CAT}, -@@ -378,11 +377,13 @@ - {"America/Kentucky/Louisville", EST}, - {"America/Kentucky/Monticello", EST}, - {"America/Knox_IN", CST}, -+ {"America/Kralendijk", AST}, - {"America/La_Paz", new String[] {"Fuso hor\u00e1rio da Bol\u00edvia", "BOT", - "Fuso hor\u00e1rio de ver\u00e3o da Bol\u00edvia", "BOST"}}, - {"America/Lima", new String[] {"Fuso hor\u00e1rio do Peru", "PET", - "Fuso hor\u00e1rio de ver\u00e3o do Peru", "PEST"}}, - {"America/Louisville", EST}, -+ {"America/Lower_Princes", AST}, - {"America/Maceio", BRT}, - {"America/Managua", CST}, - {"America/Manaus", AMT}, -@@ -425,7 +426,7 @@ - {"America/Rankin_Inlet", CST}, - {"America/Recife", BRT}, - {"America/Regina", CST}, -- {"America/Resolute", RST}, -+ {"America/Resolute", CST}, - {"America/Rio_Branco", AMT}, - {"America/Rosario", AGT}, - {"America/Santa_Isabel", PST}, -@@ -673,7 +674,8 @@ - {"Europe/Isle_of_Man", GMTBST}, - {"Europe/Istanbul", EET}, - {"Europe/Jersey", GMTBST}, -- {"Europe/Kaliningrad", EET}, -+ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", -+ "Kaliningrad Summer Time", "KALST"}}, - {"Europe/Kiev", EET}, - {"Europe/Lisbon", WET}, - {"Europe/Ljubljana", CET}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java -@@ -159,8 +159,6 @@ - "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"Stilla havet, normaltid", "PST", - "Stilla havet, sommartid", "PDT"}; -- String RST[] = new String[] {"Eastern, normaltid", "EST", -- "Central sommartid", "CDT"}; - String SAST[] = new String[] {"Sydafrika, normaltid", "SAST", - "Sydafrika, sommartid", "SAST"}; - String SBT[] = new String[] {"Salomon\u00f6arna, normaltid", "SBT", -@@ -262,6 +260,7 @@ - {"Africa/Gaborone", CAT}, - {"Africa/Harare", CAT}, - {"Africa/Johannesburg", SAST}, -+ {"Africa/Juba", EAT}, - {"Africa/Kampala", EAT}, - {"Africa/Khartoum", EAT}, - {"Africa/Kigali", CAT}, -@@ -378,11 +377,13 @@ - {"America/Kentucky/Louisville", EST}, - {"America/Kentucky/Monticello", EST}, - {"America/Knox_IN", CST}, -+ {"America/Kralendijk", AST}, - {"America/La_Paz", new String[] {"Bolivia, normaltid", "BOT", - "Bolivia, sommartid", "BOST"}}, - {"America/Lima", new String[] {"Peru, normaltid", "PET", - "Peru, sommartid", "PEST"}}, - {"America/Louisville", EST}, -+ {"America/Lower_Princes", AST}, - {"America/Maceio", BRT}, - {"America/Managua", CST}, - {"America/Manaus", AMT}, -@@ -425,7 +426,7 @@ - {"America/Rankin_Inlet", CST}, - {"America/Recife", BRT}, - {"America/Regina", CST}, -- {"America/Resolute", RST}, -+ {"America/Resolute", CST}, - {"America/Rio_Branco", AMT}, - {"America/Rosario", AGT}, - {"America/Santa_Isabel", PST}, -@@ -673,7 +674,8 @@ - {"Europe/Isle_of_Man", GMTBST}, - {"Europe/Istanbul", EET}, - {"Europe/Jersey", GMTBST}, -- {"Europe/Kaliningrad", EET}, -+ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", -+ "Kaliningrad Summer Time", "KALST"}}, - {"Europe/Kiev", EET}, - {"Europe/Lisbon", WET}, - {"Europe/Ljubljana", CET}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java -@@ -159,8 +159,6 @@ - "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4", "PST", - "\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6", "PDT"}; -- String RST[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4", "EST", -- "\u4e2d\u592e\u590f\u4ee4\u65f6", "CDT"}; - String SAST[] = new String[] {"\u5357\u975e\u6807\u51c6\u65f6\u95f4", "SAST", - "\u5357\u975e\u590f\u4ee4\u65f6", "SAST"}; - String SBT[] = new String[] {"\u6240\u7f57\u95e8\u7fa4\u5c9b\u65f6\u95f4", "SBT", -@@ -262,6 +260,7 @@ - {"Africa/Gaborone", CAT}, - {"Africa/Harare", CAT}, - {"Africa/Johannesburg", SAST}, -+ {"Africa/Juba", EAT}, - {"Africa/Kampala", EAT}, - {"Africa/Khartoum", EAT}, - {"Africa/Kigali", CAT}, -@@ -378,11 +377,13 @@ - {"America/Kentucky/Louisville", EST}, - {"America/Kentucky/Monticello", EST}, - {"America/Knox_IN", CST}, -+ {"America/Kralendijk", AST}, - {"America/La_Paz", new String[] {"\u73bb\u5229\u7ef4\u4e9a\u65f6\u95f4", "BOT", - "\u73bb\u5229\u7ef4\u4e9a\u590f\u4ee4\u65f6", "BOST"}}, - {"America/Lima", new String[] {"\u79d8\u9c81\u65f6\u95f4", "PET", - "\u79d8\u9c81\u590f\u4ee4\u65f6", "PEST"}}, - {"America/Louisville", EST}, -+ {"America/Lower_Princes", AST}, - {"America/Maceio", BRT}, - {"America/Managua", CST}, - {"America/Manaus", AMT}, -@@ -425,7 +426,7 @@ - {"America/Rankin_Inlet", CST}, - {"America/Recife", BRT}, - {"America/Regina", CST}, -- {"America/Resolute", RST}, -+ {"America/Resolute", CST}, - {"America/Rio_Branco", AMT}, - {"America/Rosario", AGT}, - {"America/Santa_Isabel", PST}, -@@ -673,7 +674,8 @@ - {"Europe/Isle_of_Man", GMTBST}, - {"Europe/Istanbul", EET}, - {"Europe/Jersey", GMTBST}, -- {"Europe/Kaliningrad", EET}, -+ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", -+ "Kaliningrad Summer Time", "KALST"}}, - {"Europe/Kiev", EET}, - {"Europe/Lisbon", WET}, - {"Europe/Ljubljana", CET}, ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java -@@ -159,8 +159,6 @@ - "Pohnpei Summer Time", "PONST"}; - String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642\u9593", "PST", - "\u592a\u5e73\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"}; -- String RST[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593", "EST", -- "\u4e2d\u592e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"}; - String SAST[] = new String[] {"\u5357\u975e\u6a19\u6e96\u6642\u9593", "SAST", - "\u5357\u975e\u590f\u4ee4\u6642\u9593", "SAST"}; - String SBT[] = new String[] {"\u6240\u7f85\u9580\u7fa4\u5cf6\u6642\u9593", "SBT", -@@ -262,6 +260,7 @@ - {"Africa/Gaborone", CAT}, - {"Africa/Harare", CAT}, - {"Africa/Johannesburg", SAST}, -+ {"Africa/Juba", EAT}, - {"Africa/Kampala", EAT}, - {"Africa/Khartoum", EAT}, - {"Africa/Kigali", CAT}, -@@ -378,11 +377,13 @@ - {"America/Kentucky/Louisville", EST}, - {"America/Kentucky/Monticello", EST}, - {"America/Knox_IN", CST}, -+ {"America/Kralendijk", AST}, - {"America/La_Paz", new String[] {"\u73bb\u5229\u7dad\u4e9e\u6642\u9593", "BOT", - "\u73bb\u5229\u7dad\u4e9e\u590f\u4ee4\u6642\u9593", "BOST"}}, - {"America/Lima", new String[] {"\u7955\u9b6f\u6642\u9593", "PET", - "\u7955\u9b6f\u590f\u4ee4\u6642\u9593", "PEST"}}, - {"America/Louisville", EST}, -+ {"America/Lower_Princes", AST}, - {"America/Maceio", BRT}, - {"America/Managua", CST}, - {"America/Manaus", AMT}, -@@ -425,7 +426,7 @@ - {"America/Rankin_Inlet", CST}, - {"America/Recife", BRT}, - {"America/Regina", CST}, -- {"America/Resolute", RST}, -+ {"America/Resolute", CST}, - {"America/Rio_Branco", AMT}, - {"America/Rosario", AGT}, - {"America/Santa_Isabel", PST}, -@@ -674,7 +675,8 @@ - {"Europe/Isle_of_Man", GMTBST}, - {"Europe/Istanbul", EET}, - {"Europe/Jersey", GMTBST}, -- {"Europe/Kaliningrad", EET}, -+ {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT", -+ "Kaliningrad Summer Time", "KALST"}}, - {"Europe/Kiev", EET}, - {"Europe/Lisbon", WET}, - {"Europe/Ljubljana", CET}, diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/7103108-tzdata2011l.patch openjdk-6-6b34-1.13.6/patches/openjdk/7103108-tzdata2011l.patch --- openjdk-6-6b33-1.13.5/patches/openjdk/7103108-tzdata2011l.patch 2014-10-08 18:39:25.000000000 +0000 +++ openjdk-6-6b34-1.13.6/patches/openjdk/7103108-tzdata2011l.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,1660 +0,0 @@ -# HG changeset patch -# User asaha -# Date 1319235923 25200 -# Node ID dd8350c61d3669eed93507e46e877affe18c2d41 -# Parent 426499ae8e0465161186dfee107ca30f6f6d833c -7103108: (tz) Support tzdata2011l -Reviewed-by: coffeys, peytoia - ---- openjdk/jdk/make/sun/javazic/tzdata/VERSION -+++ openjdk/jdk/make/sun/javazic/tzdata/VERSION -@@ -21,4 +21,4 @@ - # or visit www.oracle.com if you need additional information or have any - # questions. - # --tzdata2011j -+tzdata2011l ---- openjdk/jdk/make/sun/javazic/tzdata/africa -+++ openjdk/jdk/make/sun/javazic/tzdata/africa -@@ -1,27 +1,5 @@ --# --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. --# --# This code is free software; you can redistribute it and/or modify it --# under the terms of the GNU General Public License version 2 only, as --# published by the Free Software Foundation. Oracle designates this --# particular file as subject to the "Classpath" exception as provided --# by Oracle in the LICENSE file that accompanied this code. --# --# This code is distributed in the hope that it will be useful, but WITHOUT --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or --# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --# version 2 for more details (a copy is included in the LICENSE file that --# accompanied this code). --# --# You should have received a copy of the GNU General Public License version --# 2 along with this work; if not, write to the Free Software Foundation, --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. --# --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA --# or visit www.oracle.com if you need additional information or have any --# questions. --# - #

    -+# @(#)africa	8.33
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/antarctica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/antarctica
    -@@ -1,27 +1,5 @@
    --#
    --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    --# This code is free software; you can redistribute it and/or modify it
    --# under the terms of the GNU General Public License version 2 only, as
    --# published by the Free Software Foundation.  Oracle designates this
    --# particular file as subject to the "Classpath" exception as provided
    --# by Oracle in the LICENSE file that accompanied this code.
    --#  
    --# This code is distributed in the hope that it will be useful, but WITHOUT
    --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    --# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    --# version 2 for more details (a copy is included in the LICENSE file that
    --# accompanied this code).
    --#  
    --# You should have received a copy of the GNU General Public License version
    --# 2 along with this work; if not, write to the Free Software Foundation,
    --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    --# or visit www.oracle.com if you need additional information or have any
    --# questions.
    --#
    - # 
    -+# @(#)antarctica	8.9
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/asia
    -+++ openjdk/jdk/make/sun/javazic/tzdata/asia
    -@@ -1,26 +1,4 @@
    --#
    --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    --# This code is free software; you can redistribute it and/or modify it
    --# under the terms of the GNU General Public License version 2 only, as
    --# published by the Free Software Foundation.  Oracle designates this
    --# particular file as subject to the "Classpath" exception as provided
    --# by Oracle in the LICENSE file that accompanied this code.
    --#  
    --# This code is distributed in the hope that it will be useful, but WITHOUT
    --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    --# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    --# version 2 for more details (a copy is included in the LICENSE file that
    --# accompanied this code).
    --#  
    --# You should have received a copy of the GNU General Public License version
    --# 2 along with this work; if not, write to the Free Software Foundation,
    --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    --# or visit www.oracle.com if you need additional information or have any
    --# questions.
    --#
    -+# @(#)asia	8.68
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -2216,7 +2194,47 @@
    - # http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html
    - # 
    - 
    -+# From Steffen Thorsen (2011-08-26):
    -+# Gaza and the West Bank did go back to standard time in the beginning of
    -+# August, and will now enter daylight saving time again on 2011-08-30
    -+# 00:00 (so two periods of DST in 2011). The pause was because of
    -+# Ramadan.
    -+#
    -+# 
    -+# http://www.maannews.net/eng/ViewDetails.aspx?ID=416217
    -+# 
    -+# Additional info:
    -+# 
    -+# http://www.timeanddate.com/news/time/palestine-dst-2011.html
    -+# 
    -+
    -+# From Alexander Krivenyshev (2011-08-27):
    -+# According to the article in The Jerusalem Post:
    -+# "...Earlier this month, the Palestinian government in the West Bank decided to
    -+# move to standard time for 30 days, during Ramadan. The Palestinians in the
    -+# Gaza Strip accepted the change and also moved their clocks one hour back.
    -+# The Hamas government said on Saturday that it won't observe summertime after
    -+# the Muslim feast of Id al-Fitr, which begins on Tuesday..."
    -+# ...
    -+# 
    -+# http://www.jpost.com/MiddleEast/Article.aspx?id=235650
    -+# 
    -+# or
    -+# 
    -+# http://www.worldtimezone.com/dst_news/dst_news_gazastrip05.html
    -+# 
    - # The rules for Egypt are stolen from the `africa' file.
    -+
    -+# From Steffen Thorsen (2011-09-30):
    -+# West Bank did end Daylight Saving Time this morning/midnight (2011-09-30 
    -+# 00:00).
    -+# So West Bank and Gaza now have the same time again.
    -+#
    -+# Many sources, including:
    -+# 
    -+# http://www.maannews.net/eng/ViewDetails.aspx?ID=424808
    -+# 
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule EgyptAsia	1957	only	-	May	10	0:00	1:00	S
    - Rule EgyptAsia	1957	1958	-	Oct	 1	0:00	0	-
    -@@ -2232,19 +2250,37 @@
    - Rule Palestine	2006	2008	-	Apr	 1	0:00	1:00	S
    - Rule Palestine	2006	only	-	Sep	22	0:00	0	-
    - Rule Palestine	2007	only	-	Sep	Thu>=8	2:00	0	-
    --Rule Palestine	2008	only	-	Aug	lastFri	2:00	0	-
    -+Rule Palestine	2008	only	-	Aug	lastFri	0:00	0	-
    - Rule Palestine	2009	only	-	Mar	lastFri	0:00	1:00	S
    --Rule Palestine	2010	max	-	Mar	lastSat	0:01	1:00	S
    --Rule Palestine	2009	max	-	Sep	Fri>=1	2:00	0	-
    -+Rule Palestine	2009	only	-	Sep	Fri>=1	2:00	0	-
    -+Rule Palestine	2010	only	-	Mar	lastSat	0:01	1:00	S
    - Rule Palestine	2010	only	-	Aug	11	0:00	0	-
    - 
    -+# From Arthur David Olson (2011-09-20):
    -+# 2011 transitions per http://www.timeanddate.com as of 2011-09-20.
    -+
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
    - 			2:00	Zion	EET	1948 May 15
    - 			2:00 EgyptAsia	EE%sT	1967 Jun  5
    - 			2:00	Zion	I%sT	1996
    - 			2:00	Jordan	EE%sT	1999
    --			2:00 Palestine	EE%sT
    -+			2:00 Palestine	EE%sT	2011 Apr  2 12:01
    -+			2:00	1:00	EEST	2011 Aug  1
    -+			2:00	-	EET
    -+
    -+Zone	Asia/Hebron	2:20:23	-	LMT	1900 Oct
    -+			2:00	Zion	EET	1948 May 15
    -+			2:00 EgyptAsia	EE%sT	1967 Jun  5
    -+			2:00	Zion	I%sT	1996
    -+			2:00	Jordan	EE%sT	1999
    -+			2:00 Palestine	EE%sT	2008 Aug
    -+			2:00 	1:00	EEST	2008 Sep
    -+			2:00 Palestine	EE%sT	2011 Apr  1 12:01
    -+			2:00	1:00	EEST	2011 Aug  1
    -+			2:00	-	EET	2011 Aug 30
    -+			2:00	1:00	EEST	2011 Sep 30 3:00
    -+			2:00	-	EET
    - 
    - # Paracel Is
    - # no information
    ---- openjdk/jdk/make/sun/javazic/tzdata/australasia
    -+++ openjdk/jdk/make/sun/javazic/tzdata/australasia
    -@@ -1,27 +1,5 @@
    --#
    --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    --# This code is free software; you can redistribute it and/or modify it
    --# under the terms of the GNU General Public License version 2 only, as
    --# published by the Free Software Foundation.  Oracle designates this
    --# particular file as subject to the "Classpath" exception as provided
    --# by Oracle in the LICENSE file that accompanied this code.
    --#  
    --# This code is distributed in the hope that it will be useful, but WITHOUT
    --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    --# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    --# version 2 for more details (a copy is included in the LICENSE file that
    --# accompanied this code).
    --#  
    --# You should have received a copy of the GNU General Public License version
    --# 2 along with this work; if not, write to the Free Software Foundation,
    --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    --# or visit www.oracle.com if you need additional information or have any
    --# questions.
    --#
    - # 
    -+# @(#)australasia	8.27
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -318,6 +296,18 @@
    - # http://www.worldtimezone.com/dst_news/dst_news_fiji04.html
    - # 
    - 
    -+# From Steffen Thorsen (2011-10-03):
    -+# Now the dates have been confirmed, and at least our start date 
    -+# assumption was correct (end date was one week wrong).
    -+#
    -+# 
    -+# www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155
    -+# 
    -+# which says
    -+# Members of the public are reminded to change their time to one hour in 
    -+# advance at 2am to 3am on October 23, 2011 and one hour back at 3am to 
    -+# 2am on February 26 next year.
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Fiji	1998	1999	-	Nov	Sun>=1	2:00	1:00	S
    - Rule	Fiji	1999	2000	-	Feb	lastSun	3:00	0	-
    -@@ -325,6 +315,8 @@
    - Rule	Fiji	2010	only	-	Mar	lastSun	3:00	0	-
    - Rule	Fiji	2010	only	-	Oct	24	2:00	1:00	S
    - Rule	Fiji	2011	only	-	Mar	Sun>=1	3:00	0	-
    -+Rule	Fiji	2011	only	-	Oct	23	2:00	1:00	S
    -+Rule	Fiji	2012	only	-	Feb	26	3:00	0	-
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Pacific/Fiji	11:53:40 -	LMT	1915 Oct 26	# Suva
    - 			12:00	Fiji	FJ%sT	# Fiji Time
    ---- openjdk/jdk/make/sun/javazic/tzdata/backward
    -+++ openjdk/jdk/make/sun/javazic/tzdata/backward
    -@@ -1,27 +1,5 @@
    --#
    --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    --# This code is free software; you can redistribute it and/or modify it
    --# under the terms of the GNU General Public License version 2 only, as
    --# published by the Free Software Foundation.  Oracle designates this
    --# particular file as subject to the "Classpath" exception as provided
    --# by Oracle in the LICENSE file that accompanied this code.
    --#  
    --# This code is distributed in the hope that it will be useful, but WITHOUT
    --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    --# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    --# version 2 for more details (a copy is included in the LICENSE file that
    --# accompanied this code).
    --#  
    --# You should have received a copy of the GNU General Public License version
    --# 2 along with this work; if not, write to the Free Software Foundation,
    --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    --# or visit www.oracle.com if you need additional information or have any
    --# questions.
    --#
    - # 
    -+# @(#)backward	8.9
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/etcetera
    -+++ openjdk/jdk/make/sun/javazic/tzdata/etcetera
    -@@ -1,27 +1,5 @@
    --#
    --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    --# This code is free software; you can redistribute it and/or modify it
    --# under the terms of the GNU General Public License version 2 only, as
    --# published by the Free Software Foundation.  Oracle designates this
    --# particular file as subject to the "Classpath" exception as provided
    --# by Oracle in the LICENSE file that accompanied this code.
    --#  
    --# This code is distributed in the hope that it will be useful, but WITHOUT
    --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    --# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    --# version 2 for more details (a copy is included in the LICENSE file that
    --# accompanied this code).
    --#  
    --# You should have received a copy of the GNU General Public License version
    --# 2 along with this work; if not, write to the Free Software Foundation,
    --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    --# or visit www.oracle.com if you need additional information or have any
    --# questions.
    --#
    - # 
    -+# @(#)etcetera	8.3
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/europe
    -+++ openjdk/jdk/make/sun/javazic/tzdata/europe
    -@@ -1,27 +1,5 @@
    --#
    --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    --# This code is free software; you can redistribute it and/or modify it
    --# under the terms of the GNU General Public License version 2 only, as
    --# published by the Free Software Foundation.  Oracle designates this
    --# particular file as subject to the "Classpath" exception as provided
    --# by Oracle in the LICENSE file that accompanied this code.
    --#  
    --# This code is distributed in the hope that it will be useful, but WITHOUT
    --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    --# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    --# version 2 for more details (a copy is included in the LICENSE file that
    --# accompanied this code).
    --#  
    --# You should have received a copy of the GNU General Public License version
    --# 2 along with this work; if not, write to the Free Software Foundation,
    --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    --# or visit www.oracle.com if you need additional information or have any
    --# questions.
    --#
    - # 
    -+# @(#)europe	8.38
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -583,9 +561,9 @@
    - #
    - Rule	Russia	1992	only	-	Mar	lastSat	 23:00	1:00	S
    - Rule	Russia	1992	only	-	Sep	lastSat	 23:00	0	-
    --Rule	Russia	1993	max	-	Mar	lastSun	 2:00s	1:00	S
    -+Rule	Russia	1993	2010	-	Mar	lastSun	 2:00s	1:00	S
    - Rule	Russia	1993	1995	-	Sep	lastSun	 2:00s	0	-
    --Rule	Russia	1996	max	-	Oct	lastSun	 2:00s	0	-
    -+Rule	Russia	1996	2010	-	Oct	lastSun	 2:00s	0	-
    - 
    - # From Alexander Krivenyshev (2011-06-14):
    - # According to Kremlin press service, Russian President Dmitry Medvedev
    -@@ -605,7 +583,6 @@
    - # From Arthur David Olson (2011-06-15):
    - # Take "abolishing daylight saving time" to mean that time is now considered
    - # to be standard.
    --# At least for now, keep the "old" Russia rules for the benefit of Belarus.
    - 
    - # These are for backward compatibility with older versions.
    - 
    -@@ -711,6 +688,23 @@
    - 			1:00	EU	CE%sT
    - 
    - # Belarus
    -+# From Yauhen Kharuzhy (2011-09-16):
    -+# By latest Belarus government act Europe/Minsk timezone was changed to
    -+# GMT+3 without DST (was GMT+2 with DST).
    -+#
    -+# Sources (Russian language):
    -+# 1.
    -+# 
    -+# http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html
    -+# 
    -+# 2.
    -+# 
    -+# http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/
    -+# 
    -+# 3.
    -+# 
    -+# http://news.tut.by/society/250578.html
    -+# 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Europe/Minsk	1:50:16 -	LMT	1880
    - 			1:50	-	MMT	1924 May 2 # Minsk Mean Time
    -@@ -722,7 +716,8 @@
    - 			2:00	1:00	EEST	1991 Sep 29 2:00s
    - 			2:00	-	EET	1992 Mar 29 0:00s
    - 			2:00	1:00	EEST	1992 Sep 27 0:00s
    --			2:00	Russia	EE%sT
    -+			2:00	Russia	EE%sT	2011 Mar 27 2:00s
    -+			3:00	-	FET # Further-eastern European Time
    - 
    - # Belgium
    - #
    -@@ -2056,7 +2051,7 @@
    - 			 2:00	Poland	CE%sT	1946
    - 			 3:00	Russia	MSK/MSD	1991 Mar 31 2:00s
    - 			 2:00	Russia	EE%sT	2011 Mar 27 2:00s
    --			 3:00	-	KALT
    -+			 3:00	-	FET # Further-eastern European Time
    - #
    - # From Oscar van Vlijmen (2001-08-25): [This region consists of]
    - # Respublika Adygeya, Arkhangel'skaya oblast',
    -@@ -2211,7 +2206,7 @@
    - # [parts of] Respublika Sakha (Yakutiya), Chitinskaya oblast'.
    - 
    - # From Oscar van Vlijmen (2009-11-29):
    --# ...some regions of RUssia were merged with others since 2005...
    -+# ...some regions of [Russia] were merged with others since 2005...
    - # Some names were changed, no big deal, except for one instance: a new name.
    - # YAK/YAKST: UTC+9 Zabajkal'skij kraj.
    - 
    -@@ -2635,6 +2630,28 @@
    - # of March at 3am the time is changing to 4am and each last Sunday of
    - # October the time at 4am is changing to 3am"
    - 
    -+# From Alexander Krivenyshev (2011-09-20):
    -+# On September 20, 2011 the deputies of the Verkhovna Rada agreed to
    -+# abolish the transfer clock to winter time.
    -+#
    -+# Bill number 8330 of MP from the Party of Regions Oleg Nadoshi got
    -+# approval from 266 deputies.
    -+#
    -+# Ukraine abolishes transter back to the winter time (in Russian)
    -+# 
    -+# http://news.mail.ru/politics/6861560/
    -+# 
    -+#
    -+# The Ukrainians will no longer change the clock (in Russian)
    -+# 
    -+# http://www.segodnya.ua/news/14290482.html
    -+# 
    -+#
    -+# Deputies cancelled the winter time (in Russian)
    -+# 
    -+# http://www.pravda.com.ua/rus/news/2011/09/20/6600616/
    -+# 
    -+
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - # Most of Ukraine since 1970 has been like Kiev.
    - # "Kyiv" is the transliteration of the Ukrainian name, but
    -@@ -2648,7 +2665,8 @@
    - 			3:00	-	MSK	1990 Jul  1 2:00
    - 			2:00	-	EET	1992
    - 			2:00	E-Eur	EE%sT	1995
    --			2:00	EU	EE%sT
    -+			2:00	EU	EE%sT	2011 Mar lastSun 1:00u
    -+			3:00	-	FET # Further-eastern European Time
    - # Ruthenia used CET 1990/1991.
    - # "Uzhhorod" is the transliteration of the Ukrainian name, but
    - # "Uzhgorod" is more common in English.
    -@@ -2662,7 +2680,8 @@
    - 			1:00	-	CET	1991 Mar 31 3:00
    - 			2:00	-	EET	1992
    - 			2:00	E-Eur	EE%sT	1995
    --			2:00	EU	EE%sT
    -+			2:00	EU	EE%sT	2011 Mar lastSun 1:00u
    -+			3:00	-	FET # Further-eastern European Time
    - # Zaporozh'ye and eastern Lugansk oblasts observed DST 1990/1991.
    - # "Zaporizhia" is the transliteration of the Ukrainian name, but
    - # "Zaporozh'ye" is more common in English.  Use the common English
    -@@ -2675,7 +2694,8 @@
    - 			1:00	C-Eur	CE%sT	1943 Oct 25
    - 			3:00	Russia	MSK/MSD	1991 Mar 31 2:00
    - 			2:00	E-Eur	EE%sT	1995
    --			2:00	EU	EE%sT
    -+			2:00	EU	EE%sT	2011 Mar lastSun 1:00u
    -+			3:00	-	FET # Further-eastern European Time
    - # Central Crimea used Moscow time 1994/1997.
    - Zone Europe/Simferopol	2:16:24 -	LMT	1880
    - 			2:16	-	SMT	1924 May  2 # Simferopol Mean T
    -@@ -2700,7 +2720,8 @@
    - # Assume it happened in March by not changing the clocks.
    - 			3:00	Russia	MSK/MSD	1997
    - 			3:00	-	MSK	1997 Mar lastSun 1:00u
    --			2:00	EU	EE%sT
    -+			2:00	EU	EE%sT	2011 Mar lastSun 1:00u
    -+			3:00	-	FET # Further-eastern European Time
    - 
    - ###############################################################################
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/factory
    -+++ openjdk/jdk/make/sun/javazic/tzdata/factory
    -@@ -1,27 +1,5 @@
    --#
    --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    --# This code is free software; you can redistribute it and/or modify it
    --# under the terms of the GNU General Public License version 2 only, as
    --# published by the Free Software Foundation.  Oracle designates this
    --# particular file as subject to the "Classpath" exception as provided
    --# by Oracle in the LICENSE file that accompanied this code.
    --#  
    --# This code is distributed in the hope that it will be useful, but WITHOUT
    --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    --# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    --# version 2 for more details (a copy is included in the LICENSE file that
    --# accompanied this code).
    --#  
    --# You should have received a copy of the GNU General Public License version
    --# 2 along with this work; if not, write to the Free Software Foundation,
    --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    --# or visit www.oracle.com if you need additional information or have any
    --# questions.
    --#
    - # 
    -+# @(#)factory	8.2
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab
    -+++ openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab
    -@@ -1,27 +1,5 @@
    --#
    --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    --# This code is free software; you can redistribute it and/or modify it
    --# under the terms of the GNU General Public License version 2 only, as
    --# published by the Free Software Foundation.  Oracle designates this
    --# particular file as subject to the "Classpath" exception as provided
    --# by Oracle in the LICENSE file that accompanied this code.
    --#  
    --# This code is distributed in the hope that it will be useful, but WITHOUT
    --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    --# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    --# version 2 for more details (a copy is included in the LICENSE file that
    --# accompanied this code).
    --#  
    --# You should have received a copy of the GNU General Public License version
    --# 2 along with this work; if not, write to the Free Software Foundation,
    --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    --# or visit www.oracle.com if you need additional information or have any
    --# questions.
    --#
    - # 
    -+# @(#)iso3166.tab	8.11
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - # ISO 3166 alpha-2 country codes
    ---- openjdk/jdk/make/sun/javazic/tzdata/leapseconds
    -+++ openjdk/jdk/make/sun/javazic/tzdata/leapseconds
    -@@ -1,27 +1,5 @@
    --#
    --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    --# This code is free software; you can redistribute it and/or modify it
    --# under the terms of the GNU General Public License version 2 only, as
    --# published by the Free Software Foundation.  Oracle designates this
    --# particular file as subject to the "Classpath" exception as provided
    --# by Oracle in the LICENSE file that accompanied this code.
    --#  
    --# This code is distributed in the hope that it will be useful, but WITHOUT
    --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    --# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    --# version 2 for more details (a copy is included in the LICENSE file that
    --# accompanied this code).
    --#  
    --# You should have received a copy of the GNU General Public License version
    --# 2 along with this work; if not, write to the Free Software Foundation,
    --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    --# or visit www.oracle.com if you need additional information or have any
    --# questions.
    --#
    - # 
    -+# @(#)leapseconds	8.11
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/northamerica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/northamerica
    -@@ -1,27 +1,5 @@
    --#
    --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    --# This code is free software; you can redistribute it and/or modify it
    --# under the terms of the GNU General Public License version 2 only, as
    --# published by the Free Software Foundation.  Oracle designates this
    --# particular file as subject to the "Classpath" exception as provided
    --# by Oracle in the LICENSE file that accompanied this code.
    --#  
    --# This code is distributed in the hope that it will be useful, but WITHOUT
    --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    --# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    --# version 2 for more details (a copy is included in the LICENSE file that
    --# accompanied this code).
    --#  
    --# You should have received a copy of the GNU General Public License version
    --# 2 along with this work; if not, write to the Free Software Foundation,
    --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    --# or visit www.oracle.com if you need additional information or have any
    --# questions.
    --#
    - # 
    -+# @(#)northamerica	8.49
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -505,7 +483,7 @@
    - 			 -8:00	US	P%sT	1983 Oct 30 2:00
    - 			 -9:00	US	Y%sT	1983 Nov 30
    - 			 -9:00	US	AK%sT
    --Zone America/Sitka	 -14:58:47 -	LMT	1867 Oct 18
    -+Zone America/Sitka	 14:58:47 -	LMT	1867 Oct 18
    - 			 -9:01:13 -	LMT	1900 Aug 20 12:00
    - 			 -8:00	-	PST	1942
    - 			 -8:00	US	P%sT	1946
    -@@ -1190,31 +1168,21 @@
    - # INMS (2000-09-12) says that, since 1988 at least, Newfoundland switches
    - # at 00:01 local time.  For now, assume it started in 1987.
    - 
    --# From Michael Pelley (2011-08-05):
    --# The Government of Newfoundland and Labrador has pending changes to
    --# modify the hour for daylight savings time to come into effect in
    --# November 2011. This modification would change the time from 12:01AM to
    --# 2:00AM on the dates of the switches of Daylight Savings Time to/from
    --# Standard Time.
    --#
    --# As a matter of reference, in Canada provinces have the authority of
    --# setting time zone information. The legislation has passed our
    --# legislative body (The House of Assembly) and is awaiting the
    --# proclamation to come into effect. You may find this information at:
    --# 
    --# http://www.assembly.nl.ca/legislation/sr/lists/Proclamation.htm
    --# 
    --# and
    --# search within that web page for Standard Time (Amendment) Act. The Act
    --# may be found at:
    --# 
    --# http://www.assembly.nl.ca/business/bills/Bill1106.htm
    -+# From Michael Pelley (2011-09-12):
    -+# We received today, Monday, September 12, 2011, notification that the
    -+# changes to the Newfoundland Standard Time Act have been proclaimed.
    -+# The change in the Act stipulates that the change from Daylight Savings
    -+# Time to Standard Time and from Standard Time to Daylight Savings Time
    -+# now occurs at 2:00AM.
    -+# ...
    -+# 
    -+# http://www.assembly.nl.ca/legislation/sr/annualstatutes/2011/1106.chp.htm
    - # 
    - # ...
    --# MICHAEL PELLEY | Manager of Enterprise Architecture - Solution Delivery
    --# Office of the Chief Information Officer Executive Council Government of
    --# Newfoundland & Labrador P.O. Box 8700, 40 Higgins Line, St. John's NL
    --# A1B 4J6
    -+# MICHAEL PELLEY  |  Manager of Enterprise Architecture - Solution Delivery
    -+# Office of the Chief Information Officer
    -+# Executive Council
    -+# Government of Newfoundland & Labrador
    - 
    - Rule	StJohns	1987	only	-	Apr	Sun>=1	0:01	1:00	D
    - Rule	StJohns	1987	2006	-	Oct	lastSun	0:01	0	S
    ---- openjdk/jdk/make/sun/javazic/tzdata/pacificnew
    -+++ openjdk/jdk/make/sun/javazic/tzdata/pacificnew
    -@@ -1,27 +1,5 @@
    --#
    --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    --# This code is free software; you can redistribute it and/or modify it
    --# under the terms of the GNU General Public License version 2 only, as
    --# published by the Free Software Foundation.  Oracle designates this
    --# particular file as subject to the "Classpath" exception as provided
    --# by Oracle in the LICENSE file that accompanied this code.
    --#  
    --# This code is distributed in the hope that it will be useful, but WITHOUT
    --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    --# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    --# version 2 for more details (a copy is included in the LICENSE file that
    --# accompanied this code).
    --#  
    --# You should have received a copy of the GNU General Public License version
    --# 2 along with this work; if not, write to the Free Software Foundation,
    --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    --# or visit www.oracle.com if you need additional information or have any
    --# questions.
    --#
    - # 
    -+# @(#)pacificnew	8.2
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/solar87
    -+++ openjdk/jdk/make/sun/javazic/tzdata/solar87
    -@@ -1,27 +1,5 @@
    --#
    --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    --# This code is free software; you can redistribute it and/or modify it
    --# under the terms of the GNU General Public License version 2 only, as
    --# published by the Free Software Foundation.  Oracle designates this
    --# particular file as subject to the "Classpath" exception as provided
    --# by Oracle in the LICENSE file that accompanied this code.
    --#  
    --# This code is distributed in the hope that it will be useful, but WITHOUT
    --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    --# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    --# version 2 for more details (a copy is included in the LICENSE file that
    --# accompanied this code).
    --#  
    --# You should have received a copy of the GNU General Public License version
    --# 2 along with this work; if not, write to the Free Software Foundation,
    --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    --# or visit www.oracle.com if you need additional information or have any
    --# questions.
    --#
    - # 
    -+# @(#)solar87	8.2
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/solar88
    -+++ openjdk/jdk/make/sun/javazic/tzdata/solar88
    -@@ -1,27 +1,5 @@
    --#
    --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    --# This code is free software; you can redistribute it and/or modify it
    --# under the terms of the GNU General Public License version 2 only, as
    --# published by the Free Software Foundation.  Oracle designates this
    --# particular file as subject to the "Classpath" exception as provided
    --# by Oracle in the LICENSE file that accompanied this code.
    --#  
    --# This code is distributed in the hope that it will be useful, but WITHOUT
    --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    --# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    --# version 2 for more details (a copy is included in the LICENSE file that
    --# accompanied this code).
    --#  
    --# You should have received a copy of the GNU General Public License version
    --# 2 along with this work; if not, write to the Free Software Foundation,
    --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    --# or visit www.oracle.com if you need additional information or have any
    --# questions.
    --#
    - # 
    -+# @(#)solar88	8.2
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/solar89
    -+++ openjdk/jdk/make/sun/javazic/tzdata/solar89
    -@@ -1,27 +1,5 @@
    --#
    --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    --# This code is free software; you can redistribute it and/or modify it
    --# under the terms of the GNU General Public License version 2 only, as
    --# published by the Free Software Foundation.  Oracle designates this
    --# particular file as subject to the "Classpath" exception as provided
    --# by Oracle in the LICENSE file that accompanied this code.
    --#  
    --# This code is distributed in the hope that it will be useful, but WITHOUT
    --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    --# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    --# version 2 for more details (a copy is included in the LICENSE file that
    --# accompanied this code).
    --#  
    --# You should have received a copy of the GNU General Public License version
    --# 2 along with this work; if not, write to the Free Software Foundation,
    --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    --# or visit www.oracle.com if you need additional information or have any
    --# questions.
    --#
    - # 
    -+# @(#)solar89	8.2
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/southamerica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/southamerica
    -@@ -1,27 +1,5 @@
    --#
    --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    --# This code is free software; you can redistribute it and/or modify it
    --# under the terms of the GNU General Public License version 2 only, as
    --# published by the Free Software Foundation.  Oracle designates this
    --# particular file as subject to the "Classpath" exception as provided
    --# by Oracle in the LICENSE file that accompanied this code.
    --#  
    --# This code is distributed in the hope that it will be useful, but WITHOUT
    --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    --# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    --# version 2 for more details (a copy is included in the LICENSE file that
    --# accompanied this code).
    --#  
    --# You should have received a copy of the GNU General Public License version
    --# 2 along with this work; if not, write to the Free Software Foundation,
    --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    --# or visit www.oracle.com if you need additional information or have any
    --# questions.
    --#
    - # 
    -+# @(#)southamerica	8.50
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -819,6 +797,26 @@
    - # 
    - # http://www.timeanddate.com/news/time/brazil-dst-2008-2009.html
    - # 
    -+#
    -+# From Alexander Krivenyshev (2011-10-04):
    -+# State Bahia will return to Daylight savings time this year after 8 years off.
    -+# The announcement was made by Governor Jaques Wagner in an interview to a 
    -+# television station in Salvador. 
    -+
    -+# In Portuguese:
    -+# 
    -+# http://g1.globo.com/bahia/noticia/2011/10/governador-jaques-wagner-confirma-horario-de-verao-na-bahia.html
    -+#  and
    -+# 
    -+# http://noticias.terra.com.br/brasil/noticias/0,,OI5390887-EI8139,00-Bahia+volta+a+ter+horario+de+verao+apos+oito+anos.html
    -+# 
    -+
    -+# From Guilherme Bernardes Rodrigues (2011-10-07):
    -+# There is news in the media, however there is still no decree about it.
    -+# I just send a e-mail to Zulmira Brando at
    -+# http://pcdsh01.on.br/ the
    -+# oficial agency about time in Brazil, and she confirmed that the old rule is
    -+# still in force.
    - 
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - # Decree 20,466 (1931-10-01)
    -@@ -1057,6 +1055,9 @@
    - Zone America/Bahia	-2:34:04 -	LMT	1914
    - 			-3:00	Brazil	BR%sT	2003 Sep 24
    - 			-3:00	-	BRT
    -+# as noted above, not yet in operation.
    -+#			-3:00	-	BRT	2011 Oct 16
    -+#			-3:00	Brazil	BR%sT
    - #
    - # Goias (GO), Distrito Federal (DF), Minas Gerais (MG),
    - # Espirito Santo (ES), Rio de Janeiro (RJ), Sao Paulo (SP), Parana (PR),
    ---- openjdk/jdk/make/sun/javazic/tzdata/systemv
    -+++ openjdk/jdk/make/sun/javazic/tzdata/systemv
    -@@ -1,27 +1,5 @@
    --#
    --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    --# This code is free software; you can redistribute it and/or modify it
    --# under the terms of the GNU General Public License version 2 only, as
    --# published by the Free Software Foundation.  Oracle designates this
    --# particular file as subject to the "Classpath" exception as provided
    --# by Oracle in the LICENSE file that accompanied this code.
    --#  
    --# This code is distributed in the hope that it will be useful, but WITHOUT
    --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    --# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    --# version 2 for more details (a copy is included in the LICENSE file that
    --# accompanied this code).
    --#  
    --# You should have received a copy of the GNU General Public License version
    --# 2 along with this work; if not, write to the Free Software Foundation,
    --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    --# or visit www.oracle.com if you need additional information or have any
    --# questions.
    --#
    - # 
    -+# @(#)systemv	8.2
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/zone.tab
    -+++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab
    -@@ -1,27 +1,5 @@
    --#
    --# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    --# This code is free software; you can redistribute it and/or modify it
    --# under the terms of the GNU General Public License version 2 only, as
    --# published by the Free Software Foundation.  Oracle designates this
    --# particular file as subject to the "Classpath" exception as provided
    --# by Oracle in the LICENSE file that accompanied this code.
    --#  
    --# This code is distributed in the hope that it will be useful, but WITHOUT
    --# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    --# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    --# version 2 for more details (a copy is included in the LICENSE file that
    --# accompanied this code).
    --#  
    --# You should have received a copy of the GNU General Public License version
    --# 2 along with this work; if not, write to the Free Software Foundation,
    --# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    --# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    --# or visit www.oracle.com if you need additional information or have any
    --# questions.
    --#
    - # 
    -+# @(#)zone.tab	8.49
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - #
    -@@ -341,7 +319,8 @@
    - PM	+4703-05620	America/Miquelon
    - PN	-2504-13005	Pacific/Pitcairn
    - PR	+182806-0660622	America/Puerto_Rico
    --PS	+3130+03428	Asia/Gaza
    -+PS	+3130+03428	Asia/Gaza	Gaza Strip
    -+PS	+313200+0350542	Asia/Hebron	West Bank
    - PT	+3843-00908	Europe/Lisbon	mainland
    - PT	+3238-01654	Atlantic/Madeira	Madeira Islands
    - PT	+3744-02540	Atlantic/Azores	Azores
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
    -@@ -103,6 +103,8 @@
    -                                      "Eastern Daylight Time", "EDT"};
    -         String EST_NSW[] = new String[] {"Eastern Standard Time (New South Wales)", "EST",
    -                                          "Eastern Summer Time (New South Wales)", "EST"};
    -+        String FET[] = new String[] {"Further-eastern European Time", "FET",
    -+                                     "Further-eastern European Summer Time", "FEST"};
    -         String GHMT[] = new String[] {"Ghana Mean Time", "GMT",
    -                                      "Ghana Summer Time", "GHST"};
    -         String GAMBIER[] =  new String[] {"Gambier Time", "GAMT",
    -@@ -511,6 +513,7 @@
    -                                             "Tajikistan Summer Time", "TJST"}},
    -             {"Asia/Gaza", EET},
    -             {"Asia/Harbin", CTT},
    -+            {"Asia/Hebron", EET},
    -             {"Asia/Ho_Chi_Minh", ICT},
    -             {"Asia/Hong_Kong", HKT},
    -             {"Asia/Hovd", new String[] {"Hovd Time", "HOVT",
    -@@ -674,9 +677,8 @@
    -             {"Europe/Isle_of_Man", GMTBST},
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    --            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
    --                                                 "Kaliningrad Summer Time", "KALST"}},
    --            {"Europe/Kiev", EET},
    -+            {"Europe/Kaliningrad", FET},
    -+            {"Europe/Kiev", FET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -684,7 +686,7 @@
    -             {"Europe/Madrid", CET},
    -             {"Europe/Malta", CET},
    -             {"Europe/Mariehamn", EET},
    --            {"Europe/Minsk", EET},
    -+            {"Europe/Minsk", FET},
    -             {"Europe/Monaco", CET},
    -             {"Europe/Moscow", MSK},
    -             {"Europe/Nicosia", EET},
    -@@ -697,14 +699,14 @@
    -                                             "Samara Summer Time", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", EET},
    -+            {"Europe/Simferopol", FET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", EET},
    -+            {"Europe/Uzhgorod", FET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -713,7 +715,7 @@
    -                                                "Volgograd Summer Time", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", EET},
    -+            {"Europe/Zaporozhye", FET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java
    -@@ -103,6 +103,8 @@
    -                                      "\u00d6stliche Sommerzeit", "EDT"};
    -         String EST_NSW[] = new String[] {"\u00d6stliche Normalzeit (New South Wales)", "EST",
    -                                          "\u00d6stliche Sommerzeit (New South Wales)", "EST"};
    -+        String FET[] = new String[] {"Further-eastern European Time", "FET",
    -+                                     "Further-eastern European Summer Time", "FEST"};
    -         String GHMT[] = new String[] {"Ghanaische Normalzeit", "GMT",
    -                                       "Ghanaische Sommerzeit", "GHST"};
    -         String GAMBIER[] =  new String[] {"Gambier Zeit", "GAMT",
    -@@ -511,6 +513,7 @@
    -                                             "Tadschikische Sommerzeit", "TJST"}},
    -             {"Asia/Gaza", EET},
    -             {"Asia/Harbin", CTT},
    -+            {"Asia/Hebron", EET},
    -             {"Asia/Ho_Chi_Minh", ICT},
    -             {"Asia/Hong_Kong", HKT},
    -             {"Asia/Hovd", new String[] {"Hovd Zeit", "HOVT",
    -@@ -674,9 +677,8 @@
    -             {"Europe/Isle_of_Man", GMTBST},
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    --            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
    --                                                 "Kaliningrad Summer Time", "KALST"}},
    --            {"Europe/Kiev", EET},
    -+            {"Europe/Kaliningrad", FET},
    -+            {"Europe/Kiev", FET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -684,7 +686,7 @@
    -             {"Europe/Madrid", CET},
    -             {"Europe/Malta", CET},
    -             {"Europe/Mariehamn", EET},
    --            {"Europe/Minsk", EET},
    -+            {"Europe/Minsk", FET},
    -             {"Europe/Monaco", CET},
    -             {"Europe/Moscow", MSK},
    -             {"Europe/Nicosia", EET},
    -@@ -697,14 +699,14 @@
    -                                             "Samarische Sommerzeit", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", EET},
    -+            {"Europe/Simferopol", FET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", EET},
    -+            {"Europe/Uzhgorod", FET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -713,7 +715,7 @@
    -                                                "Wolgograder Sommerzeit", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", EET},
    -+            {"Europe/Zaporozhye", FET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java
    -@@ -103,6 +103,8 @@
    -                                      "Hora de verano Oriental", "EDT"};
    -         String EST_NSW[] = new String[] {"Hora est\u00e1ndar Oriental (Nueva Gales del Sur)", "EST",
    -                                          "Hora de verano Oriental (Nueva Gales del Sur)", "EST"};
    -+        String FET[] = new String[] {"Further-eastern European Time", "FET",
    -+                                     "Further-eastern European Summer Time", "FEST"};
    -         String GHMT[] = new String[] {"Hora central de Ghana", "GMT",
    -                                       "Hora de verano de Ghana", "GHST"};
    -         String GAMBIER[] =  new String[] {"Hora de Gambier", "GAMT",
    -@@ -511,6 +513,7 @@
    -                                             "Hora de verano de Tajikist\u00e1n", "TJST"}},
    -             {"Asia/Gaza", EET},
    -             {"Asia/Harbin", CTT},
    -+            {"Asia/Hebron", EET},
    -             {"Asia/Ho_Chi_Minh", ICT},
    -             {"Asia/Hong_Kong", HKT},
    -             {"Asia/Hovd", new String[] {"Hora de Hovd", "HOVT",
    -@@ -674,9 +677,8 @@
    -             {"Europe/Isle_of_Man", GMTBST},
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    --            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
    --                                                 "Kaliningrad Summer Time", "KALST"}},
    --            {"Europe/Kiev", EET},
    -+            {"Europe/Kaliningrad", FET},
    -+            {"Europe/Kiev", FET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -684,7 +686,7 @@
    -             {"Europe/Madrid", CET},
    -             {"Europe/Malta", CET},
    -             {"Europe/Mariehamn", EET},
    --            {"Europe/Minsk", EET},
    -+            {"Europe/Minsk", FET},
    -             {"Europe/Monaco", CET},
    -             {"Europe/Moscow", MSK},
    -             {"Europe/Nicosia", EET},
    -@@ -697,14 +699,14 @@
    -                                             "Hora de verano de Samara", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", EET},
    -+            {"Europe/Simferopol", FET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", EET},
    -+            {"Europe/Uzhgorod", FET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -713,7 +715,7 @@
    -                                                "Hora de verano de Volgogrado", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", EET},
    -+            {"Europe/Zaporozhye", FET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java
    -@@ -103,6 +103,8 @@
    -                                      "Heure avanc\u00e9e de l'Est", "EDT"} ;
    -         String EST_NSW[] = new String[] {"Heure normale de l'Est (Nouvelle-Galles du Sud)", "EST",
    -                                          "Heure d'\u00e9t\u00e9 de l'Est (Nouvelle-Galles du Sud)", "EST"} ;
    -+        String FET[] = new String[] {"Further-eastern European Time", "FET",
    -+                                     "Further-eastern European Summer Time", "FEST"};
    -         String GHMT[] = new String[] {"Heure du Ghana", "GMT",
    -                                       "Heure d'\u00e9t\u00e9 du Ghana", "GHST"};
    -         String GAMBIER[] =  new String[] {"Heure de Gambi", "GAMT",
    -@@ -511,6 +513,7 @@
    -                                             "Heure d'\u00e9t\u00e9 du Tadjikistan", "TJST"}},
    -             {"Asia/Gaza", EET},
    -             {"Asia/Harbin", CTT},
    -+            {"Asia/Hebron", EET},
    -             {"Asia/Ho_Chi_Minh", ICT},
    -             {"Asia/Hong_Kong", HKT},
    -             {"Asia/Hovd", new String[] {"Heure de Hovd", "HOVT",
    -@@ -674,9 +677,8 @@
    -             {"Europe/Isle_of_Man", GMTBST},
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    --            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
    --                                                 "Kaliningrad Summer Time", "KALST"}},
    --            {"Europe/Kiev", EET},
    -+            {"Europe/Kaliningrad", FET},
    -+            {"Europe/Kiev", FET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -684,7 +686,7 @@
    -             {"Europe/Madrid", CET},
    -             {"Europe/Malta", CET},
    -             {"Europe/Mariehamn", EET},
    --            {"Europe/Minsk", EET},
    -+            {"Europe/Minsk", FET},
    -             {"Europe/Monaco", CET},
    -             {"Europe/Moscow", MSK},
    -             {"Europe/Nicosia", EET},
    -@@ -697,14 +699,14 @@
    -                                             "Heure d'\u00e9t\u00e9 de Samara", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", EET},
    -+            {"Europe/Simferopol", FET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", EET},
    -+            {"Europe/Uzhgorod", FET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -713,7 +715,7 @@
    -                                                "Heure d'\u00e9t\u00e9 de Volgograd", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", EET},
    -+            {"Europe/Zaporozhye", FET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java
    -@@ -103,6 +103,8 @@
    -                                      "Ora legale USA orientale", "EDT"};
    -         String EST_NSW[] = new String[] {"Ora solare dell'Australia orientale (Nuovo Galles del Sud)", "EST",
    -                                          "Ora estiva dell'Australia orientale (Nuovo Galles del Sud)", "EST"};
    -+        String FET[] = new String[] {"Further-eastern European Time", "FET",
    -+                                     "Further-eastern European Summer Time", "FEST"};
    -         String GHMT[] = new String[] {"Ora media del Ghana", "GMT",
    -                                       "Ora legale del Ghana", "GHST"};
    -         String GAMBIER[] =  new String[] {"Ora di Gambier", "GAMT",
    -@@ -511,6 +513,7 @@
    -                                             "Ora estiva del Tagikistan", "TJST"}},
    -             {"Asia/Gaza", EET},
    -             {"Asia/Harbin", CTT},
    -+            {"Asia/Hebron", EET},
    -             {"Asia/Ho_Chi_Minh", ICT},
    -             {"Asia/Hong_Kong", HKT},
    -             {"Asia/Hovd", new String[] {"Ora di Hovd", "HOVT",
    -@@ -674,9 +677,8 @@
    -             {"Europe/Isle_of_Man", GMTBST},
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    --            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
    --                                                 "Kaliningrad Summer Time", "KALST"}},
    --            {"Europe/Kiev", EET},
    -+            {"Europe/Kaliningrad", FET},
    -+            {"Europe/Kiev", FET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -684,7 +686,7 @@
    -             {"Europe/Madrid", CET},
    -             {"Europe/Malta", CET},
    -             {"Europe/Mariehamn", EET},
    --            {"Europe/Minsk", EET},
    -+            {"Europe/Minsk", FET},
    -             {"Europe/Monaco", CET},
    -             {"Europe/Moscow", MSK},
    -             {"Europe/Nicosia", EET},
    -@@ -697,14 +699,14 @@
    -                                             "Ora estiva di Samara", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", EET},
    -+            {"Europe/Simferopol", FET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", EET},
    -+            {"Europe/Uzhgorod", FET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -713,7 +715,7 @@
    -                                                "Ora estiva di Volgograd", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", EET},
    -+            {"Europe/Zaporozhye", FET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java
    -@@ -103,6 +103,8 @@
    -                                      "\u6771\u90e8\u590f\u6642\u9593", "EDT"};
    -         String EST_NSW[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30cb\u30e5\u30fc\u30b5\u30a6\u30b9\u30a6\u30a7\u30fc\u30eb\u30ba)", "EST",
    -                                          "\u6771\u90e8\u590f\u6642\u9593 (\u30cb\u30e5\u30fc\u30b5\u30a6\u30b9\u30a6\u30a7\u30fc\u30eb\u30ba)", "EST"};
    -+        String FET[] = new String[] {"Further-eastern European Time", "FET",
    -+                                     "Further-eastern European Summer Time", "FEST"};
    -         String GHMT[] = new String[] {"\u30ac\u30fc\u30ca\u6a19\u6e96\u6642", "GMT",
    -                                      "\u30ac\u30fc\u30ca\u590f\u6642\u9593", "GHST"};
    -         String GAMBIER[] =  new String[] {"\u30ac\u30f3\u30d3\u30a2\u6642\u9593", "GAMT",
    -@@ -511,6 +513,7 @@
    -                                             "\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "TJST"}},
    -             {"Asia/Gaza", EET},
    -             {"Asia/Harbin", CTT},
    -+            {"Asia/Hebron", EET},
    -             {"Asia/Ho_Chi_Minh", ICT},
    -             {"Asia/Hong_Kong", HKT},
    -             {"Asia/Hovd", new String[] {"\u30db\u30d6\u30c9\u6642\u9593", "HOVT",
    -@@ -674,9 +677,8 @@
    -             {"Europe/Isle_of_Man", GMTBST},
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    --            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
    --                                                 "Kaliningrad Summer Time", "KALST"}},
    --            {"Europe/Kiev", EET},
    -+            {"Europe/Kaliningrad", FET},
    -+            {"Europe/Kiev", FET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -684,7 +686,7 @@
    -             {"Europe/Madrid", CET},
    -             {"Europe/Malta", CET},
    -             {"Europe/Mariehamn", EET},
    --            {"Europe/Minsk", EET},
    -+            {"Europe/Minsk", FET},
    -             {"Europe/Monaco", CET},
    -             {"Europe/Moscow", MSK},
    -             {"Europe/Nicosia", EET},
    -@@ -697,14 +699,14 @@
    -                                             "\u30b5\u30de\u30e9\u590f\u6642\u9593", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", EET},
    -+            {"Europe/Simferopol", FET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", EET},
    -+            {"Europe/Uzhgorod", FET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -713,7 +715,7 @@
    -                                                "\u30dc\u30eb\u30b4\u30b0\u30e9\u30fc\u30c9\u590f\u6642\u9593", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", EET},
    -+            {"Europe/Zaporozhye", FET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java
    -@@ -103,6 +103,8 @@
    -                                      "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EDT"};
    -         String EST_NSW[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ub274 \uc0ac\uc6b0\uc2a4 \uc6e8\uc77c\uc988)", "EST",
    -                                          "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ub274 \uc0ac\uc6b0\uc2a4 \uc6e8\uc77c\uc988)", "EST"};
    -+        String FET[] = new String[] {"Further-eastern European Time", "FET",
    -+                                     "Further-eastern European Summer Time", "FEST"};
    -         String GHMT[] = new String[] {"\uac00\ub098 \ud45c\uc900\uc2dc", "GMT",
    -                                      "\uac00\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GHST"};
    -         String GAMBIER[] =  new String[] {"\uac10\ube44\uc544 \uc2dc\uac04", "GAMT",
    -@@ -511,6 +513,7 @@
    -                                             "\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TJST"}},
    -             {"Asia/Gaza", EET},
    -             {"Asia/Harbin", CTT},
    -+            {"Asia/Hebron", EET},
    -             {"Asia/Ho_Chi_Minh", ICT},
    -             {"Asia/Hong_Kong", HKT},
    -             {"Asia/Hovd", new String[] {"Hovd \uc2dc\uac04", "HOVT",
    -@@ -674,9 +677,8 @@
    -             {"Europe/Isle_of_Man", GMTBST},
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    --            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
    --                                                 "Kaliningrad Summer Time", "KALST"}},
    --            {"Europe/Kiev", EET},
    -+            {"Europe/Kaliningrad", FET},
    -+            {"Europe/Kiev", FET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -684,7 +686,7 @@
    -             {"Europe/Madrid", CET},
    -             {"Europe/Malta", CET},
    -             {"Europe/Mariehamn", EET},
    --            {"Europe/Minsk", EET},
    -+            {"Europe/Minsk", FET},
    -             {"Europe/Monaco", CET},
    -             {"Europe/Moscow", MSK},
    -             {"Europe/Nicosia", EET},
    -@@ -697,14 +699,14 @@
    -                                             "\uc0ac\ub9c8\ub77c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", EET},
    -+            {"Europe/Simferopol", FET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", EET},
    -+            {"Europe/Uzhgorod", FET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -713,7 +715,7 @@
    -                                                "\ubcfc\uace0\uadf8\ub77c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", EET},
    -+            {"Europe/Zaporozhye", FET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    -diff -r 426499ae8e04 -r dd8350c61d36 src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java	Fri Oct 21 19:22:17 2011 +0400
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java	Fri Oct 21 15:25:23 2011 -0700
    -@@ -101,6 +101,8 @@
    -                                      "Hor\u00e1rio de luz natural oriental", "EDT"};
    -         String EST_NSW[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Nova Gales do Sul)", "EST",
    -                                          "Fuso hor\u00e1rio de ver\u00e3o oriental (Nova Gales do Sul)", "EST"};
    -+        String FET[] = new String[] {"Further-eastern European Time", "FET",
    -+                                     "Further-eastern European Summer Time", "FEST"};
    -         String GHMT[] = new String[] {"Fuso hor\u00e1rio do meridiano de Gana", "GMT",
    -                                       "Fuso hor\u00e1rio de ver\u00e3o de Gana", "GHST"};
    -         String GAMBIER[] =  new String[] {"Fuso hor\u00e1rio de Gambier", "GAMT",
    -@@ -511,6 +513,7 @@
    -                                             "Fuso hor\u00e1rio de ver\u00e3o do Tadjiquist\u00e3o", "TJST"}},
    -             {"Asia/Gaza", EET},
    -             {"Asia/Harbin", CTT},
    -+            {"Asia/Hebron", EET},
    -             {"Asia/Ho_Chi_Minh", ICT},
    -             {"Asia/Hong_Kong", HKT},
    -             {"Asia/Hovd", new String[] {"Fuso hor\u00e1rio de Hovd", "HOVT",
    -@@ -674,9 +677,8 @@
    -             {"Europe/Isle_of_Man", GMTBST},
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    --            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
    --                                                 "Kaliningrad Summer Time", "KALST"}},
    --            {"Europe/Kiev", EET},
    -+            {"Europe/Kaliningrad", FET},
    -+            {"Europe/Kiev", FET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -684,7 +686,7 @@
    -             {"Europe/Madrid", CET},
    -             {"Europe/Malta", CET},
    -             {"Europe/Mariehamn", EET},
    --            {"Europe/Minsk", EET},
    -+            {"Europe/Minsk", FET},
    -             {"Europe/Monaco", CET},
    -             {"Europe/Moscow", MSK},
    -             {"Europe/Nicosia", EET},
    -@@ -697,14 +699,14 @@
    -                                             "Fuso hor\u00e1rio de ver\u00e3o de Samara", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", EET},
    -+            {"Europe/Simferopol", FET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", EET},
    -+            {"Europe/Uzhgorod", FET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -713,7 +715,7 @@
    -                                                "Fuso hor\u00e1rio de ver\u00e3o de Volgogrado", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", EET},
    -+            {"Europe/Zaporozhye", FET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java
    -@@ -103,6 +103,8 @@
    -                                      "Eastern, sommartid", "EDT"};
    -         String EST_NSW[] = new String[] {"Eastern, normaltid (Nya Sydwales)", "EST",
    -                                          "Eastern, sommartid (Nya Sydwales)", "EST"};
    -+        String FET[] = new String[] {"Further-eastern European Time", "FET",
    -+                                     "Further-eastern European Summer Time", "FEST"};
    -         String GHMT[] = new String[] {"Ghana, normaltid", "GMT",
    -                                       "Ghana, sommartid", "GHST"};
    -         String GAMBIER[] =  new String[] {"Gambier, normaltid", "GAMT",
    -@@ -511,6 +513,7 @@
    -                                             "Tadzjikistan, sommartid", "TJST"}},
    -             {"Asia/Gaza", EET},
    -             {"Asia/Harbin", CTT},
    -+            {"Asia/Hebron", EET},
    -             {"Asia/Ho_Chi_Minh", ICT},
    -             {"Asia/Hong_Kong", HKT},
    -             {"Asia/Hovd", new String[] {"Hovd, normaltid", "HOVT",
    -@@ -674,9 +677,8 @@
    -             {"Europe/Isle_of_Man", GMTBST},
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    --            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
    --                                                 "Kaliningrad Summer Time", "KALST"}},
    --            {"Europe/Kiev", EET},
    -+            {"Europe/Kaliningrad", FET},
    -+            {"Europe/Kiev", FET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -684,7 +686,7 @@
    -             {"Europe/Madrid", CET},
    -             {"Europe/Malta", CET},
    -             {"Europe/Mariehamn", EET},
    --            {"Europe/Minsk", EET},
    -+            {"Europe/Minsk", FET},
    -             {"Europe/Monaco", CET},
    -             {"Europe/Moscow", MSK},
    -             {"Europe/Nicosia", EET},
    -@@ -697,14 +699,14 @@
    -                                             "Samara, sommartid", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", EET},
    -+            {"Europe/Simferopol", FET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", EET},
    -+            {"Europe/Uzhgorod", FET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -713,7 +715,7 @@
    -                                                "Volgograd, sommartid", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", EET},
    -+            {"Europe/Zaporozhye", FET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
    -@@ -103,6 +103,8 @@
    -                                      "\u4e1c\u90e8\u590f\u4ee4\u65f6", "EDT"};
    -         String EST_NSW[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u65b0\u5357\u5a01\u5c14\u65af\uff09", "EST",
    -                                          "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u65b0\u5357\u5a01\u5c14\u65af\uff09", "EST"};
    -+        String FET[] = new String[] {"Further-eastern European Time", "FET",
    -+                                     "Further-eastern European Summer Time", "FEST"};
    -         String GHMT[] = new String[] {"\u52a0\u7eb3\u65f6\u95f4", "GMT",
    -                                      "\u52a0\u7eb3\u590f\u4ee4\u65f6", "GHST"};
    -         String GAMBIER[] =  new String[] {"\u5188\u6bd4\u4e9a\u65f6\u95f4", "GAMT",
    -@@ -511,6 +513,7 @@
    -                                             "\u5854\u5409\u514b\u65af\u5766\u590f\u4ee4\u65f6", "TJST"}},
    -             {"Asia/Gaza", EET},
    -             {"Asia/Harbin", CTT},
    -+            {"Asia/Hebron", EET},
    -             {"Asia/Ho_Chi_Minh", ICT},
    -             {"Asia/Hong_Kong", HKT},
    -             {"Asia/Hovd", new String[] {"\u79d1\u5e03\u591a\u65f6\u95f4", "HOVT",
    -@@ -674,9 +677,8 @@
    -             {"Europe/Isle_of_Man", GMTBST},
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    --            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
    --                                                 "Kaliningrad Summer Time", "KALST"}},
    --            {"Europe/Kiev", EET},
    -+            {"Europe/Kaliningrad", FET},
    -+            {"Europe/Kiev", FET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -684,7 +686,7 @@
    -             {"Europe/Madrid", CET},
    -             {"Europe/Malta", CET},
    -             {"Europe/Mariehamn", EET},
    --            {"Europe/Minsk", EET},
    -+            {"Europe/Minsk", FET},
    -             {"Europe/Monaco", CET},
    -             {"Europe/Moscow", MSK},
    -             {"Europe/Nicosia", EET},
    -@@ -697,14 +699,14 @@
    -                                             "\u6c99\u9a6c\u62c9\u590f\u4ee4\u65f6", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", EET},
    -+            {"Europe/Simferopol", FET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", EET},
    -+            {"Europe/Uzhgorod", FET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -713,7 +715,7 @@
    -                                                "\u4f0f\u5c14\u52a0\u683c\u52d2\u590f\u4ee4\u65f6", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", EET},
    -+            {"Europe/Zaporozhye", FET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
    -@@ -103,6 +103,8 @@
    -                                      "\u6771\u65b9\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "EDT"};
    -         String EST_NSW[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593 (\u65b0\u5357\u5a01\u723e\u65af)", "EST",
    -                                          "\u6771\u65b9\u590f\u4ee4\u6642\u9593 (\u65b0\u5357\u5a01\u723e\u65af)", "EST"};
    -+        String FET[] = new String[] {"Further-eastern European Time", "FET",
    -+                                     "Further-eastern European Summer Time", "FEST"};
    -         String GHMT[] = new String[] {"\u8fe6\u7d0d\u5e73\u5747\u6642\u9593", "GMT",
    -                                       "\u8fe6\u7d0d\u590f\u4ee4\u6642\u9593", "GHST"};
    -         String GAMBIER[] =  new String[] {"\u7518\u6bd4\u723e\u6642\u9593", "GAMT",
    -@@ -511,6 +513,7 @@
    -                                             "\u5854\u5409\u514b\u590f\u4ee4\u6642\u9593", "TJST"}},
    -             {"Asia/Gaza", EET},
    -             {"Asia/Harbin", CTT},
    -+            {"Asia/Hebron", EET},
    -             {"Asia/Ho_Chi_Minh", ICT},
    -             {"Asia/Hong_Kong", HKT},
    -             {"Asia/Hovd", new String[] {"\u4faf\u5fb7 (Hovd) \u6642\u9593", "HOVT",
    -@@ -675,9 +678,8 @@
    -             {"Europe/Isle_of_Man", GMTBST},
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    --            {"Europe/Kaliningrad", new String[] {"Kaliningrad Time", "KALT",
    --                                                 "Kaliningrad Summer Time", "KALST"}},
    --            {"Europe/Kiev", EET},
    -+            {"Europe/Kaliningrad", FET},
    -+            {"Europe/Kiev", FET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -685,7 +687,7 @@
    -             {"Europe/Madrid", CET},
    -             {"Europe/Malta", CET},
    -             {"Europe/Mariehamn", EET},
    --            {"Europe/Minsk", EET},
    -+            {"Europe/Minsk", FET},
    -             {"Europe/Monaco", CET},
    -             {"Europe/Moscow", MSK},
    -             {"Europe/Nicosia", EET},
    -@@ -698,14 +700,14 @@
    -                                             "\u6c99\u99ac\u62c9\u590f\u4ee4\u6642\u9593", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", EET},
    -+            {"Europe/Simferopol", FET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", EET},
    -+            {"Europe/Uzhgorod", FET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -714,7 +716,7 @@
    -                                                "\u4f0f\u723e\u52a0\u683c\u52d2\u590f\u4ee4\u6642\u9593", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", EET},
    -+            {"Europe/Zaporozhye", FET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/7103405-correct_display_names.patch openjdk-6-6b34-1.13.6/patches/openjdk/7103405-correct_display_names.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/7103405-correct_display_names.patch	2014-10-08 18:39:25.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/7103405-correct_display_names.patch	1970-01-01 00:00:00.000000000 +0000
    @@ -1,130 +0,0 @@
    -# HG changeset patch
    -# User asaha
    -# Date 1319245792 25200
    -# Node ID 48463dbf345cda1cdb7ff53e2d24f3827ae85d20
    -# Parent  ca52af5acd261b790aa40a904af96d4f55d780d9
    -7103405: Correct display names for Pacific/Apia timezone
    -Reviewed-by: coffeys, peytoia
    -
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
    -@@ -188,7 +188,7 @@
    -         String SAMOA[] = new String[] {"Samoa Standard Time", "SST",
    -                                        "Samoa Daylight Time", "SDT"};
    -         String WST_SAMOA[] = new String[] {"West Samoa Time", "WST",
    --                                           "West Samoa Summer Time", "WSST"};
    -+                                           "West Samoa Daylight Time", "WSDT"};
    -         String ChST[] = new String[] {"Chamorro Standard Time", "ChST",
    -                                       "Chamorro Daylight Time", "ChDT"};
    -         String VICTORIA[] = new String[] {"Eastern Standard Time (Victoria)", "EST",
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java
    -@@ -188,7 +188,7 @@
    -         String SAMOA[] = new String[] {"Samoa Normalzeit", "SST",
    -                                        "Samoa Sommerzeit", "SDT"};
    -         String WST_SAMOA[] = new String[] {"West Samoa Zeit", "WST",
    --                                           "West Samoa Sommerzeit", "WSST"};
    -+                                           "West Samoa Sommerzeit", "WSDT"};
    -         String ChST[] = new String[] {"Chamorro Normalzeit", "ChST",
    -                       "Chamorro Sommerzeit", "ChDT"};
    -         String VICTORIA[] = new String[] {"\u00d6stliche Normalzeit (Victoria)", "EST",
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java
    -@@ -188,7 +188,7 @@
    -         String SAMOA[] = new String[] {"Hora est\u00e1ndar de Samoa", "SST",
    -                                        "Hora de verano de Samoa", "SDT"};
    -         String WST_SAMOA[] = new String[] {"Hora de Samoa Occidental", "WST",
    --                                           "Hora de verano de Samoa Occidental", "WSST"};
    -+                                           "Hora de verano de Samoa Occidental", "WSDT"};
    -         String ChST[] = new String[] {"Hora est\u00e1ndar de Chamorro", "ChST",
    -                                       "Hora de verano de Chamorro", "ChDT"};
    -         String VICTORIA[] = new String[] {"Hora est\u00e1ndar del Este (Victoria)", "EST",
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java
    -@@ -188,7 +188,7 @@
    -         String SAMOA[] = new String[] {"Heure standard de Samoa", "SST",
    -                                        "Heure avanc\u00e9e de Samoa", "SDT"};
    -         String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WST",
    --                                           "Heure d'\u00e9t\u00e9 des Samoas occidentales", "WSST"} ;
    -+                                           "Heure d'\u00e9t\u00e9 des Samoas occidentales", "WSDT"} ;
    -         String ChST[] = new String[] {"Heure normale des \u00eeles Mariannes", "ChST",
    -                       "Heure d'\u00e9t\u00e9 des \u00eeles Mariannes", "ChDT"};
    -         String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "EST",
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java
    -@@ -188,7 +188,7 @@
    -         String SAMOA[] = new String[] {"Ora standard di Samoa", "SST",
    -                                        "Ora legale di Samoa", "SDT"};
    -         String WST_SAMOA[] = new String[] {"Ora di Samoa", "WST",
    --                                           "Ora estiva di Samoa", "WSST"};
    -+                                           "Ora estiva di Samoa", "WSDT"};
    -         String ChST[] = new String[] {"Ora standard di Chamorro", "ChST",
    -                               "Ora legale di Chamorro", "ChDT"};
    -         String VICTORIA[] = new String[] {"Ora orientale standard (Victoria)", "EST",
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java
    -@@ -188,7 +188,7 @@
    -         String SAMOA[] = new String[] {"\u30b5\u30e2\u30a2\u6a19\u6e96\u6642", "SST",
    -                                        "\u30b5\u30e2\u30a2\u590f\u6642\u9593", "SDT"};
    -         String WST_SAMOA[] = new String[] {"\u897f\u30b5\u30e2\u30a2\u6642\u9593", "WST",
    --                                           "\u897f\u30b5\u30e2\u30a2\u590f\u6642\u9593", "WSST"};
    -+                                           "\u897f\u30b5\u30e2\u30a2\u590f\u6642\u9593", "WSDT"};
    -         String ChST[] = new String[] {"\u30b0\u30a2\u30e0\u6a19\u6e96\u6642", "ChST",
    -                                       "\u30b0\u30a2\u30e0\u590f\u6642\u9593", "ChDT"};
    -         String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST",
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java
    -@@ -188,7 +188,7 @@
    -         String SAMOA[] = new String[] {"\uc0ac\ubaa8\uc544 \ud45c\uc900\uc2dc", "SST",
    -                                        "\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SDT"};
    -         String WST_SAMOA[] = new String[] {"\uc11c\uc0ac\ubaa8\uc544 \uc2dc\uac04", "WST",
    --                                           "\uc11c\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WSST"};
    -+                                           "\uc11c\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WSDT"};
    -         String ChST[] = new String[] {"\ucc28\ubaa8\ub85c \ud45c\uc900\uc2dc", "ChST",
    -                                       "\ucc28\ubaa8\ub85c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ChDT"};
    -         String VICTORIA[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ube45\ud1a0\ub9ac\uc544)", "EST",
    -diff -r ca52af5acd26 -r 48463dbf345c src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java	Mon Oct 17 17:11:26 2011 +0800
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java	Fri Oct 21 18:09:52 2011 -0700
    -@@ -186,7 +186,7 @@
    -         String SAMOA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Samoa", "SST",
    -                                        "Hor\u00e1rio de luz natural de Samoa", "SDT"};
    -         String WST_SAMOA[] = new String[] {"Fuso hor\u00e1rio de Samoa Ocidental", "WST",
    --                                           "Fuso hor\u00e1rio de ver\u00e3o de Samoa Ocidental", "WSST"};
    -+                                           "Fuso hor\u00e1rio de ver\u00e3o de Samoa Ocidental", "WSDT"};
    -         String ChST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chamorro", "ChST",
    -                                       "Hor\u00e1rio de luz natural de Chamorro", "ChDT"};
    -         String VICTORIA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Victoria)", "EST",
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java
    -@@ -188,7 +188,7 @@
    -         String SAMOA[] = new String[] {"Samoa, normaltid", "SST",
    -                                        "Samoa, sommartid", "SDT"};
    -         String WST_SAMOA[] = new String[] {"V\u00e4stsamoansk tid", "WST",
    --                                           "V\u00e4stsamoansk sommartid", "WSST"};
    -+                                           "V\u00e4stsamoansk sommartid", "WSDT"};
    -         String ChST[] = new String[] {"Chamorro, normaltid", "ChST",
    -                                       "Chamorro, sommartid", "ChDT"};
    -         String VICTORIA[] = new String[] {"\u00d6stlig normaltid (Victoria)", "EST",
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
    -@@ -188,7 +188,7 @@
    -         String SAMOA[] = new String[] {"\u8428\u6469\u4e9a\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "SST",
    -                                        "\u8428\u6469\u4e9a\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SDT"};
    -         String WST_SAMOA[] = new String[] {"\u897f\u8428\u6469\u4e9a\u65f6\u95f4", "WST",
    --                                           "\u897f\u8428\u6469\u4e9a\u590f\u4ee4\u65f6", "WSST"};
    -+                                           "\u897f\u8428\u6469\u4e9a\u590f\u4ee4\u65f6", "WSDT"};
    -         String ChST[] = new String[] {"Chamorro \u6807\u51c6\u65f6\u95f4", "ChST",
    -                                       "Chamorro \u590f\u4ee4\u65f6", "ChDT"};
    -         String VICTORIA[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST",
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
    -@@ -188,7 +188,7 @@
    -         String SAMOA[] = new String[] {"\u85a9\u6469\u4e9e\u6a19\u6e96\u6642\u9593", "SST",
    -                                        "\u85a9\u6469\u4e9e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "SDT"};
    -         String WST_SAMOA[] = new String[] {"\u897f\u85a9\u6469\u4e9e\u6642\u9593", "WST",
    --                                           "\u897f\u85a9\u6469\u4e9e\u590f\u4ee4\u6642\u9593", "WSST"};
    -+                                           "\u897f\u85a9\u6469\u4e9e\u590f\u4ee4\u6642\u9593", "WSDT"};
    -         String ChST[] = new String[] {"\u67e5\u83ab\u6d1b\u6a19\u6e96\u6642\u9593", "ChST",
    -                                      "\u67e5\u83ab\u6d1b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ChDT"};
    -         String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST",
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/7104126-headers_tzdata.patch openjdk-6-6b34-1.13.6/patches/openjdk/7104126-headers_tzdata.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/7104126-headers_tzdata.patch	2014-10-08 18:39:25.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/7104126-headers_tzdata.patch	1970-01-01 00:00:00.000000000 +0000
    @@ -1,530 +0,0 @@
    -# HG changeset patch
    -# User asaha
    -# Date 1319476295 25200
    -# Node ID b5090771e19b2b20670bef60a84de95797cb01be
    -# Parent  48463dbf345cda1cdb7ff53e2d24f3827ae85d20
    -7104126: Insert openjdk copyright header back into TZdata files
    -Reviewed-by: okutsu
    -
    ---- openjdk/jdk/make/sun/javazic/tzdata/africa
    -+++ openjdk/jdk/make/sun/javazic/tzdata/africa
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # 
    - # @(#)africa	8.33
    - # This file is in the public domain, so clarified as of
    ---- openjdk/jdk/make/sun/javazic/tzdata/antarctica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/antarctica
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # 
    - # @(#)antarctica	8.9
    - # This file is in the public domain, so clarified as of
    ---- openjdk/jdk/make/sun/javazic/tzdata/asia
    -+++ openjdk/jdk/make/sun/javazic/tzdata/asia
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # @(#)asia	8.68
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    ---- openjdk/jdk/make/sun/javazic/tzdata/australasia
    -+++ openjdk/jdk/make/sun/javazic/tzdata/australasia
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # 
    - # @(#)australasia	8.27
    - # This file is in the public domain, so clarified as of
    ---- openjdk/jdk/make/sun/javazic/tzdata/backward
    -+++ openjdk/jdk/make/sun/javazic/tzdata/backward
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # 
    - # @(#)backward	8.9
    - # This file is in the public domain, so clarified as of
    ---- openjdk/jdk/make/sun/javazic/tzdata/etcetera
    -+++ openjdk/jdk/make/sun/javazic/tzdata/etcetera
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # 
    - # @(#)etcetera	8.3
    - # This file is in the public domain, so clarified as of
    ---- openjdk/jdk/make/sun/javazic/tzdata/europe
    -+++ openjdk/jdk/make/sun/javazic/tzdata/europe
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # 
    - # @(#)europe	8.38
    - # This file is in the public domain, so clarified as of
    ---- openjdk/jdk/make/sun/javazic/tzdata/factory
    -+++ openjdk/jdk/make/sun/javazic/tzdata/factory
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # 
    - # @(#)factory	8.2
    - # This file is in the public domain, so clarified as of
    ---- openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab
    -+++ openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # 
    - # @(#)iso3166.tab	8.11
    - # This file is in the public domain, so clarified as of
    ---- openjdk/jdk/make/sun/javazic/tzdata/leapseconds
    -+++ openjdk/jdk/make/sun/javazic/tzdata/leapseconds
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # 
    - # @(#)leapseconds	8.11
    - # This file is in the public domain, so clarified as of
    ---- openjdk/jdk/make/sun/javazic/tzdata/northamerica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/northamerica
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # 
    - # @(#)northamerica	8.49
    - # This file is in the public domain, so clarified as of
    ---- openjdk/jdk/make/sun/javazic/tzdata/pacificnew
    -+++ openjdk/jdk/make/sun/javazic/tzdata/pacificnew
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # 
    - # @(#)pacificnew	8.2
    - # This file is in the public domain, so clarified as of
    ---- openjdk/jdk/make/sun/javazic/tzdata/solar87
    -+++ openjdk/jdk/make/sun/javazic/tzdata/solar87
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # 
    - # @(#)solar87	8.2
    - # This file is in the public domain, so clarified as of
    ---- openjdk/jdk/make/sun/javazic/tzdata/solar88
    -+++ openjdk/jdk/make/sun/javazic/tzdata/solar88
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # 
    - # @(#)solar88	8.2
    - # This file is in the public domain, so clarified as of
    ---- openjdk/jdk/make/sun/javazic/tzdata/solar89
    -+++ openjdk/jdk/make/sun/javazic/tzdata/solar89
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # 
    - # @(#)solar89	8.2
    - # This file is in the public domain, so clarified as of
    ---- openjdk/jdk/make/sun/javazic/tzdata/southamerica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/southamerica
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # 
    - # @(#)southamerica	8.50
    - # This file is in the public domain, so clarified as of
    ---- openjdk/jdk/make/sun/javazic/tzdata/systemv
    -+++ openjdk/jdk/make/sun/javazic/tzdata/systemv
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # 
    - # @(#)systemv	8.2
    - # This file is in the public domain, so clarified as of
    ---- openjdk/jdk/make/sun/javazic/tzdata/zone.tab
    -+++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab
    -@@ -1,3 +1,26 @@
    -+#
    -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -+#  
    -+# This code is free software; you can redistribute it and/or modify it
    -+# under the terms of the GNU General Public License version 2 only, as
    -+# published by the Free Software Foundation.  Oracle designates this
    -+# particular file as subject to the "Classpath" exception as provided
    -+# by Oracle in the LICENSE file that accompanied this code.
    -+#  
    -+# This code is distributed in the hope that it will be useful, but WITHOUT
    -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    -+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    -+# version 2 for more details (a copy is included in the LICENSE file that
    -+# accompanied this code).
    -+#  
    -+# You should have received a copy of the GNU General Public License version
    -+# 2 along with this work; if not, write to the Free Software Foundation,
    -+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    -+#  
    -+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    -+# or visit www.oracle.com if you need additional information or have any
    -+# questions.
    -+#
    - # 
    - # @(#)zone.tab	8.49
    - # This file is in the public domain, so clarified as of
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/7106773-512_bits_rsa.patch openjdk-6-6b34-1.13.6/patches/openjdk/7106773-512_bits_rsa.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/7106773-512_bits_rsa.patch	2014-10-09 02:07:22.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/7106773-512_bits_rsa.patch	2015-01-20 09:12:43.000000000 +0000
    @@ -136,7 +136,7 @@
     +++ openjdk/jdk/src/windows/classes/sun/security/mscapi/RSACipher.java	2014-10-08 23:57:43.965856392 +0100
     @@ -1,5 +1,5 @@
      /*
    -- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
    +- * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
     + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
       * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       *
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/7158483-tzdata2012c.patch openjdk-6-6b34-1.13.6/patches/openjdk/7158483-tzdata2012c.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/7158483-tzdata2012c.patch	2014-10-08 18:39:25.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/7158483-tzdata2012c.patch	1970-01-01 00:00:00.000000000 +0000
    @@ -1,1482 +0,0 @@
    -# HG changeset patch
    -# User peytoia
    -# Date 1333444888 -32400
    -# Node ID 5683b3f7f8cc58746a2983ee6294b62ccdfa159c
    -# Parent  e15562835a5e91f0bca6a088e58970c3c1c3dc3f
    -7158483: (tz) Support tzdata2012c
    -Reviewed-by: okutsu
    -
    ---- openjdk/jdk/make/sun/javazic/tzdata/VERSION
    -+++ openjdk/jdk/make/sun/javazic/tzdata/VERSION
    -@@ -21,4 +21,4 @@
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    - #
    --tzdata2011l
    -+tzdata2012c
    ---- openjdk/jdk/make/sun/javazic/tzdata/africa
    -+++ openjdk/jdk/make/sun/javazic/tzdata/africa
    -@@ -22,7 +22,7 @@
    - # questions.
    - #
    - # 
    --# @(#)africa	8.33
    -+# @(#)africa	8.35
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -791,6 +791,37 @@
    - # wall clock time (i.e. 11pm UTC), but that's what I would assume. It has
    - # also been like that in the past.
    - 
    -+# From Alexander Krivenyshev (2012-03-09):
    -+# According to Infomédiaire web site from Morocco (infomediaire.ma),
    -+# on March 9, 2012, (in French) Heure légale:
    -+# Le Maroc adopte officiellement l'heure d'été
    -+# 
    -+# http://www.infomediaire.ma/news/maroc/heure-l%C3%A9gale-le-maroc-adopte-officiellement-lheure-d%C3%A9t%C3%A9
    -+# 
    -+# Governing Council adopted draft decree, that Morocco DST starts on
    -+# the last Sunday of March (March 25, 2012) and ends on
    -+# last Sunday of September (September 30, 2012)
    -+# except the month of Ramadan.
    -+# or (brief)
    -+# 
    -+# http://www.worldtimezone.com/dst_news/dst_news_morocco06.html
    -+# 
    -+
    -+# From Arthur David Olson (2012-03-10):
    -+# The infomediaire.ma source indicates that the system is to be in
    -+# effect every year. It gives 03H00 as the "fall back" time of day;
    -+# it lacks a "spring forward" time of day; assume 2:00 XXX.
    -+# Wait on specifying the Ramadan exception for details about
    -+# start date, start time of day, end date, and end time of day XXX.
    -+
    -+# From Christophe Tropamer (2012-03-16):
    -+# Seen Morocco change again:
    -+# 
    -+# http://www.le2uminutes.com/actualite.php
    -+# 
    -+# "...à partir du dernier dimance d'avril et non fins mars,
    -+# comme annoncé précédemment."
    -+
    - # RULE	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - 
    - Rule	Morocco	1939	only	-	Sep	12	 0:00	1:00	S
    -@@ -816,6 +847,9 @@
    - Rule	Morocco	2010	only	-	Aug	 8	 0:00	0	-
    - Rule	Morocco	2011	only	-	Apr	 3	 0:00	1:00	S
    - Rule	Morocco	2011	only	-	Jul	 31	 0	0	-
    -+Rule	Morocco	2012	max	-	Apr	 lastSun 2:00	1:00	S
    -+Rule	Morocco	2012	max	-	Sep	 lastSun 3:00	0	-
    -+
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
    - 			 0:00	Morocco	WE%sT	1984 Mar 16
    ---- openjdk/jdk/make/sun/javazic/tzdata/antarctica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/antarctica
    -@@ -22,7 +22,7 @@
    - # questions.
    - #
    - # 
    --# @(#)antarctica	8.9
    -+# @(#)antarctica	8.10
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -65,8 +65,19 @@
    - Rule	ChileAQ	1998	only	-	Mar	Sun>=9	3:00u	0	-
    - Rule	ChileAQ	1998	only	-	Sep	27	4:00u	1:00	S
    - Rule	ChileAQ	1999	only	-	Apr	 4	3:00u	0	-
    --Rule	ChileAQ	1999	max	-	Oct	Sun>=9	4:00u	1:00	S
    --Rule	ChileAQ	2000	max	-	Mar	Sun>=9	3:00u	0	-
    -+Rule	ChileAQ	1999	2010	-	Oct	Sun>=9	4:00u	1:00	S
    -+Rule	ChileAQ	2000	2007	-	Mar	Sun>=9	3:00u	0	-
    -+# N.B.: the end of March 29 in Chile is March 30 in Universal time,
    -+# which is used below in specifying the transition.
    -+Rule	ChileAQ	2008	only	-	Mar	30	3:00u	0	-
    -+Rule	ChileAQ	2009	only	-	Mar	Sun>=9	3:00u	0	-
    -+Rule	ChileAQ	2010	only	-	Apr	Sun>=1	3:00u	0	-
    -+Rule	ChileAQ	2011	only	-	May	Sun>=2	3:00u	0	-
    -+Rule	ChileAQ	2011	only	-	Aug	Sun>=16	4:00u	1:00	S
    -+Rule	ChileAQ	2012	only	-	Apr	Sun>=23	3:00u	0	-
    -+Rule	ChileAQ	2012	only	-	Sep	Sun>=2	4:00u	1:00	S
    -+Rule	ChileAQ	2013	max	-	Mar	Sun>=9	3:00u	0	-
    -+Rule	ChileAQ	2013	max	-	Oct	Sun>=9	4:00u	1:00	S
    - 
    - # These rules are stolen from the `australasia' file.
    - Rule	AusAQ	1917	only	-	Jan	 1	0:01	1:00	-
    -@@ -165,12 +176,16 @@
    - 						# Western (Aus) Standard Time
    - 			11:00	-	CAST	2010 Mar 5 2:00
    - 						# Casey Time
    -+			8:00	-	WST	2011 Oct 28 2:00
    -+			11:00	-	CAST	2012 Feb 21 17:00u
    - 			8:00	-	WST
    - Zone Antarctica/Davis	0	-	zzz	1957 Jan 13
    - 			7:00	-	DAVT	1964 Nov # Davis Time
    - 			0	-	zzz	1969 Feb
    - 			7:00	-	DAVT	2009 Oct 18 2:00
    - 			5:00	-	DAVT	2010 Mar 10 20:00u
    -+			7:00	-	DAVT	2011 Oct 28 2:00
    -+			5:00	-	DAVT	2012 Feb 21 20:00u
    - 			7:00	-	DAVT
    - Zone Antarctica/Mawson	0	-	zzz	1954 Feb 13
    - 			6:00	-	MAWT	2009 Oct 18 2:00
    ---- openjdk/jdk/make/sun/javazic/tzdata/asia
    -+++ openjdk/jdk/make/sun/javazic/tzdata/asia
    -@@ -21,7 +21,8 @@
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    - #
    --# @(#)asia	8.68
    -+# 
    -+# @(#)asia	8.73
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -100,10 +101,6 @@
    - Rule RussiaAsia	1993	1995	-	Sep	lastSun	 2:00s	0	-
    - Rule RussiaAsia	1996	max	-	Oct	lastSun	 2:00s	0	-
    - 
    --# From Arthur David Olson (2011-06-15):
    --# While Russia abandoned DST in 2011, Armenia may choose to
    --# follow Russia's "old" rules.
    --
    - # Afghanistan
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Asia/Kabul	4:36:48 -	LMT	1890
    -@@ -120,6 +117,21 @@
    - # in 1996, though it did use DST in 1995.  IATA SSIM (1991/1998) reports that
    - # Armenia switched from 3:00 to 4:00 in 1998 and observed DST after 1991,
    - # but started switching at 3:00s in 1998.
    -+
    -+# From Arthur David Olson (2011-06-15):
    -+# While Russia abandoned DST in 2011, Armenia may choose to
    -+# follow Russia's "old" rules.
    -+
    -+# From Alexander Krivenyshev (2012-02-10):
    -+# According to News Armenia, on Feb 9, 2012,
    -+# http://newsarmenia.ru/society/20120209/42609695.html
    -+# 
    -+# The Armenia National Assembly adopted final reading of Amendments to the
    -+# Law "On procedure of calculation time on the territory of the Republic of
    -+# Armenia" according to which Armenia [is] abolishing Daylight Saving Time.
    -+# or
    -+# (brief)
    -+# http://www.worldtimezone.com/dst_news/dst_news_armenia03.html
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Asia/Yerevan	2:58:00 -	LMT	1924 May  2
    - 			3:00	-	YERT	1957 Mar    # Yerevan Time
    -@@ -127,7 +139,8 @@
    - 			3:00	1:00	YERST	1991 Sep 23 # independence
    - 			3:00 RussiaAsia	AM%sT	1995 Sep 24 2:00s
    - 			4:00	-	AMT	1997
    --			4:00 RussiaAsia	AM%sT
    -+			4:00 RussiaAsia	AM%sT	2012 Mar 25 2:00s
    -+			4:00	-	AMT
    - 
    - # Azerbaijan
    - # From Rustam Aliyev of the Azerbaijan Internet Forum (2005-10-23):
    -@@ -2258,6 +2271,29 @@
    - # http://www.maannews.net/eng/ViewDetails.aspx?ID=424808
    - # 
    - 
    -+# From Steffen Thorsen (2012-03-26):
    -+# Palestinian news sources tell that both Gaza and West Bank will start DST
    -+# on Friday (Thursday midnight, 2012-03-29 24:00).
    -+# Some of many sources in Arabic:
    -+# 
    -+# http://www.samanews.com/index.php?act=Show&id=122638
    -+# 
    -+#
    -+# 
    -+# http://safa.ps/details/news/74352/%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-%D8%A8%D8%A7%D9%84%D8%B6%D9%81%D8%A9-%D9%88%D8%BA%D8%B2%D8%A9-%D9%84%D9%8A%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D8%B9%D8%A9.html
    -+# 
    -+#
    -+# Our brief summary:
    -+# 
    -+# http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html
    -+# 
    -+
    -+# From Arthur David Olson (2012-03-27):
    -+# The timeanddate article for 2012 says that "the end date has not yet been
    -+# announced" and that "Last year, both...paused daylight saving time during...
    -+# Ramadan. It is not yet known [for] 2012."
    -+# For now, assume both switch back on the last Friday in September. XXX
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule EgyptAsia	1957	only	-	May	10	0:00	1:00	S
    - Rule EgyptAsia	1957	1958	-	Oct	 1	0:00	0	-
    -@@ -2290,6 +2326,8 @@
    - 			2:00	Jordan	EE%sT	1999
    - 			2:00 Palestine	EE%sT	2011 Apr  2 12:01
    - 			2:00	1:00	EEST	2011 Aug  1
    -+			2:00	-	EET	2012 Mar 30
    -+			2:00	1:00	EEST	2012 Sep 28
    - 			2:00	-	EET
    - 
    - Zone	Asia/Hebron	2:20:23	-	LMT	1900 Oct
    -@@ -2303,6 +2341,8 @@
    - 			2:00	1:00	EEST	2011 Aug  1
    - 			2:00	-	EET	2011 Aug 30
    - 			2:00	1:00	EEST	2011 Sep 30 3:00
    -+			2:00	-	EET	2012 Mar 30
    -+			2:00	1:00	EEST	2012 Sep 28 3:00
    - 			2:00	-	EET
    - 
    - # Paracel Is
    -@@ -2594,10 +2634,28 @@
    - # http://sns.sy/sns/?path=news/read/11421 (Arabic)
    - # 
    - 
    -+# From Steffen Thorsen (2012-03-26):
    -+# Today, Syria's government announced that they will start DST early on Friday
    -+# (00:00). This is a bit earlier than the past two years.
    -+#
    -+# From Syrian Arab News Agency, in Arabic:
    -+# 
    -+# http://www.sana.sy/ara/2/2012/03/26/408215.htm
    -+# 
    -+#
    -+# Our brief summary:
    -+# 
    -+# http://www.timeanddate.com/news/time/syria-dst-2012.html
    -+# 
    -+
    -+# From Arthur David Olson (2012-03-27):
    -+# Assume last Friday in March going forward XXX.
    -+
    - Rule	Syria	2008	only	-	Apr	Fri>=1	0:00	1:00	S
    - Rule	Syria	2008	only	-	Nov	1	0:00	0	-
    - Rule	Syria	2009	only	-	Mar	lastFri	0:00	1:00	S
    --Rule	Syria	2010	max	-	Apr	Fri>=1	0:00	1:00	S
    -+Rule	Syria	2010	2011	-	Apr	Fri>=1	0:00	1:00	S
    -+Rule	Syria	2012	max	-	Mar	lastFri	0:00	1:00	S
    - Rule	Syria	2009	max	-	Oct	lastFri	0:00	0	-
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    ---- openjdk/jdk/make/sun/javazic/tzdata/australasia
    -+++ openjdk/jdk/make/sun/javazic/tzdata/australasia
    -@@ -22,7 +22,7 @@
    - # questions.
    - #
    - # 
    --# @(#)australasia	8.27
    -+# @(#)australasia	8.30
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -331,6 +331,20 @@
    - # advance at 2am to 3am on October 23, 2011 and one hour back at 3am to 
    - # 2am on February 26 next year.
    - 
    -+# From Ken Rylander (2011-10-24)
    -+# Another change to the Fiji DST end date. In the TZ database the end date for
    -+# Fiji DST 2012, is currently Feb 26. This has been changed to Jan 22.
    -+#
    -+# 
    -+# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=5017:amendments-to-daylight-savings&catid=71:press-releases&Itemid=155
    -+# 
    -+# states:
    -+#
    -+# The end of daylight saving scheduled initially for the 26th of February 2012
    -+# has been brought forward to the 22nd of January 2012.
    -+# The commencement of daylight saving will remain unchanged and start
    -+# on the  23rd of October, 2011.
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Fiji	1998	1999	-	Nov	Sun>=1	2:00	1:00	S
    - Rule	Fiji	1999	2000	-	Feb	lastSun	3:00	0	-
    -@@ -339,7 +353,7 @@
    - Rule	Fiji	2010	only	-	Oct	24	2:00	1:00	S
    - Rule	Fiji	2011	only	-	Mar	Sun>=1	3:00	0	-
    - Rule	Fiji	2011	only	-	Oct	23	2:00	1:00	S
    --Rule	Fiji	2012	only	-	Feb	26	3:00	0	-
    -+Rule	Fiji	2012	only	-	Jan	22	3:00	0	-
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Pacific/Fiji	11:53:40 -	LMT	1915 Oct 26	# Suva
    - 			12:00	Fiji	FJ%sT	# Fiji Time
    -@@ -625,6 +639,11 @@
    - # Dateline Change skip Friday 30th Dec 2011
    - # Thursday 29th December 2011	23:59:59 Hours
    - # Saturday 31st December 2011	00:00:00 Hours
    -+#
    -+# Clarification by Tim Parenti (2012-01-03):
    -+# Although Samoa has used Daylight Saving Time in the 2010-2011 and 2011-2012
    -+# seasons, there is not yet any indication that this trend will continue on
    -+# a regular basis. For now, we have explicitly listed the transitions below.
    - Zone Pacific/Apia	 12:33:04 -	LMT	1879 Jul  5
    - 			-11:26:56 -	LMT	1911
    - 			-11:30	-	SAMT	1950		# Samoa Time
    -@@ -642,9 +661,28 @@
    - 			11:00	-	SBT	# Solomon Is Time
    - 
    - # Tokelau Is
    -+#
    -+# From Gwillim Law (2011-12-29)
    -+# A correspondent informed me that Tokelau, like Samoa, will be skipping
    -+# December 31 this year, thereby changing its time zone from UTC-10 to
    -+# UTC+14. When I tried to verify this statement, I found a confirming
    -+# article in Time magazine online
    -+# 
    -+# (http://www.time.com/time/world/article/0,8599,2103243,00.html).
    -+# 
    -+#
    -+# From Jonathan Leffler (2011-12-29)
    -+# Information from the BBC to the same effect:
    -+# 
    -+# http://www.bbc.co.uk/news/world-asia-16351377
    -+# 
    -+#
    -+# Patch supplied by Tim Parenti (2011-12-29)
    -+
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Pacific/Fakaofo	-11:24:56 -	LMT	1901
    --			-10:00	-	TKT	# Tokelau Time
    -+			-10:00	-	TKT 2011 Dec 30	# Tokelau Time
    -+			14:00	-	TKT
    - 
    - # Tonga
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    ---- openjdk/jdk/make/sun/javazic/tzdata/backward
    -+++ openjdk/jdk/make/sun/javazic/tzdata/backward
    -@@ -22,7 +22,7 @@
    - # questions.
    - #
    - # 
    --# @(#)backward	8.9
    -+# @(#)backward	8.11
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/europe
    -+++ openjdk/jdk/make/sun/javazic/tzdata/europe
    -@@ -22,7 +22,7 @@
    - # questions.
    - #
    - # 
    --# @(#)europe	8.38
    -+# @(#)europe	8.41
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -234,9 +234,15 @@
    - # the history of summer time legislation in the United Kingdom.
    - # Since 1998 Joseph S. Myers has been updating
    - # and extending this list, which can be found in
    --# 
    -+# http://student.cusu.cam.ac.uk/~jsm28/british-time/
    -+# 
    - # History of legal time in Britain
    - # 
    -+# Rob Crowther (2012-01-04) reports that that URL no longer
    -+# exists, and the article can now be found at:
    -+# 
    -+# http://www.polyomino.org.uk/british-time/
    -+# 
    - 
    - # From Joseph S. Myers (1998-01-06):
    - #
    -@@ -1174,10 +1180,10 @@
    - # write that they were used in Monaco and in many French locations.
    - # Le Corre writes that the upper limit of the free zone was Arneguy, Orthez,
    - # Mont-de-Marsan, Bazas, Langon, Lamotte-Montravel, Marouil, La
    --# Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Decartes,
    -+# Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Descartes,
    - # Loches, Montrichard, Vierzon, Bourges, Moulins, Digoin,
    - # Paray-le-Monial, Montceau-les-Mines, Chalons-sur-Saone, Arbois,
    --# Dole, Morez, St-Claude, and Collognes (Haute-Savioe).
    -+# Dole, Morez, St-Claude, and Collonges (Haute-Savoie).
    - Rule	France	1941	only	-	May	 5	 0:00	2:00	M # Midsummer
    - # Shanks & Pottenger say this transition occurred at Oct 6 1:00,
    - # but go with Denis Excoffier (1997-12-12),
    -@@ -1678,6 +1684,41 @@
    - # But [two people] separately reported via
    - # Jesper Norgaard that as of 2001-01-24 Tiraspol was like Chisinau.
    - # The Tiraspol entry has therefore been removed for now.
    -+#
    -+# From Alexander Krivenyshev (2011-10-17):
    -+# Pridnestrovian Moldavian Republic (PMR, also known as
    -+# "Pridnestrovie") has abolished seasonal clock change (no transition
    -+# to the Winter Time).
    -+#
    -+# News (in Russian):
    -+# 
    -+# http://www.kyivpost.ua/russia/news/pridnestrove-otkazalos-ot-perehoda-na-zimnee-vremya-30954.html
    -+# 
    -+#
    -+# 
    -+# http://www.allmoldova.com/moldova-news/1249064116.html
    -+# 
    -+#
    -+# The substance of this change (reinstatement of the Tiraspol entry)
    -+# is from a patch from Petr Machata (2011-10-17)
    -+#
    -+# From Tim Parenti (2011-10-19)
    -+# In addition, being situated at +4651+2938 would give Tiraspol
    -+# a pre-1880 LMT offset of 1:58:32.
    -+#
    -+# (which agrees with the earlier entry that had been removed)
    -+#
    -+# From Alexander Krivenyshev (2011-10-26)
    -+# NO need to divide Moldova into two timezones at this point.
    -+# As of today, Transnistria (Pridnestrovie)- Tiraspol reversed its own
    -+# decision to abolish DST this winter. 
    -+# Following Moldova and neighboring Ukraine- Transnistria (Pridnestrovie)-
    -+# Tiraspol will go back to winter time on October 30, 2011.
    -+# News from Moldova (in russian):
    -+# 
    -+# http://ru.publika.md/link_317061.html
    -+# 
    -+
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Europe/Chisinau	1:55:20 -	LMT	1880
    -@@ -2674,6 +2715,28 @@
    - # 
    - # http://www.pravda.com.ua/rus/news/2011/09/20/6600616/
    - # 
    -+#
    -+# From Philip Pizzey (2011-10-18):
    -+# Today my Ukrainian colleagues have informed me that the
    -+# Ukrainian parliament have decided that they will go to winter
    -+# time this year after all.
    -+#
    -+# From Udo Schwedt (2011-10-18):
    -+# As far as I understand, the recent change to the Ukranian time zone 
    -+# (Europe/Kiev) to introduce permanent daylight saving time (similar
    -+# to Russia) was reverted today:
    -+#
    -+# 
    -+# http://portal.rada.gov.ua/rada/control/en/publish/article/info_left?art_id=287324&cat_id=105995
    -+# 
    -+#
    -+# Also reported by Alexander Bokovoy (2011-10-18) who also noted:
    -+# The law documents themselves are at
    -+#
    -+# 
    -+# http://w1.c1.rada.gov.ua/pls/zweb_n/webproc4_1?id=&pf3511=41484
    -+# 
    -+
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - # Most of Ukraine since 1970 has been like Kiev.
    -@@ -2688,8 +2751,7 @@
    - 			3:00	-	MSK	1990 Jul  1 2:00
    - 			2:00	-	EET	1992
    - 			2:00	E-Eur	EE%sT	1995
    --			2:00	EU	EE%sT	2011 Mar lastSun 1:00u
    --			3:00	-	FET # Further-eastern European Time
    -+			2:00	EU	EE%sT
    - # Ruthenia used CET 1990/1991.
    - # "Uzhhorod" is the transliteration of the Ukrainian name, but
    - # "Uzhgorod" is more common in English.
    -@@ -2703,8 +2765,7 @@
    - 			1:00	-	CET	1991 Mar 31 3:00
    - 			2:00	-	EET	1992
    - 			2:00	E-Eur	EE%sT	1995
    --			2:00	EU	EE%sT	2011 Mar lastSun 1:00u
    --			3:00	-	FET # Further-eastern European Time
    -+			2:00	EU	EE%sT
    - # Zaporozh'ye and eastern Lugansk oblasts observed DST 1990/1991.
    - # "Zaporizhia" is the transliteration of the Ukrainian name, but
    - # "Zaporozh'ye" is more common in English.  Use the common English
    -@@ -2717,8 +2778,7 @@
    - 			1:00	C-Eur	CE%sT	1943 Oct 25
    - 			3:00	Russia	MSK/MSD	1991 Mar 31 2:00
    - 			2:00	E-Eur	EE%sT	1995
    --			2:00	EU	EE%sT	2011 Mar lastSun 1:00u
    --			3:00	-	FET # Further-eastern European Time
    -+			2:00	EU	EE%sT
    - # Central Crimea used Moscow time 1994/1997.
    - Zone Europe/Simferopol	2:16:24 -	LMT	1880
    - 			2:16	-	SMT	1924 May  2 # Simferopol Mean T
    -@@ -2743,8 +2803,7 @@
    - # Assume it happened in March by not changing the clocks.
    - 			3:00	Russia	MSK/MSD	1997
    - 			3:00	-	MSK	1997 Mar lastSun 1:00u
    --			2:00	EU	EE%sT	2011 Mar lastSun 1:00u
    --			3:00	-	FET # Further-eastern European Time
    -+			2:00	EU	EE%sT
    - 
    - ###############################################################################
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/leapseconds
    -+++ openjdk/jdk/make/sun/javazic/tzdata/leapseconds
    -@@ -22,7 +22,7 @@
    - # questions.
    - #
    - # 
    --# @(#)leapseconds	8.11
    -+# @(#)leapseconds	8.13
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -71,40 +71,54 @@
    - Leap	1998	Dec	31	23:59:60	+	S
    - Leap	2005	Dec	31	23:59:60	+	S
    - Leap	2008	Dec	31	23:59:60	+	S
    -+Leap	2012	Jun	30	23:59:60	+	S
    - 
    - # INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE (IERS)
    - #
    - # SERVICE INTERNATIONAL DE LA ROTATION TERRESTRE ET DES SYSTEMES DE REFERENCE
    - #
    -+#
    - # SERVICE DE LA ROTATION TERRESTRE
    - # OBSERVATOIRE DE PARIS
    - # 61, Av. de l'Observatoire 75014 PARIS (France)
    --# Tel.      : 33 (0) 1 40 51 22 29
    -+# Tel.      : 33 (0) 1 40 51 22 26
    - # FAX       : 33 (0) 1 40 51 22 91
    --# Internet  : services.iers@obspm.fr
    -+# e-mail    : (E-Mail Removed)
    -+# http://hpiers.obspm.fr/eop-pc
    - #
    --# Paris, 2 February 2011
    -+# Paris, 5 January 2012
    - #
    --# Bulletin C 41
    -+#
    -+# Bulletin C 43
    - #
    - # To authorities responsible
    - # for the measurement and
    - # distribution of time
    - #
    --# INFORMATION ON UTC - TAI
    - #
    --# NO positive leap second will be introduced at the end of June 2011.
    --# The difference between Coordinated Universal Time UTC and the
    --# International Atomic Time TAI is :		
    -+# UTC TIME STEP
    -+# on the 1st of July 2012
    - #
    --# from 2009 January 1, 0h UTC, until further notice : UTC-TAI = -34 s
    -+#
    -+# A positive leap second will be introduced at the end of June 2012.
    -+# The sequence of dates of the UTC second markers will be:		
    -+# 		
    -+#                          2012 June 30,     23h 59m 59s
    -+#                          2012 June 30,     23h 59m 60s
    -+#                          2012 July  1,      0h  0m  0s
    -+#
    -+# The difference between UTC and the International Atomic Time TAI is:
    -+#
    -+# from 2009 January 1, 0h UTC, to 2012 July 1  0h UTC  : UTC-TAI = - 34s
    -+# from 2012 July 1,    0h UTC, until further notice    : UTC-TAI = - 35s
    - #
    - # Leap seconds can be introduced in UTC at the end of the months of December
    --# or June,  depending on the evolution of UT1-TAI. Bulletin C is mailed every
    --# six months, either to announce a time step in UTC, or to confirm that there
    -+# or June, depending on the evolution of UT1-TAI. Bulletin C is mailed every
    -+# six months, either to announce a time step in UTC or to confirm that there
    - # will be no time step at the next possible date.
    - #
    -+#
    - # Daniel GAMBIS
    --# Head			
    --# Earth Orientation Center of the IERS
    -+# Head		
    -+# Earth Orientation Center of IERS
    - # Observatoire de Paris, France
    ---- openjdk/jdk/make/sun/javazic/tzdata/northamerica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/northamerica
    -@@ -22,7 +22,7 @@
    - # questions.
    - #
    - # 
    --# @(#)northamerica	8.49
    -+# @(#)northamerica	8.54
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -1143,9 +1143,26 @@
    - # For now, assume all of DST-observing Canada will fall into line with the
    - # new US DST rules,
    - 
    -+# From Chris Walton (2011-12-01)
    -+# In the first of Tammy Hardwick's articles
    -+# 
    -+# http://www.ilovecreston.com/?p=articles&t=spec&ar=260
    -+# 
    -+# she quotes the Friday November 1/1918 edition of the Creston Review.
    -+# The quote includes these two statements:
    -+# 'Sunday the CPR went back to the old system of time...'
    -+# '... The daylight saving scheme was dropped all over Canada at the same time,'
    -+# These statements refer to a transition from daylight time to standard time
    -+# that occurred nationally on Sunday October 27/1918.  This transition was
    -+# also documented in the Saturday October 26/1918 edition of the Toronto Star.
    -+
    -+# In light of that evidence, we alter the date from the earlier believed
    -+# Oct 31, to Oct 27, 1918 (and Sunday is a more likely transition day
    -+# than Thursday) in all Canadian rulesets.
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Canada	1918	only	-	Apr	14	2:00	1:00	D
    --Rule	Canada	1918	only	-	Oct	31	2:00	0	S
    -+Rule	Canada	1918	only	-	Oct	27	2:00	0	S
    - Rule	Canada	1942	only	-	Feb	 9	2:00	1:00	W # War
    - Rule	Canada	1945	only	-	Aug	14	23:00u	1:00	P # Peace
    - Rule	Canada	1945	only	-	Sep	30	2:00	0	S
    -@@ -1668,7 +1685,7 @@
    - Rule	Winn	1916	only	-	Apr	23	0:00	1:00	D
    - Rule	Winn	1916	only	-	Sep	17	0:00	0	S
    - Rule	Winn	1918	only	-	Apr	14	2:00	1:00	D
    --Rule	Winn	1918	only	-	Oct	31	2:00	0	S
    -+Rule	Winn	1918	only	-	Oct	27	2:00	0	S
    - Rule	Winn	1937	only	-	May	16	2:00	1:00	D
    - Rule	Winn	1937	only	-	Sep	26	2:00	0	S
    - Rule	Winn	1942	only	-	Feb	 9	2:00	1:00	W # War
    -@@ -1751,7 +1768,7 @@
    - 
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Regina	1918	only	-	Apr	14	2:00	1:00	D
    --Rule	Regina	1918	only	-	Oct	31	2:00	0	S
    -+Rule	Regina	1918	only	-	Oct	27	2:00	0	S
    - Rule	Regina	1930	1934	-	May	Sun>=1	0:00	1:00	D
    - Rule	Regina	1930	1934	-	Oct	Sun>=1	0:00	0	S
    - Rule	Regina	1937	1941	-	Apr	Sun>=8	0:00	1:00	D
    -@@ -1788,7 +1805,7 @@
    - 
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Edm	1918	1919	-	Apr	Sun>=8	2:00	1:00	D
    --Rule	Edm	1918	only	-	Oct	31	2:00	0	S
    -+Rule	Edm	1918	only	-	Oct	27	2:00	0	S
    - Rule	Edm	1919	only	-	May	27	2:00	0	S
    - Rule	Edm	1920	1923	-	Apr	lastSun	2:00	1:00	D
    - Rule	Edm	1920	only	-	Oct	lastSun	2:00	0	S
    -@@ -1818,9 +1835,68 @@
    - # Dawson Creek uses MST.  Much of east BC is like Edmonton.
    - # Matthews and Vincent (1998) write that Creston is like Dawson Creek.
    - 
    -+# It seems though that (re: Creston) is not entirely correct:
    -+
    -+# From Chris Walton (2011-12-01):
    -+# There are two areas within the Canadian province of British Columbia
    -+# that do not currently observe daylight saving:
    -+# a) The Creston Valley (includes the town of Creston and surrounding area)
    -+# b) The eastern half of the Peace River Regional District
    -+# (includes the cities of Dawson Creek and Fort St. John)
    -+
    -+# Earlier this year I stumbled across a detailed article about the time
    -+# keeping history of Creston; it was written by Tammy Hardwick who is the
    -+# manager of the Creston & District Museum. The article was written in May 2009.
    -+# 
    -+# http://www.ilovecreston.com/?p=articles&t=spec&ar=260
    -+# 
    -+# According to the article, Creston has not changed its clocks since June 1918.
    -+# i.e. Creston has been stuck on UTC-7 for 93 years.
    -+# Dawson Creek, on the other hand, changed its clocks as recently as April 1972.
    -+
    -+# Unfortunately the exact date for the time change in June 1918 remains
    -+# unknown and will be difficult to ascertain.  I e-mailed Tammy a few months
    -+# ago to ask if Sunday June 2 was a reasonable guess.  She said it was just
    -+# as plausible as any other date (in June).  She also said that after writing the
    -+# article she had discovered another time change in 1916; this is the subject
    -+# of another article which she wrote in October 2010.
    -+# 
    -+# http://www.creston.museum.bc.ca/index.php?module=comments&uop=view_comment&cm+id=56
    -+# 
    -+
    -+# Here is a summary of the three clock change events in Creston's history:
    -+# 1. 1884 or 1885: adoption of Mountain Standard Time (GMT-7)
    -+# Exact date unknown
    -+# 2. Oct 1916: switch to Pacific Standard Time (GMT-8) 
    -+# Exact date in October unknown;  Sunday October 1 is a reasonable guess.
    -+# 3. June 1918: switch to Pacific Daylight Time (GMT-7)
    -+# Exact date in June unknown; Sunday June 2 is a reasonable guess.
    -+# note#1:
    -+# On Oct 27/1918 when daylight saving ended in the rest of Canada,
    -+# Creston did not change its clocks.
    -+# note#2:
    -+# During WWII when the Federal Government legislated a mandatory clock change,
    -+# Creston did not oblige.
    -+# note#3:
    -+# There is no guarantee that Creston will remain on Mountain Standard Time
    -+# (UTC-7) forever.
    -+# The subject was debated at least once this year by the town Council.
    -+# 
    -+# http://www.bclocalnews.com/kootenay_rockies/crestonvalleyadvance/news/116760809.html
    -+# 
    -+
    -+# During a period WWII, summer time (Daylight saying) was mandatory in Canada.
    -+# In Creston, that was handled by shifting the area to PST (-8:00) then applying
    -+# summer time to cause the offset to be -7:00, the same as it had been before
    -+# the change.  It can be argued that the timezone abbreviation during this
    -+# period should be PDT rather than MST, but that doesn't seem important enough
    -+# (to anyone) to further complicate the rules.
    -+
    -+# The transition dates (and times) are guesses.
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Vanc	1918	only	-	Apr	14	2:00	1:00	D
    --Rule	Vanc	1918	only	-	Oct	31	2:00	0	S
    -+Rule	Vanc	1918	only	-	Oct	27	2:00	0	S
    - Rule	Vanc	1942	only	-	Feb	 9	2:00	1:00	W # War
    - Rule	Vanc	1945	only	-	Aug	14	23:00u	1:00	P # Peace
    - Rule	Vanc	1945	only	-	Sep	30	2:00	0	S
    -@@ -1836,7 +1912,10 @@
    - 			-8:00	Canada	P%sT	1947
    - 			-8:00	Vanc	P%sT	1972 Aug 30 2:00
    - 			-7:00	-	MST
    --
    -+Zone America/Creston	-7:46:04 -	LMT	1884
    -+			-7:00	-	MST	1916 Oct 1
    -+			-8:00	-	PST	1918 Jun 2
    -+			-7:00	-	MST
    - 
    - # Northwest Territories, Nunavut, Yukon
    - 
    -@@ -2713,6 +2792,34 @@
    - # 
    - # http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html
    - # 
    -+#
    -+# From Steffen Thorsen (2011-10-30)
    -+# Cuba will end DST two weeks later this year. Instead of going back 
    -+# tonight, it has been delayed to 2011-11-13 at 01:00.
    -+#
    -+# One source (Spanish)
    -+# 
    -+# http://www.radioangulo.cu/noticias/cuba/17105-cuba-restablecera-el-horario-del-meridiano-de-greenwich.html
    -+# 
    -+#
    -+# Our page:
    -+# 
    -+# http://www.timeanddate.com/news/time/cuba-time-changes-2011.html
    -+# 
    -+# 
    -+# From Steffen Thorsen (2012-03-01)
    -+# According to Radio Reloj, Cuba will start DST on Midnight between March 
    -+# 31 and April 1.
    -+# 
    -+# Radio Reloj has the following info (Spanish):
    -+# 
    -+# http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril
    -+# 
    -+#
    -+# Our info on it:
    -+# 
    -+# http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html
    -+# 
    - 
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Cuba	1928	only	-	Jun	10	0:00	1:00	D
    -@@ -2744,12 +2851,15 @@
    - Rule	Cuba	1998	1999	-	Mar	lastSun	0:00s	1:00	D
    - Rule	Cuba	1998	2003	-	Oct	lastSun	0:00s	0	S
    - Rule	Cuba	2000	2004	-	Apr	Sun>=1	0:00s	1:00	D
    --Rule	Cuba	2006	max	-	Oct	lastSun	0:00s	0	S
    -+Rule	Cuba	2006	2010	-	Oct	lastSun	0:00s	0	S
    - Rule	Cuba	2007	only	-	Mar	Sun>=8	0:00s	1:00	D
    - Rule	Cuba	2008	only	-	Mar	Sun>=15	0:00s	1:00	D
    - Rule	Cuba	2009	2010	-	Mar	Sun>=8	0:00s	1:00	D
    - Rule	Cuba	2011	only	-	Mar	Sun>=15	0:00s	1:00	D
    --Rule	Cuba	2012	max	-	Mar	Sun>=8	0:00s	1:00	D
    -+Rule	Cuba	2011	only	-	Nov	13	0:00s	0	S
    -+Rule	Cuba	2012	only	-	Apr	1	0:00s	1:00	D
    -+Rule	Cuba	2012	max	-	Oct	lastSun	0:00s	0	S
    -+Rule	Cuba	2013	max	-	Mar	Sun>=8	0:00s	1:00	D
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	America/Havana	-5:29:28 -	LMT	1890
    -@@ -2883,6 +2993,29 @@
    - # From Stephen Colebourne (2007-02-22):
    - # Some IATA info: Haiti won't be having DST in 2007.
    - 
    -+# From Steffen Thorsen (2012-03-11):
    -+# According to several news sources, Haiti will observe DST this year,
    -+# apparently using the same start and end date as USA/Canada.
    -+# So this means they have already changed their time.
    -+#
    -+# (Sources in French):
    -+# 
    -+# http://www.alterpresse.org/spip.php?article12510
    -+# 
    -+# 
    -+# http://radiovision2000haiti.net/home/?p=13253
    -+# 
    -+#
    -+# Our coverage:
    -+# 
    -+# http://www.timeanddate.com/news/time/haiti-dst-2012.html
    -+# 
    -+
    -+# From Arthur David Olson (2012-03-11):
    -+# The alterpresse.org source seems to show a US-style leap from 2:00 a.m. to
    -+# 3:00 a.m. rather than the traditional Haitian jump at midnight.
    -+# Assume a US-style fall back as well XXX.
    -+# Do not yet assume that the change carries forward past 2012 XXX.
    - 
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Haiti	1983	only	-	May	8	0:00	1:00	D
    -@@ -2894,6 +3027,8 @@
    - Rule	Haiti	1988	1997	-	Oct	lastSun	1:00s	0	S
    - Rule	Haiti	2005	2006	-	Apr	Sun>=1	0:00	1:00	D
    - Rule	Haiti	2005	2006	-	Oct	lastSun	0:00	0	S
    -+Rule	Haiti	2012	only	-	Mar	Sun>=8	2:00	1:00	D
    -+Rule	Haiti	2012	only	-	Nov	Sun>=1	2:00	0	S
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone America/Port-au-Prince -4:49:20 -	LMT	1890
    - 			-4:49	-	PPMT	1917 Jan 24 12:00 # P-a-P MT
    ---- openjdk/jdk/make/sun/javazic/tzdata/southamerica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/southamerica
    -@@ -22,7 +22,7 @@
    - # questions.
    - #
    - # 
    --# @(#)southamerica	8.50
    -+# @(#)southamerica	8.53
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -841,6 +841,19 @@
    - # oficial agency about time in Brazil, and she confirmed that the old rule is
    - # still in force.
    - 
    -+# From Guilherme Bernardes Rodrigues (2011-10-14)
    -+# It's official, the President signed a decree that includes Bahia in summer
    -+# time.
    -+#	 [ and in a second message (same day): ]
    -+# I found the decree.
    -+#
    -+# DECRETO No- 7.584, DE 13 DE OUTUBRO DE 2011
    -+# Link :
    -+# 
    -+# http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6
    -+# 
    -+
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - # Decree 20,466 (1931-10-01)
    - # Decree 21,896 (1932-01-10)
    -@@ -1077,10 +1090,8 @@
    - # of America/Salvador.
    - Zone America/Bahia	-2:34:04 -	LMT	1914
    - 			-3:00	Brazil	BR%sT	2003 Sep 24
    --			-3:00	-	BRT
    --# as noted above, not yet in operation.
    --#			-3:00	-	BRT	2011 Oct 16
    --#			-3:00	Brazil	BR%sT
    -+			-3:00	-	BRT	2011 Oct 16
    -+			-3:00	Brazil	BR%sT
    - #
    - # Goias (GO), Distrito Federal (DF), Minas Gerais (MG),
    - # Espirito Santo (ES), Rio de Janeiro (RJ), Sao Paulo (SP), Parana (PR),
    -@@ -1230,6 +1241,28 @@
    - # August, not in October as they have since 1968. This is a pilot plan
    - # which will be reevaluated in 2012.
    - 
    -+# From Mauricio Parada (2012-02-22), translated by Glenn Eychaner (2012-02-23):
    -+# As stated in the website of the Chilean Energy Ministry
    -+# http://www.minenergia.cl/ministerio/noticias/generales/gobierno-anuncia-fechas-de-cambio-de.html
    -+# The Chilean Government has decided to postpone the entrance into winter time
    -+# (to leave DST) from March 11 2012 to April 28th 2012. The decision has not
    -+# been yet formalized but it will within the next days.
    -+# Quote from the website communication:
    -+#
    -+# 6. For the year 2012, the dates of entry into winter time will be as follows:
    -+# a. Saturday April 28, 2012, clocks should go back 60 minutes; that is, at
    -+# 23:59:59, instead of passing to 0:00, the time should be adjusted to be 23:00
    -+# of the same day.
    -+# b. Saturday, September 1, 2012, clocks should go forward 60 minutes; that is,
    -+# at 23:59:59, instead of passing to 0:00, the time should be adjusted to be
    -+# 01:00 on September 2.
    -+#
    -+# Note that...this is yet another "temporary" change that will be reevaluated
    -+# AGAIN in 2013.
    -+
    -+# NOTE: ChileAQ rules for Antarctic bases are stored separately in the
    -+# 'antarctica' file.
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Chile	1927	1932	-	Sep	 1	0:00	1:00	S
    - Rule	Chile	1928	1932	-	Apr	 1	0:00	0	-
    -@@ -1260,8 +1293,6 @@
    - Rule	Chile	1998	only	-	Sep	27	4:00u	1:00	S
    - Rule	Chile	1999	only	-	Apr	 4	3:00u	0	-
    - Rule	Chile	1999	2010	-	Oct	Sun>=9	4:00u	1:00	S
    --Rule	Chile	2011	only	-	Aug	Sun>=16	4:00u	1:00	S
    --Rule	Chile	2012	max	-	Oct	Sun>=9	4:00u	1:00	S
    - Rule	Chile	2000	2007	-	Mar	Sun>=9	3:00u	0	-
    - # N.B.: the end of March 29 in Chile is March 30 in Universal time,
    - # which is used below in specifying the transition.
    -@@ -1269,7 +1300,11 @@
    - Rule	Chile	2009	only	-	Mar	Sun>=9	3:00u	0	-
    - Rule	Chile	2010	only	-	Apr	Sun>=1	3:00u	0	-
    - Rule	Chile	2011	only	-	May	Sun>=2	3:00u	0	-
    --Rule	Chile	2012	max	-	Mar	Sun>=9	3:00u	0	-
    -+Rule	Chile	2011	only	-	Aug	Sun>=16	4:00u	1:00	S
    -+Rule	Chile	2012	only	-	Apr	Sun>=23	3:00u	0	-
    -+Rule	Chile	2012	only	-	Sep	Sun>=2	4:00u	1:00	S
    -+Rule	Chile	2013	max	-	Mar	Sun>=9	3:00u	0	-
    -+Rule	Chile	2013	max	-	Oct	Sun>=9	4:00u	1:00	S
    - # IATA SSIM anomalies: (1992-02) says 1992-03-14;
    - # (1996-09) says 1998-03-08.  Ignore these.
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -@@ -1415,6 +1450,21 @@
    - # will not revert to local mean time, but clocks will remain on Summer
    - # time (UTC/GMT - 3 hours) throughout the whole of 2011.  Any long term
    - # change to local time following the trial period will be notified.
    -+#
    -+# From Andrew Newman (2012-02-24)
    -+# A letter from Justin McPhee, Chief Executive,
    -+# Cable & Wireless Falkland Islands (dated 2012-02-22)
    -+# states...
    -+#   The current Atlantic/Stanley entry under South America expects the
    -+#   clocks to go back to standard Falklands Time (FKT) on the 15th April.
    -+#   The database entry states that in 2011 Stanley was staying on fixed
    -+#   summer time on a trial basis only.  FIG need to contact IANA and/or
    -+#   the maintainers of the database to inform them we're adopting
    -+#   the same policy this year and suggest recommendations for future years.
    -+#
    -+# For now we will assume permanent summer time for the Falklands
    -+# until advised differently (to apply for 2012 and beyond, after the 2011
    -+# experiment was apparently successful.)
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Falk	1937	1938	-	Sep	lastSun	0:00	1:00	S
    - Rule	Falk	1938	1942	-	Mar	Sun>=19	0:00	0	-
    -@@ -1427,14 +1477,14 @@
    - Rule	Falk	1985	2000	-	Sep	Sun>=9	0:00	1:00	S
    - Rule	Falk	1986	2000	-	Apr	Sun>=16	0:00	0	-
    - Rule	Falk	2001	2010	-	Apr	Sun>=15	2:00	0	-
    --Rule	Falk	2012	max	-	Apr	Sun>=15	2:00	0	-
    --Rule	Falk	2001	max	-	Sep	Sun>=1	2:00	1:00	S
    -+Rule	Falk	2001	2010	-	Sep	Sun>=1	2:00	1:00	S
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone Atlantic/Stanley	-3:51:24 -	LMT	1890
    - 			-3:51:24 -	SMT	1912 Mar 12  # Stanley Mean Time
    - 			-4:00	Falk	FK%sT	1983 May     # Falkland Is Time
    - 			-3:00	Falk	FK%sT	1985 Sep 15
    --			-4:00	Falk	FK%sT
    -+			-4:00	Falk	FK%sT	2010 Sep 5 02:00
    -+			-3:00	-	FKST
    - 
    - # French Guiana
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    ---- openjdk/jdk/make/sun/javazic/tzdata/zone.tab
    -+++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab
    -@@ -22,7 +22,7 @@
    - # questions.
    - #
    - # 
    --# @(#)zone.tab	8.49
    -+# @(#)zone.tab	8.55
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - #
    -@@ -154,6 +154,7 @@
    - CA	+690650-1050310	America/Cambridge_Bay	Mountain Time - west Nunavut
    - CA	+6227-11421	America/Yellowknife	Mountain Time - central Northwest Territories
    - CA	+682059-1334300	America/Inuvik	Mountain Time - west Northwest Territories
    -+CA	+4906-11631	America/Creston	Mountain Standard Time - Creston, British Columbia
    - CA	+5946-12014	America/Dawson_Creek	Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia
    - CA	+4916-12307	America/Vancouver	Pacific Time - west British Columbia
    - CA	+6043-13503	America/Whitehorse	Pacific Time - south Yukon
    -@@ -356,7 +357,7 @@
    - RU	+5443+02030	Europe/Kaliningrad	Moscow-01 - Kaliningrad
    - RU	+5545+03735	Europe/Moscow	Moscow+00 - west Russia
    - RU	+4844+04425	Europe/Volgograd	Moscow+00 - Caspian Sea
    --RU	+5312+05009	Europe/Samara	Moscow - Samara, Udmurtia
    -+RU	+5312+05009	Europe/Samara	Moscow+00 - Samara, Udmurtia
    - RU	+5651+06036	Asia/Yekaterinburg	Moscow+02 - Urals
    - RU	+5500+07324	Asia/Omsk	Moscow+03 - west Siberia
    - RU	+5502+08255	Asia/Novosibirsk	Moscow+03 - Novosibirsk
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
    -@@ -333,6 +333,7 @@
    -                                               "French Guiana Summer Time", "GFST"}},
    -             {"America/Cayman", EST},
    -             {"America/Chihuahua", MST},
    -+            {"America/Creston", MST},
    -             {"America/Coral_Harbour", EST},
    -             {"America/Cordoba", AGT},
    -             {"America/Costa_Rica", CST},
    -@@ -678,7 +679,7 @@
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    -             {"Europe/Kaliningrad", FET},
    --            {"Europe/Kiev", FET},
    -+            {"Europe/Kiev", EET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -699,14 +700,14 @@
    -                                             "Samara Summer Time", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", FET},
    -+            {"Europe/Simferopol", EET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", FET},
    -+            {"Europe/Uzhgorod", EET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -715,7 +716,7 @@
    -                                                "Volgograd Summer Time", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", FET},
    -+            {"Europe/Zaporozhye", EET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java
    -@@ -333,6 +333,7 @@
    -                                               "Franz\u00f6sisch-Guiana Sommerzeit", "GFST"}},
    -             {"America/Cayman", EST},
    -             {"America/Chihuahua", MST},
    -+            {"America/Creston", MST},
    -             {"America/Coral_Harbour", EST},
    -             {"America/Cordoba", AGT},
    -             {"America/Costa_Rica", CST},
    -@@ -678,7 +679,7 @@
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    -             {"Europe/Kaliningrad", FET},
    --            {"Europe/Kiev", FET},
    -+            {"Europe/Kiev", EET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -699,14 +700,14 @@
    -                                             "Samarische Sommerzeit", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", FET},
    -+            {"Europe/Simferopol", EET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", FET},
    -+            {"Europe/Uzhgorod", EET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -715,7 +716,7 @@
    -                                                "Wolgograder Sommerzeit", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", FET},
    -+            {"Europe/Zaporozhye", EET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java
    -@@ -333,6 +333,7 @@
    -                                               "Hora de verano de la Guayana Francesa", "GFST"}},
    -             {"America/Cayman", EST},
    -             {"America/Chihuahua", MST},
    -+            {"America/Creston", MST},
    -             {"America/Coral_Harbour", EST},
    -             {"America/Cordoba", AGT},
    -             {"America/Costa_Rica", CST},
    -@@ -678,7 +679,7 @@
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    -             {"Europe/Kaliningrad", FET},
    --            {"Europe/Kiev", FET},
    -+            {"Europe/Kiev", EET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -699,14 +700,14 @@
    -                                             "Hora de verano de Samara", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", FET},
    -+            {"Europe/Simferopol", EET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", FET},
    -+            {"Europe/Uzhgorod", EET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -715,7 +716,7 @@
    -                                                "Hora de verano de Volgogrado", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", FET},
    -+            {"Europe/Zaporozhye", EET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java
    -@@ -333,6 +333,7 @@
    -                                               "Heure d'\u00e9t\u00e9 de Guyane fran\u00e7aise", "GFST"}},
    -             {"America/Cayman", EST},
    -             {"America/Chihuahua", MST},
    -+            {"America/Creston", MST},
    -             {"America/Coral_Harbour", EST},
    -             {"America/Cordoba", AGT},
    -             {"America/Costa_Rica", CST},
    -@@ -678,7 +679,7 @@
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    -             {"Europe/Kaliningrad", FET},
    --            {"Europe/Kiev", FET},
    -+            {"Europe/Kiev", EET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -699,14 +700,14 @@
    -                                             "Heure d'\u00e9t\u00e9 de Samara", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", FET},
    -+            {"Europe/Simferopol", EET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", FET},
    -+            {"Europe/Uzhgorod", EET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -715,7 +716,7 @@
    -                                                "Heure d'\u00e9t\u00e9 de Volgograd", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", FET},
    -+            {"Europe/Zaporozhye", EET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java
    -@@ -333,6 +333,7 @@
    -                                               "Ora estiva della Guyana Francese", "GFST"}},
    -             {"America/Cayman", EST},
    -             {"America/Chihuahua", MST},
    -+            {"America/Creston", MST},
    -             {"America/Coral_Harbour", EST},
    -             {"America/Cordoba", AGT},
    -             {"America/Costa_Rica", CST},
    -@@ -678,7 +679,7 @@
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    -             {"Europe/Kaliningrad", FET},
    --            {"Europe/Kiev", FET},
    -+            {"Europe/Kiev", EET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -699,14 +700,14 @@
    -                                             "Ora estiva di Samara", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", FET},
    -+            {"Europe/Simferopol", EET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", FET},
    -+            {"Europe/Uzhgorod", EET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -715,7 +716,7 @@
    -                                                "Ora estiva di Volgograd", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", FET},
    -+            {"Europe/Zaporozhye", EET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java
    -@@ -333,6 +333,7 @@
    -                                               "\u4ecf\u9818\u30ae\u30a2\u30ca\u590f\u6642\u9593", "GFST"}},
    -             {"America/Cayman", EST},
    -             {"America/Chihuahua", MST},
    -+            {"America/Creston", MST},
    -             {"America/Coral_Harbour", EST},
    -             {"America/Cordoba", AGT},
    -             {"America/Costa_Rica", CST},
    -@@ -678,7 +679,7 @@
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    -             {"Europe/Kaliningrad", FET},
    --            {"Europe/Kiev", FET},
    -+            {"Europe/Kiev", EET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -699,14 +700,14 @@
    -                                             "\u30b5\u30de\u30e9\u590f\u6642\u9593", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", FET},
    -+            {"Europe/Simferopol", EET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", FET},
    -+            {"Europe/Uzhgorod", EET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -715,7 +716,7 @@
    -                                                "\u30dc\u30eb\u30b4\u30b0\u30e9\u30fc\u30c9\u590f\u6642\u9593", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", FET},
    -+            {"Europe/Zaporozhye", EET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java
    -@@ -333,6 +333,7 @@
    -                                               "\ud504\ub791\uc2a4\ub839 \uae30\uc544\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GFST"}},
    -             {"America/Cayman", EST},
    -             {"America/Chihuahua", MST},
    -+            {"America/Creston", MST},
    -             {"America/Coral_Harbour", EST},
    -             {"America/Cordoba", AGT},
    -             {"America/Costa_Rica", CST},
    -@@ -678,7 +679,7 @@
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    -             {"Europe/Kaliningrad", FET},
    --            {"Europe/Kiev", FET},
    -+            {"Europe/Kiev", EET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -699,14 +700,14 @@
    -                                             "\uc0ac\ub9c8\ub77c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", FET},
    -+            {"Europe/Simferopol", EET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", FET},
    -+            {"Europe/Uzhgorod", EET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -715,7 +716,7 @@
    -                                                "\ubcfc\uace0\uadf8\ub77c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", FET},
    -+            {"Europe/Zaporozhye", EET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    -diff -r 54524889bf8b -r 065fdd98fe75 src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java	Mon Apr 02 11:29:36 2012 -0700
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java	Tue Apr 03 18:21:28 2012 +0900
    -@@ -333,6 +333,7 @@
    -                                               "Fuso hor\u00e1rio de ver\u00e3o da Guiana Francesa", "GFST"}},
    -             {"America/Cayman", EST},
    -             {"America/Chihuahua", MST},
    -+            {"America/Creston", MST},
    -             {"America/Coral_Harbour", EST},
    -             {"America/Cordoba", AGT},
    -             {"America/Costa_Rica", CST},
    -@@ -678,7 +679,7 @@
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    -             {"Europe/Kaliningrad", FET},
    --            {"Europe/Kiev", FET},
    -+            {"Europe/Kiev", EET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -699,14 +700,14 @@
    -                                             "Fuso hor\u00e1rio de ver\u00e3o de Samara", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", FET},
    -+            {"Europe/Simferopol", EET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", FET},
    -+            {"Europe/Uzhgorod", EET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -715,7 +716,7 @@
    -                                                "Fuso hor\u00e1rio de ver\u00e3o de Volgogrado", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", FET},
    -+            {"Europe/Zaporozhye", EET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java
    -@@ -333,6 +333,7 @@
    -                                               "Franska Guyana, sommartid", "GFST"}},
    -             {"America/Cayman", EST},
    -             {"America/Chihuahua", MST},
    -+            {"America/Creston", MST},
    -             {"America/Coral_Harbour", EST},
    -             {"America/Cordoba", AGT},
    -             {"America/Costa_Rica", CST},
    -@@ -678,7 +679,7 @@
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    -             {"Europe/Kaliningrad", FET},
    --            {"Europe/Kiev", FET},
    -+            {"Europe/Kiev", EET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -699,14 +700,14 @@
    -                                             "Samara, sommartid", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", FET},
    -+            {"Europe/Simferopol", EET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", FET},
    -+            {"Europe/Uzhgorod", EET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -715,7 +716,7 @@
    -                                                "Volgograd, sommartid", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", FET},
    -+            {"Europe/Zaporozhye", EET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
    -@@ -333,6 +333,7 @@
    -                                               "\u6cd5\u5c5e\u572d\u4e9a\u90a3\u590f\u4ee4\u65f6", "GFST"}},
    -             {"America/Cayman", EST},
    -             {"America/Chihuahua", MST},
    -+            {"America/Creston", MST},
    -             {"America/Coral_Harbour", EST},
    -             {"America/Cordoba", AGT},
    -             {"America/Costa_Rica", CST},
    -@@ -678,7 +679,7 @@
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    -             {"Europe/Kaliningrad", FET},
    --            {"Europe/Kiev", FET},
    -+            {"Europe/Kiev", EET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -699,14 +700,14 @@
    -                                             "\u6c99\u9a6c\u62c9\u590f\u4ee4\u65f6", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", FET},
    -+            {"Europe/Simferopol", EET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", FET},
    -+            {"Europe/Uzhgorod", EET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -715,7 +716,7 @@
    -                                                "\u4f0f\u5c14\u52a0\u683c\u52d2\u590f\u4ee4\u65f6", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", FET},
    -+            {"Europe/Zaporozhye", EET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
    -@@ -333,6 +333,7 @@
    -                                               "\u6cd5\u5c6c\u572d\u4e9e\u90a3\u590f\u4ee4\u6642\u9593", "GFST"}},
    -             {"America/Cayman", EST},
    -             {"America/Chihuahua", MST},
    -+            {"America/Creston", MST},
    -             {"America/Coral_Harbour", EST},
    -             {"America/Cordoba", AGT},
    -             {"America/Costa_Rica", CST},
    -@@ -679,7 +680,7 @@
    -             {"Europe/Istanbul", EET},
    -             {"Europe/Jersey", GMTBST},
    -             {"Europe/Kaliningrad", FET},
    --            {"Europe/Kiev", FET},
    -+            {"Europe/Kiev", EET},
    -             {"Europe/Lisbon", WET},
    -             {"Europe/Ljubljana", CET},
    -             {"Europe/London", GMTBST},
    -@@ -700,14 +701,14 @@
    -                                             "\u6c99\u99ac\u62c9\u590f\u4ee4\u6642\u9593", "SAMST"}},
    -             {"Europe/San_Marino", CET},
    -             {"Europe/Sarajevo", CET},
    --            {"Europe/Simferopol", FET},
    -+            {"Europe/Simferopol", EET},
    -             {"Europe/Skopje", CET},
    -             {"Europe/Sofia", EET},
    -             {"Europe/Stockholm", CET},
    -             {"Europe/Tallinn", EET},
    -             {"Europe/Tirane", CET},
    -             {"Europe/Tiraspol", EET},
    --            {"Europe/Uzhgorod", FET},
    -+            {"Europe/Uzhgorod", EET},
    -             {"Europe/Vaduz", CET},
    -             {"Europe/Vatican", CET},
    -             {"Europe/Vienna", CET},
    -@@ -716,7 +717,7 @@
    -                                                "\u4f0f\u723e\u52a0\u683c\u52d2\u590f\u4ee4\u6642\u9593", "VOLST"}},
    -             {"Europe/Warsaw", CET},
    -             {"Europe/Zagreb", CET},
    --            {"Europe/Zaporozhye", FET},
    -+            {"Europe/Zaporozhye", EET},
    -             {"Europe/Zurich", CET},
    -             {"GB", GMTBST},
    -             {"GB-Eire", GMTBST},
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/7198570-tzdata2012f.patch openjdk-6-6b34-1.13.6/patches/openjdk/7198570-tzdata2012f.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/7198570-tzdata2012f.patch	2014-10-08 18:39:25.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/7198570-tzdata2012f.patch	1970-01-01 00:00:00.000000000 +0000
    @@ -1,841 +0,0 @@
    -# HG changeset patch
    -# User coffeys
    -# Date 1349962116 -3600
    -# Node ID c554456c623f1d05180b291ce0b1e4589e2bd165
    -# Parent  5683b3f7f8cc58746a2983ee6294b62ccdfa159c
    -7198570: (tz) Support tzdata2012f
    -Reviewed-by: peytoia, asaha
    -
    ---- openjdk/jdk/make/sun/javazic/tzdata/VERSION
    -+++ openjdk/jdk/make/sun/javazic/tzdata/VERSION
    -@@ -21,4 +21,4 @@
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    - #
    --tzdata2012c
    -+tzdata2012f
    ---- openjdk/jdk/make/sun/javazic/tzdata/africa
    -+++ openjdk/jdk/make/sun/javazic/tzdata/africa
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)africa	8.35
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -261,7 +260,7 @@
    - # I received a mail from an airline which says that the daylight
    - # saving time in Egypt will end in the night of 2007-09-06 to 2007-09-07.
    - # From Jesper Norgaard Welen (2007-08-15): [The following agree:]
    --# http://www.nentjes.info/Bill/bill5.htm 
    -+# http://www.nentjes.info/Bill/bill5.htm
    - # http://www.timeanddate.com/worldclock/city.html?n=53
    - # From Steffen Thorsen (2007-09-04): The official information...:
    - # http://www.sis.gov.eg/En/EgyptOnline/Miscellaneous/000002/0207000000000000001580.htm
    -@@ -315,18 +314,18 @@
    - # in September.
    - 
    - # From Steffen Thorsen (2009-08-11):
    --# We have been able to confirm the August change with the Egyptian Cabinet 
    -+# We have been able to confirm the August change with the Egyptian Cabinet
    - # Information and Decision Support Center:
    - # 
    - # http://www.timeanddate.com/news/time/egypt-dst-ends-2009.html
    - # 
    --# 
    -+#
    - # The Middle East News Agency
    - # 
    - # http://www.mena.org.eg/index.aspx
    - # 
    - # also reports "Egypt starts winter time on August 21"
    --# today in article numbered "71, 11/08/2009 12:25 GMT." 
    -+# today in article numbered "71, 11/08/2009 12:25 GMT."
    - # Only the title above is available without a subscription to their service,
    - # and can be found by searching for "winter" in their search engine
    - # (at least today).
    -@@ -505,7 +504,7 @@
    - # From Steffen Thorsen (2008-06-25):
    - # Mauritius plans to observe DST from 2008-11-01 to 2009-03-31 on a trial
    - # basis....
    --# It seems that Mauritius observed daylight saving time from 1982-10-10 to 
    -+# It seems that Mauritius observed daylight saving time from 1982-10-10 to
    - # 1983-03-20 as well, but that was not successful....
    - # http://www.timeanddate.com/news/time/mauritius-daylight-saving-time.html
    - 
    -@@ -529,12 +528,12 @@
    - # than previously announced (2008-11-01 to 2009-03-31).  The new start
    - # date is 2008-10-26 at 02:00 and the new end date is 2009-03-27 (no time
    - # given, but it is probably at either 2 or 3 wall clock time).
    --# 
    --# A little strange though, since the article says that they moved the date 
    --# to align itself with Europe and USA which also change time on that date, 
    --# but that means they have not paid attention to what happened in 
    --# USA/Canada last year (DST ends first Sunday in November). I also wonder 
    --# why that they end on a Friday, instead of aligning with Europe which 
    -+#
    -+# A little strange though, since the article says that they moved the date
    -+# to align itself with Europe and USA which also change time on that date,
    -+# but that means they have not paid attention to what happened in
    -+# USA/Canada last year (DST ends first Sunday in November). I also wonder
    -+# why that they end on a Friday, instead of aligning with Europe which
    - # changes two days later.
    - 
    - # From Alex Krivenyshev (2008-07-11):
    -@@ -593,7 +592,7 @@
    - # 
    - 
    - # From Arthur David Olson (2009-07-11):
    --# The "mauritius-dst-will-not-repeat" wrapup includes this: 
    -+# The "mauritius-dst-will-not-repeat" wrapup includes this:
    - # "The trial ended on March 29, 2009, when the clocks moved back by one hour
    - # at 2am (or 02:00) local time..."
    - 
    -@@ -687,8 +686,8 @@
    - # XXX--guess that it is only Morocco for now; guess only 2008 for now.
    - 
    - # From Steffen Thorsen (2008-08-27):
    --# Morocco will change the clocks back on the midnight between August 31 
    --# and September 1. They originally planned to observe DST to near the end 
    -+# Morocco will change the clocks back on the midnight between August 31
    -+# and September 1. They originally planned to observe DST to near the end
    - # of September:
    - #
    - # One article about it (in French):
    -@@ -822,6 +821,23 @@
    - # "...à partir du dernier dimance d'avril et non fins mars,
    - # comme annoncé précédemment."
    - 
    -+# From Milamber Space Network (2012-07-17):
    -+# The official return to GMT is announced by the Moroccan government:
    -+# 
    -+# http://www.mmsp.gov.ma/fr/actualites.aspx?id=288 [in French]
    -+# 
    -+#
    -+# Google translation, lightly edited:
    -+# Back to the standard time of the Kingdom (GMT)
    -+# Pursuant to Decree No. 2-12-126 issued on 26 Jumada (I) 1433 (April 18,
    -+# 2012) and in accordance with the order of Mr. President of the
    -+# Government No. 3-47-12 issued on 24 Sha'ban (11 July 2012), the Ministry
    -+# of Public Service and Administration Modernization announces the return
    -+# of the legal time of the Kingdom (GMT) from Friday, July 20, 2012 until
    -+# Monday, August 20, 2012.  So the time will be delayed by 60 minutes from
    -+# 3:00 am Friday, July 20, 2012 and will again be advanced by 60 minutes
    -+# August 20, 2012 from 2:00 am.
    -+
    - # RULE	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - 
    - Rule	Morocco	1939	only	-	Sep	12	 0:00	1:00	S
    -@@ -849,6 +865,8 @@
    - Rule	Morocco	2011	only	-	Jul	 31	 0	0	-
    - Rule	Morocco	2012	max	-	Apr	 lastSun 2:00	1:00	S
    - Rule	Morocco	2012	max	-	Sep	 lastSun 3:00	0	-
    -+Rule	Morocco	2012	only	-	Jul	 20	 3:00	0	-
    -+Rule	Morocco	2012	only	-	Aug	 20	 2:00	1:00	S
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
    -@@ -877,7 +895,7 @@
    - # Forecasting Riaan van Zyl explained that the far eastern parts of
    - # the country are close to 40 minutes earlier in sunrise than the rest
    - # of the country.
    --# 
    -+#
    - # From Paul Eggert (2007-03-31):
    - # Apparently the Caprivi Strip informally observes Botswana time, but
    - # we have no details.  In the meantime people there can use Africa/Gaborone.
    ---- openjdk/jdk/make/sun/javazic/tzdata/antarctica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/antarctica
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)antarctica	8.10
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/asia
    -+++ openjdk/jdk/make/sun/javazic/tzdata/asia
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)asia	8.73
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -125,7 +124,7 @@
    - # From Alexander Krivenyshev (2012-02-10):
    - # According to News Armenia, on Feb 9, 2012,
    - # http://newsarmenia.ru/society/20120209/42609695.html
    --# 
    -+#
    - # The Armenia National Assembly adopted final reading of Amendments to the
    - # Law "On procedure of calculation time on the territory of the Republic of
    - # Armenia" according to which Armenia [is] abolishing Daylight Saving Time.
    -@@ -205,15 +204,15 @@
    - # 
    - 
    - # From A. N. M. Kamrus Saadat (2009-06-15):
    --# Finally we've got the official mail regarding DST start time where DST start 
    --# time is mentioned as Jun 19 2009, 23:00 from BTRC (Bangladesh 
    --# Telecommunication Regulatory Commission). 
    -+# Finally we've got the official mail regarding DST start time where DST start
    -+# time is mentioned as Jun 19 2009, 23:00 from BTRC (Bangladesh
    -+# Telecommunication Regulatory Commission).
    - #
    - # No DST end date has been announced yet.
    - 
    - # From Alexander Krivenyshev (2009-09-25):
    --# Bangladesh won't go back to Standard Time from October 1, 2009, 
    --# instead it will continue DST measure till the cabinet makes a fresh decision. 
    -+# Bangladesh won't go back to Standard Time from October 1, 2009,
    -+# instead it will continue DST measure till the cabinet makes a fresh decision.
    - #
    - # Following report by same newspaper-"The Daily Star Friday":
    - # "DST change awaits cabinet decision-Clock won't go back by 1-hr from Oct 1"
    -@@ -227,8 +226,8 @@
    - 
    - # From Steffen Thorsen (2009-10-13):
    - # IANS (Indo-Asian News Service) now reports:
    --# Bangladesh has decided that the clock advanced by an hour to make 
    --# maximum use of daylight hours as an energy saving measure would 
    -+# Bangladesh has decided that the clock advanced by an hour to make
    -+# maximum use of daylight hours as an energy saving measure would
    - # "continue for an indefinite period."
    - #
    - # One of many places where it is published:
    -@@ -256,7 +255,7 @@
    - 
    - # From Alexander Krivenyshev (2010-03-22):
    - # According to Bangladesh newspaper "The Daily Star,"
    --# Cabinet cancels Daylight Saving Time 
    -+# Cabinet cancels Daylight Saving Time
    - # 
    - # http://www.thedailystar.net/newDesign/latest_news.php?nid=22817
    - # 
    -@@ -384,11 +383,11 @@
    - # observing daylight saving time in 1986.
    - #
    - # From Thomas S. Mullaney (2008-02-11):
    --# I think you're combining two subjects that need to treated 
    --# separately: daylight savings (which, you're correct, wasn't 
    --# implemented until the 1980s) and the unified time zone centered near 
    --# Beijing (which was implemented in 1949). Briefly, there was also a 
    --# "Lhasa Time" in Tibet and "Urumqi Time" in Xinjiang. The first was 
    -+# I think you're combining two subjects that need to treated
    -+# separately: daylight savings (which, you're correct, wasn't
    -+# implemented until the 1980s) and the unified time zone centered near
    -+# Beijing (which was implemented in 1949). Briefly, there was also a
    -+# "Lhasa Time" in Tibet and "Urumqi Time" in Xinjiang. The first was
    - # ceased, and the second eventually recognized (again, in the 1980s).
    - #
    - # From Paul Eggert (2008-06-30):
    -@@ -525,7 +524,7 @@
    - # as of 2009-10-28:
    - # Year        Period
    - # 1941        1 Apr to 30 Sep
    --# 1942        Whole year 
    -+# 1942        Whole year
    - # 1943        Whole year
    - # 1944        Whole year
    - # 1945        Whole year
    -@@ -616,16 +615,16 @@
    - # From Arthur David Olson (2010-04-07):
    - # Here's Google's translation of the table at the bottom of the "summert.htm" page:
    - # Decade 	                                                    Name                      Start and end date
    --# Republic of China 34 years to 40 years (AD 1945-1951 years) Summer Time               May 1 to September 30 
    --# 41 years of the Republic of China (AD 1952)                 Daylight Saving Time      March 1 to October 31 
    --# Republic of China 42 years to 43 years (AD 1953-1954 years) Daylight Saving Time      April 1 to October 31 
    --# In the 44 years to 45 years (AD 1955-1956 years)            Daylight Saving Time      April 1 to September 30 
    --# Republic of China 46 years to 48 years (AD 1957-1959)       Summer Time               April 1 to September 30 
    --# Republic of China 49 years to 50 years (AD 1960-1961)       Summer Time               June 1 to September 30 
    --# Republic of China 51 years to 62 years (AD 1962-1973 years) Stop Summer Time 
    --# Republic of China 63 years to 64 years (1974-1975 AD)       Daylight Saving Time      April 1 to September 30 
    --# Republic of China 65 years to 67 years (1976-1978 AD)       Stop Daylight Saving Time 
    --# Republic of China 68 years (AD 1979)                        Daylight Saving Time      July 1 to September 30 
    -+# Republic of China 34 years to 40 years (AD 1945-1951 years) Summer Time               May 1 to September 30
    -+# 41 years of the Republic of China (AD 1952)                 Daylight Saving Time      March 1 to October 31
    -+# Republic of China 42 years to 43 years (AD 1953-1954 years) Daylight Saving Time      April 1 to October 31
    -+# In the 44 years to 45 years (AD 1955-1956 years)            Daylight Saving Time      April 1 to September 30
    -+# Republic of China 46 years to 48 years (AD 1957-1959)       Summer Time               April 1 to September 30
    -+# Republic of China 49 years to 50 years (AD 1960-1961)       Summer Time               June 1 to September 30
    -+# Republic of China 51 years to 62 years (AD 1962-1973 years) Stop Summer Time
    -+# Republic of China 63 years to 64 years (1974-1975 AD)       Daylight Saving Time      April 1 to September 30
    -+# Republic of China 65 years to 67 years (1976-1978 AD)       Stop Daylight Saving Time
    -+# Republic of China 68 years (AD 1979)                        Daylight Saving Time      July 1 to September 30
    - # Republic of China since 69 years (AD 1980)                  Stop Daylight Saving Time
    - 
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -@@ -1859,15 +1858,15 @@
    - # shown 8 per cent higher consumption of electricity.
    - 
    - # From Alex Krivenyshev (2008-05-15):
    --# 
    --# Here is an article that Pakistan plan to introduce Daylight Saving Time 
    -+#
    -+# Here is an article that Pakistan plan to introduce Daylight Saving Time
    - # on June 1, 2008 for 3 months.
    --# 
    --# "... The federal cabinet on Wednesday announced a new conservation plan to help 
    --# reduce load shedding by approving the closure of commercial centres at 9pm and 
    --# moving clocks forward by one hour for the next three months. 
    -+#
    -+# "... The federal cabinet on Wednesday announced a new conservation plan to help
    -+# reduce load shedding by approving the closure of commercial centres at 9pm and
    -+# moving clocks forward by one hour for the next three months.
    - # ...."
    --# 
    -+#
    - # 
    - # http://www.worldtimezone.net/dst_news/dst_news_pakistan01.html
    - # 
    -@@ -1927,7 +1926,7 @@
    - # Government has decided to restore the previous time by moving the
    - # clocks backward by one hour from October 1. A formal announcement to
    - # this effect will be made after the Prime Minister grants approval in
    --# this regard." 
    -+# this regard."
    - # 
    - # http://www.thenews.com.pk/updates.asp?id=87168
    - # 
    -@@ -2223,7 +2222,7 @@
    - # 
    - # http://www.maannews.net/eng/ViewDetails.aspx?ID=306795
    - # 
    --# the clocks were set back one hour at 2010-08-11 00:00:00 local time in 
    -+# the clocks were set back one hour at 2010-08-11 00:00:00 local time in
    - # Gaza and the West Bank.
    - # Some more background info:
    - # 
    -@@ -2262,7 +2261,7 @@
    - # The rules for Egypt are stolen from the `africa' file.
    - 
    - # From Steffen Thorsen (2011-09-30):
    --# West Bank did end Daylight Saving Time this morning/midnight (2011-09-30 
    -+# West Bank did end Daylight Saving Time this morning/midnight (2011-09-30
    - # 00:00).
    - # So West Bank and Gaza now have the same time again.
    - #
    -@@ -2536,19 +2535,19 @@
    - # having it between Wednesday and Thursday (two workdays in Syria) since the
    - # weekend in Syria is not Saturday and Sunday, but Friday and Saturday. So now
    - # it is implemented at midnight of the last workday before weekend...
    --# 
    -+#
    - # From Steffen Thorsen (2007-10-27):
    - # Jesper Norgaard Welen wrote:
    --# 
    -+#
    - # > "Winter local time in Syria will be observed at midnight of Thursday 1
    - # > November 2007, and the clock will be put back 1 hour."
    --# 
    -+#
    - # I found confirmation on this in this gov.sy-article (Arabic):
    - # http://wehda.alwehda.gov.sy/_print_veiw.asp?FileName=12521710520070926111247
    --# 
    -+#
    - # which using Google's translate tools says:
    --# Council of Ministers also approved the commencement of work on 
    --# identifying the winter time as of Friday, 2/11/2007 where the 60th 
    -+# Council of Ministers also approved the commencement of work on
    -+# identifying the winter time as of Friday, 2/11/2007 where the 60th
    - # minute delay at midnight Thursday 1/11/2007.
    - Rule	Syria	2007	only	-	Nov	 Fri>=1	0:00	0	-
    - 
    -@@ -2614,8 +2613,8 @@
    - # 
    - 
    - # From Steffen Thorsen (2009-10-27):
    --# The Syrian Arab News Network on 2009-09-29 reported that Syria will 
    --# revert back to winter (standard) time on midnight between Thursday 
    -+# The Syrian Arab News Network on 2009-09-29 reported that Syria will
    -+# revert back to winter (standard) time on midnight between Thursday
    - # 2009-10-29 and Friday 2009-10-30:
    - # 
    - # http://www.sana.sy/ara/2/2009/09/29/247012.htm (Arabic)
    ---- openjdk/jdk/make/sun/javazic/tzdata/australasia
    -+++ openjdk/jdk/make/sun/javazic/tzdata/australasia
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)australasia	8.30
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -307,9 +306,9 @@
    - # 
    - 
    - # From Alexander Krivenyshev (2010-10-24):
    --# According to Radio Fiji and Fiji Times online, Fiji will end DST 3 
    -+# According to Radio Fiji and Fiji Times online, Fiji will end DST 3
    - # weeks earlier than expected - on March 6, 2011, not March 27, 2011...
    --# Here is confirmation from Government of the Republic of the Fiji Islands, 
    -+# Here is confirmation from Government of the Republic of the Fiji Islands,
    - # Ministry of Information (fiji.gov.fj) web site:
    - # 
    - # http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155
    -@@ -320,15 +319,15 @@
    - # 
    - 
    - # From Steffen Thorsen (2011-10-03):
    --# Now the dates have been confirmed, and at least our start date 
    -+# Now the dates have been confirmed, and at least our start date
    - # assumption was correct (end date was one week wrong).
    - #
    - # 
    - # www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155
    - # 
    - # which says
    --# Members of the public are reminded to change their time to one hour in 
    --# advance at 2am to 3am on October 23, 2011 and one hour back at 3am to 
    -+# Members of the public are reminded to change their time to one hour in
    -+# advance at 2am to 3am on October 23, 2011 and one hour back at 3am to
    - # 2am on February 26 next year.
    - 
    - # From Ken Rylander (2011-10-24)
    -@@ -345,15 +344,23 @@
    - # The commencement of daylight saving will remain unchanged and start
    - # on the  23rd of October, 2011.
    - 
    -+# From the Fiji Government Online Portal (2012-08-21) via Steffen Thorsen:
    -+# The Minister for Labour, Industrial Relations and Employment Mr Jone Usamate
    -+# today confirmed that Fiji will start daylight savings at 2 am on Sunday 21st
    -+# October 2012 and end at 3 am on Sunday 20th January 2013.
    -+# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=6702&catid=71&Itemid=155
    -+#
    -+# From Paul Eggert (2012-08-31):
    -+# For now, guess a pattern of the penultimate Sundays in October and January.
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Fiji	1998	1999	-	Nov	Sun>=1	2:00	1:00	S
    - Rule	Fiji	1999	2000	-	Feb	lastSun	3:00	0	-
    - Rule	Fiji	2009	only	-	Nov	29	2:00	1:00	S
    - Rule	Fiji	2010	only	-	Mar	lastSun	3:00	0	-
    --Rule	Fiji	2010	only	-	Oct	24	2:00	1:00	S
    -+Rule	Fiji	2010	max	-	Oct	Sun>=18	2:00	1:00	S
    - Rule	Fiji	2011	only	-	Mar	Sun>=1	3:00	0	-
    --Rule	Fiji	2011	only	-	Oct	23	2:00	1:00	S
    --Rule	Fiji	2012	only	-	Jan	22	3:00	0	-
    -+Rule	Fiji	2012	max	-	Jan	Sun>=18	3:00	0	-
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Pacific/Fiji	11:53:40 -	LMT	1915 Oct 26	# Suva
    - 			12:00	Fiji	FJ%sT	# Fiji Time
    -@@ -582,7 +589,7 @@
    - 
    - # From David Zuelke (2011-05-09):
    - # Subject: Samoa to move timezone from east to west of international date line
    --# 
    -+#
    - # 
    - # http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963
    - # 
    -@@ -664,25 +671,25 @@
    - #
    - # From Gwillim Law (2011-12-29)
    - # A correspondent informed me that Tokelau, like Samoa, will be skipping
    --# December 31 this year, thereby changing its time zone from UTC-10 to
    --# UTC+14. When I tried to verify this statement, I found a confirming
    --# article in Time magazine online
    --# 
    --# (http://www.time.com/time/world/article/0,8599,2103243,00.html).
    --# 
    -+# December 31 this year ...
    - #
    --# From Jonathan Leffler (2011-12-29)
    --# Information from the BBC to the same effect:
    --# 
    --# http://www.bbc.co.uk/news/world-asia-16351377
    --# 
    -+# From Steffen Thorsen (2012-07-25)
    -+# ... we double checked by calling hotels and offices based in Tokelau asking
    -+# about the time there, and they all told a time that agrees with UTC+13....
    -+# Shanks says UTC-10 from 1901 [but] ... there is a good chance the change
    -+# actually was to UTC-11 back then.
    - #
    --# Patch supplied by Tim Parenti (2011-12-29)
    -+# From Paul Eggert (2012-07-25)
    -+# A Google Books snippet of Appendix to the Journals of the House of
    -+# Representatives of New Zealand, Session 1948,
    -+# , page 65, says Tokelau
    -+# was "11 hours slow on G.M.T."  Go with Thorsen and assume Shanks & Pottenger
    -+# are off by an hour starting in 1901.
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Pacific/Fakaofo	-11:24:56 -	LMT	1901
    --			-10:00	-	TKT 2011 Dec 30	# Tokelau Time
    --			14:00	-	TKT
    -+			-11:00	-	TKT 2011 Dec 30	# Tokelau Time
    -+			13:00	-	TKT
    - 
    - # Tonga
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -@@ -1363,22 +1370,22 @@
    - # See "southeast Australia" above for 2008 and later.
    - 
    - # From Steffen Thorsen (2009-04-28):
    --# According to the official press release, South Australia's extended daylight 
    --# saving period will continue with the same rules as used during the 2008-2009 
    -+# According to the official press release, South Australia's extended daylight
    -+# saving period will continue with the same rules as used during the 2008-2009
    - # summer (southern hemisphere).
    --# 
    -+#
    - # From
    - # 
    - # http://www.safework.sa.gov.au/uploaded_files/DaylightDatesSet.pdf
    - # 
    --# The extended daylight saving period that South Australia has been trialling 
    -+# The extended daylight saving period that South Australia has been trialling
    - # for over the last year is now set to be ongoing.
    --# Daylight saving will continue to start on the first Sunday in October each 
    -+# Daylight saving will continue to start on the first Sunday in October each
    - # year and finish on the first Sunday in April the following year.
    --# Industrial Relations Minister, Paul Caica, says this provides South Australia 
    --# with a consistent half hour time difference with NSW, Victoria, Tasmania and 
    -+# Industrial Relations Minister, Paul Caica, says this provides South Australia
    -+# with a consistent half hour time difference with NSW, Victoria, Tasmania and
    - # the ACT for all 52 weeks of the year...
    --# 
    -+#
    - # We have a wrap-up here:
    - # 
    - # http://www.timeanddate.com/news/time/south-australia-extends-dst.html
    ---- openjdk/jdk/make/sun/javazic/tzdata/backward
    -+++ openjdk/jdk/make/sun/javazic/tzdata/backward
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)backward	8.11
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/etcetera
    -+++ openjdk/jdk/make/sun/javazic/tzdata/etcetera
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)etcetera	8.3
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/europe
    -+++ openjdk/jdk/make/sun/javazic/tzdata/europe
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)europe	8.41
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -598,12 +597,12 @@
    - # According to Kremlin press service, Russian President Dmitry Medvedev
    - # signed a federal law "On calculation of time" on June 9, 2011.
    - # According to the law Russia is abolishing daylight saving time.
    --# 
    --# Medvedev signed a law "On the Calculation of Time" (in russian): 
    -+#
    -+# Medvedev signed a law "On the Calculation of Time" (in russian):
    - # 
    - # http://bmockbe.ru/events/?ID=7583
    - # 
    --# 
    -+#
    - # Medvedev signed a law on the calculation of the time (in russian):
    - # 
    - # http://www.regnum.ru/news/polit/1413906.html
    -@@ -1711,7 +1710,7 @@
    - # From Alexander Krivenyshev (2011-10-26)
    - # NO need to divide Moldova into two timezones at this point.
    - # As of today, Transnistria (Pridnestrovie)- Tiraspol reversed its own
    --# decision to abolish DST this winter. 
    -+# decision to abolish DST this winter.
    - # Following Moldova and neighboring Ukraine- Transnistria (Pridnestrovie)-
    - # Tiraspol will go back to winter time on October 30, 2011.
    - # News from Moldova (in russian):
    -@@ -2601,11 +2600,11 @@
    - # http://www.alomaliye.com/bkk_2002_3769.htm
    - 
    - # From Gökdeniz Karadağ (2011-03-10):
    --# 
    -+#
    - # According to the articles linked below, Turkey will change into summer
    - # time zone (GMT+3) on March 28, 2011 at 3:00 a.m. instead of March 27.
    - # This change is due to a nationwide exam on 27th.
    --# 
    -+#
    - # 
    - # http://www.worldbulletin.net/?aType=haber&ArticleID=70872
    - # 
    -@@ -2722,7 +2721,7 @@
    - # time this year after all.
    - #
    - # From Udo Schwedt (2011-10-18):
    --# As far as I understand, the recent change to the Ukranian time zone 
    -+# As far as I understand, the recent change to the Ukranian time zone
    - # (Europe/Kiev) to introduce permanent daylight saving time (similar
    - # to Russia) was reverted today:
    - #
    ---- openjdk/jdk/make/sun/javazic/tzdata/factory
    -+++ openjdk/jdk/make/sun/javazic/tzdata/factory
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)factory	8.2
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab
    -+++ openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)iso3166.tab	8.11
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - # ISO 3166 alpha-2 country codes
    ---- openjdk/jdk/make/sun/javazic/tzdata/leapseconds
    -+++ openjdk/jdk/make/sun/javazic/tzdata/leapseconds
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)leapseconds	8.13
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -101,8 +100,8 @@
    - #
    - #
    - # A positive leap second will be introduced at the end of June 2012.
    --# The sequence of dates of the UTC second markers will be:		
    --# 		
    -+# The sequence of dates of the UTC second markers will be:
    -+#
    - #                          2012 June 30,     23h 59m 59s
    - #                          2012 June 30,     23h 59m 60s
    - #                          2012 July  1,      0h  0m  0s
    -@@ -119,6 +118,6 @@
    - #
    - #
    - # Daniel GAMBIS
    --# Head		
    -+# Head
    - # Earth Orientation Center of IERS
    - # Observatoire de Paris, France
    ---- openjdk/jdk/make/sun/javazic/tzdata/northamerica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/northamerica
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)northamerica	8.54
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -502,7 +501,7 @@
    - 			 -8:00	US	P%sT	1946
    - 			 -8:00	-	PST	1969
    - 			 -8:00	US	P%sT	1980 Apr 27 2:00
    --			 -9:00	US	Y%sT	1980 Oct 26 2:00	
    -+			 -9:00	US	Y%sT	1980 Oct 26 2:00
    - 			 -8:00	US	P%sT	1983 Oct 30 2:00
    - 			 -9:00	US	Y%sT	1983 Nov 30
    - 			 -9:00	US	AK%sT
    -@@ -1867,7 +1866,7 @@
    - # Here is a summary of the three clock change events in Creston's history:
    - # 1. 1884 or 1885: adoption of Mountain Standard Time (GMT-7)
    - # Exact date unknown
    --# 2. Oct 1916: switch to Pacific Standard Time (GMT-8) 
    -+# 2. Oct 1916: switch to Pacific Standard Time (GMT-8)
    - # Exact date in October unknown;  Sunday October 1 is a reasonable guess.
    - # 3. June 1918: switch to Pacific Daylight Time (GMT-7)
    - # Exact date in June unknown; Sunday June 2 is a reasonable guess.
    -@@ -2697,20 +2696,20 @@
    - # except that it switches at midnight standard time as usual.
    - #
    - # From Steffen Thorsen (2007-10-25):
    --# Carlos Alberto Fonseca Arauz informed me that Cuba will end DST one week 
    -+# Carlos Alberto Fonseca Arauz informed me that Cuba will end DST one week
    - # earlier - on the last Sunday of October, just like in 2006.
    --# 
    -+#
    - # He supplied these references:
    --# 
    -+#
    - # http://www.prensalatina.com.mx/article.asp?ID=%7B4CC32C1B-A9F7-42FB-8A07-8631AFC923AF%7D&language=ES
    - # http://actualidad.terra.es/sociedad/articulo/cuba_llama_ahorrar_energia_cambio_1957044.htm
    --# 
    -+#
    - # From Alex Kryvenishev (2007-10-25):
    - # Here is also article from Granma (Cuba):
    --# 
    -+#
    - # [Regira] el Horario Normal desde el [proximo] domingo 28 de octubre
    - # http://www.granma.cubaweb.cu/2007/10/24/nacional/artic07.html
    --# 
    -+#
    - # http://www.worldtimezone.com/dst_news/dst_news_cuba03.html
    - 
    - # From Arthur David Olson (2008-03-09):
    -@@ -2794,7 +2793,7 @@
    - # 
    - #
    - # From Steffen Thorsen (2011-10-30)
    --# Cuba will end DST two weeks later this year. Instead of going back 
    -+# Cuba will end DST two weeks later this year. Instead of going back
    - # tonight, it has been delayed to 2011-11-13 at 01:00.
    - #
    - # One source (Spanish)
    -@@ -2806,11 +2805,11 @@
    - # 
    - # http://www.timeanddate.com/news/time/cuba-time-changes-2011.html
    - # 
    --# 
    -+#
    - # From Steffen Thorsen (2012-03-01)
    --# According to Radio Reloj, Cuba will start DST on Midnight between March 
    -+# According to Radio Reloj, Cuba will start DST on Midnight between March
    - # 31 and April 1.
    --# 
    -+#
    - # Radio Reloj has the following info (Spanish):
    - # 
    - # http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril
    ---- openjdk/jdk/make/sun/javazic/tzdata/pacificnew
    -+++ openjdk/jdk/make/sun/javazic/tzdata/pacificnew
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)pacificnew	8.2
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/solar87
    -+++ openjdk/jdk/make/sun/javazic/tzdata/solar87
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)solar87	8.2
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/solar88
    -+++ openjdk/jdk/make/sun/javazic/tzdata/solar88
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)solar88	8.2
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/solar89
    -+++ openjdk/jdk/make/sun/javazic/tzdata/solar89
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)solar89	8.2
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/southamerica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/southamerica
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)southamerica	8.53
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    -@@ -255,7 +254,7 @@
    - Rule	Arg	2007	only	-	Dec	30	0:00	1:00	S
    - Rule	Arg	2008	2009	-	Mar	Sun>=15	0:00	0	-
    - Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
    -- 
    -+
    - # From Mariano Absatz (2004-05-21):
    - # Today it was officially published that the Province of Mendoza is changing
    - # its timezone this winter... starting tomorrow night....
    -@@ -345,9 +344,9 @@
    - # confirms what Alex Krivenyshev has earlier sent to the tz
    - # emailing list about that San Luis plans to return to standard
    - # time much earlier than the rest of the country. It also
    --# confirms that upon request the provinces San Juan and Mendoza 
    --# refused to follow San Luis in this change. 
    --# 
    -+# confirms that upon request the provinces San Juan and Mendoza
    -+# refused to follow San Luis in this change.
    -+#
    - # The change is supposed to take place Monday the 21.st at 0:00
    - # hours. As far as I understand it if this goes ahead, we need
    - # a new timezone for San Luis (although there are also documented
    -@@ -409,7 +408,7 @@
    - # 
    - # http://www.lanacion.com.ar/nota.asp?nota_id=1107912
    - # 
    --# 
    -+#
    - # The press release says:
    - #  (...) anunci que el prximo domingo a las 00:00 los puntanos debern
    - # atrasar una hora sus relojes.
    -@@ -823,8 +822,8 @@
    - #
    - # From Alexander Krivenyshev (2011-10-04):
    - # State Bahia will return to Daylight savings time this year after 8 years off.
    --# The announcement was made by Governor Jaques Wagner in an interview to a 
    --# television station in Salvador. 
    -+# The announcement was made by Governor Jaques Wagner in an interview to a
    -+# television station in Salvador.
    - 
    - # In Portuguese:
    - # 
    -@@ -1183,7 +1182,7 @@
    - # Due to drought, Chile extends Daylight Time in three weeks.  This
    - # is one-time change (Saturday 3/29 at 24:00 for America/Santiago
    - # and Saturday 3/29 at 22:00 for Pacific/Easter)
    --# The Supreme Decree is located at 
    -+# The Supreme Decree is located at
    - # 
    - # http://www.shoa.cl/servicios/supremo316.pdf
    - # 
    -@@ -1194,7 +1193,7 @@
    - 
    - # From Jose Miguel Garrido (2008-03-05):
    - # ...
    --# You could see the announces of the change on 
    -+# You could see the announces of the change on
    - # 
    - # http://www.shoa.cl/noticias/2008/04hora/hora.htm
    - # .
    ---- openjdk/jdk/make/sun/javazic/tzdata/systemv
    -+++ openjdk/jdk/make/sun/javazic/tzdata/systemv
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)systemv	8.2
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - 
    ---- openjdk/jdk/make/sun/javazic/tzdata/zone.tab
    -+++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab
    -@@ -22,7 +22,6 @@
    - # questions.
    - #
    - # 
    --# @(#)zone.tab	8.55
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - #
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/8000897-pr2173-vm_crash_in_compilebroker.patch openjdk-6-6b34-1.13.6/patches/openjdk/8000897-pr2173-vm_crash_in_compilebroker.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/8000897-pr2173-vm_crash_in_compilebroker.patch	1970-01-01 00:00:00.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/8000897-pr2173-vm_crash_in_compilebroker.patch	2015-01-20 09:12:43.000000000 +0000
    @@ -0,0 +1,29 @@
    +# HG changeset patch
    +# User valeriep
    +# Date 1361905960 28800
    +#      Tue Feb 26 11:12:40 2013 -0800
    +# Node ID 0af95754ffc5d63e2eeb472e3e87e8d8b7ed3048
    +# Parent  f94c09f6a10e9ba492b8ad2fc6fe0900bca4374f
    +8000897, PR2173, RH1155012: VM crash in CompileBroker
    +Summary: Fixed to use the corresponding digest length when generating output.
    +Reviewed-by: mullan
    +
    +diff -r f94c09f6a10e -r 0af95754ffc5 src/share/classes/sun/security/provider/SHA2.java
    +--- openjdk/jdk/src/share/classes/sun/security/provider/SHA2.java	Thu Oct 16 17:30:05 2014 +0100
    ++++ openjdk/jdk/src/share/classes/sun/security/provider/SHA2.java	Tue Feb 26 11:12:40 2013 -0800
    +@@ -1,5 +1,5 @@
    + /*
    +- * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
    ++ * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
    +  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    +  *
    +  * This code is free software; you can redistribute it and/or modify it
    +@@ -101,7 +101,7 @@
    +         i2bBig4((int)bitsProcessed, buffer, 60);
    +         implCompress(buffer, 0);
    + 
    +-        i2bBig(state, 0, out, ofs, 32);
    ++        i2bBig(state, 0, out, ofs, engineGetDigestLength());
    +     }
    + 
    +     /**
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/8002225-tzdata2012i.patch openjdk-6-6b34-1.13.6/patches/openjdk/8002225-tzdata2012i.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/8002225-tzdata2012i.patch	2014-10-08 18:39:25.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/8002225-tzdata2012i.patch	1970-01-01 00:00:00.000000000 +0000
    @@ -1,261 +0,0 @@
    -# HG changeset patch
    -# User coffeys
    -# Date 1352197189 0
    -# Node ID 1f833e4211177700a66cc22a0c5a794448c1a29a
    -# Parent  c554456c623f1d05180b291ce0b1e4589e2bd165
    -8002225: (tz) Support tzdata2012i
    -Reviewed-by: peytoia, asaha
    -
    ---- openjdk/jdk/make/sun/javazic/tzdata/VERSION
    -+++ openjdk/jdk/make/sun/javazic/tzdata/VERSION
    -@@ -21,4 +21,4 @@
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    - #
    --tzdata2012f
    -+tzdata2012i
    ---- openjdk/jdk/make/sun/javazic/tzdata/asia
    -+++ openjdk/jdk/make/sun/javazic/tzdata/asia
    -@@ -1193,15 +1193,15 @@
    - #
    - #	ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2005+beyond.ps
    - 
    --# From Paul Eggert (2005-02-22):
    -+# From Paul Eggert (2012-10-26):
    - # I used Ephraim Silverberg's dst-israel.el program
    - #  (2005-02-20)
    - # along with Ed Reingold's cal-hebrew in GNU Emacs 21.4,
    --# to generate the transitions in this list.
    -+# to generate the transitions from 2005 through 2012.
    - # (I replaced "lastFri" with "Fri>=26" by hand.)
    --# The spring transitions below all correspond to the following Rule:
    -+# The spring transitions all correspond to the following Rule:
    - #
    --# Rule	Zion	2005	max	-	Mar	Fri>=26	2:00	1:00	D
    -+# Rule	Zion	2005	2012	-	Mar	Fri>=26	2:00	1:00	D
    - #
    - # but older zic implementations (e.g., Solaris 8) do not support
    - # "Fri>=26" to mean April 1 in years like 2005, so for now we list the
    -@@ -1218,39 +1218,36 @@
    - Rule	Zion	2010	only	-	Sep	12	2:00	0	S
    - Rule	Zion	2011	only	-	Apr	 1	2:00	1:00	D
    - Rule	Zion	2011	only	-	Oct	 2	2:00	0	S
    --Rule	Zion	2012	2015	-	Mar	Fri>=26	2:00	1:00	D
    -+Rule	Zion	2012	only	-	Mar	Fri>=26	2:00	1:00	D
    - Rule	Zion	2012	only	-	Sep	23	2:00	0	S
    --Rule	Zion	2013	only	-	Sep	 8	2:00	0	S
    --Rule	Zion	2014	only	-	Sep	28	2:00	0	S
    --Rule	Zion	2015	only	-	Sep	20	2:00	0	S
    --Rule	Zion	2016	only	-	Apr	 1	2:00	1:00	D
    --Rule	Zion	2016	only	-	Oct	 9	2:00	0	S
    --Rule	Zion	2017	2021	-	Mar	Fri>=26	2:00	1:00	D
    --Rule	Zion	2017	only	-	Sep	24	2:00	0	S
    --Rule	Zion	2018	only	-	Sep	16	2:00	0	S
    --Rule	Zion	2019	only	-	Oct	 6	2:00	0	S
    --Rule	Zion	2020	only	-	Sep	27	2:00	0	S
    --Rule	Zion	2021	only	-	Sep	12	2:00	0	S
    --Rule	Zion	2022	only	-	Apr	 1	2:00	1:00	D
    --Rule	Zion	2022	only	-	Oct	 2	2:00	0	S
    --Rule	Zion	2023	2032	-	Mar	Fri>=26	2:00	1:00	D
    --Rule	Zion	2023	only	-	Sep	24	2:00	0	S
    --Rule	Zion	2024	only	-	Oct	 6	2:00	0	S
    --Rule	Zion	2025	only	-	Sep	28	2:00	0	S
    --Rule	Zion	2026	only	-	Sep	20	2:00	0	S
    --Rule	Zion	2027	only	-	Oct	10	2:00	0	S
    --Rule	Zion	2028	only	-	Sep	24	2:00	0	S
    --Rule	Zion	2029	only	-	Sep	16	2:00	0	S
    --Rule	Zion	2030	only	-	Oct	 6	2:00	0	S
    --Rule	Zion	2031	only	-	Sep	21	2:00	0	S
    --Rule	Zion	2032	only	-	Sep	12	2:00	0	S
    --Rule	Zion	2033	only	-	Apr	 1	2:00	1:00	D
    --Rule	Zion	2033	only	-	Oct	 2	2:00	0	S
    --Rule	Zion	2034	2037	-	Mar	Fri>=26	2:00	1:00	D
    --Rule	Zion	2034	only	-	Sep	17	2:00	0	S
    --Rule	Zion	2035	only	-	Oct	 7	2:00	0	S
    --Rule	Zion	2036	only	-	Sep	28	2:00	0	S
    --Rule	Zion	2037	only	-	Sep	13	2:00	0	S
    -+
    -+# From Ephraim Silverberg (2012-10-18):
    -+
    -+# Yesterday, the Interior Ministry Committee, after more than a year
    -+# past, approved sending the proposed June 2011 changes to the Time
    -+# Decree Law back to the Knesset for second and third (final) votes
    -+# before the upcoming elections on Jan. 22, 2013.  Hence, although the
    -+# changes are not yet law, they are expected to be so before February 2013.
    -+#
    -+# As of 2013, DST starts at 02:00 on the Friday before the last Sunday in March.
    -+# DST ends at 02:00 on the first Sunday after October 1, unless it occurs on the
    -+# second day of the Jewish Rosh Hashana holiday, in which case DST ends a day
    -+# later (i.e. at 02:00 the first Monday after October 2).
    -+# [Rosh Hashana holidays are factored in until 2100.]
    -+
    -+# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -+Rule	Zion	2013	max	-	Mar	Fri>=23	2:00	1:00	D
    -+Rule	Zion	2013	2026	-	Oct	Sun>=2	2:00	0	S
    -+Rule	Zion	2027	only	-	Oct	Mon>=3	2:00	0	S
    -+Rule	Zion	2028	max	-	Oct	Sun>=2	2:00	0	S
    -+# The following rules are commented out for now, as they break older
    -+# versions of zic that support only signed 32-bit timestamps, i.e.,
    -+# through 2038-01-19 03:14:07 UTC.
    -+#Rule	Zion	2028	2053	-	Oct	Sun>=2	2:00	0	S
    -+#Rule	Zion	2054	only	-	Oct	Mon>=3	2:00	0	S
    -+#Rule	Zion	2055	2080	-	Oct	Sun>=2	2:00	0	S
    -+#Rule	Zion	2081	only	-	Oct	Mon>=3	2:00	0	S
    -+#Rule	Zion	2082	max	-	Oct	Sun>=2	2:00	0	S
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Asia/Jerusalem	2:20:56 -	LMT	1880
    -@@ -1385,6 +1382,16 @@
    - # From Arthur David Olson (2009-04-06):
    - # We still have Jordan switching to DST on Thursdays in 2000 and 2001.
    - 
    -+# From Steffen Thorsen (2012-10-25):
    -+# Yesterday the government in Jordan announced that they will not
    -+# switch back to standard time this winter, so the will stay on DST
    -+# until about the same time next year (at least).
    -+# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?NewsID=88950
    -+#
    -+# From Paul Eggert (2012-10-25):
    -+# For now, assume this is just a one-year measure.  If it becomes
    -+# permanent, we should move Jordan from EET to AST effective tomorrow.
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Jordan	1973	only	-	Jun	6	0:00	1:00	S
    - Rule	Jordan	1973	1975	-	Oct	1	0:00	0	-
    -@@ -1413,7 +1420,8 @@
    - Rule	Jordan	2003	only	-	Oct	24	0:00s	0	-
    - Rule	Jordan	2004	only	-	Oct	15	0:00s	0	-
    - Rule	Jordan	2005	only	-	Sep	lastFri	0:00s	0	-
    --Rule	Jordan	2006	max	-	Oct	lastFri	0:00s	0	-
    -+Rule	Jordan	2006	2011	-	Oct	lastFri	0:00s	0	-
    -+Rule	Jordan	2013	max	-	Oct	lastFri	0:00s	0	-
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Asia/Amman	2:23:44 -	LMT	1931
    - 			2:00	Jordan	EE%sT
    -@@ -2316,6 +2324,8 @@
    - 
    - # From Arthur David Olson (2011-09-20):
    - # 2011 transitions per http://www.timeanddate.com as of 2011-09-20.
    -+# From Paul Eggert (2012-10-12):
    -+# 2012 transitions per http://www.timeanddate.com as of 2012-10-12.
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
    -@@ -2326,7 +2336,7 @@
    - 			2:00 Palestine	EE%sT	2011 Apr  2 12:01
    - 			2:00	1:00	EEST	2011 Aug  1
    - 			2:00	-	EET	2012 Mar 30
    --			2:00	1:00	EEST	2012 Sep 28
    -+			2:00	1:00	EEST	2012 Sep 21 1:00
    - 			2:00	-	EET
    - 
    - Zone	Asia/Hebron	2:20:23	-	LMT	1900 Oct
    -@@ -2341,7 +2351,7 @@
    - 			2:00	-	EET	2011 Aug 30
    - 			2:00	1:00	EEST	2011 Sep 30 3:00
    - 			2:00	-	EET	2012 Mar 30
    --			2:00	1:00	EEST	2012 Sep 28 3:00
    -+			2:00	1:00	EEST	2012 Sep 21 1:00
    - 			2:00	-	EET
    - 
    - # Paracel Is
    ---- openjdk/jdk/make/sun/javazic/tzdata/australasia
    -+++ openjdk/jdk/make/sun/javazic/tzdata/australasia
    -@@ -651,6 +651,23 @@
    - # Although Samoa has used Daylight Saving Time in the 2010-2011 and 2011-2012
    - # seasons, there is not yet any indication that this trend will continue on
    - # a regular basis. For now, we have explicitly listed the transitions below.
    -+#
    -+# From Nicky (2012-09-10):
    -+# Daylight Saving Time commences on Sunday 30th September 2012 and
    -+# ends on Sunday 7th of April 2013.
    -+#
    -+# Please find link below for more information.
    -+# http://www.mcil.gov.ws/mcil_publications.html
    -+#
    -+# That publication also includes dates for Summer of 2013/4 as well
    -+# which give the impression of a pattern in selecting dates for the
    -+# future, so for now, we will guess this will continue.
    -+
    -+# Western Samoa
    -+# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -+Rule	WS	2012	max	-	Sep	lastSun	3:00	1	D
    -+Rule	WS	2012	max	-	Apr	Sun>=1	4:00	0	-
    -+# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone Pacific/Apia	 12:33:04 -	LMT	1879 Jul  5
    - 			-11:26:56 -	LMT	1911
    - 			-11:30	-	SAMT	1950		# Samoa Time
    -@@ -658,8 +675,8 @@
    - 			-11:00	1:00	WSDT	2011 Apr 2 4:00
    - 			-11:00	-	WST	2011 Sep 24 3:00
    - 			-11:00	1:00	WSDT	2011 Dec 30
    --			 13:00	1:00	WSDT	2012 Apr 1 4:00
    --			 13:00	-	WST
    -+			 13:00	1:00	WSDT	2012 Apr Sun>=1 4:00
    -+			 13:00	WS	WS%sT
    - 
    - # Solomon Is
    - # excludes Bougainville, for which see Papua New Guinea
    ---- openjdk/jdk/make/sun/javazic/tzdata/northamerica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/northamerica
    -@@ -2820,6 +2820,13 @@
    - # http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html
    - # 
    - 
    -+# From Steffen Thorsen (2012-11-03):
    -+# Radio Reloj and many other sources report that Cuba is changing back
    -+# to standard time on 2012-11-04:
    -+# http://www.radioreloj.cu/index.php/noticias-radio-reloj/36-nacionales/9961-regira-horario-normal-en-cuba-desde-el-domingo-cuatro-de-noviembre
    -+# From Paul Eggert (2012-11-03):
    -+# For now, assume the future rule is first Sunday in November.
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Cuba	1928	only	-	Jun	10	0:00	1:00	D
    - Rule	Cuba	1928	only	-	Oct	10	0:00	0	S
    -@@ -2857,7 +2864,7 @@
    - Rule	Cuba	2011	only	-	Mar	Sun>=15	0:00s	1:00	D
    - Rule	Cuba	2011	only	-	Nov	13	0:00s	0	S
    - Rule	Cuba	2012	only	-	Apr	1	0:00s	1:00	D
    --Rule	Cuba	2012	max	-	Oct	lastSun	0:00s	0	S
    -+Rule	Cuba	2012	max	-	Nov	Sun>=1	0:00s	0	S
    - Rule	Cuba	2013	max	-	Mar	Sun>=8	0:00s	1:00	D
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    ---- openjdk/jdk/make/sun/javazic/tzdata/southamerica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/southamerica
    -@@ -852,6 +852,15 @@
    - # http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6
    - # 
    - 
    -+# From Kelley Cook (2012-10-16):
    -+# The governor of state of Bahia in Brazil announced on Thursday that
    -+# due to public pressure, he is reversing the DST policy they implemented
    -+# last year and will not be going to Summer Time on October 21st....
    -+# http://www.correio24horas.com.br/r/artigo/apos-pressoes-wagner-suspende-horario-de-verao-na-bahia
    -+
    -+# From Rodrigo Severo (2012-10-16):
    -+# Tocantins state will have DST.
    -+# http://noticias.terra.com.br/brasil/noticias/0,,OI6232536-EI306.html
    - 
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - # Decree 20,466 (1931-10-01)
    -@@ -1071,7 +1080,8 @@
    - 			-3:00	Brazil	BR%sT	1990 Sep 17
    - 			-3:00	-	BRT	1995 Sep 14
    - 			-3:00	Brazil	BR%sT	2003 Sep 24
    --			-3:00	-	BRT
    -+			-3:00	-	BRT	2012 Oct 21
    -+			-3:00	Brazil	BR%sT
    - #
    - # Alagoas (AL), Sergipe (SE)
    - Zone America/Maceio	-2:22:52 -	LMT	1914
    -@@ -1090,7 +1100,8 @@
    - Zone America/Bahia	-2:34:04 -	LMT	1914
    - 			-3:00	Brazil	BR%sT	2003 Sep 24
    - 			-3:00	-	BRT	2011 Oct 16
    --			-3:00	Brazil	BR%sT
    -+			-3:00	Brazil	BR%sT	2012 Oct 21
    -+			-3:00	-	BRT
    - #
    - # Goias (GO), Distrito Federal (DF), Minas Gerais (MG),
    - # Espirito Santo (ES), Rio de Janeiro (RJ), Sao Paulo (SP), Parana (PR),
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/8006935-long_keys_in_hmac_prf.patch openjdk-6-6b34-1.13.6/patches/openjdk/8006935-long_keys_in_hmac_prf.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/8006935-long_keys_in_hmac_prf.patch	2014-10-09 02:07:22.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/8006935-long_keys_in_hmac_prf.patch	2015-01-20 09:12:43.000000000 +0000
    @@ -3,7 +3,7 @@
     +++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/TlsPrfGenerator.java	2014-10-08 23:47:13.825128435 +0100
     @@ -1,5 +1,5 @@
      /*
    -- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
    +- * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
     + * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
       * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       *
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/8009987-tzdata2013b.patch openjdk-6-6b34-1.13.6/patches/openjdk/8009987-tzdata2013b.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/8009987-tzdata2013b.patch	2014-10-08 18:39:25.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/8009987-tzdata2013b.patch	1970-01-01 00:00:00.000000000 +0000
    @@ -1,2275 +0,0 @@
    -# HG changeset patch
    -# User peytoia
    -# Date 1363347351 -32400
    -# Node ID d0902320c58f1b4c339e2aec3f120c9d6e3ea732
    -# Parent  1f833e4211177700a66cc22a0c5a794448c1a29a
    -8009987: (tz) Support tzdata2013b
    -Reviewed-by: okutsu
    -
    ---- openjdk/jdk/make/sun/javazic/tzdata/VERSION
    -+++ openjdk/jdk/make/sun/javazic/tzdata/VERSION
    -@@ -21,4 +21,4 @@
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    - #
    --tzdata2012i
    -+tzdata2013b
    ---- openjdk/jdk/make/sun/javazic/tzdata/africa
    -+++ openjdk/jdk/make/sun/javazic/tzdata/africa
    -@@ -27,9 +27,9 @@
    - 
    - # This data is by no means authoritative; if you think you know better,
    - # go ahead and edit the file (and please send any changes to
    --# tz@elsie.nci.nih.gov for general use in the future).
    -+# tz@iana.org for general use in the future).
    - 
    --# From Paul Eggert (2006-03-22):
    -+# From Paul Eggert (2013-02-21):
    - #
    - # A good source for time zone historical data outside the U.S. is
    - # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
    -@@ -48,6 +48,10 @@
    - # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
    - # I found in the UCLA library.
    - #
    -+# For data circa 1899, a common source is:
    -+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
    -+# .
    -+#
    - # A reliable and entertaining source about time zones is
    - # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
    - #
    -@@ -139,8 +143,12 @@
    - 			1:00	-	WAT
    - 
    - # Botswana
    -+# From Paul Eggert (2013-02-21):
    -+# Milne says they were regulated by the Cape Town Signal in 1899;
    -+# assume they switched to 2:00 when Cape Town did.
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Africa/Gaborone	1:43:40 -	LMT	1885
    -+			1:30	-	SAST	1903 Mar
    - 			2:00	-	CAT	1943 Sep 19 2:00
    - 			2:00	1:00	CAST	1944 Mar 19 2:00
    - 			2:00	-	CAT
    -@@ -212,6 +220,11 @@
    - 
    - # Egypt
    - 
    -+# Milne says Cairo used 2:05:08.9, the local mean time of the Abbasizeh
    -+# observatory; round to nearest.  Milne also says that the official time for
    -+# Egypt was mean noon at the Great Pyramid, 2:04:30.5, but apparently this
    -+# did not apply to Cairo, Alexandria, or Port Said.
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Egypt	1940	only	-	Jul	15	0:00	1:00	S
    - Rule	Egypt	1940	only	-	Oct	 1	0:00	0	-
    -@@ -352,7 +365,7 @@
    - Rule	Egypt	2010	only	-	Sep	lastThu	23:00s	0	-
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone	Africa/Cairo	2:05:00 -	LMT	1900 Oct
    -+Zone	Africa/Cairo	2:05:09 -	LMT	1900 Oct
    - 			2:00	Egypt	EE%sT
    - 
    - # Equatorial Guinea
    -@@ -447,6 +460,20 @@
    - 
    - # Libya
    - 
    -+# From Even Scharning (2012-11-10):
    -+# Libya set their time one hour back at 02:00 on Saturday November 10.
    -+# http://www.libyaherald.com/2012/11/04/clocks-to-go-back-an-hour-on-saturday/
    -+# Here is an official source [in Arabic]: http://ls.ly/fb6Yc
    -+#
    -+# Steffen Thorsen forwarded a translation (2012-11-10) in
    -+# http://mm.icann.org/pipermail/tz/2012-November/018451.html
    -+#
    -+# From Tim Parenti (2012-11-11):
    -+# Treat the 2012-11-10 change as a zone change from UTC+2 to UTC+1.
    -+# The DST rules planned for 2013 and onward roughly mirror those of Europe
    -+# (either two days before them or five days after them, so as to fall on
    -+# lastFri instead of lastSun).
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Libya	1951	only	-	Oct	14	2:00	1:00	S
    - Rule	Libya	1952	only	-	Jan	 1	0:00	0	-
    -@@ -461,17 +488,21 @@
    - Rule	Libya	1986	only	-	Oct	 3	0:00	0	-
    - Rule	Libya	1987	1989	-	Apr	 1	0:00	1:00	S
    - Rule	Libya	1987	1989	-	Oct	 1	0:00	0	-
    -+Rule	Libya	1997	only	-	Apr	 4	0:00	1:00	S
    -+Rule	Libya	1997	only	-	Oct	 4	0:00	0	-
    -+Rule	Libya	2013	max	-	Mar	lastFri	1:00	1:00	S
    -+Rule	Libya	2013	max	-	Oct	lastFri	2:00	0	-
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Africa/Tripoli	0:52:44 -	LMT	1920
    - 			1:00	Libya	CE%sT	1959
    - 			2:00	-	EET	1982
    - 			1:00	Libya	CE%sT	1990 May  4
    --# The following entries are from Shanks & Pottenger;
    -+# The 1996 and 1997 entries are from Shanks & Pottenger;
    - # the IATA SSIM data contain some obvious errors.
    - 			2:00	-	EET	1996 Sep 30
    --			1:00	-	CET	1997 Apr  4
    --			1:00	1:00	CEST	1997 Oct  4
    --			2:00	-	EET
    -+			1:00	Libya	CE%sT	1997 Oct  4
    -+			2:00	-	EET	2012 Nov 10 2:00
    -+			1:00	Libya	CE%sT
    - 
    - # Madagascar
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -@@ -838,6 +869,41 @@
    - # 3:00 am Friday, July 20, 2012 and will again be advanced by 60 minutes
    - # August 20, 2012 from 2:00 am.
    - 
    -+# From Paul Eggert (2013-03-06):
    -+# Morocco's daylight-saving transitions due to Ramadan seem to be
    -+# announced a bit in advance.  On 2012-07-11 the Moroccan government
    -+# announced that year's Ramadan daylight-saving transitions would be
    -+# 2012-07-20 and 2012-08-20; see
    -+# .
    -+#
    -+# To estimate what the Moroccan government will do in future years,
    -+# transition dates for 2013 through 2021 were determined by running
    -+# the following program under GNU Emacs 24.3:
    -+#
    -+# (let ((islamic-year 1434))
    -+#   (while (< islamic-year 1444)
    -+#     (let ((a
    -+#	     (calendar-gregorian-from-absolute
    -+#	      (calendar-islamic-to-absolute (list 9 1 islamic-year))))
    -+#	    (b
    -+#	     (calendar-gregorian-from-absolute
    -+#	      (calendar-islamic-to-absolute (list 10 1 islamic-year)))))
    -+#	(insert
    -+#	 (format
    -+#	  (concat "Rule\tMorocco\t%d\tonly\t-\t%s\t %2d\t 3:00\t0\t-\n"
    -+#		  "Rule\tMorocco\t%d\tonly\t-\t%s\t %2d\t 2:00\t1:00\tS\n")
    -+#	  (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
    -+#	  (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
    -+#     (setq islamic-year (+ 1 islamic-year))))
    -+#
    -+# with the results hand-edited for 2020-2022, when the normal spring-forward
    -+# date falls during the estimated Ramadan.
    -+#
    -+# From 2023 through 2038 Ramadan is not predicted to overlap with
    -+# daylight saving time.  Starting in 2039 there will be overlap again,
    -+# but 32-bit time_t values roll around in 2038 so for now do not worry
    -+# about dates after 2038.
    -+
    - # RULE	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - 
    - Rule	Morocco	1939	only	-	Sep	12	 0:00	1:00	S
    -@@ -863,10 +929,28 @@
    - Rule	Morocco	2010	only	-	Aug	 8	 0:00	0	-
    - Rule	Morocco	2011	only	-	Apr	 3	 0:00	1:00	S
    - Rule	Morocco	2011	only	-	Jul	 31	 0	0	-
    --Rule	Morocco	2012	max	-	Apr	 lastSun 2:00	1:00	S
    -+Rule	Morocco	2012	2019	-	Apr	 lastSun 2:00	1:00	S
    - Rule	Morocco	2012	max	-	Sep	 lastSun 3:00	0	-
    - Rule	Morocco	2012	only	-	Jul	 20	 3:00	0	-
    - Rule	Morocco	2012	only	-	Aug	 20	 2:00	1:00	S
    -+Rule	Morocco	2013	only	-	Jul	  9	 3:00	0	-
    -+Rule	Morocco	2013	only	-	Aug	  8	 2:00	1:00	S
    -+Rule	Morocco	2014	only	-	Jun	 29	 3:00	0	-
    -+Rule	Morocco	2014	only	-	Jul	 29	 2:00	1:00	S
    -+Rule	Morocco	2015	only	-	Jun	 18	 3:00	0	-
    -+Rule	Morocco	2015	only	-	Jul	 18	 2:00	1:00	S
    -+Rule	Morocco	2016	only	-	Jun	  7	 3:00	0	-
    -+Rule	Morocco	2016	only	-	Jul	  7	 2:00	1:00	S
    -+Rule	Morocco	2017	only	-	May	 27	 3:00	0	-
    -+Rule	Morocco	2017	only	-	Jun	 26	 2:00	1:00	S
    -+Rule	Morocco	2018	only	-	May	 16	 3:00	0	-
    -+Rule	Morocco	2018	only	-	Jun	 15	 2:00	1:00	S
    -+Rule	Morocco	2019	only	-	May	  6	 3:00	0	-
    -+Rule	Morocco	2019	only	-	Jun	  5	 2:00	1:00	S
    -+Rule	Morocco	2020	only	-	May	 24	 2:00	1:00	S
    -+Rule	Morocco	2021	only	-	May	 13	 2:00	1:00	S
    -+Rule	Morocco	2022	only	-	May	  3	 2:00	1:00	S
    -+Rule	Morocco	2023	max	-	Apr	 lastSun 2:00	1:00	S
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
    ---- openjdk/jdk/make/sun/javazic/tzdata/antarctica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/antarctica
    -@@ -73,10 +73,8 @@
    - Rule	ChileAQ	2010	only	-	Apr	Sun>=1	3:00u	0	-
    - Rule	ChileAQ	2011	only	-	May	Sun>=2	3:00u	0	-
    - Rule	ChileAQ	2011	only	-	Aug	Sun>=16	4:00u	1:00	S
    --Rule	ChileAQ	2012	only	-	Apr	Sun>=23	3:00u	0	-
    --Rule	ChileAQ	2012	only	-	Sep	Sun>=2	4:00u	1:00	S
    --Rule	ChileAQ	2013	max	-	Mar	Sun>=9	3:00u	0	-
    --Rule	ChileAQ	2013	max	-	Oct	Sun>=9	4:00u	1:00	S
    -+Rule	ChileAQ	2012	max	-	Apr	Sun>=23	3:00u	0	-
    -+Rule	ChileAQ	2012	max	-	Sep	Sun>=2	4:00u	1:00	S
    - 
    - # These rules are stolen from the `australasia' file.
    - Rule	AusAQ	1917	only	-	Jan	 1	0:01	1:00	-
    ---- openjdk/jdk/make/sun/javazic/tzdata/asia
    -+++ openjdk/jdk/make/sun/javazic/tzdata/asia
    -@@ -27,9 +27,9 @@
    - 
    - # This data is by no means authoritative; if you think you know better,
    - # go ahead and edit the file (and please send any changes to
    --# tz@elsie.nci.nih.gov for general use in the future).
    -+# tz@iana.org for general use in the future).
    - 
    --# From Paul Eggert (2006-03-22):
    -+# From Paul Eggert (2013-02-21):
    - #
    - # A good source for time zone historical data outside the U.S. is
    - # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
    -@@ -48,6 +48,10 @@
    - # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
    - # I found in the UCLA library.
    - #
    -+# For data circa 1899, a common source is:
    -+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
    -+# .
    -+#
    - # A reliable and entertaining source about time zones is
    - # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
    - #
    -@@ -302,9 +306,12 @@
    - 			8:00	-	BNT
    - 
    - # Burma / Myanmar
    -+
    -+# Milne says 6:24:40 was the meridian of the time ball observatory at Rangoon.
    -+
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Asia/Rangoon	6:24:40 -	LMT	1880		# or Yangon
    --			6:24:36	-	RMT	1920	   # Rangoon Mean Time?
    -+			6:24:40	-	RMT	1920	   # Rangoon Mean Time?
    - 			6:30	-	BURT	1942 May   # Burma Time
    - 			9:00	-	JST	1945 May 3
    - 			6:30	-	MMT		   # Myanmar Time
    -@@ -407,7 +414,8 @@
    - 			8:00	PRC	C%sT
    - # Zhongyuan Time ("Central plain Time")
    - # most of China
    --Zone	Asia/Shanghai	8:05:52	-	LMT	1928
    -+# Milne gives 8:05:56.7; round to nearest.
    -+Zone	Asia/Shanghai	8:05:57	-	LMT	1928
    - 			8:00	Shang	C%sT	1949
    - 			8:00	PRC	C%sT
    - # Long-shu Time (probably due to Long and Shu being two names of that area)
    -@@ -504,6 +512,10 @@
    - 			8:00	PRC	C%sT
    - 
    - 
    -+# Hong Kong (Xianggang)
    -+
    -+# Milne gives 7:36:41.7; round this.
    -+
    - # From Lee Yiu Chung (2009-10-24):
    - # I found there are some mistakes for the...DST rule for Hong
    - # Kong. [According] to the DST record from Hong Kong Observatory (actually,
    -@@ -570,7 +582,6 @@
    - # The Japanese surrender of Hong Kong was signed 1945-09-15.
    - # For lack of anything better, use start of those days as the transition times.
    - 
    --# Hong Kong (Xianggang)
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	HK	1941	only	-	Apr	1	3:30	1:00	S
    - Rule	HK	1941	only	-	Sep	30	3:30	0	-
    -@@ -592,7 +603,7 @@
    - Rule	HK	1979	only	-	May	Sun>=8	3:30	1:00	S
    - Rule	HK	1979	only	-	Oct	Sun>=16	3:30	0	-
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone	Asia/Hong_Kong	7:36:36 -	LMT	1904 Oct 30
    -+Zone	Asia/Hong_Kong	7:36:42 -	LMT	1904 Oct 30
    - 			8:00	HK	HK%sT	1941 Dec 25
    - 			9:00	-	JST	1945 Sep 15
    - 			8:00	HK	HK%sT
    -@@ -669,6 +680,9 @@
    - ###############################################################################
    - 
    - # Cyprus
    -+#
    -+# Milne says the Eastern Telegraph Company used 2:14:00.  Stick with LMT.
    -+#
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Cyprus	1975	only	-	Apr	13	0:00	1:00	S
    - Rule	Cyprus	1975	only	-	Oct	12	0:00	0	-
    -@@ -1222,7 +1236,6 @@
    - Rule	Zion	2012	only	-	Sep	23	2:00	0	S
    - 
    - # From Ephraim Silverberg (2012-10-18):
    --
    - # Yesterday, the Interior Ministry Committee, after more than a year
    - # past, approved sending the proposed June 2011 changes to the Time
    - # Decree Law back to the Knesset for second and third (final) votes
    -@@ -1235,6 +1248,10 @@
    - # later (i.e. at 02:00 the first Monday after October 2).
    - # [Rosh Hashana holidays are factored in until 2100.]
    - 
    -+# From Ephraim Silverberg (2012-11-05):
    -+# The Knesset passed today (in second and final readings) the amendment to the
    -+# Time Decree Law making the changes ... law.
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Zion	2013	max	-	Mar	Fri>=23	2:00	1:00	D
    - Rule	Zion	2013	2026	-	Oct	Sun>=2	2:00	0	S
    -@@ -1824,8 +1841,11 @@
    - 			5:45	-	NPT	# Nepal Time
    - 
    - # Oman
    -+
    -+# Milne says 3:54:24 was the meridian of the Muscat Tidal Observatory.
    -+
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone	Asia/Muscat	3:54:20 -	LMT	1920
    -+Zone	Asia/Muscat	3:54:24 -	LMT	1920
    - 			4:00	-	GST
    - 
    - # Pakistan
    -@@ -2072,8 +2092,7 @@
    - # occurred before our cutoff date of 1970.
    - # However, as we get more information, we may need to add entries
    - # for parts of the West Bank as they transitioned from Israel's rules
    --# to Palestine's rules.  If you have more info about this, please
    --# send it to tz@elsie.nci.nih.gov for incorporation into future editions.
    -+# to Palestine's rules.
    - 
    - # From IINS News Service - Israel - 1998-03-23 10:38:07 Israel time,
    - # forwarded by Ephraim Silverberg:
    -@@ -2421,6 +2440,13 @@
    - # no information
    - 
    - # Sri Lanka
    -+
    -+# From Paul Eggert (2013-02-21):
    -+# Milne says "Madras mean time use from May 1, 1898.  Prior to this Colombo
    -+# mean time, 5h. 4m. 21.9s. F., was used."  But 5:04:21.9 differs considerably
    -+# from Colombo's meridian 5:19:24, so for now ignore Milne and stick with
    -+# Shanks and Pottenger.
    -+
    - # From Paul Eggert (1996-09-03):
    - # "Sri Lanka advances clock by an hour to avoid blackout"
    - # (www.virtual-pc.com/lankaweb/news/items/240596-2.html, 1996-05-24,
    -@@ -2720,6 +2746,12 @@
    - 
    - # Vietnam
    - 
    -+# From Paul Eggert (2013-02-21):
    -+# Milne gives 7:16:56 for the meridian of Saigon in 1899, as being
    -+# used in Lower Laos, Cambodia, and Annam.  But this is quite a ways
    -+# from Saigon's location.  For now, ignore this and stick with Shanks
    -+# and Pottenger.
    -+
    - # From Arthur David Olson (2008-03-18):
    - # The English-language name of Vietnam's most populous city is "Ho Chi Min City";
    - # we use Ho_Chi_Minh below to avoid a name of more than 14 characters.
    -@@ -2733,6 +2765,10 @@
    - 			7:00	-	ICT
    - 
    - # Yemen
    -+
    -+# Milne says 2:59:54 was the meridian of the saluting battery at Aden,
    -+# and that Yemen was at 1:55:56, the meridian of the Hagia Sophia.
    -+
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone	Asia/Aden	3:00:48	-	LMT	1950
    -+Zone	Asia/Aden	2:59:54	-	LMT	1950
    - 			3:00	-	AST
    ---- openjdk/jdk/make/sun/javazic/tzdata/australasia
    -+++ openjdk/jdk/make/sun/javazic/tzdata/australasia
    -@@ -269,6 +269,9 @@
    - 			6:30	-	CCT	# Cocos Islands Time
    - 
    - # Fiji
    -+
    -+# Milne gives 11:55:44 for Suva.
    -+
    - # From Alexander Krivenyshev (2009-11-10):
    - # According to Fiji Broadcasting Corporation,  Fiji plans to re-introduce DST
    - # from November 29th 2009  to April 25th 2010.
    -@@ -362,7 +365,7 @@
    - Rule	Fiji	2011	only	-	Mar	Sun>=1	3:00	0	-
    - Rule	Fiji	2012	max	-	Jan	Sun>=18	3:00	0	-
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone	Pacific/Fiji	11:53:40 -	LMT	1915 Oct 26	# Suva
    -+Zone	Pacific/Fiji	11:55:44 -	LMT	1915 Oct 26	# Suva
    - 			12:00	Fiji	FJ%sT	# Fiji Time
    - 
    - # French Polynesia
    -@@ -803,9 +806,9 @@
    - 
    - # This data is by no means authoritative; if you think you know better,
    - # go ahead and edit the file (and please send any changes to
    --# tz@elsie.nci.nih.gov for general use in the future).
    -+# tz@iana.org for general use in the future).
    - 
    --# From Paul Eggert (2006-03-22):
    -+# From Paul Eggert (2013-02-21):
    - # A good source for time zone historical data outside the U.S. is
    - # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
    - # San Diego: ACS Publications, Inc. (2003).
    -@@ -823,6 +826,10 @@
    - # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
    - # I found in the UCLA library.
    - #
    -+# For data circa 1899, a common source is:
    -+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
    -+# .
    -+#
    - # A reliable and entertaining source about time zones is
    - # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
    - #
    ---- openjdk/jdk/make/sun/javazic/tzdata/europe
    -+++ openjdk/jdk/make/sun/javazic/tzdata/europe
    -@@ -27,7 +27,7 @@
    - 
    - # This data is by no means authoritative; if you think you know better,
    - # go ahead and edit the file (and please send any changes to
    --# tz@elsie.nci.nih.gov for general use in the future).
    -+# tz@iana.org for general use in the future).
    - 
    - # From Paul Eggert (2006-03-22):
    - # A good source for time zone historical data outside the U.S. is
    -@@ -53,6 +53,12 @@
    - #	William Willett, The Waste of Daylight, 19th edition
    - #	 (1914-03)
    - #
    -+#	Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
    -+#	.  He writes:
    -+#	"It is requested that corrections and additions to these tables
    -+#	may be sent to Mr. John Milne, Royal Geographical Society,
    -+#	Savile Row, London."  Nowadays please email them to tz@iana.org.
    -+#
    - #	Brazil's Departamento Servico da Hora (DSH),
    - #	
    - #	History of Summer Time
    -@@ -689,6 +695,8 @@
    - 
    - # Austria
    - 
    -+# Milne says Vienna time was 1:05:21.
    -+
    - # From Paul Eggert (2006-03-22): Shanks & Pottenger give 1918-06-16 and
    - # 1945-11-18, but the Austrian Federal Office of Metrology and
    - # Surveying (BEV) gives 1918-09-16 and for Vienna gives the "alleged"
    -@@ -706,7 +714,7 @@
    - Rule	Austria	1980	only	-	Apr	 6	0:00	1:00	S
    - Rule	Austria	1980	only	-	Sep	28	0:00	0	-
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone	Europe/Vienna	1:05:20 -	LMT	1893 Apr
    -+Zone	Europe/Vienna	1:05:21 -	LMT	1893 Apr
    - 			1:00	C-Eur	CE%sT	1920
    - 			1:00	Austria	CE%sT	1940 Apr  1 2:00s
    - 			1:00	C-Eur	CE%sT	1945 Apr  2 2:00s
    -@@ -1262,6 +1270,21 @@
    - 			1:00	Germany	CE%sT	1980
    - 			1:00	EU	CE%sT
    - 
    -+# From Tobias Conradi (2011-09-12):
    -+# Busingen , surrounded by the Swiss canton
    -+# Schaffhausen, did not start observing DST in 1980 as the rest of DE
    -+# (West Germany at that time) and DD (East Germany at that time) did.
    -+# DD merged into DE, the area is currently covered by code DE in ISO 3166-1,
    -+# which in turn is covered by the zone Europe/Berlin.
    -+#
    -+# Source for the time in Busingen 1980:
    -+# http://www.srf.ch/player/video?id=c012c029-03b7-4c2b-9164-aa5902cd58d3
    -+
    -+# From Arthur David Olson (2012-03-03):
    -+# Busingen and Zurich have shared clocks since 1970.
    -+
    -+Link	Europe/Zurich	Europe/Busingen
    -+
    - # Georgia
    - # Please see the "asia" file for Asia/Tbilisi.
    - # Herodotus (Histories, IV.45) says Georgia north of the Phasis (now Rioni)
    -@@ -2066,6 +2089,70 @@
    - 
    - # Russia
    - 
    -+# From Alexander Krivenyshev (2011-09-15):
    -+# Based on last Russian Government Decree # 725 on August 31, 2011
    -+# (Government document
    -+# 
    -+# http://www.government.ru/gov/results/16355/print/
    -+# 
    -+# in Russian)
    -+# there are few corrections have to be made for some Russian time zones...
    -+# All updated Russian Time Zones were placed in table and translated to English
    -+# by WorldTimeZone.com at the link below:
    -+# 
    -+# http://www.worldtimezone.com/dst_news/dst_news_russia36.htm
    -+# 
    -+
    -+# From Sanjeev Gupta (2011-09-27):
    -+# Scans of [Decree #23 of January 8, 1992] are available at:
    -+# 
    -+# http://government.consultant.ru/page.aspx?1223966
    -+# They are in Cyrillic letters (presumably Russian).
    -+
    -+# From Arthur David Olson (2012-05-09):
    -+# Regarding the instant when clocks in time-zone-shifting parts of Russia
    -+# changed in September 2011:
    -+#
    -+# One source is
    -+# < a href="http://government.ru/gov/results/16355/>
    -+# http://government.ru/gov/results/16355/
    -+# 
    -+# which, according to translate.google.com, begins "Decree of August 31,
    -+# 2011 No 725" and contains no other dates or "effective date" information.
    -+#
    -+# Another source is
    -+# 
    -+# http://www.rg.ru/2011/09/06/chas-zona-dok.html
    -+# 
    -+# which, according to translate.google.com, begins "Resolution of the
    -+# Government of the Russian Federation on August 31, 2011 N 725" and also
    -+# contains "Date first official publication: September 6, 2011 Posted on:
    -+# in the 'RG' - Federal Issue number 5573 September 6, 2011" but which
    -+# does not contain any "effective date" information.
    -+#
    -+# Another source is
    -+# 
    -+# http://en.wikipedia.org/wiki/Oymyakonsky_District#cite_note-RuTime-7
    -+# 
    -+# which, in note 8, contains "Resolution #725 of August 31, 2011...
    -+# Effective as of after 7 days following the day of the official publication"
    -+# but which does not contain any reference to September 6, 2011.
    -+#
    -+# The Wikipedia article refers to
    -+# 
    -+# http://base.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=118896
    -+# 
    -+# which seems to copy the text of the government.ru page.
    -+#
    -+# Tobias Conradi combines Wikipedia's
    -+# "as of after 7 days following the day of the official publication"
    -+# with www.rg.ru's "Date of first official publication: September 6, 2011" to get
    -+# September 13, 2011 as the cutover date (unusually, a Tuesday, as Tobias Conradi notes).
    -+#
    -+# None of the sources indicates a time of day for changing clocks.
    -+#
    -+# Go with 2011-09-13 0:00s.
    -+
    - # From Paul Eggert (2006-03-22):
    - # Except for Moscow after 1919-07-01, I invented the time zone abbreviations.
    - # Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991,
    -@@ -2293,14 +2380,32 @@
    - # [parts of] Respublika Sakha (Yakutiya).
    - 
    - # From Oscar van Vlijmen (2009-11-29):
    --# The Sakha districts are: Bulunskij, Verkhoyanskij, Tomponskij, Ust'-Majskij,
    --# Ust'-Yanskij.
    -+# The Sakha districts are: Bulunskij, Verkhoyanskij, ... Ust'-Yanskij.
    - Zone Asia/Vladivostok	 8:47:44 -	LMT	1922 Nov 15
    - 			 9:00	-	VLAT	1930 Jun 21 # Vladivostok Time
    - 			10:00	Russia	VLA%sT	1991 Mar 31 2:00s
    - 			 9:00	Russia	VLA%sST	1992 Jan 19 2:00s
    - 			10:00	Russia	VLA%sT	2011 Mar 27 2:00s
    - 			11:00	-	VLAT
    -+
    -+# From Arthur David Olson (2012-05-09):
    -+# Tomponskij and Ust'-Majskij switched from Vladivostok time to Yakutsk time
    -+# in 2011.
    -+#
    -+# From Paul Eggert (2012-11-25):
    -+# Shanks and Pottenger (2003) has Khandyga on Yakutsk time.
    -+# Make a wild guess that it switched to Vladivostok time in 2004.
    -+# This transition is no doubt wrong, but we have no better info.
    -+#
    -+Zone Asia/Khandyga	 9:02:13 -	LMT	1919 Dec 15
    -+			 8:00	-	YAKT	1930 Jun 21 # Yakutsk Time
    -+			 9:00	Russia	YAK%sT	1991 Mar 31 2:00s
    -+			 8:00	Russia	YAK%sT	1992 Jan 19 2:00s
    -+			 9:00	Russia	YAK%sT	2004
    -+			10:00	Russia	VLA%sT	2011 Mar 27 2:00s
    -+			11:00	-	VLAT	2011 Sep 13 0:00s # Decree 725?
    -+			10:00	-	YAKT
    -+
    - #
    - # Sakhalinskaya oblast'.
    - # The Zone name should be Yuzhno-Sakhalinsk, but that's too long.
    -@@ -2319,14 +2424,26 @@
    - 
    - # From Oscar van Vlijmen (2009-11-29):
    - # The Sakha districts are: Abyjskij, Allaikhovskij, Verkhhhnekolymskij, Momskij,
    --# Nizhnekolymskij, Ojmyakonskij, Srednekolymskij.
    -+# Nizhnekolymskij, ... Srednekolymskij.
    - Zone Asia/Magadan	10:03:12 -	LMT	1924 May  2
    - 			10:00	-	MAGT	1930 Jun 21 # Magadan Time
    - 			11:00	Russia	MAG%sT	1991 Mar 31 2:00s
    - 			10:00	Russia	MAG%sT	1992 Jan 19 2:00s
    - 			11:00	Russia	MAG%sT	2011 Mar 27 2:00s
    - 			12:00	-	MAGT
    --#
    -+
    -+# From Arthur David Olson (2012-05-09):
    -+# Ojmyakonskij and the Kuril Islands switched from
    -+# Magadan time to Vladivostok time in 2011.
    -+Zone Asia/Ust-Nera	 9:32:54 -	LMT	1919 Dec 15
    -+			 8:00	-	YAKT	1930 Jun 21 # Yakutsk Time
    -+			 9:00	Russia	YAKT	1981 Apr  1
    -+			11:00	Russia	MAG%sT	1991 Mar 31 2:00s
    -+			10:00	Russia	MAG%sT	1992 Jan 19 2:00s
    -+			11:00	Russia	MAG%sT	2011 Mar 27 2:00s
    -+			12:00	-	MAGT	2011 Sep 13 0:00s # Decree 725?
    -+			11:00	-	VLAT
    -+
    - # From Oscar van Vlijmen (2001-08-25): [This region consists of]
    - # Kamchatskaya oblast', Koryakskij avtonomnyj okrug.
    - #
    ---- openjdk/jdk/make/sun/javazic/tzdata/northamerica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/northamerica
    -@@ -29,7 +29,7 @@
    - 
    - # This data is by no means authoritative; if you think you know better,
    - # go ahead and edit the file (and please send any changes to
    --# tz@elsie.nci.nih.gov for general use in the future).
    -+# tz@iana.org for general use in the future).
    - 
    - # From Paul Eggert (1999-03-22):
    - # A reliable and entertaining source about time zones is
    -@@ -1042,6 +1042,9 @@
    - #	William Willett, The Waste of Daylight, 19th edition
    - #	 (1914-03)
    - #
    -+#	Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
    -+#	.
    -+#
    - # See the `europe' file for Greenland.
    - 
    - # Canada
    -@@ -2577,6 +2580,8 @@
    - 
    - # Bahamas
    - #
    -+# For 1899 Milne gives -5:09:29.5; round that.
    -+#
    - # From Sue Williams (2006-12-07):
    - # The Bahamas announced about a month ago that they plan to change their DST
    - # rules to sync with the U.S. starting in 2007....
    -@@ -2586,11 +2591,14 @@
    - Rule	Bahamas	1964	1975	-	Oct	lastSun	2:00	0	S
    - Rule	Bahamas	1964	1975	-	Apr	lastSun	2:00	1:00	D
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone	America/Nassau	-5:09:24 -	LMT	1912 Mar 2
    -+Zone	America/Nassau	-5:09:30 -	LMT	1912 Mar 2
    - 			-5:00	Bahamas	E%sT	1976
    - 			-5:00	US	E%sT
    - 
    - # Barbados
    -+
    -+# For 1899 Milne gives -3:58:29.2; round that.
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Barb	1977	only	-	Jun	12	2:00	1:00	D
    - Rule	Barb	1977	1978	-	Oct	Sun>=1	2:00	0	S
    -@@ -2598,8 +2606,8 @@
    - Rule	Barb	1979	only	-	Sep	30	2:00	0	S
    - Rule	Barb	1980	only	-	Sep	25	2:00	0	S
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone America/Barbados	-3:58:28 -	LMT	1924		# Bridgetown
    --			-3:58:28 -	BMT	1932	  # Bridgetown Mean Time
    -+Zone America/Barbados	-3:58:29 -	LMT	1924		# Bridgetown
    -+			-3:58:29 -	BMT	1932	  # Bridgetown Mean Time
    - 			-4:00	Barb	A%sT
    - 
    - # Belize
    -@@ -2617,6 +2625,9 @@
    - 
    - # Bermuda
    - 
    -+# For 1899 Milne gives -4:19:18.3 as the meridian of the clock tower,
    -+# Bermuda dockyard, Ireland I; round that.
    -+
    - # From Dan Jones, reporting in The Royal Gazette (2006-06-26):
    - 
    - # Next year, however, clocks in the US will go forward on the second Sunday
    -@@ -2626,7 +2637,7 @@
    - # http://www.theroyalgazette.com/apps/pbcs.dll/article?AID=/20060529/NEWS/105290135
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone Atlantic/Bermuda	-4:19:04 -	LMT	1930 Jan  1 2:00    # Hamilton
    -+Zone Atlantic/Bermuda	-4:19:18 -	LMT	1930 Jan  1 2:00    # Hamilton
    - 			-4:00	-	AST	1974 Apr 28 2:00
    - 			-4:00	Bahamas	A%sT	1976
    - 			-4:00	US	A%sT
    -@@ -2638,6 +2649,9 @@
    - 			-5:00	-	EST
    - 
    - # Costa Rica
    -+
    -+# Milne gives -5:36:13.3 as San Jose mean time; round to nearest.
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	CR	1979	1980	-	Feb	lastSun	0:00	1:00	D
    - Rule	CR	1979	1980	-	Jun	Sun>=1	0:00	0	S
    -@@ -2648,14 +2662,19 @@
    - Rule	CR	1992	only	-	Mar	15	0:00	0	S
    - # There are too many San Joses elsewhere, so we'll use `Costa Rica'.
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone America/Costa_Rica	-5:36:20 -	LMT	1890		# San Jose
    --			-5:36:20 -	SJMT	1921 Jan 15 # San Jose Mean Time
    -+Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
    -+			-5:36:13 -	SJMT	1921 Jan 15 # San Jose Mean Time
    - 			-6:00	CR	C%sT
    - # Coco
    - # no information; probably like America/Costa_Rica
    - 
    - # Cuba
    - 
    -+# From Paul Eggert (2013-02-21):
    -+# Milne gives -5:28:50.45 for the observatory at Havana, -5:29:23.57
    -+# for the port, and -5:30 for meteorological observations.
    -+# For now, stick with Shanks & Pottenger.
    -+
    - # From Arthur David Olson (1999-03-29):
    - # The 1999-03-28 exhibition baseball game held in Havana, Cuba, between
    - # the Cuban National Team and the Baltimore Orioles was carried live on
    -@@ -3004,24 +3023,21 @@
    - # apparently using the same start and end date as USA/Canada.
    - # So this means they have already changed their time.
    - #
    --# (Sources in French):
    --# 
    - # http://www.alterpresse.org/spip.php?article12510
    --# 
    --# 
    - # http://radiovision2000haiti.net/home/?p=13253
    --# 
    - #
    --# Our coverage:
    --# 
    --# http://www.timeanddate.com/news/time/haiti-dst-2012.html
    --# 
    --
    - # From Arthur David Olson (2012-03-11):
    - # The alterpresse.org source seems to show a US-style leap from 2:00 a.m. to
    - # 3:00 a.m. rather than the traditional Haitian jump at midnight.
    --# Assume a US-style fall back as well XXX.
    --# Do not yet assume that the change carries forward past 2012 XXX.
    -+# Assume a US-style fall back as well.
    -+
    -+# From Steffen Thorsen (2013-03-10):
    -+# It appears that Haiti is observing DST this year as well, same rules
    -+# as US/Canada.  They did it last year as well, and it looks like they
    -+# are going to observe DST every year now...
    -+#
    -+# http://radiovision2000haiti.net/public/haiti-avis-changement-dheure-dimanche/
    -+# http://www.canalplushaiti.net/?p=6714
    - 
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Haiti	1983	only	-	May	8	0:00	1:00	D
    -@@ -3033,8 +3049,8 @@
    - Rule	Haiti	1988	1997	-	Oct	lastSun	1:00s	0	S
    - Rule	Haiti	2005	2006	-	Apr	Sun>=1	0:00	1:00	D
    - Rule	Haiti	2005	2006	-	Oct	lastSun	0:00	0	S
    --Rule	Haiti	2012	only	-	Mar	Sun>=8	2:00	1:00	D
    --Rule	Haiti	2012	only	-	Nov	Sun>=1	2:00	0	S
    -+Rule	Haiti	2012	max	-	Mar	Sun>=8	2:00	1:00	D
    -+Rule	Haiti	2012	max	-	Nov	Sun>=1	2:00	0	S
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone America/Port-au-Prince -4:49:20 -	LMT	1890
    - 			-4:49	-	PPMT	1917 Jan 24 12:00 # P-a-P MT
    ---- openjdk/jdk/make/sun/javazic/tzdata/southamerica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/southamerica
    -@@ -27,13 +27,17 @@
    - 
    - # This data is by no means authoritative; if you think you know better,
    - # go ahead and edit the file (and please send any changes to
    --# tz@elsie.nci.nih.gov for general use in the future).
    -+# tz@iana.org for general use in the future).
    - 
    - # From Paul Eggert (2006-03-22):
    - # A good source for time zone historical data outside the U.S. is
    - # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
    - # San Diego: ACS Publications, Inc. (2003).
    - #
    -+# For data circa 1899, a common source is:
    -+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
    -+# .
    -+#
    - # Gwillim Law writes that a good source
    - # for recent time zone data is the International Air Transport
    - # Association's Standard Schedules Information Manual (IATA SSIM),
    -@@ -404,21 +408,11 @@
    - # 
    - # is the official page for the Province Government).
    - #
    --# There's also a note in only one of the major national papers (La Nacin) at
    --# 
    -+# There's also a note in only one of the major national papers ...
    - # http://www.lanacion.com.ar/nota.asp?nota_id=1107912
    --# 
    - #
    --# The press release says:
    --#  (...) anunci que el prximo domingo a las 00:00 los puntanos debern
    --# atrasar una hora sus relojes.
    --#
    --# A partir de entonces, San Luis establecer el huso horario propio de
    --# la Provincia. De esta manera, durante el periodo del calendario anual
    --# 2009, el cambio horario quedar comprendido entre las 00:00 del tercer
    --# domingo de marzo y las 24:00 del segundo sbado de octubre.
    --# Quick&dirty translation
    --# (...) announced that next Sunday, at 00:00, Puntanos (the San Luis
    -+# The press release says [quick and dirty translation]:
    -+# ... announced that next Sunday, at 00:00, Puntanos (the San Luis
    - # inhabitants) will have to turn back one hour their clocks
    - #
    - # Since then, San Luis will establish its own Province timezone. Thus,
    -@@ -480,6 +474,9 @@
    - # rules...San Luis is still using "Western ARgentina Time" and it got
    - # stuck on Summer daylight savings time even though the summer is over.
    - 
    -+# From Paul Eggert (2013-02-21):
    -+# Milne says Cordoba time was -4:16:48.2.  Round to the nearest second.
    -+
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - #
    - # Buenos Aires (BA), Capital Federal (CF),
    -@@ -835,9 +832,9 @@
    - 
    - # From Guilherme Bernardes Rodrigues (2011-10-07):
    - # There is news in the media, however there is still no decree about it.
    --# I just send a e-mail to Zulmira Brando at
    -+# I just send a e-mail to Zulmira Brandao at
    - # http://pcdsh01.on.br/ the
    --# oficial agency about time in Brazil, and she confirmed that the old rule is
    -+# official agency about time in Brazil, and she confirmed that the old rule is
    - # still in force.
    - 
    - # From Guilherme Bernardes Rodrigues (2011-10-14)
    -@@ -1266,9 +1263,13 @@
    - # b. Saturday, September 1, 2012, clocks should go forward 60 minutes; that is,
    - # at 23:59:59, instead of passing to 0:00, the time should be adjusted to be
    - # 01:00 on September 2.
    --#
    --# Note that...this is yet another "temporary" change that will be reevaluated
    --# AGAIN in 2013.
    -+
    -+# From Steffen Thorsen (2013-02-15):
    -+# According to several news sources, Chile has extended DST this year,
    -+# they will end DST later and start DST earlier than planned.  They
    -+# hope to save energy.  The new end date is 2013-04-28 00:00 and new
    -+# start date is 2013-09-08 00:00....
    -+# http://www.gob.cl/informa/2013/02/15/gobierno-anuncia-fechas-de-cambio-de-hora-para-el-ano-2013.htm
    - 
    - # NOTE: ChileAQ rules for Antarctic bases are stored separately in the
    - # 'antarctica' file.
    -@@ -1311,10 +1312,8 @@
    - Rule	Chile	2010	only	-	Apr	Sun>=1	3:00u	0	-
    - Rule	Chile	2011	only	-	May	Sun>=2	3:00u	0	-
    - Rule	Chile	2011	only	-	Aug	Sun>=16	4:00u	1:00	S
    --Rule	Chile	2012	only	-	Apr	Sun>=23	3:00u	0	-
    --Rule	Chile	2012	only	-	Sep	Sun>=2	4:00u	1:00	S
    --Rule	Chile	2013	max	-	Mar	Sun>=9	3:00u	0	-
    --Rule	Chile	2013	max	-	Oct	Sun>=9	4:00u	1:00	S
    -+Rule	Chile	2012	max	-	Apr	Sun>=23	3:00u	0	-
    -+Rule	Chile	2012	max	-	Sep	Sun>=2	4:00u	1:00	S
    - # IATA SSIM anomalies: (1992-02) says 1992-03-14;
    - # (1996-09) says 1998-03-08.  Ignore these.
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -@@ -1336,17 +1335,23 @@
    - # San Felix, and Antarctic bases, are like America/Santiago.
    - 
    - # Colombia
    -+
    -+# Milne gives 4:56:16.4 for Bogota time in 1899; round to nearest.  He writes,
    -+# "A variation of fifteen minutes in the public clocks of Bogota is not rare."
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	CO	1992	only	-	May	 3	0:00	1:00	S
    - Rule	CO	1993	only	-	Apr	 4	0:00	0	-
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone	America/Bogota	-4:56:20 -	LMT	1884 Mar 13
    --			-4:56:20 -	BMT	1914 Nov 23 # Bogota Mean Time
    -+Zone	America/Bogota	-4:56:16 -	LMT	1884 Mar 13
    -+			-4:56:16 -	BMT	1914 Nov 23 # Bogota Mean Time
    - 			-5:00	CO	CO%sT	# Colombia Time
    - # Malpelo, Providencia, San Andres
    - # no information; probably like America/Bogota
    - 
    - # Curacao
    -+
    -+# Milne gives 4:35:46.9 for Curacao mean time; round to nearest.
    - #
    - # From Paul Eggert (2006-03-22):
    - # Shanks & Pottenger say that The Bottom and Philipsburg have been at
    -@@ -1363,7 +1368,7 @@
    - # though, as far as we know.
    - #
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone	America/Curacao	-4:35:44 -	LMT	1912 Feb 12	# Willemstad
    -+Zone	America/Curacao	-4:35:47 -	LMT	1912 Feb 12	# Willemstad
    - 			-4:30	-	ANT	1965 # Netherlands Antilles Time
    - 			-4:00	-	AST
    - 
    -@@ -1377,6 +1382,8 @@
    - 
    - # Ecuador
    - #
    -+# Milne says the Sentral and South American Telegraph Company used -5:24:15.
    -+#
    - # From Paul Eggert (2007-03-04):
    - # Apparently Ecuador had a failed experiment with DST in 1992.
    - #  (2007-02-27) and
    -@@ -1583,6 +1590,15 @@
    - # ...
    - Rule	Para	2010	max	-	Oct	Sun>=1	0:00	1:00	S
    - Rule	Para	2010	max	-	Apr	Sun>=8	0:00	0	-
    -+#
    -+# From Steffen Thorsen (2013-03-07):
    -+# Paraguay will end DST on 2013-03-24 00:00....
    -+# They do not tell if this will be a permanent change or just this year....
    -+# http://www.ande.gov.py/interna.php?id=1075
    -+#
    -+# From Paul Eggert (2013-03-07):
    -+# For now, assume it's just this year.
    -+Rule	Para	2013	only	-	Mar	24	0:00	0	-
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone America/Asuncion	-3:50:40 -	LMT	1890
    ---- openjdk/jdk/make/sun/javazic/tzdata/zone.tab
    -+++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab
    -@@ -182,7 +182,8 @@
    - CX	-1025+10543	Indian/Christmas
    - CY	+3510+03322	Asia/Nicosia
    - CZ	+5005+01426	Europe/Prague
    --DE	+5230+01322	Europe/Berlin
    -+DE	+5230+01322	Europe/Berlin	most locations
    -+DE	+4742+00841	Europe/Busingen	Busingen
    - DJ	+1136+04309	Africa/Djibouti
    - DK	+5540+01235	Europe/Copenhagen
    - DM	+1518-06124	America/Dominica
    -@@ -364,8 +365,10 @@
    - RU	+5601+09250	Asia/Krasnoyarsk	Moscow+04 - Yenisei River
    - RU	+5216+10420	Asia/Irkutsk	Moscow+05 - Lake Baikal
    - RU	+6200+12940	Asia/Yakutsk	Moscow+06 - Lena River
    -+RU	+623923+1353314	Asia/Khandyga	Moscow+06 - Tomponsky, Ust-Maysky
    - RU	+4310+13156	Asia/Vladivostok	Moscow+07 - Amur River
    - RU	+4658+14242	Asia/Sakhalin	Moscow+07 - Sakhalin Island
    -+RU	+643337+1431336	Asia/Ust-Nera	Moscow+07 - Oymyakonsky
    - RU	+5934+15048	Asia/Magadan	Moscow+08 - Magadan
    - RU	+5301+15839	Asia/Kamchatka	Moscow+08 - Kamchatka
    - RU	+6445+17729	Asia/Anadyr	Moscow+08 - Bering Sea
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
    -@@ -75,6 +75,8 @@
    -                                      "Central European Summer Time", "CEST"};
    -         String CHAST[] = new String[] {"Chatham Standard Time", "CHAST",
    -                                        "Chatham Daylight Time", "CHADT"};
    -+        String ChST[] = new String[] {"Chamorro Standard Time", "ChST",
    -+                                      "Chamorro Daylight Time", "ChDT"};
    -         String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    -                                       "Chuuk Summer Time", "CHUST"};
    -         String CIT[] = new String[] {"Central Indonesia Time", "CIT",
    -@@ -161,6 +163,8 @@
    -                                       "Pohnpei Summer Time", "PONST"};
    -         String PST[] = new String[] {"Pacific Standard Time", "PST",
    -                                      "Pacific Daylight Time", "PDT"};
    -+        String SAMOA[] = new String[] {"Samoa Standard Time", "SST",
    -+                                       "Samoa Daylight Time", "SDT"};
    -         String SAST[] = new String[] {"South Africa Standard Time", "SAST",
    -                                       "South Africa Summer Time", "SAST"};
    -         String SBT[] = new String[] {"Solomon Is. Time", "SBT",
    -@@ -175,6 +179,14 @@
    -                                      "Turkmenistan Summer Time", "TMST"};
    -         String ULAT[]= new String[] {"Ulaanbaatar Time", "ULAT",
    -                                      "Ulaanbaatar Summer Time", "ULAST"};
    -+        String UTC[] = new String[] {"Coordinated Universal Time", "UTC",
    -+                                     "Coordinated Universal Time", "UTC"};
    -+        String UZT[] = new String[] {"Uzbekistan Time", "UZT",
    -+                                     "Uzbekistan Summer Time", "UZST"};
    -+        String VICTORIA[] = new String[] {"Eastern Standard Time (Victoria)", "EST",
    -+                                          "Eastern Summer Time (Victoria)", "EST"};
    -+        String VLAT[] = new String[] {"Vladivostok Time", "VLAT",
    -+                                      "Vladivostok Summer Time", "VLAST"};
    -         String WART[] = new String[] {"Western Argentine Time", "WART",
    -                                       "Western Argentine Summer Time", "WARST"};
    -         String WAT[] = new String[] {"Western African Time", "WAT",
    -@@ -185,18 +197,10 @@
    -                                      "West Indonesia Summer Time", "WIST"};
    -         String WST_AUS[] = new String[] {"Western Standard Time (Australia)", "WST",
    -                                          "Western Summer Time (Australia)", "WST"};
    --        String SAMOA[] = new String[] {"Samoa Standard Time", "SST",
    --                                       "Samoa Daylight Time", "SDT"};
    -         String WST_SAMOA[] = new String[] {"West Samoa Time", "WST",
    -                                            "West Samoa Daylight Time", "WSDT"};
    --        String ChST[] = new String[] {"Chamorro Standard Time", "ChST",
    --                                      "Chamorro Daylight Time", "ChDT"};
    --        String VICTORIA[] = new String[] {"Eastern Standard Time (Victoria)", "EST",
    --                                          "Eastern Summer Time (Victoria)", "EST"};
    --        String UTC[] = new String[] {"Coordinated Universal Time", "UTC",
    --                                     "Coordinated Universal Time", "UTC"};
    --        String UZT[] = new String[] {"Uzbekistan Time", "UZT",
    --                                     "Uzbekistan Summer Time", "UZST"};
    -+        String YAKT[] = new String[] {"Yakutsk Time", "YAKT",
    -+                                      "Yakutsk Summer Time", "YAKST"};
    - 
    -         return new Object[][] {
    -             {"America/Los_Angeles", PST},
    -@@ -287,7 +291,7 @@
    -             {"Africa/Porto-Novo", WAT},
    -             {"Africa/Sao_Tome", GMT},
    -             {"Africa/Timbuktu", GMT},
    --            {"Africa/Tripoli", EET},
    -+            {"Africa/Tripoli", CET},
    -             {"Africa/Tunis", CET},
    -             {"Africa/Windhoek", WAT},
    -             {"America/Adak", HAST},
    -@@ -533,6 +537,7 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    -+            {"Asia/Khandyga", YAKT},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"Krasnoyarsk Time", "KRAT",
    -                                                "Krasnoyarsk Summer Time", "KRAST"}},
    -@@ -581,11 +586,10 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    -+            {"Asia/Ust-Nera", VLAT},
    -             {"Asia/Vientiane", ICT},
    --            {"Asia/Vladivostok", new String[] {"Vladivostok Time", "VLAT",
    --                                               "Vladivostok Summer Time", "VLAST"}},
    --            {"Asia/Yakutsk", new String[] {"Yakutsk Time", "YAKT",
    --                                           "Yakutsk Summer Time", "YAKST"}},
    -+            {"Asia/Vladivostok", VLAT},
    -+            {"Asia/Yakutsk", YAKT},
    -             {"Asia/Yekaterinburg", new String[] {"Yekaterinburg Time", "YEKT",
    -                                                  "Yekaterinburg Summer Time", "YEKST"}},
    -             {"Asia/Yerevan", ARMT},
    -@@ -669,6 +673,7 @@
    -             {"Europe/Bratislava", CET},
    -             {"Europe/Brussels", CET},
    -             {"Europe/Budapest", CET},
    -+            {"Europe/Busingen", CET},
    -             {"Europe/Chisinau", EET},
    -             {"Europe/Copenhagen", CET},
    -             {"Europe/Dublin", DUBLIN},
    -@@ -748,7 +753,7 @@
    -             {"Jamaica", EST},
    -             {"Japan", JST},
    -             {"Kwajalein", MHT},
    --            {"Libya", EET},
    -+            {"Libya", CET},
    -             {"MET", new String[] {"Middle Europe Time", "MET",
    -                                   "Middle Europe Summer Time", "MEST"}},
    -             {"Mexico/BajaNorte", PST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java
    -@@ -75,6 +75,8 @@
    -                                      "Mitteleurop\u00e4ische Sommerzeit", "MESZ"};
    -         String CHAST[] = new String[] {"Chatham Normalzeit", "CHAST",
    -                                        "Chatham Sommerzeit", "CHADT"};
    -+        String ChST[] = new String[] {"Chamorro Normalzeit", "ChST",
    -+                      "Chamorro Sommerzeit", "ChDT"};
    -         String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    -                                       "Chuuk Summer Time", "CHUST"};
    -         String CIT[] = new String[] {"Zentralindonesische Zeit", "CIT",
    -@@ -161,6 +163,8 @@
    -                                       "Pohnpei Summer Time", "PONST"};
    -         String PST[] = new String[] {"Pazifische Normalzeit", "PST",
    -                                      "Pazifische Sommerzeit", "PDT"};
    -+        String SAMOA[] = new String[] {"Samoa Normalzeit", "SST",
    -+                                       "Samoa Sommerzeit", "SDT"};
    -         String SAST[] = new String[] {"S\u00fcdafrikanische Normalzeit", "SAST",
    -                                       "S\u00fcdafrikanische Sommerzeit", "SAST"};
    -         String SBT[] = new String[] {"Salomoninseln Zeit", "SBT",
    -@@ -175,6 +179,14 @@
    -                                      "Turkmenische Sommerzeit", "TMST"};
    -         String ULAT[]= new String[] {"Ulaanbaatar Zeit", "ULAT",
    -                                      "Ulaanbaatar Sommerzeit", "ULAST"};
    -+        String UTC[] = new String[] {"Koordinierte Universalzeit", "UTC",
    -+                                     "Koordinierte Universalzeit", "UTC"};
    -+        String UZT[] = new String[] {"Usbekistan Zeit", "UZT",
    -+                                     "Usbekistan Sommerzeit", "UZST"};
    -+        String VICTORIA[] = new String[] {"\u00d6stliche Normalzeit (Victoria)", "EST",
    -+                                          "\u00d6stliche Sommerzeit (Victoria)", "EST"};
    -+        String VLAT[] = new String[] {"Wladiwostok Zeit", "VLAT",
    -+                                      "Wladiwostok Sommerzeit", "VLAST"};
    -         String WART[] = new String[] {"Westargentinische Zeit", "WART",
    -                                       "Westargentinische Sommerzeit", "WARST"};
    -         String WAT[] = new String[] {"Westafrikanische Zeit", "WAT",
    -@@ -185,18 +197,10 @@
    -                                      "Westindonesische Sommerzeit", "WIST"};
    -         String WST_AUS[] = new String[] {"Westliche Normalzeit (Australien)", "WST",
    -                                          "Westliche Sommerzeit (Australien)", "WST"};
    --        String SAMOA[] = new String[] {"Samoa Normalzeit", "SST",
    --                                       "Samoa Sommerzeit", "SDT"};
    -         String WST_SAMOA[] = new String[] {"West Samoa Zeit", "WST",
    -                                            "West Samoa Sommerzeit", "WSDT"};
    --        String ChST[] = new String[] {"Chamorro Normalzeit", "ChST",
    --                      "Chamorro Sommerzeit", "ChDT"};
    --        String VICTORIA[] = new String[] {"\u00d6stliche Normalzeit (Victoria)", "EST",
    --                                          "\u00d6stliche Sommerzeit (Victoria)", "EST"};
    --        String UTC[] = new String[] {"Koordinierte Universalzeit", "UTC",
    --                                     "Koordinierte Universalzeit", "UTC"};
    --        String UZT[] = new String[] {"Usbekistan Zeit", "UZT",
    --                                     "Usbekistan Sommerzeit", "UZST"};
    -+        String YAKT[] = new String[] {"Jakutsk Zeit", "YAKT",
    -+                                      "Jakutsk Sommerzeit", "YAKST"};
    - 
    -         return new Object[][] {
    -             {"America/Los_Angeles", PST},
    -@@ -287,7 +291,7 @@
    -             {"Africa/Porto-Novo", WAT},
    -             {"Africa/Sao_Tome", GMT},
    -             {"Africa/Timbuktu", GMT},
    --            {"Africa/Tripoli", EET},
    -+            {"Africa/Tripoli", CET},
    -             {"Africa/Tunis", CET},
    -             {"Africa/Windhoek", WAT},
    -             {"America/Adak", HAST},
    -@@ -533,6 +537,7 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    -+            {"Asia/Khandyga", YAKT},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"Krasnojarsker Zeit", "KRAT",
    -                                                "Krasnojarsker Sommerzeit", "KRAST"}},
    -@@ -581,11 +586,10 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    -+            {"Asia/Ust-Nera", VLAT},
    -             {"Asia/Vientiane", ICT},
    --            {"Asia/Vladivostok", new String[] {"Wladiwostok Zeit", "VLAT",
    --                                               "Wladiwostok Sommerzeit", "VLAST"}},
    --            {"Asia/Yakutsk", new String[] {"Jakutsk Zeit", "YAKT",
    --                                           "Jakutsk Sommerzeit", "YAKST"}},
    -+            {"Asia/Vladivostok", VLAT},
    -+            {"Asia/Yakutsk", YAKT},
    -             {"Asia/Yekaterinburg", new String[] {"Jekaterinburger Zeit", "YEKT",
    -                                                  "Jekaterinburger Sommerzeit", "YEKST"}},
    -             {"Asia/Yerevan", ARMT},
    -@@ -669,6 +673,7 @@
    -             {"Europe/Bratislava", CET},
    -             {"Europe/Brussels", CET},
    -             {"Europe/Budapest", CET},
    -+            {"Europe/Busingen", CET},
    -             {"Europe/Chisinau", EET},
    -             {"Europe/Copenhagen", CET},
    -             {"Europe/Dublin", DUBLIN},
    -@@ -748,7 +753,7 @@
    -             {"Jamaica", EST},
    -             {"Japan", JST},
    -             {"Kwajalein", MHT},
    --            {"Libya", EET},
    -+            {"Libya", CET},
    -             {"MET", new String[] {"Zentraleurop\u00e4ische Zeit", "MET",
    -                                   "Zentraleurop\u00e4ische Sommerzeit", "MEST"}},
    -             {"Mexico/BajaNorte", PST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java
    -@@ -75,6 +75,8 @@
    -                                      "Hora de verano de Europa Central", "CEST"};
    -         String CHAST[] = new String[] {"Hora est\u00e1ndar de Chatham", "CHAST",
    -                                        "Hora de verano de Chatham", "CHADT"};
    -+        String ChST[] = new String[] {"Hora est\u00e1ndar de Chamorro", "ChST",
    -+                                      "Hora de verano de Chamorro", "ChDT"};
    -         String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    -                                       "Chuuk Summer Time", "CHUST"};
    -         String CIT[] = new String[] {"Hora de Indonesia Central", "CIT",
    -@@ -161,6 +163,8 @@
    -                                       "Pohnpei Summer Time", "PONST"};
    -         String PST[] = new String[] {"Hora est\u00e1ndar del Pac\u00edfico", "PST",
    -                                      "Hora de verano del Pac\u00edfico", "PDT"};
    -+        String SAMOA[] = new String[] {"Hora est\u00e1ndar de Samoa", "SST",
    -+                                       "Hora de verano de Samoa", "SDT"};
    -         String SAST[] = new String[] {"Hora est\u00e1ndar de Sud\u00e1frica", "SAST",
    -                                       "Hora de verano de Sud\u00e1frica", "SAST"};
    -         String SBT[] = new String[] {"Hora de las Islas Solomon", "SBT",
    -@@ -175,6 +179,14 @@
    -                                      "Hora de verano de Turkmenist\u00e1n", "TMST"};
    -         String ULAT[]= new String[] {"Hora de Ulan Bator", "ULAT",
    -                                      "Hora de verano de Ulan Bator", "ULAST"};
    -+        String UTC[] = new String[] {"Hora Universal Coordinada", "UTC",
    -+                                     "Hora Universal Coordinada", "UTC"};
    -+        String UZT[] = new String[] {"Hora de Uzbekist\u00e1n", "UZT",
    -+                                     "Hora de verano de Uzbekist\u00e1n", "UZST"};
    -+        String VICTORIA[] = new String[] {"Hora est\u00e1ndar del Este (Victoria)", "EST",
    -+                                          "Hora de verano del Este (Victoria)", "EST"};
    -+        String VLAT[] = new String[] {"Hora de Vladivostok", "VLAT",
    -+                                      "Hora de verano de Vladivostok", "VLAST"};
    -         String WART[] = new String[] {"Hora de Argentina Occidental", "WART",
    -                                       "Hora de verano de Argentina Occidental", "WARST"};
    -         String WAT[] = new String[] {"Hora de \u00c1frica Occidental", "WAT",
    -@@ -185,18 +197,10 @@
    -                                      "Indonesia Hora de verano de Indonesia Occidental", "WIST"};
    -         String WST_AUS[] = new String[] {"Hora est\u00e1ndar Occidental (Australia)", "WST",
    -                                          "Hora de verano Occidental (Australia)", "WST"};
    --        String SAMOA[] = new String[] {"Hora est\u00e1ndar de Samoa", "SST",
    --                                       "Hora de verano de Samoa", "SDT"};
    -         String WST_SAMOA[] = new String[] {"Hora de Samoa Occidental", "WST",
    -                                            "Hora de verano de Samoa Occidental", "WSDT"};
    --        String ChST[] = new String[] {"Hora est\u00e1ndar de Chamorro", "ChST",
    --                                      "Hora de verano de Chamorro", "ChDT"};
    --        String VICTORIA[] = new String[] {"Hora est\u00e1ndar del Este (Victoria)", "EST",
    --                                          "Hora de verano del Este (Victoria)", "EST"};
    --        String UTC[] = new String[] {"Hora Universal Coordinada", "UTC",
    --                                     "Hora Universal Coordinada", "UTC"};
    --        String UZT[] = new String[] {"Hora de Uzbekist\u00e1n", "UZT",
    --                                     "Hora de verano de Uzbekist\u00e1n", "UZST"};
    -+        String YAKT[] = new String[] {"Hora de Yakutsk", "YAKT",
    -+                                      "Hora de verano de Yakutsk", "YAKST"};
    - 
    -         return new Object[][] {
    -             {"America/Los_Angeles", PST},
    -@@ -287,7 +291,7 @@
    -             {"Africa/Porto-Novo", WAT},
    -             {"Africa/Sao_Tome", GMT},
    -             {"Africa/Timbuktu", GMT},
    --            {"Africa/Tripoli", EET},
    -+            {"Africa/Tripoli", CET},
    -             {"Africa/Tunis", CET},
    -             {"Africa/Windhoek", WAT},
    -             {"America/Adak", HAST},
    -@@ -533,6 +537,7 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    -+            {"Asia/Khandyga", YAKT},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"Hora de Krasnoyarsk", "KRAT",
    -                                                "Hora de verano de Krasnoyarsk", "KRAST"}},
    -@@ -581,11 +586,10 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    -+            {"Asia/Ust-Nera", VLAT},
    -             {"Asia/Vientiane", ICT},
    --            {"Asia/Vladivostok", new String[] {"Hora de Vladivostok", "VLAT",
    --                                               "Hora de verano de Vladivostok", "VLAST"}},
    --            {"Asia/Yakutsk", new String[] {"Hora de Yakutsk", "YAKT",
    --                                           "Hora de verano de Yakutsk", "YAKST"}},
    -+            {"Asia/Vladivostok", VLAT},
    -+            {"Asia/Yakutsk", YAKT},
    -             {"Asia/Yekaterinburg", new String[] {"Hora de Ekaterinburgo", "YEKT",
    -                                                  "Hora de verano de Ekaterinburgo", "YEKST"}},
    -             {"Asia/Yerevan", ARMT},
    -@@ -669,6 +673,7 @@
    -             {"Europe/Bratislava", CET},
    -             {"Europe/Brussels", CET},
    -             {"Europe/Budapest", CET},
    -+            {"Europe/Busingen", CET},
    -             {"Europe/Chisinau", EET},
    -             {"Europe/Copenhagen", CET},
    -             {"Europe/Dublin", DUBLIN},
    -@@ -748,7 +753,7 @@
    -             {"Jamaica", EST},
    -             {"Japan", JST},
    -             {"Kwajalein", MHT},
    --            {"Libya", EET},
    -+            {"Libya", CET},
    -             {"MET", new String[] {"Hora de Europa Central", "MET",
    -                                   "Hora de verano de Europa Central", "MEST"}},
    -             {"Mexico/BajaNorte", PST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java
    -@@ -48,43 +48,45 @@
    -         String ADELAIDE[] = new String[] {"Heure standard d'Australie centrale (Australie du sud)", "CST",
    -                                           "Heure d'\u00e9t\u00e9 d'Australie centrale (Australie du sud)", "CST"};
    -         String AGT[] = new String[] {"Heure D'Argentine", "ART",
    --                                     "Heure d'\u00e9t\u00e9 D'Argentine", "ARST"} ;
    -+                                     "Heure d'\u00e9t\u00e9 D'Argentine", "ARST"};
    -         String AKST[] = new String[] {"Heure normale d'Alaska", "AKST",
    --                                      "Heure avanc\u00e9e d'Alaska", "AKDT"} ;
    -+                                      "Heure avanc\u00e9e d'Alaska", "AKDT"};
    -         String AMT[] = new String[] {"Heure normale d'Amazonie", "AMT",
    --                                     "Heure d'\u00e9t\u00e9 d'Amazonie", "AMST"} ;
    -+                                     "Heure d'\u00e9t\u00e9 d'Amazonie", "AMST"};
    -         String ARAST[] = new String[] {"Heure normale d'Arabie", "AST",
    --                                       "Heure avanc\u00e9e d'Arabie", "ADT"} ;
    -+                                       "Heure avanc\u00e9e d'Arabie", "ADT"};
    -         String ARMT[] = new String[] {"Heure d'Arm\u00e9nie", "AMT",
    --                                      "Heure d'\u00e9t\u00e9 d'Arm\u00e9nie", "AMST"} ;
    -+                                      "Heure d'\u00e9t\u00e9 d'Arm\u00e9nie", "AMST"};
    -         String AST[] = new String[] {"Heure normale de l'Atlantique", "AST",
    --                                     "Heure avanc\u00e9e de l'Atlantique", "ADT"} ;
    -+                                     "Heure avanc\u00e9e de l'Atlantique", "ADT"};
    -         String BDT[] = new String[] {"Heure du Bangladesh", "BDT",
    --                                     "Heure d'\u00e9t\u00e9 du Bangladesh", "BDST"} ;
    -+                                     "Heure d'\u00e9t\u00e9 du Bangladesh", "BDST"};
    -         String BRISBANE[] = new String[] {"Heure standard d'Australie orientale (Queensland)", "EST",
    -                                           "Heure d'\u00e9t\u00e9 d'Australie orientale (Queensland)", "EST"};
    -         String BROKEN_HILL[] = new String[] {"Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "CST",
    -                                              "Heure d'\u00e9t\u00e9 d'Australie centrale(Australie du sud/Nouvelle-Galles du sud)", "CST"};
    -         String BRT[] = new String[] {"Heure du Br\u00e9sil", "BRT",
    --                                     "Heure d'\u00e9t\u00e9 du Br\u00e9sil", "BRST"} ;
    -+                                     "Heure d'\u00e9t\u00e9 du Br\u00e9sil", "BRST"};
    -         String BTT[] = new String[] {"Heure du Bhoutan", "BTT",
    --                                     "Heure d'\u00e9t\u00e9 du Bhoutan", "BTST"} ;
    -+                                     "Heure d'\u00e9t\u00e9 du Bhoutan", "BTST"};
    -         String CAT[] = new String[] {"Heure d'Afrique centrale", "CAT",
    --                                     "Heure d'\u00e9t\u00e9 d'Afrique centrale", "CAST"} ;
    -+                                     "Heure d'\u00e9t\u00e9 d'Afrique centrale", "CAST"};
    -         String CET[] = new String[] {"Heure d'Europe centrale", "CET",
    --                                     "Heure d'\u00e9t\u00e9 d'Europe centrale", "CEST"} ;
    -+                                     "Heure d'\u00e9t\u00e9 d'Europe centrale", "CEST"};
    -         String CHAST[] = new String[] {"Heure standard de Chatham", "CHAST",
    -                                        "Heure avanc\u00e9e de Chatham", "CHADT"};
    -+        String ChST[] = new String[] {"Heure normale des \u00eeles Mariannes", "ChST",
    -+                      "Heure d'\u00e9t\u00e9 des \u00eeles Mariannes", "ChDT"};
    -         String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    -                                       "Chuuk Summer Time", "CHUST"};
    -         String CIT[] = new String[] {"Heure d'Indon\u00e9sie centrale", "CIT",
    -                                      "Heure d'\u00e9t\u00e9 d'Indon\u00e9sie centrale", "CIST"};
    -         String CLT[] = new String[] {"Heure du Chili", "CLT",
    --                                     "Heure d'\u00e9t\u00e9 du Chili", "CLST"} ;
    -+                                     "Heure d'\u00e9t\u00e9 du Chili", "CLST"};
    -         String CST[] = new String[] {"Heure normale du Centre", "CST",
    --                                     "Heure avanc\u00e9e du Centre", "CDT"} ;
    -+                                     "Heure avanc\u00e9e du Centre", "CDT"};
    -         String CTT[] = new String[] {"Heure normale de Chine", "CST",
    --                                     "Heure avanc\u00e9e de Chine", "CDT"} ;
    -+                                     "Heure avanc\u00e9e de Chine", "CDT"};
    -         String CUBA[] = new String[] {"Heure standard de Cuba", "CST",
    -                                       "Heure d'\u00e9t\u00e9 de Cuba", "CDT"};
    -         String DARWIN[] = new String[] {"Heure standard d'Australie centrale (Territoire du Nord)", "CST",
    -@@ -92,17 +94,17 @@
    -         String DUBLIN[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT",
    -                                         "Heure d'\u00e9t\u00e9 irlandaise", "IST"};
    -         String EAT[] = new String[] {"Heure d'Afrique de l'Est", "EAT",
    --                                     "Heure d'\u00e9t\u00e9 d'Afrique de l'Est", "EAST"} ;
    -+                                     "Heure d'\u00e9t\u00e9 d'Afrique de l'Est", "EAST"};
    -         String EASTER[] = new String[] {"Heure de l'Ile de P\u00e2ques", "EAST",
    -                                         "Heure d'\u00e9t\u00e9 de l'Ile de P\u00e2ques", "EASST"};
    -         String EET[] = new String[] {"Heure d'Europe de l'Est", "EET",
    --                                     "Heure d'\u00e9t\u00e9 d'Europe de l'Est", "EEST"} ;
    -+                                     "Heure d'\u00e9t\u00e9 d'Europe de l'Est", "EEST"};
    -         String EGT[] = new String[] {"Heure du Groenland de l'Est", "EGT",
    --                                     "Heure d'\u00e9t\u00e9 du Groenland de l'Est", "EGST"} ;
    -+                                     "Heure d'\u00e9t\u00e9 du Groenland de l'Est", "EGST"};
    -         String EST[] = new String[] {"Heure normale de l'Est", "EST",
    --                                     "Heure avanc\u00e9e de l'Est", "EDT"} ;
    -+                                     "Heure avanc\u00e9e de l'Est", "EDT"};
    -         String EST_NSW[] = new String[] {"Heure normale de l'Est (Nouvelle-Galles du Sud)", "EST",
    --                                         "Heure d'\u00e9t\u00e9 de l'Est (Nouvelle-Galles du Sud)", "EST"} ;
    -+                                         "Heure d'\u00e9t\u00e9 de l'Est (Nouvelle-Galles du Sud)", "EST"};
    -         String FET[] = new String[] {"Further-eastern European Time", "FET",
    -                                      "Further-eastern European Summer Time", "FEST"};
    -         String GHMT[] = new String[] {"Heure du Ghana", "GMT",
    -@@ -110,29 +112,29 @@
    -         String GAMBIER[] =  new String[] {"Heure de Gambi", "GAMT",
    -                                           "Heure d'\u00e9t\u00e9 de Gambi", "GAMST"};
    -         String GMT[] = new String[] {"Heure de Greenwich", "GMT",
    --                                   "Heure de Greenwich", "GMT"} ;
    -+                                   "Heure de Greenwich", "GMT"};
    -         String GMTBST[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT",
    -                                         "Heure d'\u00e9t\u00e9 britannique", "BST"};
    -         String GST[] = new String[] {"Heure normale du Golfe", "GST",
    --                                     "Heure avanc\u00e9e du Golfe", "GDT"} ;
    -+                                     "Heure avanc\u00e9e du Golfe", "GDT"};
    -         String HAST[] = new String[] {"Heure normale d'Hawa\u00ef-Al\u00e9outiennes", "HAST",
    --                                      "Heure avanc\u00e9e d'Hawa\u00ef-Al\u00e9outiennes", "HADT"} ;
    -+                                      "Heure avanc\u00e9e d'Hawa\u00ef-Al\u00e9outiennes", "HADT"};
    -         String HKT[] =  new String[] {"Heure de Hong Kong", "HKT",
    -                                       "Heure d'\u00e9t\u00e9 de Hong Kong", "HKST"};
    -         String HST[] = new String[] {"Heure normale d'Hawa\u00ef", "HST",
    --                                     "Heure avanc\u00e9e d'Hawa\u00ef", "HDT"} ;
    -+                                     "Heure avanc\u00e9e d'Hawa\u00ef", "HDT"};
    -         String ICT[] = new String[] {"Heure d'Indochine", "ICT",
    --                                     "Heure d'\u00e9t\u00e9 d'Indochine", "ICST"} ;
    -+                                     "Heure d'\u00e9t\u00e9 d'Indochine", "ICST"};
    -         String IRT[] = new String[] {"Heure normale d'Iran", "IRST",
    --                                     "Heure avanc\u00e9e d'Iran", "IRDT"} ;
    -+                                     "Heure avanc\u00e9e d'Iran", "IRDT"};
    -         String ISRAEL[] = new String[] {"Heure standard d'Isra\u00ebl", "IST",
    -                                         "Heure avanc\u00e9e d'Isra\u00ebl", "IDT"};
    -         String IST[] = new String[] {"Heure normale d'Inde", "IST",
    --                                     "Heure avanc\u00e9e d'Inde", "IDT"} ;
    -+                                     "Heure avanc\u00e9e d'Inde", "IDT"};
    -         String JST[] = new String[] {"Heure normale du Japon", "JST",
    --                                     "Heure avanc\u00e9e du Japon", "JDT"} ;
    -+                                     "Heure avanc\u00e9e du Japon", "JDT"};
    -         String KST[] = new String[] {"Heure normale de Cor\u00e9e", "KST",
    --                                     "Heure avanc\u00e9e de Cor\u00e9e", "KDT"} ;
    -+                                     "Heure avanc\u00e9e de Cor\u00e9e", "KDT"};
    -         String LORD_HOWE[] = new String[] {"Heure standard de Lord Howe", "LHST",
    -                                            "Heure d'\u00e9t\u00e9 de Lord Howe", "LHST"};
    -         String MHT[] = new String[] {"Heure des Iles Marshall", "MHT",
    -@@ -140,7 +142,7 @@
    -         String MSK[] = new String[] {"Heure standard de Moscou", "MSK",
    -                                      "Heure avanc\u00e9e de Moscou", "MSD"};
    -         String MST[] = new String[] {"Heure normale des Rocheuses", "MST",
    --                                     "Heure avanc\u00e9e des Rocheuses", "MDT"} ;
    -+                                     "Heure avanc\u00e9e des Rocheuses", "MDT"};
    -         String MYT[] = new String[] {"Heure de Malaisie", "MYT",
    -                                      "Heure d'\u00e9t\u00e9 de Malaisie", "MYST"};
    -         String NORONHA[] = new String[] {"Heure de Fernando de Noronha", "FNT",
    -@@ -150,21 +152,23 @@
    -         String NPT[] = new String[] {"Heure du N\u00e9pal", "NPT",
    -                                      "Heure d'\u00e9t\u00e9 du N\u00e9pal", "NPST"};
    -         String NST[] = new String[] {"Heure normale de Terre-Neuve", "NST",
    --                                     "Heure avanc\u00e9e de Terre-Neuve", "NDT"} ;
    -+                                     "Heure avanc\u00e9e de Terre-Neuve", "NDT"};
    -         String NZST[] = new String[] {"Heure normale de Nouvelle-Z\u00e9lande", "NZST",
    --                                      "Heure avanc\u00e9e de Nouvelle-Z\u00e9lande", "NZDT"} ;
    -+                                      "Heure avanc\u00e9e de Nouvelle-Z\u00e9lande", "NZDT"};
    -         String PITCAIRN[] = new String[] {"Heure standard des Pitcairn", "PST",
    -                                           "heure avanc\u00e9e des Pitcairn", "PDT"};
    -         String PKT[] = new String[] {"Heure du Pakistan", "PKT",
    --                                     "Heure d'\u00e9t\u00e9 du Pakistan", "PKST"} ;
    -+                                     "Heure d'\u00e9t\u00e9 du Pakistan", "PKST"};
    -         String PONT[] = new String[] {"Pohnpei Time", "PONT",
    -                                       "Pohnpei Summer Time", "PONST"};
    -         String PST[] = new String[] {"Heure normale du Pacifique", "PST",
    --                                     "Heure avanc\u00e9e du Pacifique", "PDT"} ;
    -+                                     "Heure avanc\u00e9e du Pacifique", "PDT"};
    -+        String SAMOA[] = new String[] {"Heure standard de Samoa", "SST",
    -+                                       "Heure avanc\u00e9e de Samoa", "SDT"};
    -         String SAST[] = new String[] {"Heure normale d'Afrique du Sud", "SAST",
    --                                      "Heure d'\u00e9t\u00e9 d'Afrique du Sud", "SAST"} ;
    -+                                      "Heure d'\u00e9t\u00e9 d'Afrique du Sud", "SAST"};
    -         String SBT[] = new String[] {"Heure des \u00celes Salomon", "SBT",
    --                                     "Heure d'\u00e9t\u00e9 des \u00celes Salomon", "SBST"} ;
    -+                                     "Heure d'\u00e9t\u00e9 des \u00celes Salomon", "SBST"};
    -         String SGT[] = new String[] {"Heure de Singapour", "SGT",
    -                                      "Heure d'\u00e9t\u00e9 de Singapour", "SGST"};
    -         String SLST[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT",
    -@@ -172,31 +176,31 @@
    -         String TASMANIA[] = new String[] {"Heure standard d'Australie orientale (Tasmanie)", "EST",
    -                                           "Heure d'\u00e9t\u00e9 d'Australie orientale (Tasmanie)", "EST"};
    -         String TMT[] = new String[] {"Heure du Turkm\u00e9nistan", "TMT",
    --                                     "Heure d'\u00e9t\u00e9 du Turkm\u00e9nistan", "TMST"} ;
    -+                                     "Heure d'\u00e9t\u00e9 du Turkm\u00e9nistan", "TMST"};
    -         String ULAT[]= new String[] {"Heure de l'Ulaanbaatar", "ULAT",
    --                                     "Heure d'\u00e9t\u00e9 de l'Ulaanbaatar", "ULAST"} ;
    --        String WART[] = new String[] {"Heure D'Argentine de l'Ouest", "WART",
    --                                      "Heure d'\u00e9t\u00e9 D'Argentine de l'Ouest", "WARST"} ;
    --        String WAT[] = new String[] {"Heure d'Afrique de l'Ouest", "WAT",
    --                                     "Heure d'\u00e9t\u00e9 d'Afrique de l'Ouest", "WAST"} ;
    --        String WET[] = new String[] {"Heure d'Europe de l'Ouest", "WET",
    --                                     "Heure d'\u00e9t\u00e9 d'Europe de l'Ouest", "WEST"} ;
    --        String WIT[] = new String[] {"Heure de l'Indon\u00e9sie occidentale", "WIT",
    --                                     "Heure d'\u00e9t\u00e9 de l'Indon\u00e9sie occidentale", "WIST"};
    --        String WST_AUS[] = new String[] {"Heure normale de l'Ouest (Australie)", "WST",
    --                                         "Heure d'\u00e9t\u00e9 de l'Ouest (Australie)", "WST"} ;
    --        String SAMOA[] = new String[] {"Heure standard de Samoa", "SST",
    --                                       "Heure avanc\u00e9e de Samoa", "SDT"};
    --        String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WST",
    --                                           "Heure d'\u00e9t\u00e9 des Samoas occidentales", "WSDT"} ;
    --        String ChST[] = new String[] {"Heure normale des \u00eeles Mariannes", "ChST",
    --                      "Heure d'\u00e9t\u00e9 des \u00eeles Mariannes", "ChDT"};
    --        String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "EST",
    --                                          "Heure d'\u00e9t\u00e9 d'Australie orientale (Victoria)", "EST"};
    -+                                     "Heure d'\u00e9t\u00e9 de l'Ulaanbaatar", "ULAST"};
    -         String UTC[] = new String[] {"Temps universel coordonn\u00e9", "UTC",
    -                                      "Temps universel coordonn\u00e9", "UTC"};
    -         String UZT[] = new String[] {"Heure de l'Ouzb\u00e9kistan", "UZT",
    -                                      "Heure d'\u00e9t\u00e9 de l'Ouzb\u00e9kistan", "UZST"};
    -+        String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "EST",
    -+                                          "Heure d'\u00e9t\u00e9 d'Australie orientale (Victoria)", "EST"};
    -+        String VLAT[] = new String[] {"Heure de Vladivostok", "VLAT",
    -+                                      "Heure d'\u00e9t\u00e9 de Vladivostok", "VLAST"};
    -+        String WART[] = new String[] {"Heure D'Argentine de l'Ouest", "WART",
    -+                                      "Heure d'\u00e9t\u00e9 D'Argentine de l'Ouest", "WARST"};
    -+        String WAT[] = new String[] {"Heure d'Afrique de l'Ouest", "WAT",
    -+                                     "Heure d'\u00e9t\u00e9 d'Afrique de l'Ouest", "WAST"};
    -+        String WET[] = new String[] {"Heure d'Europe de l'Ouest", "WET",
    -+                                     "Heure d'\u00e9t\u00e9 d'Europe de l'Ouest", "WEST"};
    -+        String WIT[] = new String[] {"Heure de l'Indon\u00e9sie occidentale", "WIT",
    -+                                     "Heure d'\u00e9t\u00e9 de l'Indon\u00e9sie occidentale", "WIST"};
    -+        String WST_AUS[] = new String[] {"Heure normale de l'Ouest (Australie)", "WST",
    -+                                         "Heure d'\u00e9t\u00e9 de l'Ouest (Australie)", "WST"};
    -+        String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WST",
    -+                                           "Heure d'\u00e9t\u00e9 des Samoas occidentales", "WSDT"};
    -+        String YAKT[] = new String[] {"Heure du Iakoutsk", "YAKT",
    -+                                      "Heure d'\u00e9t\u00e9 du Iakoutsk", "YAKST"};
    - 
    -         return new Object[][] {
    -             {"America/Los_Angeles", PST},
    -@@ -287,7 +291,7 @@
    -             {"Africa/Porto-Novo", WAT},
    -             {"Africa/Sao_Tome", GMT},
    -             {"Africa/Timbuktu", GMT},
    --            {"Africa/Tripoli", EET},
    -+            {"Africa/Tripoli", CET},
    -             {"Africa/Tunis", CET},
    -             {"Africa/Windhoek", WAT},
    -             {"America/Adak", HAST},
    -@@ -533,6 +537,7 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    -+            {"Asia/Khandyga", YAKT},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"Heure de Krasno\u00efarsk", "KRAT",
    -                                                "Heure d'\u00e9t\u00e9 de Krasno\u00efarsk", "KRAST"}},
    -@@ -581,11 +586,10 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    -+            {"Asia/Ust-Nera", VLAT},
    -             {"Asia/Vientiane", ICT},
    --            {"Asia/Vladivostok", new String[] {"Heure de Vladivostok", "VLAT",
    --                                               "Heure d'\u00e9t\u00e9 de Vladivostok", "VLAST"}},
    --            {"Asia/Yakutsk", new String[] {"Heure du Iakoutsk", "YAKT",
    --                                           "Heure d'\u00e9t\u00e9 du Iakoutsk", "YAKST"}},
    -+            {"Asia/Vladivostok", VLAT},
    -+            {"Asia/Yakutsk", YAKT},
    -             {"Asia/Yekaterinburg", new String[] {"Heure de Yekaterinburg", "YEKT",
    -                                                  "Heure d'\u00e9t\u00e9 de Yekaterinburg", "YEKST"}},
    -             {"Asia/Yerevan", ARMT},
    -@@ -669,6 +673,7 @@
    -             {"Europe/Bratislava", CET},
    -             {"Europe/Brussels", CET},
    -             {"Europe/Budapest", CET},
    -+            {"Europe/Busingen", CET},
    -             {"Europe/Chisinau", EET},
    -             {"Europe/Copenhagen", CET},
    -             {"Europe/Dublin", DUBLIN},
    -@@ -748,7 +753,7 @@
    -             {"Jamaica", EST},
    -             {"Japan", JST},
    -             {"Kwajalein", MHT},
    --            {"Libya", EET},
    -+            {"Libya", CET},
    -             {"MET", new String[] {"Heure de l'Europe centrale", "MET",
    -                                   "Heure d'\u00e9t\u00e9 de l'Europe centrale", "MEST"}},
    -             {"Mexico/BajaNorte", PST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java
    -@@ -77,6 +77,8 @@
    -                                        "Ora legale di Chatham", "CHADT"};
    -         String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    -                                       "Chuuk Summer Time", "CHUST"};
    -+        String ChST[] = new String[] {"Ora standard di Chamorro", "ChST",
    -+                              "Ora legale di Chamorro", "ChDT"};
    -         String CIT[] = new String[] {"Ora dell'Indonesia centrale", "CIT",
    -                                      "Ora estiva dell'Indonesia centrale", "CIST"};
    -         String CLT[] = new String[] {"Ora del Cile", "CLT",
    -@@ -161,6 +163,8 @@
    -                                       "Pohnpei Summer Time", "PONST"};
    -         String PST[] = new String[] {"Ora solare della costa occidentale USA", "PST",
    -                                      "Ora legale della costa occidentale USA", "PDT"};
    -+        String SAMOA[] = new String[] {"Ora standard di Samoa", "SST",
    -+                                       "Ora legale di Samoa", "SDT"};
    -         String SAST[] = new String[] {"Ora solare del Sudafrica", "SAST",
    -                                       "Ora estiva del Sudafrica", "SAST"};
    -         String SBT[] = new String[] {"Ora delle Isole Salomone", "SBT",
    -@@ -175,6 +179,14 @@
    -                                      "Ora estiva del Turkmenistan", "TMST"};
    -         String ULAT[]= new String[] {"Ora di Ulaanbaatar", "ULAT",
    -                                      "Ora estiva di Ulaanbaatar", "ULAST"};
    -+        String UTC[] = new String[] {"Tempo universale coordinato", "UTC",
    -+                                     "Tempo universale coordinato", "UTC"};
    -+        String UZT[] = new String[] {"Ora dell'Uzbekistan", "UZT",
    -+                                     "Ora estiva dell'Uzbekistan", "UZST"};
    -+        String VICTORIA[] = new String[] {"Ora orientale standard (Victoria)", "EST",
    -+                                          "Ora estiva orientale (Victoria)", "EST"};
    -+        String VLAT[] = new String[] {"Ora di Vladivostok", "VLAT",
    -+                                      "Ora estiva di Vladivostok", "VLAST"};
    -         String WART[] = new String[] {"Ora dell'Argentina occidentale", "WART",
    -                                       "Ora estiva dell'Argentina occidentale", "WARST"};
    -         String WAT[] = new String[] {"Ora dell'Africa occidentale", "WAT",
    -@@ -185,18 +197,10 @@
    -                                      "Ora estiva dell'Indonesia occidentale", "WIST"};
    -         String WST_AUS[] = new String[] {"Ora solare dell'Australia occidentale", "WST",
    -                                          "Ora estiva dell'Australia occidentale", "WST"};
    --        String SAMOA[] = new String[] {"Ora standard di Samoa", "SST",
    --                                       "Ora legale di Samoa", "SDT"};
    -         String WST_SAMOA[] = new String[] {"Ora di Samoa", "WST",
    -                                            "Ora estiva di Samoa", "WSDT"};
    --        String ChST[] = new String[] {"Ora standard di Chamorro", "ChST",
    --                              "Ora legale di Chamorro", "ChDT"};
    --        String VICTORIA[] = new String[] {"Ora orientale standard (Victoria)", "EST",
    --                                          "Ora estiva orientale (Victoria)", "EST"};
    --        String UTC[] = new String[] {"Tempo universale coordinato", "UTC",
    --                                     "Tempo universale coordinato", "UTC"};
    --        String UZT[] = new String[] {"Ora dell'Uzbekistan", "UZT",
    --                                     "Ora estiva dell'Uzbekistan", "UZST"};
    -+        String YAKT[] = new String[] {"Ora di Jakutsk", "YAKT",
    -+                                      "Ora estiva di Jakutsk", "YAKST"};
    - 
    -         return new Object[][] {
    -             {"America/Los_Angeles", PST},
    -@@ -287,7 +291,7 @@
    -             {"Africa/Porto-Novo", WAT},
    -             {"Africa/Sao_Tome", GMT},
    -             {"Africa/Timbuktu", GMT},
    --            {"Africa/Tripoli", EET},
    -+            {"Africa/Tripoli", CET},
    -             {"Africa/Tunis", CET},
    -             {"Africa/Windhoek", WAT},
    -             {"America/Adak", HAST},
    -@@ -533,6 +537,7 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    -+            {"Asia/Khandyga", YAKT},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"Ora di Krasnojarsk", "KRAT",
    -                                                "Ora estiva di Krasnojarsk", "KRAST"}},
    -@@ -581,11 +586,10 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    -+            {"Asia/Ust-Nera", VLAT},
    -             {"Asia/Vientiane", ICT},
    --            {"Asia/Vladivostok", new String[] {"Ora di Vladivostok", "VLAT",
    --                                               "Ora estiva di Vladivostok", "VLAST"}},
    --            {"Asia/Yakutsk", new String[] {"Ora di Jakutsk", "YAKT",
    --                                           "Ora estiva di Jakutsk", "YAKST"}},
    -+            {"Asia/Vladivostok", VLAT},
    -+            {"Asia/Yakutsk", YAKT},
    -             {"Asia/Yekaterinburg", new String[] {"Ora di Ekaterinburg", "YEKT",
    -                                                  "Ora estiva di Ekaterinburg", "YEKST"}},
    -             {"Asia/Yerevan", ARMT},
    -@@ -669,6 +673,7 @@
    -             {"Europe/Bratislava", CET},
    -             {"Europe/Brussels", CET},
    -             {"Europe/Budapest", CET},
    -+            {"Europe/Busingen", CET},
    -             {"Europe/Chisinau", EET},
    -             {"Europe/Copenhagen", CET},
    -             {"Europe/Dublin", DUBLIN},
    -@@ -748,7 +753,7 @@
    -             {"Jamaica", EST},
    -             {"Japan", JST},
    -             {"Kwajalein", MHT},
    --            {"Libya", EET},
    -+            {"Libya", CET},
    -             {"MET", new String[] {"Ora dell'Europa centrale", "MET",
    -                                   "Ora estiva dell'Europa centrale", "MEST"}},
    -             {"Mexico/BajaNorte", PST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java
    -@@ -75,6 +75,8 @@
    -                                      "\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "CEST"};
    -         String CHAST[] = new String[] {"\u30c1\u30e3\u30bf\u30e0\u6a19\u6e96\u6642", "CHAST",
    -                                        "\u30c1\u30e3\u30bf\u30e0\u590f\u6642\u9593", "CHADT"};
    -+        String ChST[] = new String[] {"\u30b0\u30a2\u30e0\u6a19\u6e96\u6642", "ChST",
    -+                                      "\u30b0\u30a2\u30e0\u590f\u6642\u9593", "ChDT"};
    -         String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    -                                       "Chuuk Summer Time", "CHUST"};
    -         String CIT[] = new String[] {"\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "CIT",
    -@@ -161,6 +163,8 @@
    -                                       "Pohnpei Summer Time", "PONST"};
    -         String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642", "PST",
    -                                      "\u592a\u5e73\u6d0b\u590f\u6642\u9593", "PDT"};
    -+        String SAMOA[] = new String[] {"\u30b5\u30e2\u30a2\u6a19\u6e96\u6642", "SST",
    -+                                       "\u30b5\u30e2\u30a2\u590f\u6642\u9593", "SDT"};
    -         String SAST[] = new String[] {"\u5357\u30a2\u30d5\u30ea\u30ab\u6a19\u6e96\u6642", "SAST",
    -                                       "\u5357\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "SAST"};
    -         String SBT[] = new String[] {"\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6\u6642\u9593", "SBT",
    -@@ -175,6 +179,14 @@
    -                                      "\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u590f\u6642\u9593", "TMST"};
    -         String ULAT[]= new String[] {"\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u6642\u9593", "ULAT",
    -                                      "\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u590f\u6642\u9593", "ULAST"};
    -+        String UTC[] = new String[] {"\u5354\u5b9a\u4e16\u754c\u6642", "UTC",
    -+                                     "\u5354\u5b9a\u4e16\u754c\u6642", "UTC"};
    -+        String UZT[] = new String[] {"\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "UZT",
    -+                                     "\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "UZST"};
    -+        String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST",
    -+                                          "\u6771\u90e8\u590f\u6642\u9593 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST"};
    -+        String VLAT[] = new String[] {"\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u6642\u9593", "VLAT",
    -+                                      "\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u590f\u6642\u9593", "VLAST"};
    -         String WART[] = new String[] {"\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "WART",
    -                                       "\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "WARST"};
    -         String WAT[] = new String[] {"\u897f\u30a2\u30d5\u30ea\u30ab\u6642\u9593", "WAT",
    -@@ -185,18 +197,10 @@
    -                                      "\u897f\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "WIST"};
    -         String WST_AUS[] = new String[] {"\u897f\u90e8\u6a19\u6e96\u6642 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "WST",
    -                                          "\u897f\u90e8\u590f\u6642\u9593 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "WST"};
    --        String SAMOA[] = new String[] {"\u30b5\u30e2\u30a2\u6a19\u6e96\u6642", "SST",
    --                                       "\u30b5\u30e2\u30a2\u590f\u6642\u9593", "SDT"};
    -         String WST_SAMOA[] = new String[] {"\u897f\u30b5\u30e2\u30a2\u6642\u9593", "WST",
    -                                            "\u897f\u30b5\u30e2\u30a2\u590f\u6642\u9593", "WSDT"};
    --        String ChST[] = new String[] {"\u30b0\u30a2\u30e0\u6a19\u6e96\u6642", "ChST",
    --                                      "\u30b0\u30a2\u30e0\u590f\u6642\u9593", "ChDT"};
    --        String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST",
    --                                          "\u6771\u90e8\u590f\u6642\u9593 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST"};
    --        String UTC[] = new String[] {"\u5354\u5b9a\u4e16\u754c\u6642", "UTC",
    --                                     "\u5354\u5b9a\u4e16\u754c\u6642", "UTC"};
    --        String UZT[] = new String[] {"\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "UZT",
    --                                     "\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "UZST"};
    -+        String YAKT[] = new String[] {"\u30e4\u30af\u30fc\u30c4\u30af\u6642\u9593", "YAKT",
    -+                                      "\u30e4\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "YAKST"};
    - 
    -         return new Object[][] {
    -             {"America/Los_Angeles", PST},
    -@@ -287,7 +291,7 @@
    -             {"Africa/Porto-Novo", WAT},
    -             {"Africa/Sao_Tome", GMT},
    -             {"Africa/Timbuktu", GMT},
    --            {"Africa/Tripoli", EET},
    -+            {"Africa/Tripoli", CET},
    -             {"Africa/Tunis", CET},
    -             {"Africa/Windhoek", WAT},
    -             {"America/Adak", HAST},
    -@@ -533,6 +537,7 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    -+            {"Asia/Khandyga", YAKT},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u6642\u9593", "KRAT",
    -                                                "\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u590f\u6642\u9593", "KRAST"}},
    -@@ -581,11 +586,10 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    -+            {"Asia/Ust-Nera", VLAT},
    -             {"Asia/Vientiane", ICT},
    --            {"Asia/Vladivostok", new String[] {"\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u6642\u9593", "VLAT",
    --                                               "\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u590f\u6642\u9593", "VLAST"}},
    --            {"Asia/Yakutsk", new String[] {"\u30e4\u30af\u30fc\u30c4\u30af\u6642\u9593", "YAKT",
    --                                           "\u30e4\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "YAKST"}},
    -+            {"Asia/Vladivostok", VLAT},
    -+            {"Asia/Yakutsk", YAKT},
    -             {"Asia/Yekaterinburg", new String[] {"\u30a8\u30ab\u30c6\u30ea\u30f3\u30d6\u30eb\u30b0\u6642\u9593", "YEKT",
    -                                                  "\u30a8\u30ab\u30c6\u30ea\u30f3\u30d6\u30eb\u30b0\u590f\u6642\u9593", "YEKST"}},
    -             {"Asia/Yerevan", ARMT},
    -@@ -669,6 +673,7 @@
    -             {"Europe/Bratislava", CET},
    -             {"Europe/Brussels", CET},
    -             {"Europe/Budapest", CET},
    -+            {"Europe/Busingen", CET},
    -             {"Europe/Chisinau", EET},
    -             {"Europe/Copenhagen", CET},
    -             {"Europe/Dublin", DUBLIN},
    -@@ -748,7 +753,7 @@
    -             {"Jamaica", EST},
    -             {"Japan", JST},
    -             {"Kwajalein", MHT},
    --            {"Libya", EET},
    -+            {"Libya", CET},
    -             {"MET", new String[] {"\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593", "MET",
    -                                   "\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "MEST"}},
    -             {"Mexico/BajaNorte", PST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java
    -@@ -75,6 +75,8 @@
    -                                      "\uc911\uc559 \uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CEST"};
    -         String CHAST[] = new String[] {"Chatham \ud45c\uc900\uc2dc", "CHAST",
    -                                        "Chatham \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CHADT"};
    -+        String ChST[] = new String[] {"\ucc28\ubaa8\ub85c \ud45c\uc900\uc2dc", "ChST",
    -+                                      "\ucc28\ubaa8\ub85c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ChDT"};
    -         String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    -                                       "Chuuk Summer Time", "CHUST"};
    -         String CIT[] = new String[] {"\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "CIT",
    -@@ -161,6 +163,8 @@
    -                                       "Pohnpei Summer Time", "PONST"};
    -         String PST[] = new String[] {"\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc", "PST",
    -                                      "\ud0dc\ud3c9\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"};
    -+        String SAMOA[] = new String[] {"\uc0ac\ubaa8\uc544 \ud45c\uc900\uc2dc", "SST",
    -+                                       "\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SDT"};
    -         String SAST[] = new String[] {"\ub0a8\uc544\ud504\ub9ac\uce74 \ud45c\uc900\uc2dc", "SAST",
    -                                       "\ub0a8\uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SAST"};
    -         String SBT[] = new String[] {"\uc194\ub85c\ubaac \uad70\ub3c4 \uc2dc\uac04", "SBT",
    -@@ -175,6 +179,14 @@
    -                                      "\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TMST"};
    -         String ULAT[]= new String[] {"\uc6b8\ub780\ubc14\ud0c0\ub974 \uc2dc\uac04", "ULAT",
    -                                      "\uc6b8\ub780\ubc14\ud0c0\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ULAST"};
    -+        String UTC[] = new String[] {"\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC",
    -+                                     "\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC"};
    -+        String UZT[] = new String[] {"\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "UZT",
    -+                                     "\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "UZST"};
    -+        String VICTORIA[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ube45\ud1a0\ub9ac\uc544)", "EST",
    -+                                          "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ube45\ud1a0\ub9ac\uc544)", "EST"};
    -+        String VLAT[] = new String[] {"\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc2dc\uac04", "VLAT",
    -+                                      "\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VLAST"};
    -         String WART[] = new String[] {"\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "WART",
    -                                       "\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WARST"};
    -         String WAT[] = new String[] {"\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc2dc\uac04", "WAT",
    -@@ -185,18 +197,10 @@
    -                                      "\uc11c\uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WIST"};
    -         String WST_AUS[] = new String[] {"\uc11c\ubd80 \ud45c\uc900\uc2dc(\ud638\uc8fc)", "WST",
    -                                          "\uc11c\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ud638\uc8fc)", "WST"};
    --        String SAMOA[] = new String[] {"\uc0ac\ubaa8\uc544 \ud45c\uc900\uc2dc", "SST",
    --                                       "\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SDT"};
    -         String WST_SAMOA[] = new String[] {"\uc11c\uc0ac\ubaa8\uc544 \uc2dc\uac04", "WST",
    -                                            "\uc11c\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WSDT"};
    --        String ChST[] = new String[] {"\ucc28\ubaa8\ub85c \ud45c\uc900\uc2dc", "ChST",
    --                                      "\ucc28\ubaa8\ub85c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ChDT"};
    --        String VICTORIA[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ube45\ud1a0\ub9ac\uc544)", "EST",
    --                                          "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ube45\ud1a0\ub9ac\uc544)", "EST"};
    --        String UTC[] = new String[] {"\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC",
    --                                     "\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC"};
    --        String UZT[] = new String[] {"\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "UZT",
    --                                     "\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "UZST"};
    -+        String YAKT[] = new String[] {"\uc57c\uce20\ud06c \uc2dc\uac04", "YAKT",
    -+                                      "\uc57c\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YAKST"};
    - 
    -         return new Object[][] {
    -             {"America/Los_Angeles", PST},
    -@@ -287,7 +291,7 @@
    -             {"Africa/Porto-Novo", WAT},
    -             {"Africa/Sao_Tome", GMT},
    -             {"Africa/Timbuktu", GMT},
    --            {"Africa/Tripoli", EET},
    -+            {"Africa/Tripoli", CET},
    -             {"Africa/Tunis", CET},
    -             {"Africa/Windhoek", WAT},
    -             {"America/Adak", HAST},
    -@@ -533,6 +537,7 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    -+            {"Asia/Khandyga", YAKT},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc2dc\uac04", "KRAT",
    -                                                "\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KRAST"}},
    -@@ -581,11 +586,10 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    -+            {"Asia/Ust-Nera", VLAT},
    -             {"Asia/Vientiane", ICT},
    --            {"Asia/Vladivostok", new String[] {"\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc2dc\uac04", "VLAT",
    --                                               "\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VLAST"}},
    --            {"Asia/Yakutsk", new String[] {"\uc57c\uce20\ud06c \uc2dc\uac04", "YAKT",
    --                                           "\uc57c\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YAKST"}},
    -+            {"Asia/Vladivostok", VLAT},
    -+            {"Asia/Yakutsk", YAKT},
    -             {"Asia/Yekaterinburg", new String[] {"\uc608\uce74\ud14c\ub9b0\ubc84\uadf8 \uc2dc\uac04", "YEKT",
    -                                                  "\uc608\uce74\ud14c\ub9b0\ubc84\uadf8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YEKST"}},
    -             {"Asia/Yerevan", ARMT},
    -@@ -669,6 +673,7 @@
    -             {"Europe/Bratislava", CET},
    -             {"Europe/Brussels", CET},
    -             {"Europe/Budapest", CET},
    -+            {"Europe/Busingen", CET},
    -             {"Europe/Chisinau", EET},
    -             {"Europe/Copenhagen", CET},
    -             {"Europe/Dublin", DUBLIN},
    -@@ -748,7 +753,7 @@
    -             {"Jamaica", EST},
    -             {"Japan", JST},
    -             {"Kwajalein", MHT},
    --            {"Libya", EET},
    -+            {"Libya", CET},
    -             {"MET", new String[] {"\uc911\ubd80 \uc720\ub7fd \uc2dc\uac04", "MET",
    -                                   "\uc911\ubd80 \uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MEST"}},
    -             {"Mexico/BajaNorte", PST},
    -diff -r b03bbdef3a88 -r b8009df64dc8 src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java	Mon Mar 11 14:11:30 2013 -0700
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java	Fri Mar 15 20:35:51 2013 +0900
    -@@ -75,6 +75,8 @@
    -                                      "Fuso hor\u00e1rio de ver\u00e3o da Europa Central", "CEST"};
    -         String CHAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chatham", "CHAST",
    -                                        "Hor\u00e1rio de luz natural de Chatham", "CHADT"};
    -+        String ChST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chamorro", "ChST",
    -+                                      "Hor\u00e1rio de luz natural de Chamorro", "ChDT"};
    -         String CIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Central", "CIT",
    -                                      "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Central", "CIST"};
    -         String CLT[] = new String[] {"Fuso hor\u00e1rio do Chile", "CLT",
    -@@ -159,6 +161,8 @@
    -                                       "Fuso hor\u00e1rio de ver\u00e3o de Pohnpei", "PONST"};
    -         String PST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Pac\u00edfico", "PST",
    -                                      "Hor\u00e1rio de luz natural do Pac\u00edfico", "PDT"};
    -+        String SAMOA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Samoa", "SST",
    -+                                       "Hor\u00e1rio de luz natural de Samoa", "SDT"};
    -         String SAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da \u00c1frica do Sul", "SAST",
    -                                       "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica do Sul", "SAST"};
    -         String SBT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Salom\u00e3o", "SBT",
    -@@ -175,6 +179,16 @@
    -                                       "Fuso hor\u00e1rio de ver\u00e3o de Chuuk", "CHUST"};
    -         String ULAT[]= new String[] {"Fuso hor\u00e1rio de Ulan Bator", "ULAT",
    -                                      "Fuso hor\u00e1rio de ver\u00e3o de Ulan Bator", "ULAST"};
    -+        String UTC[] = new String[] {"Tempo universal coordenado", "UTC",
    -+                                     "Tempo universal coordenado", "UTC"};
    -+        String UZT[] = new String[] {"Fuso hor\u00e1rio do Uzbequist\u00e3o", "UZT",
    -+                                     "Fuso hor\u00e1rio de ver\u00e3o do Uzbequist\u00e3o", "UZST"};
    -+        String VICTORIA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Victoria)", "EST",
    -+                                          "Fuso hor\u00e1rio de ver\u00e3o oriental (Victoria)", "EST"};
    -+        String VLAT[] = new String[] {"Fuso hor\u00e1rio de Vladivostok", "VLAT",
    -+                                      "Fuso hor\u00e1rio de ver\u00e3o de Vladivostok", "VLAST"};
    -+        String WART[] = new String[] {"Fuso hor\u00e1rio da Argentina Ocidental", "WART",
    -+                                      "Fuso hor\u00e1rio de ver\u00e3o da Argentina Ocidental", "WARST"};
    -         String WAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Ocidental", "WAT",
    -                                      "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica Ocidental", "WAST"};
    -         String WET[] = new String[] {"Fuso hor\u00e1rio da Europa Ocidental", "WET",
    -@@ -183,20 +197,10 @@
    -                                      "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Ocidental", "WIST"};
    -         String WST_AUS[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o ocidental (Austr\u00e1lia)", "WST",
    -                                          "Fuso hor\u00e1rio de ver\u00e3o ocidental (Austr\u00e1lia)", "WST"};
    --        String SAMOA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Samoa", "SST",
    --                                       "Hor\u00e1rio de luz natural de Samoa", "SDT"};
    -         String WST_SAMOA[] = new String[] {"Fuso hor\u00e1rio de Samoa Ocidental", "WST",
    -                                            "Fuso hor\u00e1rio de ver\u00e3o de Samoa Ocidental", "WSDT"};
    --        String ChST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chamorro", "ChST",
    --                                      "Hor\u00e1rio de luz natural de Chamorro", "ChDT"};
    --        String VICTORIA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Victoria)", "EST",
    --                                          "Fuso hor\u00e1rio de ver\u00e3o oriental (Victoria)", "EST"};
    --        String UTC[] = new String[] {"Tempo universal coordenado", "UTC",
    --                                     "Tempo universal coordenado", "UTC"};
    --        String UZT[] = new String[] {"Fuso hor\u00e1rio do Uzbequist\u00e3o", "UZT",
    --                                     "Fuso hor\u00e1rio de ver\u00e3o do Uzbequist\u00e3o", "UZST"};
    --        String WART[] = new String[] {"Fuso hor\u00e1rio da Argentina Ocidental", "WART",
    --                                      "Fuso hor\u00e1rio de ver\u00e3o da Argentina Ocidental", "WARST"};
    -+        String YAKT[] = new String[] {"Fuso hor\u00e1rio de Yakutsk", "YAKT",
    -+                                      "Fuso hor\u00e1rio de ver\u00e3o de Yakutsk", "YAKST"};
    - 
    -         return new Object[][] {
    -             {"America/Los_Angeles", PST},
    -@@ -287,7 +291,7 @@
    -             {"Africa/Porto-Novo", WAT},
    -             {"Africa/Sao_Tome", GMT},
    -             {"Africa/Timbuktu", GMT},
    --            {"Africa/Tripoli", EET},
    -+            {"Africa/Tripoli", CET},
    -             {"Africa/Tunis", CET},
    -             {"Africa/Windhoek", WAT},
    -             {"America/Adak", HAST},
    -@@ -533,6 +537,7 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    -+            {"Asia/Khandyga", YAKT},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"Fuso hor\u00e1rio de Krasnoyarsk", "KRAT",
    -                                                "Fuso hor\u00e1rio de ver\u00e3o de Krasnoyarsk", "KRAST"}},
    -@@ -581,11 +586,10 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    -+            {"Asia/Ust-Nera", VLAT},
    -             {"Asia/Vientiane", ICT},
    --            {"Asia/Vladivostok", new String[] {"Fuso hor\u00e1rio de Vladivostok", "VLAT",
    --                                               "Fuso hor\u00e1rio de ver\u00e3o de Vladivostok", "VLAST"}},
    --            {"Asia/Yakutsk", new String[] {"Fuso hor\u00e1rio de Yakutsk", "YAKT",
    --                                           "Fuso hor\u00e1rio de ver\u00e3o de Yakutsk", "YAKST"}},
    -+            {"Asia/Vladivostok", VLAT},
    -+            {"Asia/Yakutsk", YAKT},
    -             {"Asia/Yekaterinburg", new String[] {"Fuso hor\u00e1rio de Yekaterinburgo", "YEKT",
    -                                                  "Fuso hor\u00e1rio de ver\u00e3o de Yekaterinburgo", "YEKST"}},
    -             {"Asia/Yerevan", ARMT},
    -@@ -669,6 +673,7 @@
    -             {"Europe/Bratislava", CET},
    -             {"Europe/Brussels", CET},
    -             {"Europe/Budapest", CET},
    -+            {"Europe/Busingen", CET},
    -             {"Europe/Chisinau", EET},
    -             {"Europe/Copenhagen", CET},
    -             {"Europe/Dublin", DUBLIN},
    -@@ -748,7 +753,7 @@
    -             {"Jamaica", EST},
    -             {"Japan", JST},
    -             {"Kwajalein", MHT},
    --            {"Libya", EET},
    -+            {"Libya", CET},
    -             {"MET", new String[] {"Fuso hor\u00e1rio da Europa M\u00e9dia", "MET",
    -                                   "Fuso hor\u00e1rio de ver\u00e3o da Europa M\u00e9dia", "MEST"}},
    -             {"Mexico/BajaNorte", PST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java
    -@@ -75,6 +75,8 @@
    -                                      "Centraleuropeisk sommartid", "CEST"};
    -         String CHAST[] = new String[] {"Chatham, normaltid", "CHAST",
    -                                        "Chatham, sommartid", "CHADT"};
    -+        String ChST[] = new String[] {"Chamorro, normaltid", "ChST",
    -+                                      "Chamorro, sommartid", "ChDT"};
    -         String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    -                                       "Chuuk Summer Time", "CHUST"};
    -         String CIT[] = new String[] {"Centralindonesisk tid", "CIT",
    -@@ -161,6 +163,8 @@
    -                                       "Pohnpei Summer Time", "PONST"};
    -         String PST[] = new String[] {"Stilla havet, normaltid", "PST",
    -                                      "Stilla havet, sommartid", "PDT"};
    -+        String SAMOA[] = new String[] {"Samoa, normaltid", "SST",
    -+                                       "Samoa, sommartid", "SDT"};
    -         String SAST[] = new String[] {"Sydafrika, normaltid", "SAST",
    -                                       "Sydafrika, sommartid", "SAST"};
    -         String SBT[] = new String[] {"Salomon\u00f6arna, normaltid", "SBT",
    -@@ -175,6 +179,14 @@
    -                                      "Turkmenistan, sommartid", "TMST"};
    -         String ULAT[]= new String[] {"Ulaanbaatar, normaltid", "ULAT",
    -                                      "Ulaanbaatar, sommartid", "ULAST"};
    -+        String UTC[] = new String[] {"Koordinerad universell tid", "UTC",
    -+                                     "Koordinerad universell tid", "UTC"};
    -+        String UZT[] = new String[] {"Uzbekistan, normaltid", "UZT",
    -+                                     "Uzbekistan, sommartid", "UZST"};
    -+        String VICTORIA[] = new String[] {"\u00d6stlig normaltid (Victoria)", "EST",
    -+                                          "\u00d6stlig sommartid (Victoria)", "EST"};
    -+        String VLAT[] = new String[] {"Vladivostok, normaltid", "VLAT",
    -+                                      "Vladivostok, sommartid", "VLAST"};
    -         String WART[] = new String[] {"V\u00e4stargentina, normaltid", "WART",
    -                                       "V\u00e4stargentina, sommartid", "WARST"};
    -         String WAT[] = new String[] {"V\u00e4stafrikansk tid", "WAT",
    -@@ -185,18 +197,10 @@
    -                                      "V\u00e4stindonesisk sommartid", "WIST"};
    -         String WST_AUS[] = new String[] {"V\u00e4stlig normaltid (Australien)", "WST",
    -                                          "V\u00e4stlig sommartid (Australien)", "WST"};
    --        String SAMOA[] = new String[] {"Samoa, normaltid", "SST",
    --                                       "Samoa, sommartid", "SDT"};
    -         String WST_SAMOA[] = new String[] {"V\u00e4stsamoansk tid", "WST",
    -                                            "V\u00e4stsamoansk sommartid", "WSDT"};
    --        String ChST[] = new String[] {"Chamorro, normaltid", "ChST",
    --                                      "Chamorro, sommartid", "ChDT"};
    --        String VICTORIA[] = new String[] {"\u00d6stlig normaltid (Victoria)", "EST",
    --                                          "\u00d6stlig sommartid (Victoria)", "EST"};
    --        String UTC[] = new String[] {"Koordinerad universell tid", "UTC",
    --                                     "Koordinerad universell tid", "UTC"};
    --        String UZT[] = new String[] {"Uzbekistan, normaltid", "UZT",
    --                                     "Uzbekistan, sommartid", "UZST"};
    -+        String YAKT[] = new String[] {"Jakutsk, normaltid", "YAKT",
    -+                                      "Jakutsk, sommartid", "YAKST"};
    - 
    -         return new Object[][] {
    -             {"America/Los_Angeles", PST},
    -@@ -287,7 +291,7 @@
    -             {"Africa/Porto-Novo", WAT},
    -             {"Africa/Sao_Tome", GMT},
    -             {"Africa/Timbuktu", GMT},
    --            {"Africa/Tripoli", EET},
    -+            {"Africa/Tripoli", CET},
    -             {"Africa/Tunis", CET},
    -             {"Africa/Windhoek", WAT},
    -             {"America/Adak", HAST},
    -@@ -533,6 +537,7 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    -+            {"Asia/Khandyga", YAKT},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"Krasnojarsk, normaltid", "KRAT",
    -                                                "Krasnojarsk, sommartid", "KRAST"}},
    -@@ -581,11 +586,10 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    -+            {"Asia/Ust-Nera", VLAT},
    -             {"Asia/Vientiane", ICT},
    --            {"Asia/Vladivostok", new String[] {"Vladivostok, normaltid", "VLAT",
    --                                               "Vladivostok, sommartid", "VLAST"}},
    --            {"Asia/Yakutsk", new String[] {"Jakutsk, normaltid", "YAKT",
    --                                           "Jakutsk, sommartid", "YAKST"}},
    -+            {"Asia/Vladivostok", VLAT},
    -+            {"Asia/Yakutsk", YAKT},
    -             {"Asia/Yekaterinburg", new String[] {"Jekaterinburg, normaltid", "YEKT",
    -                                                  "Jekaterinburg, sommartid", "YEKST"}},
    -             {"Asia/Yerevan", ARMT},
    -@@ -669,6 +673,7 @@
    -             {"Europe/Bratislava", CET},
    -             {"Europe/Brussels", CET},
    -             {"Europe/Budapest", CET},
    -+            {"Europe/Busingen", CET},
    -             {"Europe/Chisinau", EET},
    -             {"Europe/Copenhagen", CET},
    -             {"Europe/Dublin", DUBLIN},
    -@@ -748,7 +753,7 @@
    -             {"Jamaica", EST},
    -             {"Japan", JST},
    -             {"Kwajalein", MHT},
    --            {"Libya", EET},
    -+            {"Libya", CET},
    -             {"MET", new String[] {"Mellaneuropeisk tid", "MET",
    -                                   "Mellaneuropeisk sommartid", "MEST"}},
    -             {"Mexico/BajaNorte", PST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
    -@@ -75,6 +75,8 @@
    -                                      "\u4e2d\u6b27\u590f\u4ee4\u65f6", "CEST"};
    -         String CHAST[] = new String[] {"\u67e5\u8428\u59c6\u6807\u51c6\u65f6\u95f4", "CHAST",
    -                                        "\u67e5\u8428\u59c6\u590f\u4ee4\u65f6", "CHADT"};
    -+        String ChST[] = new String[] {"Chamorro \u6807\u51c6\u65f6\u95f4", "ChST",
    -+                                      "Chamorro \u590f\u4ee4\u65f6", "ChDT"};
    -         String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    -                                       "Chuuk Summer Time", "CHUST"};
    -         String CIT[] = new String[] {"\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "CIT",
    -@@ -161,6 +163,8 @@
    -                                       "Pohnpei Summer Time", "PONST"};
    -         String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4", "PST",
    -                                      "\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6", "PDT"};
    -+        String SAMOA[] = new String[] {"\u8428\u6469\u4e9a\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "SST",
    -+                                       "\u8428\u6469\u4e9a\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SDT"};
    -         String SAST[] = new String[] {"\u5357\u975e\u6807\u51c6\u65f6\u95f4", "SAST",
    -                                       "\u5357\u975e\u590f\u4ee4\u65f6", "SAST"};
    -         String SBT[] = new String[] {"\u6240\u7f57\u95e8\u7fa4\u5c9b\u65f6\u95f4", "SBT",
    -@@ -175,6 +179,14 @@
    -                                      "\u571f\u5e93\u66fc\u590f\u4ee4\u65f6", "TMST"};
    -         String ULAT[]= new String[] {"\u5e93\u4f26\u65f6\u95f4", "ULAT",
    -                                      "\u5e93\u4f26\u590f\u4ee4\u65f6", "ULAST"};
    -+        String UTC[] = new String[] {"\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC",
    -+                                     "\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC"};
    -+        String UZT[] = new String[] {"\u4e4c\u5179\u522b\u514b\u65af\u5766\u65f6\u95f4", "UZT",
    -+                                     "\u4e4c\u5179\u522b\u514b\u65af\u5766\u590f\u4ee4\u65f6", "UZST"};
    -+        String VICTORIA[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST",
    -+                                          "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST"};
    -+        String VLAT[] = new String[] {"\u6d77\u53c2\u5d34\u65f6\u95f4", "VLAT",
    -+                                      "\u6d77\u53c2\u5d34\u590f\u4ee4\u65f6", "VLAST"};
    -         String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u65f6\u95f4", "WART",
    -                                       "\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "WARST"};
    -         String WAT[] = new String[] {"\u897f\u975e\u65f6\u95f4", "WAT",
    -@@ -185,18 +197,10 @@
    -                                      "\u897f\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "WIST"};
    -         String WST_AUS[] = new String[] {"\u897f\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "WST",
    -                                          "\u897f\u90e8\u590f\u4ee4\u65f6\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "WST"};
    --        String SAMOA[] = new String[] {"\u8428\u6469\u4e9a\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "SST",
    --                                       "\u8428\u6469\u4e9a\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SDT"};
    -         String WST_SAMOA[] = new String[] {"\u897f\u8428\u6469\u4e9a\u65f6\u95f4", "WST",
    -                                            "\u897f\u8428\u6469\u4e9a\u590f\u4ee4\u65f6", "WSDT"};
    --        String ChST[] = new String[] {"Chamorro \u6807\u51c6\u65f6\u95f4", "ChST",
    --                                      "Chamorro \u590f\u4ee4\u65f6", "ChDT"};
    --        String VICTORIA[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST",
    --                                          "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST"};
    --        String UTC[] = new String[] {"\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC",
    --                                     "\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC"};
    --        String UZT[] = new String[] {"\u4e4c\u5179\u522b\u514b\u65af\u5766\u65f6\u95f4", "UZT",
    --                                     "\u4e4c\u5179\u522b\u514b\u65af\u5766\u590f\u4ee4\u65f6", "UZST"};
    -+        String YAKT[] = new String[] {"\u4e9a\u5e93\u6b21\u514b\u65f6\u95f4", "YAKT",
    -+                                      "\u4e9a\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "YAKST"};
    - 
    -         return new Object[][] {
    -             {"America/Los_Angeles", PST},
    -@@ -287,7 +291,7 @@
    -             {"Africa/Porto-Novo", WAT},
    -             {"Africa/Sao_Tome", GMT},
    -             {"Africa/Timbuktu", GMT},
    --            {"Africa/Tripoli", EET},
    -+            {"Africa/Tripoli", CET},
    -             {"Africa/Tunis", CET},
    -             {"Africa/Windhoek", WAT},
    -             {"America/Adak", HAST},
    -@@ -533,6 +537,7 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    -+            {"Asia/Khandyga", YAKT},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u65f6\u95f4", "KRAT",
    -                                                "\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u590f\u4ee4\u65f6", "KRAST"}},
    -@@ -581,11 +586,10 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    -+            {"Asia/Ust-Nera", VLAT},
    -             {"Asia/Vientiane", ICT},
    --            {"Asia/Vladivostok", new String[] {"\u6d77\u53c2\u5d34\u65f6\u95f4", "VLAT",
    --                                               "\u6d77\u53c2\u5d34\u590f\u4ee4\u65f6", "VLAST"}},
    --            {"Asia/Yakutsk", new String[] {"\u4e9a\u5e93\u6b21\u514b\u65f6\u95f4", "YAKT",
    --                                           "\u4e9a\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "YAKST"}},
    -+            {"Asia/Vladivostok", VLAT},
    -+            {"Asia/Yakutsk", YAKT},
    -             {"Asia/Yekaterinburg", new String[] {"Yekaterinburg \u65f6\u95f4", "YEKT",
    -                                                  "Yekaterinburg \u590f\u4ee4\u65f6", "YEKST"}},
    -             {"Asia/Yerevan", ARMT},
    -@@ -669,6 +673,7 @@
    -             {"Europe/Bratislava", CET},
    -             {"Europe/Brussels", CET},
    -             {"Europe/Budapest", CET},
    -+            {"Europe/Busingen", CET},
    -             {"Europe/Chisinau", EET},
    -             {"Europe/Copenhagen", CET},
    -             {"Europe/Dublin", DUBLIN},
    -@@ -748,7 +753,7 @@
    -             {"Jamaica", EST},
    -             {"Japan", JST},
    -             {"Kwajalein", MHT},
    --            {"Libya", EET},
    -+            {"Libya", CET},
    -             {"MET", new String[] {"\u4e2d\u6b27\u65f6\u95f4", "MET",
    -                                   "\u4e2d\u6b27\u590f\u4ee4\u65f6", "MEST"}},
    -             {"Mexico/BajaNorte", PST},
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
    -@@ -75,6 +75,8 @@
    -                                      "\u4e2d\u6b50\u590f\u4ee4\u6642\u9593", "CEST"};
    -         String CHAST[] = new String[] {"\u67e5\u5766\u6a19\u6e96\u6642\u9593", "CHAST",
    -                                        "\u67e5\u5766\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CHADT"};
    -+        String ChST[] = new String[] {"\u67e5\u83ab\u6d1b\u6a19\u6e96\u6642\u9593", "ChST",
    -+                                     "\u67e5\u83ab\u6d1b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ChDT"};
    -         String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    -                                       "Chuuk Summer Time", "CHUST"};
    -         String CIT[] = new String[] {"\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "CIT",
    -@@ -161,6 +163,8 @@
    -                                       "Pohnpei Summer Time", "PONST"};
    -         String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642\u9593", "PST",
    -                                      "\u592a\u5e73\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"};
    -+        String SAMOA[] = new String[] {"\u85a9\u6469\u4e9e\u6a19\u6e96\u6642\u9593", "SST",
    -+                                       "\u85a9\u6469\u4e9e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "SDT"};
    -         String SAST[] = new String[] {"\u5357\u975e\u6a19\u6e96\u6642\u9593", "SAST",
    -                                       "\u5357\u975e\u590f\u4ee4\u6642\u9593", "SAST"};
    -         String SBT[] = new String[] {"\u6240\u7f85\u9580\u7fa4\u5cf6\u6642\u9593", "SBT",
    -@@ -175,7 +179,15 @@
    -                                      "\u571f\u5eab\u66fc\u590f\u4ee4\u6642\u9593", "TMST"};
    -         String ULAT[]= new String[] {"\u5eab\u502b\u6642\u9593", "ULAT",
    -                                      "\u5eab\u502b\u590f\u4ee4\u6642\u9593", "ULAST"};
    --          String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u6642\u9593", "WART",
    -+        String UTC[] = new String[] {"\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC",
    -+                                     "\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC"};
    -+        String UZT[] = new String[] {"\u70cf\u8332\u5225\u514b\u65af\u5766\u6642\u9593", "UZT",
    -+                                     "\u70cf\u8332\u5225\u514b\u65af\u5766\u590f\u4ee4\u6642\u9593", "UZST"};
    -+        String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST",
    -+                                          "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST"};
    -+        String VLAT[] = new String[] {"\u6d77\u53c3\u5d34\u6642\u9593", "VLAT",
    -+                                      "\u6d77\u53c3\u5d34\u590f\u4ee4\u6642\u9593", "VLAST"};
    -+        String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u6642\u9593", "WART",
    -                                       "\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "WARST"};
    -         String WAT[] = new String[] {"\u897f\u975e\u6642\u9593", "WAT",
    -                                      "\u897f\u975e\u590f\u4ee4\u6642\u9593", "WAST"};
    -@@ -185,18 +197,10 @@
    -                                      "\u897f\u5370\u5c3c\u590f\u4ee4\u6642\u9593", "WIST"};
    -         String WST_AUS[] = new String[] {"\u897f\u65b9\u6a19\u6e96\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "WST",
    -                                          "\u897f\u65b9\u590f\u4ee4\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "WST"};
    --        String SAMOA[] = new String[] {"\u85a9\u6469\u4e9e\u6a19\u6e96\u6642\u9593", "SST",
    --                                       "\u85a9\u6469\u4e9e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "SDT"};
    -         String WST_SAMOA[] = new String[] {"\u897f\u85a9\u6469\u4e9e\u6642\u9593", "WST",
    -                                            "\u897f\u85a9\u6469\u4e9e\u590f\u4ee4\u6642\u9593", "WSDT"};
    --        String ChST[] = new String[] {"\u67e5\u83ab\u6d1b\u6a19\u6e96\u6642\u9593", "ChST",
    --                                     "\u67e5\u83ab\u6d1b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ChDT"};
    --        String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST",
    --                                          "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST"};
    --        String UTC[] = new String[] {"\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC",
    --                                     "\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC"};
    --        String UZT[] = new String[] {"\u70cf\u8332\u5225\u514b\u65af\u5766\u6642\u9593", "UZT",
    --                                     "\u70cf\u8332\u5225\u514b\u65af\u5766\u590f\u4ee4\u6642\u9593", "UZST"};
    -+        String YAKT[] = new String[] {"\u4e9e\u5eab\u6b21\u514b\u6642\u9593", "YAKT",
    -+                                      "\u4e9e\u5eab\u6b21\u514b\u590f\u4ee4\u6642\u9593", "YAKST"};
    - 
    -         return new Object[][] {
    -             {"America/Los_Angeles", PST},
    -@@ -287,7 +291,7 @@
    -             {"Africa/Porto-Novo", WAT},
    -             {"Africa/Sao_Tome", GMT},
    -             {"Africa/Timbuktu", GMT},
    --            {"Africa/Tripoli", EET},
    -+            {"Africa/Tripoli", CET},
    -             {"Africa/Tunis", CET},
    -             {"Africa/Windhoek", WAT},
    -             {"America/Adak", HAST},
    -@@ -533,6 +537,7 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    -+            {"Asia/Khandyga", YAKT},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u6642\u9593", "KRAT",
    -                                                "\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u590f\u4ee4\u6642\u9593", "KRAST"}},
    -@@ -582,11 +587,10 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    -+            {"Asia/Ust-Nera", VLAT},
    -             {"Asia/Vientiane", ICT},
    --            {"Asia/Vladivostok", new String[] {"\u6d77\u53c3\u5d34\u6642\u9593", "VLAT",
    --                                               "\u6d77\u53c3\u5d34\u590f\u4ee4\u6642\u9593", "VLAST"}},
    --            {"Asia/Yakutsk", new String[] {"\u4e9e\u5eab\u6b21\u514b\u6642\u9593", "YAKT",
    --                                           "\u4e9e\u5eab\u6b21\u514b\u590f\u4ee4\u6642\u9593", "YAKST"}},
    -+            {"Asia/Vladivostok", VLAT},
    -+            {"Asia/Yakutsk", YAKT},
    -             {"Asia/Yekaterinburg", new String[] {"Yekaterinburg \u6642\u9593", "YEKT",
    -                                                  "Yekaterinburg \u590f\u4ee4\u6642\u9593", "YEKST"}},
    -             {"Asia/Yerevan", ARMT},
    -@@ -670,6 +674,7 @@
    -             {"Europe/Bratislava", CET},
    -             {"Europe/Brussels", CET},
    -             {"Europe/Budapest", CET},
    -+            {"Europe/Busingen", CET},
    -             {"Europe/Chisinau", EET},
    -             {"Europe/Copenhagen", CET},
    -             {"Europe/Dublin", DUBLIN},
    -@@ -749,7 +754,7 @@
    -             {"Jamaica", EST},
    -             {"Japan", JST},
    -             {"Kwajalein", MHT},
    --            {"Libya", EET},
    -+            {"Libya", CET},
    -             {"MET", new String[] {"\u4e2d\u6b50\u6642\u9593", "MET",
    -                                   "\u4e2d\u6b50\u590f\u4ee4\u6642\u9593", "MEST"}},
    -             {"Mexico/BajaNorte", PST},
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/8014469-tzdata2013c.patch openjdk-6-6b34-1.13.6/patches/openjdk/8014469-tzdata2013c.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/8014469-tzdata2013c.patch	2014-10-08 18:39:25.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/8014469-tzdata2013c.patch	1970-01-01 00:00:00.000000000 +0000
    @@ -1,276 +0,0 @@
    -# HG changeset patch
    -# User peytoia
    -# Date 1369892058 -32400
    -#      Thu May 30 14:34:18 2013 +0900
    -# Node ID 1dad45fa401d88fd42b795a2bd0ca796f6842ba5
    -# Parent  a1ec65ac926d41ccca2545dbc3b62bb7c12282af
    -8014469: (tz) Support tzdata2013c
    -8015570: Use long comparison in Rule.getRules().
    -Reviewed-by: okutsu
    -
    -diff --git a/make/sun/javazic/tzdata/VERSION b/make/sun/javazic/tzdata/VERSION
    ---- openjdk/jdk/make/sun/javazic/tzdata/VERSION
    -+++ openjdk/jdk/make/sun/javazic/tzdata/VERSION
    -@@ -21,4 +21,4 @@
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    - #
    --tzdata2013b
    -+tzdata2013c
    -diff --git a/make/sun/javazic/tzdata/antarctica b/make/sun/javazic/tzdata/antarctica
    ---- openjdk/jdk/make/sun/javazic/tzdata/antarctica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/antarctica
    -@@ -76,34 +76,6 @@
    - Rule	ChileAQ	2012	max	-	Apr	Sun>=23	3:00u	0	-
    - Rule	ChileAQ	2012	max	-	Sep	Sun>=2	4:00u	1:00	S
    - 
    --# These rules are stolen from the `australasia' file.
    --Rule	AusAQ	1917	only	-	Jan	 1	0:01	1:00	-
    --Rule	AusAQ	1917	only	-	Mar	25	2:00	0	-
    --Rule	AusAQ	1942	only	-	Jan	 1	2:00	1:00	-
    --Rule	AusAQ	1942	only	-	Mar	29	2:00	0	-
    --Rule	AusAQ	1942	only	-	Sep	27	2:00	1:00	-
    --Rule	AusAQ	1943	1944	-	Mar	lastSun	2:00	0	-
    --Rule	AusAQ	1943	only	-	Oct	 3	2:00	1:00	-
    --Rule	ATAQ	1967	only	-	Oct	Sun>=1	2:00s	1:00	-
    --Rule	ATAQ	1968	only	-	Mar	lastSun	2:00s	0	-
    --Rule	ATAQ	1968	1985	-	Oct	lastSun	2:00s	1:00	-
    --Rule	ATAQ	1969	1971	-	Mar	Sun>=8	2:00s	0	-
    --Rule	ATAQ	1972	only	-	Feb	lastSun	2:00s	0	-
    --Rule	ATAQ	1973	1981	-	Mar	Sun>=1	2:00s	0	-
    --Rule	ATAQ	1982	1983	-	Mar	lastSun	2:00s	0	-
    --Rule	ATAQ	1984	1986	-	Mar	Sun>=1	2:00s	0	-
    --Rule	ATAQ	1986	only	-	Oct	Sun>=15	2:00s	1:00	-
    --Rule	ATAQ	1987	1990	-	Mar	Sun>=15	2:00s	0	-
    --Rule	ATAQ	1987	only	-	Oct	Sun>=22	2:00s	1:00	-
    --Rule	ATAQ	1988	1990	-	Oct	lastSun	2:00s	1:00	-
    --Rule	ATAQ	1991	1999	-	Oct	Sun>=1	2:00s	1:00	-
    --Rule	ATAQ	1991	2005	-	Mar	lastSun	2:00s	0	-
    --Rule	ATAQ	2000	only	-	Aug	lastSun	2:00s	1:00	-
    --Rule	ATAQ	2001	max	-	Oct	Sun>=1	2:00s	1:00	-
    --Rule	ATAQ	2006	only	-	Apr	Sun>=1	2:00s	0	-
    --Rule	ATAQ	2007	only	-	Mar	lastSun	2:00s	0	-
    --Rule	ATAQ	2008	max	-	Apr	Sun>=1	2:00s	0	-
    --
    - # Argentina - year-round bases
    - # Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
    - # Esperanza, San Martin Land, -6323-05659, since 1952-12-17
    -@@ -145,10 +117,7 @@
    - # 
    - 
    - # From Steffen Thorsen (2010-03-10):
    --# We got these changes from the Australian Antarctic Division:
    --# - Macquarie Island will stay on UTC+11 for winter and therefore not
    --# switch back from daylight savings time when other parts of Australia do
    --# on 4 April.
    -+# We got these changes from the Australian Antarctic Division: ...
    - #
    - # - Casey station reverted to its normal time of UTC+8 on 5 March 2010.
    - # The change to UTC+11 is being considered as a regular summer thing but
    -@@ -159,9 +128,6 @@
    - #
    - # - Mawson station stays on UTC+5.
    - #
    --# In addition to the Rule changes for Casey/Davis, it means that Macquarie
    --# will no longer be like Hobart and will have to have its own Zone created.
    --#
    - # Background:
    - # 
    - # http://www.timeanddate.com/news/time/antartica-time-changes-2010.html
    -@@ -188,12 +154,6 @@
    - 			6:00	-	MAWT	2009 Oct 18 2:00
    - 						# Mawson Time
    - 			5:00	-	MAWT
    --Zone Antarctica/Macquarie 0	-	zzz	1911
    --			10:00	-	EST	1916 Oct 1 2:00
    --			10:00	1:00	EST	1917 Feb
    --			10:00	AusAQ	EST	1967
    --			10:00	ATAQ	EST	2010 Apr 4 3:00
    --			11:00	-	MIST	# Macquarie Island Time
    - # References:
    - # 
    - # Casey Weather (1998-02-26)
    -diff --git a/make/sun/javazic/tzdata/asia b/make/sun/javazic/tzdata/asia
    ---- openjdk/jdk/make/sun/javazic/tzdata/asia
    -+++ openjdk/jdk/make/sun/javazic/tzdata/asia
    -@@ -2314,11 +2314,20 @@
    - # http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html
    - # 
    - 
    --# From Arthur David Olson (2012-03-27):
    --# The timeanddate article for 2012 says that "the end date has not yet been
    --# announced" and that "Last year, both...paused daylight saving time during...
    --# Ramadan. It is not yet known [for] 2012."
    --# For now, assume both switch back on the last Friday in September. XXX
    -+# From Steffen Thorsen (2013-03-26):
    -+# The following news sources tells that Palestine will "start daylight saving
    -+# time from midnight on Friday, March 29, 2013" (translated).
    -+# [These are in Arabic and are for Gaza and for Ramallah, respectively.]
    -+# http://www.samanews.com/index.php?act=Show&id=154120
    -+# http://safa.ps/details/news/99844/%D8%B1%D8%A7%D9%85-%D8%A7%D9%84%D9%84%D9%87-%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-29-%D8%A7%D9%84%D8%AC%D8%A7%D8%B1%D9%8A.html
    -+
    -+# From Paul Eggert (2013-04-15):
    -+# For future dates, guess the last Thursday in March at 24:00 through
    -+# the first Friday on or after September 21 at 01:00.  This is consistent with
    -+# the predictions in today's editions of the following URLs,
    -+# which are for Gaza and Hebron respectively:
    -+# http://www.timeanddate.com/worldclock/timezone.html?n=702
    -+# http://www.timeanddate.com/worldclock/timezone.html?n=2364
    - 
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule EgyptAsia	1957	only	-	May	10	0:00	1:00	S
    -@@ -2332,19 +2341,20 @@
    - Rule Palestine	1999	2003	-	Oct	Fri>=15	0:00	0	-
    - Rule Palestine	2004	only	-	Oct	 1	1:00	0	-
    - Rule Palestine	2005	only	-	Oct	 4	2:00	0	-
    --Rule Palestine	2006	2008	-	Apr	 1	0:00	1:00	S
    -+Rule Palestine	2006	2007	-	Apr	 1	0:00	1:00	S
    - Rule Palestine	2006	only	-	Sep	22	0:00	0	-
    - Rule Palestine	2007	only	-	Sep	Thu>=8	2:00	0	-
    --Rule Palestine	2008	only	-	Aug	lastFri	0:00	0	-
    --Rule Palestine	2009	only	-	Mar	lastFri	0:00	1:00	S
    --Rule Palestine	2009	only	-	Sep	Fri>=1	2:00	0	-
    --Rule Palestine	2010	only	-	Mar	lastSat	0:01	1:00	S
    -+Rule Palestine	2008	2009	-	Mar	lastFri	0:00	1:00	S
    -+Rule Palestine	2008	only	-	Sep	 1	0:00	0	-
    -+Rule Palestine	2009	only	-	Sep	Fri>=1	1:00	0	-
    -+Rule Palestine	2010	only	-	Mar	26	0:00	1:00	S
    - Rule Palestine	2010	only	-	Aug	11	0:00	0	-
    --
    --# From Arthur David Olson (2011-09-20):
    --# 2011 transitions per http://www.timeanddate.com as of 2011-09-20.
    --# From Paul Eggert (2012-10-12):
    --# 2012 transitions per http://www.timeanddate.com as of 2012-10-12.
    -+Rule Palestine	2011	only	-	Apr	 1	0:01	1:00	S
    -+Rule Palestine	2011	only	-	Aug	 1	0:00	0	-
    -+Rule Palestine	2011	only	-	Aug	30	0:00	1:00	S
    -+Rule Palestine	2011	only	-	Sep	30	0:00	0	-
    -+Rule Palestine	2012	max	-	Mar	lastThu	24:00	1:00	S
    -+Rule Palestine	2012	max	-	Sep	Fri>=21	1:00	0	-
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
    -@@ -2352,26 +2362,20 @@
    - 			2:00 EgyptAsia	EE%sT	1967 Jun  5
    - 			2:00	Zion	I%sT	1996
    - 			2:00	Jordan	EE%sT	1999
    --			2:00 Palestine	EE%sT	2011 Apr  2 12:01
    --			2:00	1:00	EEST	2011 Aug  1
    --			2:00	-	EET	2012 Mar 30
    --			2:00	1:00	EEST	2012 Sep 21 1:00
    --			2:00	-	EET
    -+			2:00 Palestine	EE%sT	2008 Aug 29 0:00
    -+			2:00	-	EET	2008 Sep
    -+			2:00 Palestine	EE%sT	2010
    -+			2:00	-	EET	2010 Mar 27 0:01
    -+			2:00 Palestine	EE%sT	2011 Aug  1
    -+			2:00	-	EET	2012
    -+			2:00 Palestine	EE%sT
    - 
    - Zone	Asia/Hebron	2:20:23	-	LMT	1900 Oct
    - 			2:00	Zion	EET	1948 May 15
    - 			2:00 EgyptAsia	EE%sT	1967 Jun  5
    - 			2:00	Zion	I%sT	1996
    - 			2:00	Jordan	EE%sT	1999
    --			2:00 Palestine	EE%sT	2008 Aug
    --			2:00 	1:00	EEST	2008 Sep
    --			2:00 Palestine	EE%sT	2011 Apr  1 12:01
    --			2:00	1:00	EEST	2011 Aug  1
    --			2:00	-	EET	2011 Aug 30
    --			2:00	1:00	EEST	2011 Sep 30 3:00
    --			2:00	-	EET	2012 Mar 30
    --			2:00	1:00	EEST	2012 Sep 21 1:00
    --			2:00	-	EET
    -+			2:00 Palestine	EE%sT
    - 
    - # Paracel Is
    - # no information
    -diff --git a/make/sun/javazic/tzdata/australasia b/make/sun/javazic/tzdata/australasia
    ---- openjdk/jdk/make/sun/javazic/tzdata/australasia
    -+++ openjdk/jdk/make/sun/javazic/tzdata/australasia
    -@@ -241,9 +241,26 @@
    - # no times are set
    - #
    - # Macquarie
    --# permanent occupation (scientific station) since 1948;
    --# sealing and penguin oil station operated 1888/1917
    --# like Australia/Hobart
    -+# Permanent occupation (scientific station) 1911-1915 and since 25 March 1948;
    -+# sealing and penguin oil station operated Nov 1899 to Apr 1919.  See the
    -+# Tasmania Parks & Wildlife Service history of sealing at Macquarie Island
    -+# 
    -+# .
    -+# Guess that it was like Australia/Hobart while inhabited before 2010.
    -+#
    -+# From Steffen Thorsen (2010-03-10):
    -+# We got these changes from the Australian Antarctic Division:
    -+# - Macquarie Island will stay on UTC+11 for winter and therefore not
    -+# switch back from daylight savings time when other parts of Australia do
    -+# on 4 April.
    -+Zone Antarctica/Macquarie 0	-	zzz	1899 Nov
    -+			10:00	-	EST	1916 Oct 1 2:00
    -+			10:00	1:00	EST	1917 Feb
    -+			10:00	Aus	EST	1919 Apr
    -+			0	-	zzz	1948 Mar 25
    -+			10:00	Aus	EST	1967
    -+			10:00	AT	EST	2010 Apr 4 3:00
    -+			11:00	-	MIST	# Macquarie I Standard Time
    - 
    - # Christmas
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -diff --git a/make/sun/javazic/tzdata/southamerica b/make/sun/javazic/tzdata/southamerica
    ---- openjdk/jdk/make/sun/javazic/tzdata/southamerica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/southamerica
    -@@ -1589,16 +1589,16 @@
    - # forward 60 minutes, in all the territory of the Paraguayan Republic.
    - # ...
    - Rule	Para	2010	max	-	Oct	Sun>=1	0:00	1:00	S
    --Rule	Para	2010	max	-	Apr	Sun>=8	0:00	0	-
    -+Rule	Para	2010	2012	-	Apr	Sun>=8	0:00	0	-
    - #
    - # From Steffen Thorsen (2013-03-07):
    - # Paraguay will end DST on 2013-03-24 00:00....
    --# They do not tell if this will be a permanent change or just this year....
    - # http://www.ande.gov.py/interna.php?id=1075
    - #
    --# From Paul Eggert (2013-03-07):
    --# For now, assume it's just this year.
    --Rule	Para	2013	only	-	Mar	24	0:00	0	-
    -+# From Carlos Raul Perasso (2013-03-15):
    -+# The change in Paraguay is now final.  Decree number 10780
    -+# http://www.presidencia.gov.py/uploads/pdf/presidencia-3b86ff4b691c79d4f5927ca964922ec74772ce857c02ca054a52a37b49afc7fb.pdf
    -+Rule	Para	2013	max	-	Mar	Sun>=22	0:00	0	-
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone America/Asuncion	-3:50:40 -	LMT	1890
    -diff --git a/make/sun/javazic/tzdata/zone.tab b/make/sun/javazic/tzdata/zone.tab
    ---- openjdk/jdk/make/sun/javazic/tzdata/zone.tab
    -+++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab
    -@@ -65,7 +65,6 @@
    - AQ	-7824+10654	Antarctica/Vostok	Vostok Station, Lake Vostok
    - AQ	-6640+14001	Antarctica/DumontDUrville	Dumont-d'Urville Station, Terre Adelie
    - AQ	-690022+0393524	Antarctica/Syowa	Syowa Station, E Ongul I
    --AQ	-5430+15857	Antarctica/Macquarie	Macquarie Island Station, Macquarie Island
    - AR	-3436-05827	America/Argentina/Buenos_Aires	Buenos Aires (BA, CF)
    - AR	-3124-06411	America/Argentina/Cordoba	most locations (CB, CC, CN, ER, FM, MN, SE, SF)
    - AR	-2447-06525	America/Argentina/Salta	(SA, LP, NQ, RN)
    -@@ -81,6 +80,7 @@
    - AS	-1416-17042	Pacific/Pago_Pago
    - AT	+4813+01620	Europe/Vienna
    - AU	-3133+15905	Australia/Lord_Howe	Lord Howe Island
    -+AU	-5430+15857	Antarctica/Macquarie	Macquarie Island
    - AU	-4253+14719	Australia/Hobart	Tasmania - most locations
    - AU	-3956+14352	Australia/Currie	Tasmania - King Island
    - AU	-3749+14458	Australia/Melbourne	Victoria
    -diff --git a/make/tools/src/build/tools/javazic/Rule.java b/make/tools/src/build/tools/javazic/Rule.java
    ---- openjdk/jdk/make/tools/src/build/tools/javazic/Rule.java
    -+++ openjdk/jdk/make/tools/src/build/tools/javazic/Rule.java
    -@@ -119,7 +119,7 @@
    -                                                 r1.getDay(), r1.getTime().getTime());
    -                     long t2 = Time.getLocalTime(y, r2.getMonth(),
    -                                                 r2.getDay(), r2.getTime().getTime());
    --                    return (int)(t1 - t2);
    -+                    return (t1 > t2) ? 1 : (t1 < t2) ? -1 : 0;
    -                 }
    -                 public boolean equals(Object o) {
    -                     return this == o;
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/8020054-tzdata2013d.patch openjdk-6-6b34-1.13.6/patches/openjdk/8020054-tzdata2013d.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/8020054-tzdata2013d.patch	2014-10-08 18:39:25.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/8020054-tzdata2013d.patch	1970-01-01 00:00:00.000000000 +0000
    @@ -1,314 +0,0 @@
    -# HG changeset patch
    -# User igerasim
    -# Date 1373612209 -14400
    -#      Fri Jul 12 10:56:49 2013 +0400
    -# Node ID dbf9b854ae55750afe3c8b3e319e3ccf5cfd2901
    -# Parent  1dad45fa401d88fd42b795a2bd0ca796f6842ba5
    -8020054: (tz) Support tzdata2013d
    -Reviewed-by: coffeys, peytoia
    -
    -diff --git a/make/sun/javazic/tzdata/VERSION b/make/sun/javazic/tzdata/VERSION
    ---- openjdk/jdk/make/sun/javazic/tzdata/VERSION
    -+++ openjdk/jdk/make/sun/javazic/tzdata/VERSION
    -@@ -21,4 +21,4 @@
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    - #
    --tzdata2013c
    -+tzdata2013d
    -diff --git a/make/sun/javazic/tzdata/africa b/make/sun/javazic/tzdata/africa
    ---- openjdk/jdk/make/sun/javazic/tzdata/africa
    -+++ openjdk/jdk/make/sun/javazic/tzdata/africa
    -@@ -875,12 +875,18 @@
    - # announced that year's Ramadan daylight-saving transitions would be
    - # 2012-07-20 and 2012-08-20; see
    - # .
    --#
    -+
    -+# From Andrew Paprocki (2013-07-02):
    -+# Morocco announced that the year's Ramadan daylight-savings
    -+# transitions would be 2013-07-07 and 2013-08-10; see:
    -+# http://www.maroc.ma/en/news/morocco-suspends-daylight-saving-time-july-7-aug10
    -+
    -+# From Paul Eggert (2013-07-03):
    - # To estimate what the Moroccan government will do in future years,
    --# transition dates for 2013 through 2021 were determined by running
    -+# transition dates for 2014 through 2021 were determined by running
    - # the following program under GNU Emacs 24.3:
    - #
    --# (let ((islamic-year 1434))
    -+# (let ((islamic-year 1435))
    - #   (while (< islamic-year 1444)
    - #     (let ((a
    - #	     (calendar-gregorian-from-absolute
    -@@ -933,8 +939,8 @@
    - Rule	Morocco	2012	max	-	Sep	 lastSun 3:00	0	-
    - Rule	Morocco	2012	only	-	Jul	 20	 3:00	0	-
    - Rule	Morocco	2012	only	-	Aug	 20	 2:00	1:00	S
    --Rule	Morocco	2013	only	-	Jul	  9	 3:00	0	-
    --Rule	Morocco	2013	only	-	Aug	  8	 2:00	1:00	S
    -+Rule	Morocco	2013	only	-	Jul	  7	 3:00	0	-
    -+Rule	Morocco	2013	only	-	Aug	 10	 2:00	1:00	S
    - Rule	Morocco	2014	only	-	Jun	 29	 3:00	0	-
    - Rule	Morocco	2014	only	-	Jul	 29	 2:00	1:00	S
    - Rule	Morocco	2015	only	-	Jun	 18	 3:00	0	-
    -diff --git a/make/sun/javazic/tzdata/asia b/make/sun/javazic/tzdata/asia
    ---- openjdk/jdk/make/sun/javazic/tzdata/asia
    -+++ openjdk/jdk/make/sun/javazic/tzdata/asia
    -@@ -1235,39 +1235,21 @@
    - Rule	Zion	2012	only	-	Mar	Fri>=26	2:00	1:00	D
    - Rule	Zion	2012	only	-	Sep	23	2:00	0	S
    - 
    --# From Ephraim Silverberg (2012-10-18):
    --# Yesterday, the Interior Ministry Committee, after more than a year
    --# past, approved sending the proposed June 2011 changes to the Time
    --# Decree Law back to the Knesset for second and third (final) votes
    --# before the upcoming elections on Jan. 22, 2013.  Hence, although the
    --# changes are not yet law, they are expected to be so before February 2013.
    -+# From Ephraim Silverberg (2013-06-27):
    -+# On June 23, 2013, the Israeli government approved changes to the
    -+# Time Decree Law.  The next day, the changes passed the First Reading
    -+# in the Knesset.  The law is expected to pass the Second and Third
    -+# (final) Readings by the beginning of September 2013.
    - #
    --# As of 2013, DST starts at 02:00 on the Friday before the last Sunday in March.
    --# DST ends at 02:00 on the first Sunday after October 1, unless it occurs on the
    --# second day of the Jewish Rosh Hashana holiday, in which case DST ends a day
    --# later (i.e. at 02:00 the first Monday after October 2).
    --# [Rosh Hashana holidays are factored in until 2100.]
    --
    --# From Ephraim Silverberg (2012-11-05):
    --# The Knesset passed today (in second and final readings) the amendment to the
    --# Time Decree Law making the changes ... law.
    -+# As of 2013, DST starts at 02:00 on the Friday before the last Sunday
    -+# in March.  DST ends at 02:00 on the last Sunday of October.
    - 
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Zion	2013	max	-	Mar	Fri>=23	2:00	1:00	D
    --Rule	Zion	2013	2026	-	Oct	Sun>=2	2:00	0	S
    --Rule	Zion	2027	only	-	Oct	Mon>=3	2:00	0	S
    --Rule	Zion	2028	max	-	Oct	Sun>=2	2:00	0	S
    --# The following rules are commented out for now, as they break older
    --# versions of zic that support only signed 32-bit timestamps, i.e.,
    --# through 2038-01-19 03:14:07 UTC.
    --#Rule	Zion	2028	2053	-	Oct	Sun>=2	2:00	0	S
    --#Rule	Zion	2054	only	-	Oct	Mon>=3	2:00	0	S
    --#Rule	Zion	2055	2080	-	Oct	Sun>=2	2:00	0	S
    --#Rule	Zion	2081	only	-	Oct	Mon>=3	2:00	0	S
    --#Rule	Zion	2082	max	-	Oct	Sun>=2	2:00	0	S
    -+Rule	Zion	2013	max	-	Oct	lastSun	2:00	0	S
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone	Asia/Jerusalem	2:20:56 -	LMT	1880
    -+Zone	Asia/Jerusalem	2:20:54 -	LMT	1880
    - 			2:20:40	-	JMT	1918	# Jerusalem Mean Time?
    - 			2:00	Zion	I%sT
    - 
    -@@ -2570,8 +2552,8 @@
    - Rule	Syria	2007	only	-	Mar	lastFri	0:00	1:00	S
    - # From Jesper Norgard (2007-10-27):
    - # The sister center ICARDA of my work CIMMYT is confirming that Syria DST will
    --# not take place 1.st November at 0:00 o'clock but 1.st November at 24:00 or
    --# rather Midnight between Thursday and Friday. This does make more sence than
    -+# not take place 1st November at 0:00 o'clock but 1st November at 24:00 or
    -+# rather Midnight between Thursday and Friday. This does make more sense than
    - # having it between Wednesday and Thursday (two workdays in Syria) since the
    - # weekend in Syria is not Saturday and Sunday, but Friday and Saturday. So now
    - # it is implemented at midnight of the last workday before weekend...
    -diff --git a/make/sun/javazic/tzdata/australasia b/make/sun/javazic/tzdata/australasia
    ---- openjdk/jdk/make/sun/javazic/tzdata/australasia
    -+++ openjdk/jdk/make/sun/javazic/tzdata/australasia
    -@@ -253,10 +253,16 @@
    - # - Macquarie Island will stay on UTC+11 for winter and therefore not
    - # switch back from daylight savings time when other parts of Australia do
    - # on 4 April.
    -+#
    -+# From Arthur David Olson (2013-05-23):
    -+# The 1919 transition is overspecified below so pre-2013 zics
    -+# will produce a binary file with an EST-type as the first 32-bit type;
    -+# this is required for correct handling of times before 1916 by
    -+# pre-2013 versions of localtime.
    - Zone Antarctica/Macquarie 0	-	zzz	1899 Nov
    - 			10:00	-	EST	1916 Oct 1 2:00
    - 			10:00	1:00	EST	1917 Feb
    --			10:00	Aus	EST	1919 Apr
    -+			10:00	Aus	EST	1919 Apr 1 0:00s
    - 			0	-	zzz	1948 Mar 25
    - 			10:00	Aus	EST	1967
    - 			10:00	AT	EST	2010 Apr 4 3:00
    -@@ -1498,12 +1504,12 @@
    - # From Paul Eggert (2000-01-08):
    - # IATA SSIM (1999-09) says DST ends 0100 local time.  Go with McDow.
    - 
    --# From the BBC World Service (1998-10-31 11:32 UTC):
    -+# From the BBC World Service in
    -+# http://news.bbc.co.uk/2/hi/asia-pacific/205226.stm (1998-10-31 16:03 UTC):
    - # The Fijiian government says the main reasons for the time change is to
    --# improve productivity and reduce road accidents.  But correspondents say it
    --# also hopes the move will boost Fiji's ability to compete with other pacific
    --# islands in the effort to attract tourists to witness the dawning of the new
    --# millenium.
    -+# improve productivity and reduce road accidents.... [T]he move is also
    -+# intended to boost Fiji's ability to attract tourists to witness the dawning
    -+# of the new millennium.
    - 
    - # http://www.fiji.gov.fj/press/2000_09/2000_09_13-05.shtml (2000-09-13)
    - # reports that Fiji has discontinued DST.
    -@@ -1648,7 +1654,7 @@
    - # Shanks & Pottenger say the transition was on 1968-10-01; go with Mundell.
    - 
    - # From Eric Ulevik (1999-05-03):
    --# Tonga's director of tourism, who is also secretary of the National Millenium
    -+# Tonga's director of tourism, who is also secretary of the National Millennium
    - # Committee, has a plan to get Tonga back in front.
    - # He has proposed a one-off move to tropical daylight saving for Tonga from
    - # October to March, which has won approval in principle from the Tongan
    -diff --git a/make/sun/javazic/tzdata/europe b/make/sun/javazic/tzdata/europe
    ---- openjdk/jdk/make/sun/javazic/tzdata/europe
    -+++ openjdk/jdk/make/sun/javazic/tzdata/europe
    -@@ -546,7 +546,7 @@
    - # It seems that Paris, Monaco, Rule France, Rule Belgium all agree on
    - # 2:00 standard time, e.g. 3:00 local time.  However there are no
    - # countries that use C-Eur rules in September 1945, so the only items
    --# affected are apparently these ficticious zones that translates acronyms
    -+# affected are apparently these fictitious zones that translate acronyms
    - # CET and MET:
    - #
    - # Zone CET  1:00 C-Eur CE%sT
    -@@ -2802,9 +2802,9 @@
    - 
    - # Ukraine
    - #
    --# From Igor Karpov, who works for the Ukranian Ministry of Justice,
    -+# From Igor Karpov, who works for the Ukrainian Ministry of Justice,
    - # via Garrett Wollman (2003-01-27):
    --# BTW, I've found the official document on this matter. It's goverment
    -+# BTW, I've found the official document on this matter. It's government
    - # regulations number 509, May 13, 1996. In my poor translation it says:
    - # "Time in Ukraine is set to second timezone (Kiev time). Each last Sunday
    - # of March at 3am the time is changing to 4am and each last Sunday of
    -@@ -2838,7 +2838,7 @@
    - # time this year after all.
    - #
    - # From Udo Schwedt (2011-10-18):
    --# As far as I understand, the recent change to the Ukranian time zone
    -+# As far as I understand, the recent change to the Ukrainian time zone
    - # (Europe/Kiev) to introduce permanent daylight saving time (similar
    - # to Russia) was reverted today:
    - #
    -diff --git a/make/sun/javazic/tzdata/iso3166.tab b/make/sun/javazic/tzdata/iso3166.tab
    ---- openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab
    -+++ openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab
    -@@ -26,14 +26,12 @@
    - # 2009-05-17 by Arthur David Olson.
    - # ISO 3166 alpha-2 country codes
    - #
    --# From Paul Eggert (2006-09-27):
    -+# From Paul Eggert (2013-05-27):
    - #
    - # This file contains a table with the following columns:
    - # 1.  ISO 3166-1 alpha-2 country code, current as of
    --#     ISO 3166-1 Newsletter VI-1 (2007-09-21).  See:
    --#     
    --#     ISO 3166 Maintenance agency (ISO 3166/MA)
    --#     .
    -+#     ISO 3166-1 Newsletter VI-15 (2013-05-10).  See: Updates on ISO 3166
    -+#   http://www.iso.org/iso/home/standards/country_codes/updates_on_iso_3166.htm
    - # 2.  The usual English name for the country,
    - #     chosen so that alphabetic sorting of subsets produces helpful lists.
    - #     This is not the same as the English name in the ISO 3166 tables.
    -@@ -43,8 +41,9 @@
    - #
    - # Lines beginning with `#' are comments.
    - #
    --# From Arthur David Olson (2011-08-17):
    --# Resynchronized today with the ISO 3166 site (adding SS for South Sudan).
    -+# This table is intended as an aid for users, to help them select time
    -+# zone data appropriate for their practical needs.  It is not intended
    -+# to take or endorse any position on legal or territorial claims.
    - #
    - #country-
    - #code	country name
    -@@ -77,7 +76,7 @@
    - BM	Bermuda
    - BN	Brunei
    - BO	Bolivia
    --BQ	Bonaire Sint Eustatius & Saba
    -+BQ	Bonaire, St Eustatius & Saba
    - BR	Brazil
    - BS	Bahamas
    - BT	Bhutan
    -@@ -258,7 +257,7 @@
    - SS	South Sudan
    - ST	Sao Tome & Principe
    - SV	El Salvador
    --SX	Sint Maarten
    -+SX	St Maarten (Dutch part)
    - SY	Syria
    - SZ	Swaziland
    - TC	Turks & Caicos Is
    -diff --git a/make/sun/javazic/tzdata/southamerica b/make/sun/javazic/tzdata/southamerica
    ---- openjdk/jdk/make/sun/javazic/tzdata/southamerica
    -+++ openjdk/jdk/make/sun/javazic/tzdata/southamerica
    -@@ -994,7 +994,7 @@
    - # adopted by the same states as before.
    - Rule	Brazil	2007	only	-	Oct	Sun>=8	 0:00	1:00	S
    - # From Frederico A. C. Neves (2008-09-10):
    --# Acording to this decree
    -+# According to this decree
    - # 
    - # http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm
    - # 
    -@@ -1226,7 +1226,7 @@
    - # http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651
    - # 
    - #
    --# This is not yet reflected in the offical "cambio de hora" site, but
    -+# This is not yet reflected in the official "cambio de hora" site, but
    - # probably will be soon:
    - # 
    - # http://www.horaoficial.cl/cambio.htm
    -diff --git a/make/sun/javazic/tzdata/zone.tab b/make/sun/javazic/tzdata/zone.tab
    ---- openjdk/jdk/make/sun/javazic/tzdata/zone.tab
    -+++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab
    -@@ -27,15 +27,19 @@
    - #
    - # TZ zone descriptions
    - #
    --# From Paul Eggert (1996-08-05):
    -+# From Paul Eggert (2013-05-27):
    - #
    - # This file contains a table with the following columns:
    - # 1.  ISO 3166 2-character country code.  See the file `iso3166.tab'.
    -+#     This identifies a country that overlaps the zone.  The country may
    -+#     overlap other zones and the zone may overlap other countries.
    - # 2.  Latitude and longitude of the zone's principal location
    - #     in ISO 6709 sign-degrees-minutes-seconds format,
    - #     either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
    - #     first latitude (+ is north), then longitude (+ is east).
    -+#     This location need not lie within the column-1 country.
    - # 3.  Zone name used in value of TZ environment variable.
    -+#     Please see the 'Theory' file for how zone names are chosen.
    - # 4.  Comments; present if and only if the country has multiple rows.
    - #
    - # Columns are separated by a single tab.
    -@@ -45,6 +49,10 @@
    - #
    - # Lines beginning with `#' are comments.
    - #
    -+# This table is intended as an aid for users, to help them select time
    -+# zone data appropriate for their practical needs.  It is not intended
    -+# to take or endorse any position on legal or territorial claims.
    -+#
    - #country-
    - #code	coordinates	TZ			comments
    - AD	+4230+00131	Europe/Andorra
    -@@ -239,7 +247,7 @@
    - ID	-0507+11924	Asia/Makassar	east & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor
    - ID	-0232+14042	Asia/Jayapura	west New Guinea (Irian Jaya) & Malukus (Moluccas)
    - IE	+5320-00615	Europe/Dublin
    --IL	+3146+03514	Asia/Jerusalem
    -+IL	+314650+0351326	Asia/Jerusalem
    - IM	+5409-00428	Europe/Isle_of_Man
    - IN	+2232+08822	Asia/Kolkata
    - IO	-0720+07225	Indian/Chagos
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/8020190-pr2174-jfieldid_must_match_object.patch openjdk-6-6b34-1.13.6/patches/openjdk/8020190-pr2174-jfieldid_must_match_object.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/8020190-pr2174-jfieldid_must_match_object.patch	1970-01-01 00:00:00.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/8020190-pr2174-jfieldid_must_match_object.patch	2015-01-20 09:12:43.000000000 +0000
    @@ -0,0 +1,80 @@
    +# HG changeset patch
    +# User prr
    +# Date 1380312407 25200
    +#      Fri Sep 27 13:06:47 2013 -0700
    +# Node ID 993c08c0fcc7c6f404f708728679e6e707a95f8c
    +# Parent  6a11347bf5dcf44fc72ed83b451b89bbc16aea03
    +8020190, PR2174, RH1176718: Fatal: Bug in native code: jfieldID must match object
    +Reviewed-by: jgodinez, vadim
    +
    +diff -r 7fc691671bf0 src/share/classes/sun/font/FreetypeFontScaler.java
    +--- openjdk/jdk/src/share/classes/sun/font/FreetypeFontScaler.java	Tue Jan 20 03:06:20 2015 +0000
    ++++ openjdk/jdk/src/share/classes/sun/font/FreetypeFontScaler.java	Tue Jan 20 05:06:26 2015 +0000
    +@@ -164,7 +164,7 @@
    + 
    +     public synchronized void dispose() {
    +         if (nativeScaler != 0L) {
    +-            disposeNativeScaler(nativeScaler);
    ++            disposeNativeScaler(font.get(), nativeScaler);
    +             nativeScaler = 0L;
    +         }
    +     }
    +@@ -185,7 +185,7 @@
    + 
    +     synchronized int getGlyphCode(char charCode) throws FontScalerException {
    +         if (nativeScaler != 0L) {
    +-            return getGlyphCodeNative(nativeScaler, charCode);
    ++            return getGlyphCodeNative(font.get(), nativeScaler, charCode);
    +         }
    +         return FontManager.getNullScaler().getGlyphCode(charCode);
    +     }
    +@@ -239,9 +239,9 @@
    + 
    +     private native long getLayoutTableCacheNative(long pScaler);
    + 
    +-    private native void disposeNativeScaler(long pScaler);
    ++    private native void disposeNativeScaler(Font2D font2D, long pScaler);
    + 
    +-    private native int getGlyphCodeNative(long pScaler, char charCode);
    ++    private native int getGlyphCodeNative(Font2D font, long pScaler, char charCode);
    +     private native int getNumGlyphsNative(long pScaler);
    +     private native int getMissingGlyphCodeNative(long pScaler);
    + 
    +diff -r 7fc691671bf0 src/share/native/sun/font/freetypeScaler.c
    +--- openjdk/jdk/src/share/native/sun/font/freetypeScaler.c	Tue Jan 20 03:06:20 2015 +0000
    ++++ openjdk/jdk/src/share/native/sun/font/freetypeScaler.c	Tue Jan 20 05:06:26 2015 +0000
    +@@ -884,13 +884,13 @@
    +  */
    + JNIEXPORT void JNICALL
    + Java_sun_font_FreetypeFontScaler_disposeNativeScaler(
    +-        JNIEnv *env, jobject scaler, jlong pScaler) {
    ++        JNIEnv *env, jobject scaler, jobject font2D, jlong pScaler) {
    +     FTScalerInfo* scalerInfo = (FTScalerInfo *) jlong_to_ptr(pScaler);
    +     
    +     /* Freetype functions *may* cause callback to java
    +        that can use cached values. Make sure our cache is up to date. 
    +        NB: scaler context is not important at this point, can use NULL. */
    +-    int errCode = setupFTContext(env, scaler, scalerInfo, NULL);
    ++    int errCode = setupFTContext(env, font2D, scalerInfo, NULL);
    +     if (errCode) {
    +         return;
    +     }
    +@@ -939,7 +939,8 @@
    +  */
    + JNIEXPORT jint JNICALL
    + Java_sun_font_FreetypeFontScaler_getGlyphCodeNative(
    +-        JNIEnv *env, jobject scaler, jlong pScaler, jchar charCode) {
    ++        JNIEnv *env, jobject scaler,
    ++        jobject font2D, jlong pScaler, jchar charCode) {
    + 
    +     FTScalerInfo* scalerInfo = (FTScalerInfo *) jlong_to_ptr(pScaler);
    +     int errCode;
    +@@ -952,7 +953,7 @@
    +     /* Freetype functions *may* cause callback to java
    +        that can use cached values. Make sure our cache is up to date.
    +        Scaler context is not important here, can use NULL. */
    +-    errCode = setupFTContext(env, scaler, scalerInfo, NULL);
    ++    errCode = setupFTContext(env, font2D, scalerInfo, NULL);
    +     if (errCode) {
    +         return 0;
    +     }
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/8025255-tzdata2013g.patch openjdk-6-6b34-1.13.6/patches/openjdk/8025255-tzdata2013g.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/8025255-tzdata2013g.patch	2014-10-08 18:39:25.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/8025255-tzdata2013g.patch	1970-01-01 00:00:00.000000000 +0000
    @@ -1,3976 +0,0 @@
    -# HG changeset patch
    -# User aefimov
    -# Date 1382620458 -14400
    -#      Thu Oct 24 17:14:18 2013 +0400
    -# Node ID 3d28326a9e5d165695b0294a274d75d3b4020c57
    -# Parent  fd7850833158b4374584452dd65b1a56ab6ca2f9
    -8025255: (tz) Support tzdata2013g
    -8026772: test/sun/util/resources/TimeZone/Bug6317929.java failing
    -Reviewed-by: okutsu, mfang
    -
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/VERSION
    ---- openjdk/jdk/make/sun/javazic/tzdata/VERSION	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/VERSION	Thu Oct 24 17:14:18 2013 +0400
    -@@ -21,4 +21,4 @@
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    - #
    --tzdata2013d
    -+tzdata2013g
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/africa
    ---- openjdk/jdk/make/sun/javazic/tzdata/africa	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/africa	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,22 +1,22 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    -@@ -881,13 +881,23 @@
    - # transitions would be 2013-07-07 and 2013-08-10; see:
    - # http://www.maroc.ma/en/news/morocco-suspends-daylight-saving-time-july-7-aug10
    - 
    --# From Paul Eggert (2013-07-03):
    -+# From Steffen Thorsen (2013-09-28):
    -+# Morocco extends DST by one month, on very short notice, just 1 day
    -+# before it was going to end.  There is a new decree (2.13.781) for
    -+# this, where DST from now on goes from last Sunday of March at 02:00
    -+# to last Sunday of October at 03:00, similar to EU rules.  Official
    -+# source (French):
    -+# http://www.maroc.gov.ma/fr/actualites/lhoraire-dete-gmt1-maintenu-jusquau-27-octobre-2013
    -+# Another source (specifying the time for start and end in the decree):
    -+# http://www.lemag.ma/Heure-d-ete-au-Maroc-jusqu-au-27-octobre_a75620.html
    -+
    -+# From Paul Eggert (2013-09-30):
    - # To estimate what the Moroccan government will do in future years,
    --# transition dates for 2014 through 2021 were determined by running
    -+# transition dates for 2014 through 2037 were determined by running
    - # the following program under GNU Emacs 24.3:
    - #
    - # (let ((islamic-year 1435))
    --#   (while (< islamic-year 1444)
    -+#   (while (< islamic-year 1460)
    - #     (let ((a
    - #	     (calendar-gregorian-from-absolute
    - #	      (calendar-islamic-to-absolute (list 9 1 islamic-year))))
    -@@ -902,13 +912,14 @@
    - #	  (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
    - #     (setq islamic-year (+ 1 islamic-year))))
    - #
    --# with the results hand-edited for 2020-2022, when the normal spring-forward
    --# date falls during the estimated Ramadan.
    --#
    --# From 2023 through 2038 Ramadan is not predicted to overlap with
    --# daylight saving time.  Starting in 2039 there will be overlap again,
    -+# with spring-forward transitions removed for 2023-2025, when the
    -+# normal spring-forward date falls during the estimated Ramadan; with
    -+# all transitions removed for 2026-2035, where the estimated Ramadan
    -+# falls entirely outside daylight-saving time; and with fall-back
    -+# transitions removed for 2036-2037, where the normal fall-back
    -+# date falls during the estimated Ramadan.  Problems continue after that,
    - # but 32-bit time_t values roll around in 2038 so for now do not worry
    --# about dates after 2038.
    -+# about dates after 2037.
    - 
    - # RULE	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - 
    -@@ -935,12 +946,14 @@
    - Rule	Morocco	2010	only	-	Aug	 8	 0:00	0	-
    - Rule	Morocco	2011	only	-	Apr	 3	 0:00	1:00	S
    - Rule	Morocco	2011	only	-	Jul	 31	 0	0	-
    --Rule	Morocco	2012	2019	-	Apr	 lastSun 2:00	1:00	S
    --Rule	Morocco	2012	max	-	Sep	 lastSun 3:00	0	-
    -+Rule	Morocco	2012	2013	-	Apr	 lastSun 2:00	1:00	S
    -+Rule	Morocco	2012	only	-	Sep	 30	 3:00	0	-
    - Rule	Morocco	2012	only	-	Jul	 20	 3:00	0	-
    - Rule	Morocco	2012	only	-	Aug	 20	 2:00	1:00	S
    - Rule	Morocco	2013	only	-	Jul	  7	 3:00	0	-
    - Rule	Morocco	2013	only	-	Aug	 10	 2:00	1:00	S
    -+Rule	Morocco	2013	2035	-	Oct	 lastSun 3:00	0	-
    -+Rule	Morocco	2014	2022	-	Mar	 lastSun 2:00	1:00	S
    - Rule	Morocco	2014	only	-	Jun	 29	 3:00	0	-
    - Rule	Morocco	2014	only	-	Jul	 29	 2:00	1:00	S
    - Rule	Morocco	2015	only	-	Jun	 18	 3:00	0	-
    -@@ -953,10 +966,21 @@
    - Rule	Morocco	2018	only	-	Jun	 15	 2:00	1:00	S
    - Rule	Morocco	2019	only	-	May	  6	 3:00	0	-
    - Rule	Morocco	2019	only	-	Jun	  5	 2:00	1:00	S
    -+Rule	Morocco	2020	only	-	Apr	 24	 3:00	0	-
    - Rule	Morocco	2020	only	-	May	 24	 2:00	1:00	S
    -+Rule	Morocco	2021	only	-	Apr	 13	 3:00	0	-
    - Rule	Morocco	2021	only	-	May	 13	 2:00	1:00	S
    -+Rule	Morocco	2022	only	-	Apr	  3	 3:00	0	-
    - Rule	Morocco	2022	only	-	May	  3	 2:00	1:00	S
    --Rule	Morocco	2023	max	-	Apr	 lastSun 2:00	1:00	S
    -+Rule	Morocco	2023	only	-	Apr	 22	 2:00	1:00	S
    -+Rule	Morocco	2024	only	-	Apr	 10	 2:00	1:00	S
    -+Rule	Morocco	2025	only	-	Mar	 31	 2:00	1:00	S
    -+Rule	Morocco	2026	max	-	Mar	 lastSun 2:00	1:00	S
    -+Rule	Morocco	2036	only	-	Oct	 21	 3:00	0	-
    -+Rule	Morocco	2037	only	-	Oct	 11	 3:00	0	-
    -+Rule	Morocco	2038	only	-	Sep	 30	 3:00	0	-
    -+Rule	Morocco	2038	only	-	Oct	 30	 2:00	1:00	S
    -+Rule	Morocco	2038	max	-	Oct	 lastSun 3:00	0	-
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
    -@@ -1123,9 +1147,7 @@
    - 			3:00	-	EAT
    - 
    - # South Sudan
    --Zone	Africa/Juba	2:06:24 -	LMT	1931
    --			2:00	Sudan	CA%sT	2000 Jan 15 12:00
    --			3:00	-	EAT
    -+Link Africa/Khartoum Africa/Juba
    - 
    - # Swaziland
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/antarctica
    ---- openjdk/jdk/make/sun/javazic/tzdata/antarctica	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/antarctica	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,22 +1,22 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    -@@ -39,9 +39,9 @@
    - #
    - # Except for the French entries,
    - # I made up all time zone abbreviations mentioned here; corrections welcome!
    --# FORMAT is `zzz' and GMTOFF is 0 for locations while uninhabited.
    -+# FORMAT is 'zzz' and GMTOFF is 0 for locations while uninhabited.
    - 
    --# These rules are stolen from the `southamerica' file.
    -+# These rules are stolen from the 'southamerica' file.
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	ArgAQ	1964	1966	-	Mar	 1	0:00	0	-
    - Rule	ArgAQ	1964	1966	-	Oct	15	0:00	1:00	S
    -@@ -251,9 +251,10 @@
    - # Scott Island (never inhabited)
    - #
    - # year-round base
    --# Scott, Ross Island, since 1957-01, is like Antarctica/McMurdo.
    -+# Scott Base, Ross Island, since 1957-01.
    -+# See Pacific/Auckland.
    - #
    --# These rules for New Zealand are stolen from the `australasia' file.
    -+# These rules for New Zealand are stolen from the 'australasia' file.
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	NZAQ	1974	only	-	Nov	 3	2:00s	1:00	D
    - Rule	NZAQ	1975	1988	-	Oct	lastSun	2:00s	1:00	D
    -@@ -291,11 +292,11 @@
    - # From Lee Hotz (2001-03-08):
    - # I queried the folks at Columbia who spent the summer at Vostok and this is
    - # what they had to say about time there:
    --# ``in the US Camp (East Camp) we have been on New Zealand (McMurdo)
    -+# "in the US Camp (East Camp) we have been on New Zealand (McMurdo)
    - # time, which is 12 hours ahead of GMT. The Russian Station Vostok was
    - # 6 hours behind that (although only 2 miles away, i.e. 6 hours ahead
    - # of GMT). This is a time zone I think two hours east of Moscow. The
    --# natural time zone is in between the two: 8 hours ahead of GMT.''
    -+# natural time zone is in between the two: 8 hours ahead of GMT."
    - #
    - # From Paul Eggert (2001-05-04):
    - # This seems to be hopelessly confusing, so I asked Lee Hotz about it
    -@@ -360,16 +361,8 @@
    - 			-4:00	ChileAQ	CL%sT
    - #
    - #
    --# McMurdo, Ross Island, since 1955-12
    --# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone Antarctica/McMurdo	0	-	zzz	1956
    --			12:00	NZAQ	NZ%sT
    --#
    --# Amundsen-Scott, South Pole, continuously occupied since 1956-11-20
    --#
    --# From Paul Eggert (1996-09-03):
    --# Normally it wouldn't have a separate entry, since it's like the
    --# larger Antarctica/McMurdo since 1970, but it's too famous to omit.
    -+# McMurdo Station, Ross Island, since 1955-12
    -+# Amundsen-Scott South Pole Station, continuously occupied since 1956-11-20
    - #
    - # From Chris Carrier (1996-06-27):
    - # Siple, the first commander of the South Pole station,
    -@@ -391,4 +384,4 @@
    - # we have to go around and set them back 5 minutes or so.
    - # Maybe if we let them run fast all of the time, we'd get to leave here sooner!!
    - #
    --Link	Antarctica/McMurdo	Antarctica/South_Pole
    -+# See 'australasia' for Antarctica/McMurdo.
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/asia
    ---- openjdk/jdk/make/sun/javazic/tzdata/asia	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/asia	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,22 +1,22 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    -@@ -29,7 +29,7 @@
    - # go ahead and edit the file (and please send any changes to
    - # tz@iana.org for general use in the future).
    - 
    --# From Paul Eggert (2013-02-21):
    -+# From Paul Eggert (2013-08-11):
    - #
    - # A good source for time zone historical data outside the U.S. is
    - # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
    -@@ -67,11 +67,11 @@
    - #	4:00 GST	Gulf*
    - #	5:30 IST	India
    - #	7:00 ICT	Indochina*
    --#	7:00 WIT	west Indonesia
    --#	8:00 CIT	central Indonesia
    -+#	7:00 WIB	west Indonesia (Waktu Indonesia Barat)
    -+#	8:00 WITA	central Indonesia (Waktu Indonesia Tengah)
    - #	8:00 CST	China
    - #	9:00 CJT	Central Japanese Time (1896/1937)*
    --#	9:00 EIT	east Indonesia
    -+#	9:00 WIT	east Indonesia (Waktu Indonesia Timur)
    - #	9:00 JST  JDT	Japan
    - #	9:00 KST  KDT	Korea
    - #	9:30 CST	(Australian) Central Standard Time
    -@@ -779,7 +779,7 @@
    - 			8:00	-	TLT	1942 Feb 21 23:00 # E Timor Time
    - 			9:00	-	JST	1945 Sep 23
    - 			9:00	-	TLT	1976 May  3
    --			8:00	-	CIT	2000 Sep 17 00:00
    -+			8:00	-	WITA	2000 Sep 17 00:00
    - 			9:00	-	TLT
    - 
    - # India
    -@@ -816,36 +816,53 @@
    - # (Hollandia).  For now, assume all Indonesian locations other than Jayapura
    - # switched on 1945-09-23.
    - #
    -+# From Paul Eggert (2013-08-11):
    -+# Normally the tz database uses English-language abbreviations, but in
    -+# Indonesia it's typical to use Indonesian-language abbreviations even
    -+# when writing in English.  For example, see the English-language
    -+# summary published by the Time and Frequency Laboratory of the
    -+# Research Center for Calibration, Instrumentation and Metrology,
    -+# Indonesia,  (2006-09-29).
    -+# The abbreviations are:
    -+#
    -+# WIB  - UTC+7 - Waktu Indonesia Barat (Indonesia western time)
    -+# WITA - UTC+8 - Waktu Indonesia Tengah (Indonesia central time)
    -+# WIT  - UTC+9 - Waktu Indonesia Timur (Indonesia eastern time)
    -+#
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -+# Java, Sumatra
    - Zone Asia/Jakarta	7:07:12 -	LMT	1867 Aug 10
    - # Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
    - # but this must be a typo.
    --			7:07:12	-	JMT	1923 Dec 31 23:47:12 # Jakarta
    -+			7:07:12	-	BMT	1923 Dec 31 23:47:12 # Batavia
    - 			7:20	-	JAVT	1932 Nov	 # Java Time
    --			7:30	-	WIT	1942 Mar 23
    -+			7:30	-	WIB	1942 Mar 23
    - 			9:00	-	JST	1945 Sep 23
    --			7:30	-	WIT	1948 May
    --			8:00	-	WIT	1950 May
    --			7:30	-	WIT	1964
    --			7:00	-	WIT
    -+			7:30	-	WIB	1948 May
    -+			8:00	-	WIB	1950 May
    -+			7:30	-	WIB	1964
    -+			7:00	-	WIB
    -+# west and central Borneo
    - Zone Asia/Pontianak	7:17:20	-	LMT	1908 May
    - 			7:17:20	-	PMT	1932 Nov    # Pontianak MT
    --			7:30	-	WIT	1942 Jan 29
    -+			7:30	-	WIB	1942 Jan 29
    - 			9:00	-	JST	1945 Sep 23
    --			7:30	-	WIT	1948 May
    --			8:00	-	WIT	1950 May
    --			7:30	-	WIT	1964
    --			8:00	-	CIT	1988 Jan  1
    --			7:00	-	WIT
    -+			7:30	-	WIB	1948 May
    -+			8:00	-	WIB	1950 May
    -+			7:30	-	WIB	1964
    -+			8:00	-	WITA	1988 Jan  1
    -+			7:00	-	WIB
    -+# Sulawesi, Lesser Sundas, east and south Borneo
    - Zone Asia/Makassar	7:57:36 -	LMT	1920
    - 			7:57:36	-	MMT	1932 Nov    # Macassar MT
    --			8:00	-	CIT	1942 Feb  9
    -+			8:00	-	WITA	1942 Feb  9
    - 			9:00	-	JST	1945 Sep 23
    --			8:00	-	CIT
    -+			8:00	-	WITA
    -+# Maluku Islands, West Papua, Papua
    - Zone Asia/Jayapura	9:22:48 -	LMT	1932 Nov
    --			9:00	-	EIT	1944 Sep  1
    -+			9:00	-	WIT	1944 Sep  1
    - 			9:30	-	CST	1964
    --			9:00	-	EIT
    -+			9:00	-	WIT
    - 
    - # Iran
    - 
    -@@ -1387,9 +1404,11 @@
    - # until about the same time next year (at least).
    - # http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?NewsID=88950
    - #
    --# From Paul Eggert (2012-10-25):
    --# For now, assume this is just a one-year measure.  If it becomes
    --# permanent, we should move Jordan from EET to AST effective tomorrow.
    -+# From Paul Eggert (2013-09-21):
    -+# It's looking like this change will be permanent; see
    -+# Petra News Agency, Cancelling winter saved Jordan $7 million (2013-02-20)
    -+# .
    -+# So move Jordan to UTC+3 as of the abovementioned date.
    - 
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Jordan	1973	only	-	Jun	6	0:00	1:00	S
    -@@ -1415,15 +1434,15 @@
    - Rule	Jordan	1999	only	-	Jul	 1	0:00s	1:00	S
    - Rule	Jordan	1999	2002	-	Sep	lastFri	0:00s	0	-
    - Rule	Jordan	2000	2001	-	Mar	lastThu	0:00s	1:00	S
    --Rule	Jordan	2002	max	-	Mar	lastThu	24:00	1:00	S
    -+Rule	Jordan	2002	2012	-	Mar	lastThu	24:00	1:00	S
    - Rule	Jordan	2003	only	-	Oct	24	0:00s	0	-
    - Rule	Jordan	2004	only	-	Oct	15	0:00s	0	-
    - Rule	Jordan	2005	only	-	Sep	lastFri	0:00s	0	-
    --Rule	Jordan	2006	2011	-	Oct	lastFri	0:00s	0	-
    --Rule	Jordan	2013	max	-	Oct	lastFri	0:00s	0	-
    -+Rule	Jordan	2006	2012	-	Oct	lastFri	0:00s	0	-
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Asia/Amman	2:23:44 -	LMT	1931
    --			2:00	Jordan	EE%sT
    -+			2:00	Jordan	EE%sT	2012 Oct 26 0:00s
    -+			3:00	-	AST
    - 
    - 
    - # Kazakhstan
    -@@ -2303,9 +2322,18 @@
    - # http://www.samanews.com/index.php?act=Show&id=154120
    - # http://safa.ps/details/news/99844/%D8%B1%D8%A7%D9%85-%D8%A7%D9%84%D9%84%D9%87-%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-29-%D8%A7%D9%84%D8%AC%D8%A7%D8%B1%D9%8A.html
    - 
    --# From Paul Eggert (2013-04-15):
    -+# From Steffen Thorsen (2013-09-24):
    -+# The Gaza and West Bank are ending DST Thursday at midnight
    -+# (2013-09-27 00:00:00) (one hour earlier than last year...).
    -+# This source in English, says "that winter time will go into effect
    -+# at midnight on Thursday in the West Bank and Gaza Strip":
    -+# http://english.wafa.ps/index.php?action=detail&id=23246
    -+# official source...:
    -+# http://www.palestinecabinet.gov.ps/ar/Views/ViewDetails.aspx?pid=1252
    -+
    -+# From Paul Eggert (2013-09-24):
    - # For future dates, guess the last Thursday in March at 24:00 through
    --# the first Friday on or after September 21 at 01:00.  This is consistent with
    -+# the first Friday on or after September 21 at 00:00.  This is consistent with
    - # the predictions in today's editions of the following URLs,
    - # which are for Gaza and Hebron respectively:
    - # http://www.timeanddate.com/worldclock/timezone.html?n=702
    -@@ -2336,7 +2364,8 @@
    - Rule Palestine	2011	only	-	Aug	30	0:00	1:00	S
    - Rule Palestine	2011	only	-	Sep	30	0:00	0	-
    - Rule Palestine	2012	max	-	Mar	lastThu	24:00	1:00	S
    --Rule Palestine	2012	max	-	Sep	Fri>=21	1:00	0	-
    -+Rule Palestine	2012	only	-	Sep	21	1:00	0	-
    -+Rule Palestine	2013	max	-	Sep	Fri>=21	0:00	0	-
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/australasia
    ---- openjdk/jdk/make/sun/javazic/tzdata/australasia	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/australasia	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,22 +1,22 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    -@@ -375,16 +375,25 @@
    - # today confirmed that Fiji will start daylight savings at 2 am on Sunday 21st
    - # October 2012 and end at 3 am on Sunday 20th January 2013.
    - # http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=6702&catid=71&Itemid=155
    -+
    -+# From the Fijian Government Media Center (2013-08-30) via David Wheeler:
    -+# Fiji will start daylight savings on Sunday 27th October, 2013 and end at 3am
    -+# on Sunday 19th January, 2014....  move clocks forward by one hour from 2am
    -+# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-SUNDAY,-27th-OCTOBER-201.aspx
    - #
    --# From Paul Eggert (2012-08-31):
    --# For now, guess a pattern of the penultimate Sundays in October and January.
    -+# From Paul Eggert (2013-09-09):
    -+# For now, guess that Fiji springs forward the Sunday before the fourth
    -+# Monday in October.  This matches both recent practice and
    -+# timeanddate.com's current spring-forward prediction.
    -+# For the January 2014 transition we guessed right while timeanddate.com
    -+# guessed wrong, so leave the fall-back prediction alone.
    - 
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Fiji	1998	1999	-	Nov	Sun>=1	2:00	1:00	S
    - Rule	Fiji	1999	2000	-	Feb	lastSun	3:00	0	-
    - Rule	Fiji	2009	only	-	Nov	29	2:00	1:00	S
    - Rule	Fiji	2010	only	-	Mar	lastSun	3:00	0	-
    --Rule	Fiji	2010	max	-	Oct	Sun>=18	2:00	1:00	S
    -+Rule	Fiji	2010	max	-	Oct	Sun>=21	2:00	1:00	S
    - Rule	Fiji	2011	only	-	Mar	Sun>=1	3:00	0	-
    - Rule	Fiji	2012	max	-	Jan	Sun>=18	3:00	0	-
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -@@ -510,6 +519,7 @@
    - Zone Pacific/Chatham	12:13:48 -	LMT	1957 Jan  1
    - 			12:45	Chatham	CHA%sT
    - 
    -+Link Pacific/Auckland Antarctica/McMurdo
    - 
    - # Auckland Is
    - # uninhabited; Maori and Moriori, colonial settlers, pastoralists, sealers,
    -@@ -759,7 +769,7 @@
    - # 1886-1891; Baker was similar but exact dates are not known.
    - # Inhabited by civilians 1935-1942; U.S. military bases 1943-1944;
    - # uninhabited thereafter.
    --# Howland observed Hawaii Standard Time (UTC-10:30) in 1937;
    -+# Howland observed Hawaii Standard Time (UT-10:30) in 1937;
    - # see page 206 of Elgen M. Long and Marie K. Long,
    - # Amelia Earhart: the Mystery Solved, Simon & Schuster (2000).
    - # So most likely Howland and Baker observed Hawaii Time from 1935
    -@@ -772,8 +782,17 @@
    - # no information; was probably like Pacific/Kiritimati
    - 
    - # Johnston
    --# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone Pacific/Johnston	-10:00	-	HST
    -+#
    -+# From Paul Eggert (2013-09-03):
    -+# In his memoirs of June 6th to October 4, 1945
    -+#  (2005), Herbert C. Bach writes,
    -+# "We started our letdown to Kwajalein Atoll and landed there at 5:00 AM
    -+# Johnston time, 1:30 AM Kwajalein time."  This was in June 1945, and
    -+# confirms that Johnston kept the same time as Honolulu in summer 1945.
    -+# We have no better information, so for now, assume this has been true
    -+# indefinitely into the past.
    -+#
    -+# See 'northamerica' for Pacific/Johnston.
    - 
    - # Kingman
    - # uninhabited
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/backward
    ---- openjdk/jdk/make/sun/javazic/tzdata/backward	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/backward	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,22 +1,22 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    -@@ -45,15 +45,17 @@
    - Link	America/Argentina/Mendoza	America/Mendoza
    - Link	America/Rio_Branco	America/Porto_Acre
    - Link	America/Argentina/Cordoba	America/Rosario
    --Link	America/St_Thomas	America/Virgin
    -+Link	America/Denver		America/Shiprock
    -+Link	America/Port_of_Spain	America/Virgin
    -+Link	Pacific/Auckland	Antarctica/South_Pole
    - Link	Asia/Ashgabat		Asia/Ashkhabad
    -+Link	Asia/Kolkata		Asia/Calcutta
    - Link	Asia/Chongqing		Asia/Chungking
    - Link	Asia/Dhaka		Asia/Dacca
    - Link	Asia/Kathmandu		Asia/Katmandu
    --Link	Asia/Kolkata		Asia/Calcutta
    - Link	Asia/Macau		Asia/Macao
    -+Link	Asia/Ho_Chi_Minh	Asia/Saigon
    - Link	Asia/Jerusalem		Asia/Tel_Aviv
    --Link	Asia/Ho_Chi_Minh	Asia/Saigon
    - Link	Asia/Thimphu		Asia/Thimbu
    - Link	Asia/Makassar		Asia/Ujung_Pandang
    - Link	Asia/Ulaanbaatar	Asia/Ulan_Bator
    -@@ -111,10 +113,10 @@
    - Link	Pacific/Chatham		NZ-CHAT
    - Link	America/Denver		Navajo
    - Link	Asia/Shanghai		PRC
    -+Link	Pacific/Pohnpei		Pacific/Ponape
    - Link	Pacific/Pago_Pago	Pacific/Samoa
    -+Link	Pacific/Chuuk		Pacific/Truk
    - Link	Pacific/Chuuk		Pacific/Yap
    --Link	Pacific/Chuuk		Pacific/Truk
    --Link	Pacific/Pohnpei		Pacific/Ponape
    - Link	Europe/Warsaw		Poland
    - Link	Europe/Lisbon		Portugal
    - Link	Asia/Taipei		ROC
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/etcetera
    ---- openjdk/jdk/make/sun/javazic/tzdata/etcetera	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/etcetera	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,22 +1,22 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    -@@ -54,9 +54,9 @@
    - # even though this is the opposite of what many people expect.
    - # POSIX has positive signs west of Greenwich, but many people expect
    - # positive signs east of Greenwich.  For example, TZ='Etc/GMT+4' uses
    --# the abbreviation "GMT+4" and corresponds to 4 hours behind UTC
    -+# the abbreviation "GMT+4" and corresponds to 4 hours behind UT
    - # (i.e. west of Greenwich) even though many people would expect it to
    --# mean 4 hours ahead of UTC (i.e. east of Greenwich).
    -+# mean 4 hours ahead of UT (i.e. east of Greenwich).
    - #
    - # In the draft 5 of POSIX 1003.1-200x, the angle bracket notation allows for
    - # TZ='+4'; if you want time zone abbreviations conforming to
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/europe
    ---- openjdk/jdk/make/sun/javazic/tzdata/europe	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/europe	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,22 +1,22 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    -@@ -65,7 +65,7 @@
    - #	 (1998-09-21, in Portuguese)
    - 
    - #
    --# I invented the abbreviations marked `*' in the following table;
    -+# I invented the abbreviations marked '*' in the following table;
    - # the rest are from earlier versions of this file, or from other sources.
    - # Corrections are welcome!
    - #                   std dst  2dst
    -@@ -119,7 +119,7 @@
    - # and a sketch map showing some of the sightlines involved. One paragraph
    - # of the text said:
    - #
    --# `An old stone obelisk marking a forgotten terrestrial meridian stands
    -+# 'An old stone obelisk marking a forgotten terrestrial meridian stands
    - # beside the river at Kew. In the 18th century, before time and longitude
    - # was standardised by the Royal Observatory in Greenwich, scholars observed
    - # this stone and the movement of stars from Kew Observatory nearby. They
    -@@ -163,7 +163,7 @@
    - # From Paul Eggert (2003-09-27):
    - # Summer Time was first seriously proposed by William Willett (1857-1915),
    - # a London builder and member of the Royal Astronomical Society
    --# who circulated a pamphlet ``The Waste of Daylight'' (1907)
    -+# who circulated a pamphlet "The Waste of Daylight" (1907)
    - # that proposed advancing clocks 20 minutes on each of four Sundays in April,
    - # and retarding them by the same amount on four Sundays in September.
    - # A bill was drafted in 1909 and introduced in Parliament several times,
    -@@ -188,10 +188,10 @@
    - #	
    - 
    - # From Paul Eggert (1996-09-03):
    --# The OED Supplement says that the English originally said ``Daylight Saving''
    -+# The OED Supplement says that the English originally said "Daylight Saving"
    - # when they were debating the adoption of DST in 1908; but by 1916 this
    - # term appears only in quotes taken from DST's opponents, whereas the
    --# proponents (who eventually won the argument) are quoted as using ``Summer''.
    -+# proponents (who eventually won the argument) are quoted as using "Summer".
    - 
    - # From Arthur David Olson (1989-01-19):
    - #
    -@@ -231,9 +231,9 @@
    - # which could not be said to run counter to any official description.
    - 
    - # From Paul Eggert (2000-10-02):
    --# Howse writes (p 157) `DBST' too, but `BDST' seems to have been common
    -+# Howse writes (p 157) 'DBST' too, but 'BDST' seems to have been common
    - # and follows the more usual convention of putting the location name first,
    --# so we use `BDST'.
    -+# so we use 'BDST'.
    - 
    - # Peter Ilieve (1998-04-19) described at length
    - # the history of summer time legislation in the United Kingdom.
    -@@ -454,6 +454,8 @@
    - Rule	GB-Eire 1990	1995	-	Oct	Sun>=22	1:00u	0	GMT
    - # Summer Time Order 1997 (S.I. 1997/2982)
    - # See EU for rules starting in 1996.
    -+#
    -+# Use Europe/London for Jersey, Guernsey, and the Isle of Man.
    - 
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Europe/London	-0:01:15 -	LMT	1847 Dec  1 0:00s
    -@@ -820,7 +822,7 @@
    - 			1:00	EU	CE%sT
    - 
    - # Bosnia and Herzegovina
    --# see Serbia
    -+# See Europe/Belgrade.
    - 
    - # Bulgaria
    - #
    -@@ -848,10 +850,10 @@
    - 			2:00	EU	EE%sT
    - 
    - # Croatia
    --# see Serbia
    -+# See Europe/Belgrade.
    - 
    - # Cyprus
    --# Please see the `asia' file for Asia/Nicosia.
    -+# Please see the 'asia' file for Asia/Nicosia.
    - 
    - # Czech Republic
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -@@ -868,6 +870,7 @@
    - 			1:00	C-Eur	CE%sT	1944 Sep 17 2:00s
    - 			1:00	Czech	CE%sT	1979
    - 			1:00	EU	CE%sT
    -+# Use Europe/Prague also for Slovakia.
    - 
    - # Denmark, Faroe Islands, and Greenland
    - 
    -@@ -1031,12 +1034,12 @@
    - # From Peter Ilieve (1996-10-28):
    - # [IATA SSIM (1992/1996) claims that the Baltic republics switch at 01:00s,
    - # but a relative confirms that Estonia still switches at 02:00s, writing:]
    --# ``I do not [know] exactly but there are some little different
    -+# "I do not [know] exactly but there are some little different
    - # (confusing) rules for International Air and Railway Transport Schedules
    - # conversion in Sunday connected with end of summer time in Estonia....
    - # A discussion is running about the summer time efficiency and effect on
    - # human physiology.  It seems that Estonia maybe will not change to
    --# summer time next spring.''
    -+# summer time next spring."
    - 
    - # From Peter Ilieve (1998-11-04), heavily edited:
    - # 
    -@@ -1091,7 +1094,7 @@
    - # Well, here in Helsinki we're just changing from summer time to regular one,
    - # and it's supposed to change at 4am...
    - 
    --# From Janne Snabb (2010-0715):
    -+# From Janne Snabb (2010-07-15):
    - #
    - # I noticed that the Finland data is not accurate for years 1981 and 1982.
    - # During these two first trial years the DST adjustment was made one hour
    -@@ -1148,7 +1151,7 @@
    - 
    - 
    - #
    --# Shank & Pottenger seem to use `24:00' ambiguously; resolve it with Whitman.
    -+# Shank & Pottenger seem to use '24:00' ambiguously; resolve it with Whitman.
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	France	1916	only	-	Jun	14	23:00s	1:00	S
    - Rule	France	1916	1919	-	Oct	Sun>=1	23:00s	0	-
    -@@ -1438,7 +1441,7 @@
    - # 
    - # Day-light Saving Time in Italy (2006-02-03)
    - # 
    --# (`FP' below), taken from an Italian National Electrotechnical Institute
    -+# ('FP' below), taken from an Italian National Electrotechnical Institute
    - # publication. When the three sources disagree, guess who's right, as follows:
    - #
    - # year	FP	Shanks&P. (S)	Whitman (W)	Go with:
    -@@ -1584,10 +1587,22 @@
    - 			2:00	EU	EE%sT
    - 
    - # Liechtenstein
    --# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone	Europe/Vaduz	0:38:04 -	LMT	1894 Jun
    --			1:00	-	CET	1981
    --			1:00	EU	CE%sT
    -+
    -+# From Paul Eggert (2013-09-09):
    -+# Shanks & Pottenger say Vaduz is like Zurich.
    -+
    -+# From Alois Treindl (2013-09-18):
    -+# http://www.eliechtensteinensia.li/LIJ/1978/1938-1978/1941.pdf
    -+# ... confirms on p. 6 that Liechtenstein followed Switzerland in 1941 and 1942.
    -+# I ... translate only the last two paragraphs:
    -+#    ... during second world war, in the years 1941 and 1942, Liechtenstein
    -+#    introduced daylight saving time, adapting to Switzerland.  From 1943 on
    -+#    central European time was in force throughout the year.
    -+#    From a report of the duke's government to the high council,
    -+#    regarding the introduction of a time law, of 31 May 1977.
    -+
    -+Link Europe/Zurich Europe/Vaduz
    -+
    - 
    - # Lithuania
    - 
    -@@ -1675,7 +1690,7 @@
    - 			1:00	EU	CE%sT
    - 
    - # Macedonia
    --# see Serbia
    -+# See Europe/Belgrade.
    - 
    - # Malta
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -@@ -1768,7 +1783,7 @@
    - 			1:00	EU	CE%sT
    - 
    - # Montenegro
    --# see Serbia
    -+# See Europe/Belgrade.
    - 
    - # Netherlands
    - 
    -@@ -1883,7 +1898,7 @@
    - # before 1895, and therefore probably changed the local time somewhere
    - # between 1895 and 1925 (inclusive).
    - 
    --# From Paul Eggert (2001-05-01):
    -+# From Paul Eggert (2013-09-04):
    - #
    - # Actually, Jan Mayen was never occupied by Germany during World War II,
    - # so it must have diverged from Oslo time during the war, as Oslo was
    -@@ -1894,7 +1909,7 @@
    - # 1941 with a small Norwegian garrison and continued operations despite
    - # frequent air ttacks from Germans.  In 1943 the Americans established a
    - # radiolocating station on the island, called "Atlantic City".  Possibly
    --# the UTC offset changed during the war, but I think it unlikely that
    -+# the UT offset changed during the war, but I think it unlikely that
    - # Jan Mayen used German daylight-saving rules.
    - #
    - # Svalbard is more complicated, as it was raided in August 1941 by an
    -@@ -1907,9 +1922,8 @@
    - # the German armed forces at the Svalbard weather station code-named
    - # Haudegen did not surrender to the Allies until September 1945.
    - #
    --# All these events predate our cutoff date of 1970.  Unless we can
    --# come up with more definitive info about the timekeeping during the
    --# war years it's probably best just do...the following for now:
    -+# All these events predate our cutoff date of 1970, so use Europe/Oslo
    -+# for these regions.
    - Link	Europe/Oslo	Arctic/Longyearbyen
    - 
    - # Poland
    -@@ -2167,7 +2181,7 @@
    - # so we (Novosibirsk) simply did not switch.
    - #
    - # From Andrey A. Chernov (1996-10-04):
    --# `MSK' and `MSD' were born and used initially on Moscow computers with
    -+# 'MSK' and 'MSD' were born and used initially on Moscow computers with
    - # UNIX-like OSes by several developer groups (e.g. Demos group, Kiae group)....
    - # The next step was the UUCP network, the Relcom predecessor
    - # (used mainly for mail), and MSK/MSD was actively used there.
    -@@ -2466,6 +2480,9 @@
    - 			11:00	Russia	ANA%sT	2011 Mar 27 2:00s
    - 			12:00	-	ANAT
    - 
    -+# San Marino
    -+# See Europe/Rome.
    -+
    - # Serbia
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	Europe/Belgrade	1:22:00	-	LMT	1884
    -@@ -2488,7 +2505,7 @@
    - Link Europe/Prague Europe/Bratislava
    - 
    - # Slovenia
    --# see Serbia
    -+# See Europe/Belgrade.
    - 
    - # Spain
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -@@ -2622,7 +2639,7 @@
    - # and their performance improved enormously.  Communities began to keep
    - # mean time in preference to apparent time -- Geneva from 1780 ....
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    --# From Whitman (who writes ``Midnight?''):
    -+# From Whitman (who writes "Midnight?"):
    - # Rule	Swiss	1940	only	-	Nov	 2	0:00	1:00	S
    - # Rule	Swiss	1940	only	-	Dec	31	0:00	0	-
    - # From Shanks & Pottenger:
    -@@ -2667,23 +2684,53 @@
    - # The 1940 rules must be deleted.
    - #
    - # One further detail for Switzerland, which is probably out of scope for
    --# most users of tzdata:
    --# The zone file
    --# Zone    Europe/Zurich   0:34:08 -       LMT     1848 Sep 12
    --#                          0:29:44 -       BMT     1894 Jun #Bern Mean Time
    --#                          1:00    Swiss   CE%sT   1981
    --#                          1:00    EU      CE%sT
    -+# most users of tzdata: The [Europe/Zurich zone] ...
    - # describes all of Switzerland correctly, with the exception of
    - # the Cantone Geneve (Geneva, Genf). Between 1848 and 1894 Geneve did not
    - # follow Bern Mean Time but kept its own local mean time.
    - # To represent this, an extra zone would be needed.
    -+#
    -+# From Alois Treindl (2013-09-11):
    -+# The Federal regulations say
    -+# http://www.admin.ch/opc/de/classified-compilation/20071096/index.html
    -+# ... the meridian for Bern mean time ... is 7 degrees 26'22.50".
    -+# Expressed in time, it is 0h29m45.5s.
    -+
    -+# From Pierre-Yves Berger (2013-09-11):
    -+# the "Circulaire du conseil federal" (December 11 1893)
    -+#  ...
    -+# clearly states that the [1894-06-01] change should be done at midnight
    -+# but if no one is present after 11 at night, could be postponed until one
    -+# hour before the beginning of service.
    -+
    -+# From Paul Eggert (2013-09-11):
    -+# Round BMT to the nearest even second, 0:29:46.
    -+#
    -+# We can find no reliable source for Shanks's assertion that all of Switzerland
    -+# except Geneva switched to Bern Mean Time at 00:00 on 1848-09-12.  This book:
    -+#
    -+#	Jakob Messerli. Gleichmassig, punktlich, schnell: Zeiteinteilung und
    -+#	Zeitgebrauch in der Schweiz im 19. Jahrhundert. Chronos, Zurich 1995,
    -+#	ISBN 3-905311-68-2, OCLC 717570797.
    -+#
    -+# suggests that the transition was more gradual, and that the Swiss did not
    -+# agree about civil time during the transition.  The timekeeping it gives the
    -+# most detail for is postal and telegraph time: here, federal legislation (the
    -+# "Bundesgesetz uber die Erstellung von elektrischen Telegraphen") passed on
    -+# 1851-11-23, and an official implementation notice was published 1853-07-16
    -+# (Bundesblatt 1853, Bd. II, S. 859).  On p 72 Messerli writes that in
    -+# practice since July 1853 Bernese time was used in "all postal and telegraph
    -+# offices in Switzerland from Geneva to St. Gallen and Basel to Chiasso"
    -+# (Google translation).  For now, model this transition as occurring on
    -+# 1853-07-16, though it probably occurred at some other date in Zurich, and
    -+# legal civil time probably changed at still some other transition date.
    - 
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Swiss	1941	1942	-	May	Mon>=1	1:00	1:00	S
    - Rule	Swiss	1941	1942	-	Oct	Mon>=1	2:00	0	-
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone	Europe/Zurich	0:34:08 -	LMT	1848 Sep 12
    --			0:29:44	-	BMT	1894 Jun # Bern Mean Time
    -+Zone	Europe/Zurich	0:34:08 -	LMT	1853 Jul 16 # See above comment.
    -+			0:29:46	-	BMT	1894 Jun # Bern Mean Time
    - 			1:00	Swiss	CE%sT	1981
    - 			1:00	EU	CE%sT
    - 
    -@@ -2907,7 +2954,7 @@
    - # From Paul Eggert (2006-03-22):
    - # The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
    - # from Kiev to Moscow time sometime after the January 1994 elections.
    --# Shanks (1999) says ``date of change uncertain'', but implies that it happened
    -+# Shanks (1999) says "date of change uncertain", but implies that it happened
    - # sometime between the 1994 DST switches.  Shanks & Pottenger simply say
    - # 1994-09-25 03:00, but that can't be right.  For now, guess it
    - # changed in May.
    -@@ -2921,6 +2968,9 @@
    - 			3:00	-	MSK	1997 Mar lastSun 1:00u
    - 			2:00	EU	EE%sT
    - 
    -+# Vatican City
    -+# See Europe/Rome.
    -+
    - ###############################################################################
    - 
    - # One source shows that Bulgaria, Cyprus, Finland, and Greece observe DST from
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/factory
    ---- openjdk/jdk/make/sun/javazic/tzdata/factory	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/factory	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,22 +1,22 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/iso3166.tab
    ---- openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/iso3166.tab	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,30 +1,30 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    - #
    --# 
    -+# ISO 3166 alpha-2 country codes
    -+#
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    --# ISO 3166 alpha-2 country codes
    - #
    - # From Paul Eggert (2013-05-27):
    - #
    -@@ -32,7 +32,7 @@
    - # 1.  ISO 3166-1 alpha-2 country code, current as of
    - #     ISO 3166-1 Newsletter VI-15 (2013-05-10).  See: Updates on ISO 3166
    - #   http://www.iso.org/iso/home/standards/country_codes/updates_on_iso_3166.htm
    --# 2.  The usual English name for the country,
    -+# 2.  The usual English name for the coded region,
    - #     chosen so that alphabetic sorting of subsets produces helpful lists.
    - #     This is not the same as the English name in the ISO 3166 tables.
    - #
    -@@ -46,7 +46,7 @@
    - # to take or endorse any position on legal or territorial claims.
    - #
    - #country-
    --#code	country name
    -+#code	name of country, territory, area, or subdivision
    - AD	Andorra
    - AE	United Arab Emirates
    - AF	Afghanistan
    -@@ -76,7 +76,7 @@
    - BM	Bermuda
    - BN	Brunei
    - BO	Bolivia
    --BQ	Bonaire, St Eustatius & Saba
    -+BQ	Caribbean Netherlands
    - BR	Brazil
    - BS	Bahamas
    - BT	Bhutan
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/leapseconds
    ---- openjdk/jdk/make/sun/javazic/tzdata/leapseconds	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/leapseconds	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,37 +1,43 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    --#
    --# 
    --# This file is in the public domain, so clarified as of
    --# 2009-05-17 by Arthur David Olson.
    - 
    - # Allowance for leapseconds added to each timezone file.
    - 
    -+# This file is in the public domain.
    -+
    -+# This file is generated automatically from the data in the public-domain
    -+# leap-seconds.list file available from most NIST time servers.
    -+# If the URL  does not work,
    -+# you should be able to pick up leap-seconds.list from a secondary NIST server.
    -+# For more about leap-seconds.list, please see
    -+# The NTP Timescale and Leap Seconds
    -+# .
    -+
    - # The International Earth Rotation Service periodically uses leap seconds
    - # to keep UTC to within 0.9 s of UT1
    - # (which measures the true angular orientation of the earth in space); see
    - # Terry J Quinn, The BIPM and the accurate measure of time,
    --# Proc IEEE 79, 7 (July 1991), 894-905.
    -+# Proc IEEE 79, 7 (July 1991), 894-905 .
    - # There were no leap seconds before 1972, because the official mechanism
    - # accounting for the discrepancy between atomic time and the earth's rotation
    - # did not exist until the early 1970s.
    -@@ -42,8 +48,8 @@
    - # or
    - #	Leap	YEAR	MON	DAY	23:59:59	-	R/S
    - 
    --# If the leapsecond is Rolling (R) the given time is local time
    --# If the leapsecond is Stationary (S) the given time is UTC
    -+# If the leapsecond is Rolling (R) the given time is local time.
    -+# If the leapsecond is Stationary (S) the given time is UTC.
    - 
    - # Leap	YEAR	MONTH	DAY	HH:MM:SS	CORR	R/S
    - Leap	1972	Jun	30	23:59:60	+	S
    -@@ -71,53 +77,3 @@
    - Leap	2005	Dec	31	23:59:60	+	S
    - Leap	2008	Dec	31	23:59:60	+	S
    - Leap	2012	Jun	30	23:59:60	+	S
    --
    --# INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE (IERS)
    --#
    --# SERVICE INTERNATIONAL DE LA ROTATION TERRESTRE ET DES SYSTEMES DE REFERENCE
    --#
    --#
    --# SERVICE DE LA ROTATION TERRESTRE
    --# OBSERVATOIRE DE PARIS
    --# 61, Av. de l'Observatoire 75014 PARIS (France)
    --# Tel.      : 33 (0) 1 40 51 22 26
    --# FAX       : 33 (0) 1 40 51 22 91
    --# e-mail    : (E-Mail Removed)
    --# http://hpiers.obspm.fr/eop-pc
    --#
    --# Paris, 5 January 2012
    --#
    --#
    --# Bulletin C 43
    --#
    --# To authorities responsible
    --# for the measurement and
    --# distribution of time
    --#
    --#
    --# UTC TIME STEP
    --# on the 1st of July 2012
    --#
    --#
    --# A positive leap second will be introduced at the end of June 2012.
    --# The sequence of dates of the UTC second markers will be:
    --#
    --#                          2012 June 30,     23h 59m 59s
    --#                          2012 June 30,     23h 59m 60s
    --#                          2012 July  1,      0h  0m  0s
    --#
    --# The difference between UTC and the International Atomic Time TAI is:
    --#
    --# from 2009 January 1, 0h UTC, to 2012 July 1  0h UTC  : UTC-TAI = - 34s
    --# from 2012 July 1,    0h UTC, until further notice    : UTC-TAI = - 35s
    --#
    --# Leap seconds can be introduced in UTC at the end of the months of December
    --# or June, depending on the evolution of UT1-TAI. Bulletin C is mailed every
    --# six months, either to announce a time step in UTC or to confirm that there
    --# will be no time step at the next possible date.
    --#
    --#
    --# Daniel GAMBIS
    --# Head
    --# Earth Orientation Center of IERS
    --# Observatoire de Paris, France
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/northamerica
    ---- openjdk/jdk/make/sun/javazic/tzdata/northamerica	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/northamerica	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,22 +1,22 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    -@@ -43,7 +43,7 @@
    - # Howse writes (pp 121-125) that time zones were invented by
    - # Professor Charles Ferdinand Dowd (1825-1904),
    - # Principal of Temple Grove Ladies' Seminary (Saratoga Springs, NY).
    --# His pamphlet ``A System of National Time for Railroads'' (1870)
    -+# His pamphlet "A System of National Time for Railroads" (1870)
    - # was the result of his proposals at the Convention of Railroad Trunk Lines
    - # in New York City (1869-10).  His 1870 proposal was based on Washington, DC,
    - # but in 1872-05 he moved the proposed origin to Greenwich.
    -@@ -63,8 +63,8 @@
    - 
    - # From Paul Eggert (2001-03-06):
    - # Daylight Saving Time was first suggested as a joke by Benjamin Franklin
    --# in his whimsical essay ``An Economical Project for Diminishing the Cost
    --# of Light'' published in the Journal de Paris (1784-04-26).
    -+# in his whimsical essay "An Economical Project for Diminishing the Cost
    -+# of Light" published in the Journal de Paris (1784-04-26).
    - # Not everyone is happy with the results:
    - #
    - #	I don't really care how time is reckoned so long as there is some
    -@@ -190,8 +190,8 @@
    - #    of the Aleutian islands.   No DST.
    - 
    - # From Paul Eggert (1995-12-19):
    --# The tables below use `NST', not `NT', for Nome Standard Time.
    --# I invented `CAWT' for Central Alaska War Time.
    -+# The tables below use 'NST', not 'NT', for Nome Standard Time.
    -+# I invented 'CAWT' for Central Alaska War Time.
    - 
    - # From U. S. Naval Observatory (1989-01-19):
    - # USA  EASTERN       5 H  BEHIND UTC    NEW YORK, WASHINGTON
    -@@ -260,9 +260,9 @@
    - # H.R. 6, Energy Policy Act of 2005, SEC. 110. DAYLIGHT SAVINGS.
    - #   (a) Amendment- Section 3(a) of the Uniform Time Act of 1966 (15
    - #   U.S.C. 260a(a)) is amended--
    --#     (1) by striking `first Sunday of April' and inserting `second
    -+#     (1) by striking 'first Sunday of April' and inserting 'second
    - #     Sunday of March'; and
    --#     (2) by striking `last Sunday of October' and inserting `first
    -+#     (2) by striking 'last Sunday of October' and inserting 'first
    - #     Sunday of November'.
    - #   (b) Effective Date- Subsection (a) shall take effect 1 year after the
    - #   date of enactment of this Act or March 1, 2007, whichever is later.
    -@@ -623,6 +623,8 @@
    - 			-10:30	-	HST	1947 Jun  8 2:00 #Schmitt&Cox+2
    - 			-10:00	-	HST
    - 
    -+Link Pacific/Honolulu Pacific/Johnston
    -+
    - # Now we turn to US areas that have diverged from the consensus since 1970.
    - 
    - # Arizona mostly uses MST.
    -@@ -659,8 +661,9 @@
    - # Navajo Nation participates in the Daylight Saving Time policy, due to its
    - # large size and location in three states."  (The "only" means that other
    - # tribal nations don't use DST.)
    --
    --Link America/Denver America/Shiprock
    -+#
    -+# From Paul Eggert (2013-08-26):
    -+# See America/Denver for a zone appropriate for the Navajo Nation.
    - 
    - # Southern Idaho (Ada, Adams, Bannock, Bear Lake, Bingham, Blaine,
    - # Boise, Bonneville, Butte, Camas, Canyon, Caribou, Cassia, Clark,
    -@@ -700,13 +703,13 @@
    - #   and Switzerland counties have their own time zone histories as noted below.
    - #
    - # Shanks partitioned Indiana into 345 regions, each with its own time history,
    --# and wrote ``Even newspaper reports present contradictory information.''
    -+# and wrote "Even newspaper reports present contradictory information."
    - # Those Hoosiers!  Such a flighty and changeable people!
    - # Fortunately, most of the complexity occurred before our cutoff date of 1970.
    - #
    - # Other than Indianapolis, the Indiana place names are so nondescript
    --# that they would be ambiguous if we left them at the `America' level.
    --# So we reluctantly put them all in a subdirectory `America/Indiana'.
    -+# that they would be ambiguous if we left them at the 'America' level.
    -+# So we reluctantly put them all in a subdirectory 'America/Indiana'.
    - 
    - # From Paul Eggert (2005-08-16):
    - # http://www.mccsc.edu/time.html says that Indiana will use DST starting 2006.
    -@@ -970,8 +973,8 @@
    - # This story is too entertaining to be false, so go with Howse over Shanks.
    - #
    - # From Paul Eggert (2001-03-06):
    --# Garland (1927) writes ``Cleveland and Detroit advanced their clocks
    --# one hour in 1914.''  This change is not in Shanks.  We have no more
    -+# Garland (1927) writes "Cleveland and Detroit advanced their clocks
    -+# one hour in 1914."  This change is not in Shanks.  We have no more
    - # info, so omit this for now.
    - #
    - # Most of Michigan observed DST from 1973 on, but was a bit late in 1975.
    -@@ -1011,7 +1014,7 @@
    - # occupied 1857/1900 by the Navassa Phosphate Co
    - # US lighthouse 1917/1996-09
    - # currently uninhabited
    --# see Mark Fineman, ``An Isle Rich in Guano and Discord'',
    -+# see Mark Fineman, "An Isle Rich in Guano and Discord",
    - # _Los Angeles Times_ (1998-11-10), A1, A10; it cites
    - # Jimmy Skaggs, _The Great Guano Rush_ (1994).
    - 
    -@@ -1045,7 +1048,7 @@
    - #	Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
    - #	.
    - #
    --# See the `europe' file for Greenland.
    -+# See the 'europe' file for Greenland.
    - 
    - # Canada
    - 
    -@@ -1246,7 +1249,7 @@
    - 
    - # most of east Labrador
    - 
    --# The name `Happy Valley-Goose Bay' is too long; use `Goose Bay'.
    -+# The name 'Happy Valley-Goose Bay' is too long; use 'Goose Bay'.
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone America/Goose_Bay	-4:01:40 -	LMT	1884 # Happy Valley-Goose Bay
    - 			-3:30:52 -	NST	1918
    -@@ -1363,25 +1366,27 @@
    - 
    - # Quebec
    - 
    --# From Paul Eggert (2006-07-09):
    --# Shanks & Pottenger write that since 1970 most of Quebec has been
    --# like Montreal.
    -+# From Paul Eggert (2013-08-30):
    -+# Since 1970 most of Quebec has been like Toronto.
    -+# However, because earlier versions of the tz database mistakenly relied on data
    -+# from Shanks & Pottenger saying that Quebec differed from Ontario after 1970,
    -+# a separate entry was created for most of Quebec.  We're loath to lose
    -+# its pre-1970 info, even though the tz database is normally limited to
    -+# zones that differ after 1970, so keep this otherwise out-of-scope entry.
    - 
    --# From Paul Eggert (2006-06-27):
    - # Matthews and Vincent (1998) also write that Quebec east of the -63
    - # meridian is supposed to observe AST, but residents as far east as
    - # Natashquan use EST/EDT, and residents east of Natashquan use AST.
    --# In "Official time in Quebec" the Quebec department of justice writes in
    --# http://www.justice.gouv.qc.ca/english/publications/generale/temps-regl-1-a.htm
    --# that "The residents of the Municipality of the
    --# Cote-Nord-du-Golfe-Saint-Laurent and the municipalities of Saint-Augustin,
    --# Bonne-Esperance and Blanc-Sablon apply the Official Time Act as it is
    --# written and use Atlantic standard time all year round. The same applies to
    --# the residents of the Native facilities along the lower North Shore."
    --# 
    -+# The Quebec department of justice writes in
    -+# "The situation in Minganie and Basse-Cote-Nord"
    -+# http://www.justice.gouv.qc.ca/english/publications/generale/temps-minganie-a.htm
    -+# that the coastal strip from just east of Natashquan to Blanc-Sablon
    -+# observes Atlantic standard time all year round.
    -+# http://www.assnat.qc.ca/Media/Process.aspx?MediaId=ANQ.Vigie.Bll.DocumentGenerique_8845en
    - # says this common practice was codified into law as of 2007.
    - # For lack of better info, guess this practice began around 1970, contra to
    - # Shanks & Pottenger who have this region observing AST/ADT.
    -+# for post-1970 data America/Puerto_Rico.
    - 
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Mont	1917	only	-	Mar	25	2:00	1:00	D
    -@@ -1425,7 +1430,6 @@
    - 			-5:00	Mont	E%sT	1974
    - 			-5:00	Canada	E%sT
    - 
    --
    - # Ontario
    - 
    - # From Paul Eggert (2006-07-09):
    -@@ -1644,7 +1648,7 @@
    - 			-6:00	-	CST	1910
    - 			-5:00	-	EST	1942
    - 			-5:00	Canada	E%sT	1970
    --			-5:00	Mont	E%sT	1973
    -+			-5:00	Toronto	E%sT	1973
    - 			-5:00	-	EST	1974
    - 			-5:00	Canada	E%sT
    - Zone America/Nipigon	-5:53:04 -	LMT	1895
    -@@ -2231,7 +2235,7 @@
    - # From Paul Eggert (1996-06-12):
    - # For an English translation of the decree, see
    - # 
    --# ``Diario Oficial: Time Zone Changeover'' (1996-01-04).
    -+# "Diario Oficial: Time Zone Changeover" (1996-01-04).
    - # 
    - 
    - # From Rives McDow (1998-10-08):
    -@@ -2568,9 +2572,7 @@
    - ###############################################################################
    - 
    - # Anguilla
    --# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone America/Anguilla	-4:12:16 -	LMT	1912 Mar 2
    --			-4:00	-	AST
    -+# See 'southamerica'.
    - 
    - # Antigua and Barbuda
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -@@ -2639,13 +2641,13 @@
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone Atlantic/Bermuda	-4:19:18 -	LMT	1930 Jan  1 2:00    # Hamilton
    - 			-4:00	-	AST	1974 Apr 28 2:00
    --			-4:00	Bahamas	A%sT	1976
    -+			-4:00	Canada	A%sT	1976
    - 			-4:00	US	A%sT
    - 
    - # Cayman Is
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone	America/Cayman	-5:25:32 -	LMT	1890		# Georgetown
    --			-5:07:12 -	KMT	1912 Feb    # Kingston Mean Time
    -+			-5:07:11 -	KMT	1912 Feb    # Kingston Mean Time
    - 			-5:00	-	EST
    - 
    - # Costa Rica
    -@@ -2660,7 +2662,7 @@
    - # go with Shanks & Pottenger.
    - Rule	CR	1991	only	-	Jul	 1	0:00	0	S
    - Rule	CR	1992	only	-	Mar	15	0:00	0	S
    --# There are too many San Joses elsewhere, so we'll use `Costa Rica'.
    -+# There are too many San Joses elsewhere, so we'll use 'Costa Rica'.
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
    - 			-5:36:13 -	SJMT	1921 Jan 15 # San Jose Mean Time
    -@@ -2892,9 +2894,7 @@
    - 			-5:00	Cuba	C%sT
    - 
    - # Dominica
    --# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone America/Dominica	-4:05:36 -	LMT	1911 Jul 1 0:01		# Roseau
    --			-4:00	-	AST
    -+# See 'southamerica'.
    - 
    - # Dominican Republic
    - 
    -@@ -2943,18 +2943,10 @@
    - 			-6:00	Salv	C%sT
    - 
    - # Grenada
    --# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone	America/Grenada	-4:07:00 -	LMT	1911 Jul	# St George's
    --			-4:00	-	AST
    --
    - # Guadeloupe
    --# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone America/Guadeloupe	-4:06:08 -	LMT	1911 Jun 8	# Pointe a Pitre
    --			-4:00	-	AST
    - # St Barthelemy
    --Link America/Guadeloupe	America/St_Barthelemy
    - # St Martin (French part)
    --Link America/Guadeloupe	America/Marigot
    -+# See 'southamerica'.
    - 
    - # Guatemala
    - #
    -@@ -3097,17 +3089,12 @@
    - # Great Swan I ceded by US to Honduras in 1972
    - 
    - # Jamaica
    --
    --# From Bob Devine (1988-01-28):
    --# Follows US rules.
    --
    --# From U. S. Naval Observatory (1989-01-19):
    --# JAMAICA             5 H  BEHIND UTC
    --
    --# From Shanks & Pottenger:
    -+# Shanks & Pottenger give -5:07:12, but Milne records -5:07:10.41 from an
    -+# unspecified official document, and says "This time is used throughout the
    -+# island".  Go with Milne.  Round to the nearest second as required by zic.
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone	America/Jamaica	-5:07:12 -	LMT	1890		# Kingston
    --			-5:07:12 -	KMT	1912 Feb    # Kingston Mean Time
    -+Zone	America/Jamaica	-5:07:11 -	LMT	1890		# Kingston
    -+			-5:07:11 -	KMT	1912 Feb    # Kingston Mean Time
    - 			-5:00	-	EST	1974 Apr 28 2:00
    - 			-5:00	US	E%sT	1984
    - 			-5:00	-	EST
    -@@ -3121,12 +3108,7 @@
    - 			-4:00	-	AST
    - 
    - # Montserrat
    --# From Paul Eggert (2006-03-22):
    --# In 1995 volcanic eruptions forced evacuation of Plymouth, the capital.
    --# world.gazetteer.com says Cork Hill is the most populous location now.
    --# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone America/Montserrat	-4:08:52 -	LMT	1911 Jul 1 0:01   # Cork Hill
    --			-4:00	-	AST
    -+# See 'southamerica'.
    - 
    - # Nicaragua
    - #
    -@@ -3200,7 +3182,7 @@
    - 			-5:00	-	EST
    - 
    - # Puerto Rico
    --# There are too many San Juans elsewhere, so we'll use `Puerto_Rico'.
    -+# There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'.
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone America/Puerto_Rico -4:24:25 -	LMT	1899 Mar 28 12:00    # San Juan
    - 			-4:00	-	AST	1942 May  3
    -@@ -3208,18 +3190,11 @@
    - 			-4:00	-	AST
    - 
    - # St Kitts-Nevis
    --# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone America/St_Kitts	-4:10:52 -	LMT	1912 Mar 2	# Basseterre
    --			-4:00	-	AST
    --
    - # St Lucia
    --# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone America/St_Lucia	-4:04:00 -	LMT	1890		# Castries
    --			-4:04:00 -	CMT	1912	    # Castries Mean Time
    --			-4:00	-	AST
    -+# See 'southamerica'.
    - 
    - # St Pierre and Miquelon
    --# There are too many St Pierres elsewhere, so we'll use `Miquelon'.
    -+# There are too many St Pierres elsewhere, so we'll use 'Miquelon'.
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone America/Miquelon	-3:44:40 -	LMT	1911 May 15	# St Pierre
    - 			-4:00	-	AST	1980 May
    -@@ -3227,10 +3202,7 @@
    - 			-3:00	Canada	PM%sT
    - 
    - # St Vincent and the Grenadines
    --# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone America/St_Vincent	-4:04:56 -	LMT	1890		# Kingstown
    --			-4:04:56 -	KMT	1912	   # Kingstown Mean Time
    --			-4:00	-	AST
    -+# See 'southamerica'.
    - 
    - # Turks and Caicos
    - #
    -@@ -3260,15 +3232,9 @@
    - Rule	TC	2007	max	-	Nov	Sun>=1	2:00	0	S
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    - Zone America/Grand_Turk	-4:44:32 -	LMT	1890
    --			-5:07:12 -	KMT	1912 Feb    # Kingston Mean Time
    -+			-5:07:11 -	KMT	1912 Feb    # Kingston Mean Time
    - 			-5:00	TC	E%sT
    - 
    - # British Virgin Is
    --# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone America/Tortola	-4:18:28 -	LMT	1911 Jul    # Road Town
    --			-4:00	-	AST
    --
    - # Virgin Is
    --# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone America/St_Thomas	-4:19:44 -	LMT	1911 Jul    # Charlotte Amalie
    --			-4:00	-	AST
    -+# See 'southamerica'.
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/pacificnew
    ---- openjdk/jdk/make/sun/javazic/tzdata/pacificnew	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/pacificnew	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,22 +1,22 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/solar87
    ---- openjdk/jdk/make/sun/javazic/tzdata/solar87	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/solar87	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,22 +1,22 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/solar88
    ---- openjdk/jdk/make/sun/javazic/tzdata/solar88	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/solar88	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,22 +1,22 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/solar89
    ---- openjdk/jdk/make/sun/javazic/tzdata/solar89	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/solar89	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,22 +1,22 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/southamerica
    ---- openjdk/jdk/make/sun/javazic/tzdata/southamerica	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/southamerica	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,22 +1,22 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    -@@ -474,6 +474,17 @@
    - # rules...San Luis is still using "Western ARgentina Time" and it got
    - # stuck on Summer daylight savings time even though the summer is over.
    - 
    -+# From Paul Eggert (2013-09-05):
    -+# Perhaps San Luis operates on the legal fiction that it is at UTC-4
    -+# with perpetual summer time, but ordinary usage typically seems to
    -+# just say it's at UTC-3; see, for example,
    -+# .
    -+# We've documented similar situations as being plain changes to
    -+# standard time, so let's do that here too.  This does not change UTC
    -+# offsets, only tm_isdst and the time zone abbreviations.  One minor
    -+# plus is that this silences a zic complaint that there's no POSIX TZ
    -+# setting for time stamps past 2038.
    -+
    - # From Paul Eggert (2013-02-21):
    - # Milne says Cordoba time was -4:16:48.2.  Round to the nearest second.
    - 
    -@@ -611,7 +622,7 @@
    - # San Luis (SL)
    - 
    - Rule	SanLuis	2008	2009	-	Mar	Sun>=8	0:00	0	-
    --Rule	SanLuis	2007	2009	-	Oct	Sun>=8	0:00	1:00	S
    -+Rule	SanLuis	2007	2008	-	Oct	Sun>=8	0:00	1:00	S
    - 
    - Zone America/Argentina/San_Luis -4:25:24 - LMT	1894 Oct 31
    - 			-4:16:48 -	CMT	1920 May
    -@@ -627,7 +638,8 @@
    - 			-3:00	-	ART	2004 May 31
    - 			-4:00	-	WART	2004 Jul 25
    - 			-3:00	Arg	AR%sT	2008 Jan 21
    --			-4:00	SanLuis	WAR%sT
    -+			-4:00	SanLuis	WAR%sT	2009 Oct 11
    -+			-3:00	-	ART
    - #
    - # Santa Cruz (SC)
    - Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
    -@@ -654,10 +666,7 @@
    - 			-3:00	-	ART
    - 
    - # Aruba
    --# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    --Zone	America/Aruba	-4:40:24 -	LMT	1912 Feb 12	# Oranjestad
    --			-4:30	-	ANT	1965 # Netherlands Antilles Time
    --			-4:00	-	AST
    -+Link America/Curacao America/Aruba
    - 
    - # Bolivia
    - # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -@@ -859,6 +868,12 @@
    - # Tocantins state will have DST.
    - # http://noticias.terra.com.br/brasil/noticias/0,,OI6232536-EI306.html
    - 
    -+# From Steffen Thorsen (2013-09-20):
    -+# Tocantins in Brazil is very likely not to observe DST from October....
    -+# http://conexaoto.com.br/2013/09/18/ministerio-confirma-que-tocantins-esta-fora-do-horario-de-verao-em-2013-mas-falta-publicacao-de-decreto
    -+# We will keep this article updated when this is confirmed:
    -+# http://www.timeanddate.com/news/time/brazil-starts-dst-2013.html
    -+
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - # Decree 20,466 (1931-10-01)
    - # Decree 21,896 (1932-01-10)
    -@@ -1078,7 +1093,8 @@
    - 			-3:00	-	BRT	1995 Sep 14
    - 			-3:00	Brazil	BR%sT	2003 Sep 24
    - 			-3:00	-	BRT	2012 Oct 21
    --			-3:00	Brazil	BR%sT
    -+			-3:00	Brazil	BR%sT	2013 Sep
    -+			-3:00	-	BRT
    - #
    - # Alagoas (AL), Sergipe (SE)
    - Zone America/Maceio	-2:22:52 -	LMT	1914
    -@@ -1373,12 +1389,12 @@
    - 			-4:00	-	AST
    - 
    - # From Arthur David Olson (2011-06-15):
    --# At least for now, use links for places with new iso3166 codes.
    -+# use links for places with new iso3166 codes.
    - # The name "Lower Prince's Quarter" is both longer than fourteen charaters
    - # and contains an apostrophe; use "Lower_Princes" below.
    - 
    --Link	America/Curacao	America/Lower_Princes # Sint Maarten
    --Link	America/Curacao	America/Kralendijk # Bonaire, Sint Estatius and Saba
    -+Link	America/Curacao	America/Lower_Princes	# Sint Maarten
    -+Link	America/Curacao	America/Kralendijk	# Caribbean Netherlands
    - 
    - # Ecuador
    - #
    -@@ -1519,10 +1535,16 @@
    - 			-4:00	-	GYT
    - 
    - # Paraguay
    -+#
    - # From Paul Eggert (2006-03-22):
    - # Shanks & Pottenger say that spring transitions are from 01:00 -> 02:00,
    - # and autumn transitions are from 00:00 -> 23:00.  Go with pre-1999
    - # editions of Shanks, and with the IATA, who say transitions occur at 00:00.
    -+#
    -+# From Waldemar Villamayor-Venialbo (2013-09-20):
    -+# No time of the day is established for the adjustment, so people normally
    -+# adjust their clocks at 0 hour of the given dates.
    -+#
    - # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    - Rule	Para	1975	1988	-	Oct	 1	0:00	1:00	S
    - Rule	Para	1975	1978	-	Mar	 1	0:00	0	-
    -@@ -1656,6 +1678,19 @@
    - Zone America/Port_of_Spain -4:06:04 -	LMT	1912 Mar 2
    - 			-4:00	-	AST
    - 
    -+Link America/Port_of_Spain America/Anguilla
    -+Link America/Port_of_Spain America/Dominica
    -+Link America/Port_of_Spain America/Grenada
    -+Link America/Port_of_Spain America/Guadeloupe
    -+Link America/Port_of_Spain America/Marigot
    -+Link America/Port_of_Spain America/Montserrat
    -+Link America/Port_of_Spain America/St_Barthelemy
    -+Link America/Port_of_Spain America/St_Kitts
    -+Link America/Port_of_Spain America/St_Lucia
    -+Link America/Port_of_Spain America/St_Thomas
    -+Link America/Port_of_Spain America/St_Vincent
    -+Link America/Port_of_Spain America/Tortola
    -+
    - # Uruguay
    - # From Paul Eggert (1993-11-18):
    - # Uruguay wins the prize for the strangest peacetime manipulation of the rules.
    -@@ -1673,7 +1708,7 @@
    - # Whitman gives 1937 Oct 3; go with Shanks & Pottenger.
    - Rule	Uruguay	1937	1940	-	Oct	lastSun	 0:00	0:30	HS
    - # Whitman gives 1941 Oct 24 - 1942 Mar 27, 1942 Dec 14 - 1943 Apr 13,
    --# and 1943 Apr 13 ``to present time''; go with Shanks & Pottenger.
    -+# and 1943 Apr 13 "to present time"; go with Shanks & Pottenger.
    - Rule	Uruguay	1941	only	-	Aug	 1	 0:00	0:30	HS
    - Rule	Uruguay	1942	only	-	Jan	 1	 0:00	0	-
    - Rule	Uruguay	1942	only	-	Dec	14	 0:00	1:00	S
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/systemv
    ---- openjdk/jdk/make/sun/javazic/tzdata/systemv	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/systemv	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,22 +1,22 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    -diff -r fd7850833158 -r 3d28326a9e5d make/sun/javazic/tzdata/zone.tab
    ---- openjdk/jdk/make/sun/javazic/tzdata/zone.tab	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/make/sun/javazic/tzdata/zone.tab	Thu Oct 24 17:14:18 2013 +0400
    -@@ -1,53 +1,55 @@
    - #
    - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    --#  
    -+#
    - # This code is free software; you can redistribute it and/or modify it
    - # under the terms of the GNU General Public License version 2 only, as
    - # published by the Free Software Foundation.  Oracle designates this
    - # particular file as subject to the "Classpath" exception as provided
    - # by Oracle in the LICENSE file that accompanied this code.
    --#  
    -+#
    - # This code is distributed in the hope that it will be useful, but WITHOUT
    - # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    - # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    - # version 2 for more details (a copy is included in the LICENSE file that
    - # accompanied this code).
    --#  
    -+#
    - # You should have received a copy of the GNU General Public License version
    - # 2 along with this work; if not, write to the Free Software Foundation,
    - # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    --#  
    -+#
    - # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    - # or visit www.oracle.com if you need additional information or have any
    - # questions.
    - #
    --# 
    -+# TZ zone descriptions
    -+#
    - # This file is in the public domain, so clarified as of
    - # 2009-05-17 by Arthur David Olson.
    - #
    --# TZ zone descriptions
    -+# From Paul Eggert (2013-08-14):
    - #
    --# From Paul Eggert (2013-05-27):
    -+# This file contains a table where each row stands for an area that is
    -+# the intersection of a region identified by a country code and of a
    -+# zone where civil clocks have agreed since 1970.  The columns of the
    -+# table are as follows:
    - #
    --# This file contains a table with the following columns:
    --# 1.  ISO 3166 2-character country code.  See the file `iso3166.tab'.
    --#     This identifies a country that overlaps the zone.  The country may
    --#     overlap other zones and the zone may overlap other countries.
    --# 2.  Latitude and longitude of the zone's principal location
    -+# 1.  ISO 3166 2-character country code.  See the file 'iso3166.tab'.
    -+# 2.  Latitude and longitude of the area's principal location
    - #     in ISO 6709 sign-degrees-minutes-seconds format,
    - #     either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
    - #     first latitude (+ is north), then longitude (+ is east).
    --#     This location need not lie within the column-1 country.
    - # 3.  Zone name used in value of TZ environment variable.
    - #     Please see the 'Theory' file for how zone names are chosen.
    -+#     If multiple zones overlap a country, each has a row in the
    -+#     table, with column 1 being duplicated.
    - # 4.  Comments; present if and only if the country has multiple rows.
    - #
    - # Columns are separated by a single tab.
    - # The table is sorted first by country, then an order within the country that
    - # (1) makes some geographical sense, and
    --# (2) puts the most populous zones first, where that does not contradict (1).
    -+# (2) puts the most populous areas first, where that does not contradict (1).
    - #
    --# Lines beginning with `#' are comments.
    -+# Lines beginning with '#' are comments.
    - #
    - # This table is intended as an aid for users, to help them select time
    - # zone data appropriate for their practical needs.  It is not intended
    -@@ -63,8 +65,7 @@
    - AL	+4120+01950	Europe/Tirane
    - AM	+4011+04430	Asia/Yerevan
    - AO	-0848+01314	Africa/Luanda
    --AQ	-7750+16636	Antarctica/McMurdo	McMurdo Station, Ross Island
    --AQ	-9000+00000	Antarctica/South_Pole	Amundsen-Scott Station, South Pole
    -+AQ	-7750+16636	Antarctica/McMurdo	McMurdo, South Pole, Scott (New Zealand time)
    - AQ	-6734-06808	Antarctica/Rothera	Rothera Station, Adelaide Island
    - AQ	-6448-06406	Antarctica/Palmer	Palmer Station, Anvers Island
    - AQ	-6736+06253	Antarctica/Mawson	Mawson Station, Holme Bay
    -@@ -144,8 +145,7 @@
    - CA	+4606-06447	America/Moncton	Atlantic Time - New Brunswick
    - CA	+5320-06025	America/Goose_Bay	Atlantic Time - Labrador - most locations
    - CA	+5125-05707	America/Blanc-Sablon	Atlantic Standard Time - Quebec - Lower North Shore
    --CA	+4531-07334	America/Montreal	Eastern Time - Quebec - most locations
    --CA	+4339-07923	America/Toronto	Eastern Time - Ontario - most locations
    -+CA	+4339-07923	America/Toronto	Eastern Time - Ontario & Quebec - most locations
    - CA	+4901-08816	America/Nipigon	Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973
    - CA	+4823-08915	America/Thunder_Bay	Eastern Time - Thunder Bay, Ontario
    - CA	+6344-06828	America/Iqaluit	Eastern Time - east Nunavut - most locations
    -@@ -256,7 +256,7 @@
    - IS	+6409-02151	Atlantic/Reykjavik
    - IT	+4154+01229	Europe/Rome
    - JE	+4912-00207	Europe/Jersey
    --JM	+1800-07648	America/Jamaica
    -+JM	+175805-0764736	America/Jamaica
    - JO	+3157+03556	Asia/Amman
    - JP	+353916+1394441	Asia/Tokyo
    - KE	-0117+03649	Africa/Nairobi
    -@@ -445,8 +445,7 @@
    - US	+471551-1014640	America/North_Dakota/Beulah	Central Time - North Dakota - Mercer County
    - US	+394421-1045903	America/Denver	Mountain Time
    - US	+433649-1161209	America/Boise	Mountain Time - south Idaho & east Oregon
    --US	+364708-1084111	America/Shiprock	Mountain Time - Navajo
    --US	+332654-1120424	America/Phoenix	Mountain Standard Time - Arizona
    -+US	+332654-1120424	America/Phoenix	Mountain Standard Time - Arizona (except Navajo)
    - US	+340308-1181434	America/Los_Angeles	Pacific Time
    - US	+611305-1495401	America/Anchorage	Alaska Time
    - US	+581807-1342511	America/Juneau	Alaska Time - Alaska panhandle
    -diff -r fd7850833158 -r 3d28326a9e5d src/share/classes/sun/util/resources/TimeZoneNames.java
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java	Thu Oct 24 17:14:18 2013 +0400
    -@@ -43,8 +43,6 @@
    - public final class TimeZoneNames extends TimeZoneNamesBundle {
    - 
    -     protected final Object[][] getContents() {
    --        String ACT[] = new String[] {"Acre Time", "ACT",
    --                                     "Acre Summer Time", "ACST"};
    -         String ADELAIDE[] = new String[] {"Central Standard Time (South Australia)", "CST",
    -                                           "Central Summer Time (South Australia)", "CST"};
    -         String AGT[] = new String[] {"Argentine Time", "ART",
    -@@ -79,7 +77,7 @@
    -                                       "Chamorro Daylight Time", "ChDT"};
    -         String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    -                                       "Chuuk Summer Time", "CHUST"};
    --        String CIT[] = new String[] {"Central Indonesia Time", "CIT",
    -+        String CIT[] = new String[] {"Central Indonesia Time", "WITA",
    -                                      "Central Indonesia Summer Time", "CIST"};
    -         String CLT[] = new String[] {"Chile Time", "CLT",
    -                                      "Chile Summer Time", "CLST"};
    -@@ -193,7 +191,7 @@
    -                                      "Western African Summer Time", "WAST"};
    -         String WET[] = new String[] {"Western European Time", "WET",
    -                                      "Western European Summer Time", "WEST"};
    --        String WIT[] = new String[] {"West Indonesia Time", "WIT",
    -+        String WIT[] = new String[] {"West Indonesia Time", "WIB",
    -                                      "West Indonesia Summer Time", "WIST"};
    -         String WST_AUS[] = new String[] {"Western Standard Time (Australia)", "WST",
    -                                          "Western Summer Time (Australia)", "WST"};
    -@@ -308,7 +306,7 @@
    -             {"America/Argentina/Rio_Gallegos", AGT},
    -             {"America/Argentina/Salta", AGT},
    -             {"America/Argentina/San_Juan", AGT},
    --            {"America/Argentina/San_Luis", WART},
    -+            {"America/Argentina/San_Luis", AGT},
    -             {"America/Argentina/Tucuman", AGT},
    -             {"America/Argentina/Ushuaia", AGT},
    -             {"America/Aruba", AST},
    -@@ -483,7 +481,7 @@
    -             {"Asia/Aden", ARAST},
    -             {"Asia/Almaty", new String[] {"Alma-Ata Time", "ALMT",
    -                                           "Alma-Ata Summer Time", "ALMST"}},
    --            {"Asia/Amman", EET},
    -+            {"Asia/Amman", ARAST},
    -             {"Asia/Anadyr", new String[] {"Anadyr Time", "ANAT",
    -                                           "Anadyr Summer Time", "ANAST"}},
    -             {"Asia/Aqtau", new String[] {"Aqtau Time", "AQTT",
    -@@ -527,7 +525,7 @@
    -                                            "Irkutsk Summer Time", "IRKST"}},
    -             {"Asia/Istanbul", EET},
    -             {"Asia/Jakarta", WIT},
    --            {"Asia/Jayapura", new String[] {"East Indonesia Time", "EIT",
    -+            {"Asia/Jayapura", new String[] {"East Indonesia Time", "WIT",
    -                                             "East Indonesia Summer Time", "EIST"}},
    -             {"Asia/Kabul", new String[] {"Afghanistan Time", "AFT",
    -                                          "Afghanistan Summer Time", "AFST"}},
    -@@ -537,7 +535,8 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    --            {"Asia/Khandyga", YAKT},
    -+            {"Asia/Khandyga", new String[] {"Khandyga Time", "YAKT",
    -+                                            "Khandyga Summer Time", "YAKST"}},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"Krasnoyarsk Time", "KRAT",
    -                                                "Krasnoyarsk Summer Time", "KRAST"}},
    -@@ -586,7 +585,8 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    --            {"Asia/Ust-Nera", VLAT},
    -+            {"Asia/Ust-Nera", new String[] {"Ust-Nera Time", "VLAT",
    -+                                            "Ust-Nera Summer Time", "VLAST"}},
    -             {"Asia/Vientiane", ICT},
    -             {"Asia/Vladivostok", VLAT},
    -             {"Asia/Yakutsk", YAKT},
    -diff -r fd7850833158 -r 3d28326a9e5d src/share/classes/sun/util/resources/TimeZoneNames_de.java
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java	Thu Oct 24 17:14:18 2013 +0400
    -@@ -43,10 +43,8 @@
    - public final class TimeZoneNames_de extends TimeZoneNamesBundle {
    - 
    -     protected final Object[][] getContents() {
    --        String ACT[] = new String[] {"Acre Normalzeit", "ACT",
    --                                     "Acre Sommerzeit", "ACST"};
    --        String ADELAIDE[] = new String[] {"Zentrale Normalzeit (S\u00fcdaustralien)", "CST",
    --                                          "Zentrale Sommerzeit (S\u00fcdaustralien)", "CST"};
    -+        String ADELAIDE[] = new String[] {"Zentrale Normalzeit (S\u00FCdaustralien)", "CST",
    -+                                          "Zentrale Sommerzeit (S\u00FCdaustralien)", "CST"};
    -         String AGT[] = new String[] {"Argentinische Zeit", "ART",
    -                                      "Argentinische Sommerzeit", "ARST"};
    -         String AKST[] = new String[] {"Alaska Normalzeit", "AKST",
    -@@ -61,10 +59,10 @@
    -                                      "Atlantik Sommerzeit", "ADT"};
    -         String BDT[] = new String[] {"Bangladesch Zeit", "BDT",
    -                                      "Bangladesch Sommerzeit", "BDST"};
    --        String BRISBANE[] = new String[] {"\u00d6stliche Normalzeit (Queensland)", "EST",
    --                                          "\u00d6stliche Sommerzeit (Queensland)", "EST"};
    --        String BROKEN_HILL[] = new String[] {"Zentrale Normalzeit (S\u00fcdaustralien/New South Wales)", "CST",
    --                                             "Zentrale Sommerzeit (S\u00fcdaustralien/New South Wales)", "CST"};
    -+        String BRISBANE[] = new String[] {"\u00D6stliche Normalzeit (Queensland)", "EST",
    -+                                          "\u00D6stliche Sommerzeit (Queensland)", "EST"};
    -+        String BROKEN_HILL[] = new String[] {"Zentrale Normalzeit (S\u00FCdaustralien/New South Wales)", "CST",
    -+                                             "Zentrale Sommerzeit (S\u00FCdaustralien/New South Wales)", "CST"};
    -         String BRT[] = new String[] {"Brasilianische Zeit", "BRT",
    -                                      "Brasilianische Sommerzeit", "BRST"};
    -         String BTT[] = new String[] {"Bhutanische Zeit", "BTT",
    -@@ -77,9 +75,9 @@
    -                                        "Chatham Sommerzeit", "CHADT"};
    -         String ChST[] = new String[] {"Chamorro Normalzeit", "ChST",
    -                       "Chamorro Sommerzeit", "ChDT"};
    --        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    --                                      "Chuuk Summer Time", "CHUST"};
    --        String CIT[] = new String[] {"Zentralindonesische Zeit", "CIT",
    -+        String CHUT[] = new String[] {"Chuuk Zeit", "CHUT",
    -+                                      "Chuuk Sommerzeit", "CHUST"};
    -+        String CIT[] = new String[] {"Zentralindonesische Zeit", "WITA",
    -                                      "Zentralindonesische Sommerzeit", "CIST"};
    -         String CLT[] = new String[] {"Chilenische Zeit", "CLT",
    -                                      "Chilenische Sommerzeit", "CLST"};
    -@@ -89,7 +87,7 @@
    -                                      "Chinesische Sommerzeit", "CDT"};
    -         String CUBA[] = new String[] {"Kubanische Normalzeit", "CST",
    -                                       "Kubanische Sommerzeit", "CDT"};
    --        String DARWIN[] = new String[] {"Zentrale Normalzeit (Northern Territory)", "CST",
    -+        String DARWIN[] = new String[] {"Central Normalzeit (Northern Territory)", "CST",
    -                                         "Zentrale Sommerzeit (Northern Territory)", "CST"};
    -         String DUBLIN[] = new String[] {"Greenwich Zeit", "GMT",
    -                                         "Irische Sommerzeit", "IST"};
    -@@ -103,10 +101,10 @@
    -                                      "Ostgr\u00f6nl\u00e4ndische Sommerzeit", "EGST"};
    -         String EST[] = new String[] {"\u00d6stliche Normalzeit", "EST",
    -                                      "\u00d6stliche Sommerzeit", "EDT"};
    --        String EST_NSW[] = new String[] {"\u00d6stliche Normalzeit (New South Wales)", "EST",
    --                                         "\u00d6stliche Sommerzeit (New South Wales)", "EST"};
    --        String FET[] = new String[] {"Further-eastern European Time", "FET",
    --                                     "Further-eastern European Summer Time", "FEST"};
    -+        String EST_NSW[] = new String[] {"Eastern Normalzeit (Neus\u00FCdwales)", "EST",
    -+                                         "\u00D6stliche Sommerzeit (New South Wales)", "EST"};
    -+        String FET[] = new String[] {"Kaliningrader Zeit", "FET",
    -+                                     "Kaliningrader Sommerzeit", "FEST"};
    -         String GHMT[] = new String[] {"Ghanaische Normalzeit", "GMT",
    -                                       "Ghanaische Sommerzeit", "GHST"};
    -         String GAMBIER[] =  new String[] {"Gambier Zeit", "GAMT",
    -@@ -159,8 +157,8 @@
    -                                           "Pitcairn Sommerzeit", "PDT"};
    -         String PKT[] = new String[] {"Pakistanische Zeit", "PKT",
    -                                      "Pakistanische Sommerzeit", "PKST"};
    --        String PONT[] = new String[] {"Pohnpei Time", "PONT",
    --                                      "Pohnpei Summer Time", "PONST"};
    -+        String PONT[] = new String[] {"Pohnpei Zeit", "PONT",
    -+                                      "Pohnpei Sommerzeit", "PONST"};
    -         String PST[] = new String[] {"Pazifische Normalzeit", "PST",
    -                                      "Pazifische Sommerzeit", "PDT"};
    -         String SAMOA[] = new String[] {"Samoa Normalzeit", "SST",
    -@@ -173,8 +171,8 @@
    -                                      "Singapur Sommerzeit", "SGST"};
    -         String SLST[] = new String[] {"Greenwich Normalzeit", "GMT",
    -                                       "Sierra Leone Sommerzeit", "SLST"};
    --        String TASMANIA[] = new String[] {"\u00d6stliche Normalzeit (Tasmanien)", "EST",
    --                                          "\u00d6stliche Sommerzeit (Tasmanien)", "EST"};
    -+        String TASMANIA[] = new String[] {"\u00D6stliche Normalzeit (Tasmanien)", "EST",
    -+                                          "\u00D6stliche Sommerzeit (Tasmanien)", "EST"};
    -         String TMT[] = new String[] {"Turkmenische Zeit", "TMT",
    -                                      "Turkmenische Sommerzeit", "TMST"};
    -         String ULAT[]= new String[] {"Ulaanbaatar Zeit", "ULAT",
    -@@ -183,8 +181,8 @@
    -                                      "Koordinierte Universalzeit", "UTC"};
    -         String UZT[] = new String[] {"Usbekistan Zeit", "UZT",
    -                                      "Usbekistan Sommerzeit", "UZST"};
    --        String VICTORIA[] = new String[] {"\u00d6stliche Normalzeit (Victoria)", "EST",
    --                                          "\u00d6stliche Sommerzeit (Victoria)", "EST"};
    -+        String VICTORIA[] = new String[] {"\u00D6stliche Normalzeit (Victoria)", "EST",
    -+                                          "\u00D6stliche Sommerzeit (Victoria)", "EST"};
    -         String VLAT[] = new String[] {"Wladiwostok Zeit", "VLAT",
    -                                       "Wladiwostok Sommerzeit", "VLAST"};
    -         String WART[] = new String[] {"Westargentinische Zeit", "WART",
    -@@ -193,7 +191,7 @@
    -                                      "Westafrikanische Sommerzeit", "WAST"};
    -         String WET[] = new String[] {"Westeurop\u00e4ische Zeit", "WEZ",
    -                                      "Westeurop\u00e4ische Sommerzeit", "WESZ"};
    --        String WIT[] = new String[] {"Westindonesische Zeit", "WIT",
    -+        String WIT[] = new String[] {"Westindonesische Zeit", "WIB",
    -                                      "Westindonesische Sommerzeit", "WIST"};
    -         String WST_AUS[] = new String[] {"Westliche Normalzeit (Australien)", "WST",
    -                                          "Westliche Sommerzeit (Australien)", "WST"};
    -@@ -308,7 +306,7 @@
    -             {"America/Argentina/Rio_Gallegos", AGT},
    -             {"America/Argentina/Salta", AGT},
    -             {"America/Argentina/San_Juan", AGT},
    --            {"America/Argentina/San_Luis", WART},
    -+            {"America/Argentina/San_Luis", AGT},
    -             {"America/Argentina/Tucuman", AGT},
    -             {"America/Argentina/Ushuaia", AGT},
    -             {"America/Aruba", AST},
    -@@ -401,8 +399,8 @@
    -             {"America/Mendoza", AGT},
    -             {"America/Menominee", CST},
    -             {"America/Merida", CST},
    --            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
    --                                                 "Metlakatla Daylight Time", "MeDT"}},
    -+            {"America/Metlakatla", new String[] {"Metlakatla Normalzeit", "MeST",
    -+                                                 "Metlakatla Sommerzeit", "MeDT"}},
    -             {"America/Mexico_City", CST},
    -             {"America/Miquelon", new String[] {"Pierre & Miquelon Normalzeit", "PMST",
    -                                                "Pierre & Miquelon Sommerzeit", "PMDT"}},
    -@@ -466,8 +464,8 @@
    -                                                "Davis Sommerzeit", "DAVST"}},
    -             {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville Zeit", "DDUT",
    -                                                         "Dumont-d'Urville Sommerzeit", "DDUST"}},
    --            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
    --                                                   "Macquarie Island Summer Time", "MIST"}},
    -+            {"Antarctica/Macquarie", new String[] {"Macquarieinsel Zeit", "MIST",
    -+                                                   "Macquarieinsel Sommerzeit", "MIST"}},
    -             {"Antarctica/Mawson", new String[] {"Mawson Zeit", "MAWT",
    -                                                 "Mawson Sommerzeit", "MAWST"}},
    -             {"Antarctica/McMurdo", NZST},
    -@@ -483,7 +481,7 @@
    -             {"Asia/Aden", ARAST},
    -             {"Asia/Almaty", new String[] {"Alma Ata Zeit", "ALMT",
    -                                           "Alma-Ata Sommerzeit", "ALMST"}},
    --            {"Asia/Amman", EET},
    -+            {"Asia/Amman", ARAST},
    -             {"Asia/Anadyr", new String[] {"Anadyr Zeit", "ANAT",
    -                                           "Anadyr Sommerzeit", "ANAST"}},
    -             {"Asia/Aqtau", new String[] {"Aqtau Zeit", "AQTT",
    -@@ -527,7 +525,7 @@
    -                                            "Irkutsk Sommerzeit", "IRKST"}},
    -             {"Asia/Istanbul", EET},
    -             {"Asia/Jakarta", WIT},
    --            {"Asia/Jayapura", new String[] {"Ostindonesische Zeit", "EIT",
    -+            {"Asia/Jayapura", new String[] {"Ostindonesische Zeit", "WIT",
    -                                             "Ostindonesische Sommerzeit", "EIST"}},
    -             {"Asia/Kabul", new String[] {"Afghanistanische Zeit", "AFT",
    -                                          "Afghanistanische Sommerzeit", "AFST"}},
    -@@ -537,7 +535,8 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    --            {"Asia/Khandyga", YAKT},
    -+            {"Asia/Khandyga", new String[] {"Chandyga Zeit", "YAKT",
    -+                                            "Chandyga Sommerzeit", "YAKST"}},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"Krasnojarsker Zeit", "KRAT",
    -                                                "Krasnojarsker Sommerzeit", "KRAST"}},
    -@@ -586,7 +585,8 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    --            {"Asia/Ust-Nera", VLAT},
    -+            {"Asia/Ust-Nera", new String[] {"Ust-Nera Zeit", "VLAT",
    -+                                            "Ust-Nera Sommerzeit", "VLAST"}},
    -             {"Asia/Vientiane", ICT},
    -             {"Asia/Vladivostok", VLAT},
    -             {"Asia/Yakutsk", YAKT},
    -diff -r fd7850833158 -r 3d28326a9e5d src/share/classes/sun/util/resources/TimeZoneNames_es.java
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java	Thu Oct 24 17:14:18 2013 +0400
    -@@ -43,9 +43,7 @@
    - public final class TimeZoneNames_es extends TimeZoneNamesBundle {
    - 
    -     protected final Object[][] getContents() {
    --        String ACT[] = new String[] {"Hora de Acre", "ACT",
    --                                     "Hora de verano de Acre", "ACST"};
    --        String ADELAIDE[] = new String[] {"Hora est\u00e1ndar Central (Sur de Australia)", "CST",
    -+        String ADELAIDE[] = new String[] {"Hora est\u00E1ndar Central (Sur de Australia)", "CST",
    -                                           "Hora de verano Central (Sur de Australia)", "CST"};
    -         String AGT[] = new String[] {"Hora de Argentina", "ART",
    -                                      "Hora de verano de Argentina", "ARST"};
    -@@ -61,9 +59,9 @@
    -                                      "Hora de verano Atl\u00e1ntico", "ADT"};
    -         String BDT[] = new String[] {"Hora de Bangladesh", "BDT",
    -                                      "Hora de verano de Bangladesh", "BDST"};
    --        String BRISBANE[] = new String[] {"Hora est\u00e1ndar del Este (Queensland)", "EST",
    --                                          "Hora de verano del Este (Queensland)", "EST"};
    --        String BROKEN_HILL[] = new String[] {"Hora est\u00e1ndar Central (Sur de Australia/Nueva Gales del Sur)", "CST",
    -+        String BRISBANE[] = new String[] {"Hora est\u00E1ndar del Este (Queensland)", "EST",
    -+                                          "Hora est\u00E1ndar de verano del Este (Queensland)", "EST"};
    -+        String BROKEN_HILL[] = new String[] {"Hora est\u00E1ndar Central (Sur de Australia/Nueva Gales del Sur)", "CST",
    -                                              "Hora de verano Central (Sur de Australia/Nueva Gales del Sur)", "CST"};
    -         String BRT[] = new String[] {"Hora de Brasil", "BRT",
    -                                      "Hora de verano de Brasil", "BRST"};
    -@@ -79,7 +77,7 @@
    -                                       "Hora de verano de Chamorro", "ChDT"};
    -         String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    -                                       "Chuuk Summer Time", "CHUST"};
    --        String CIT[] = new String[] {"Hora de Indonesia Central", "CIT",
    -+        String CIT[] = new String[] {"Hora de Indonesia Central", "WITA",
    -                                      "Hora de verano de Indonesia Central", "CIST"};
    -         String CLT[] = new String[] {"Hora de Chile", "CLT",
    -                                      "Hora de verano de Chile", "CLST"};
    -@@ -89,7 +87,7 @@
    -                                      "Hora de verano de China", "CDT"};
    -         String CUBA[] = new String[] {"Hora est\u00e1ndar de Cuba", "CST",
    -                                       "Hora de verano de Cuba", "CDT"};
    --        String DARWIN[] = new String[] {"Hora est\u00e1ndar Central (territorio del Norte)", "CST",
    -+        String DARWIN[] = new String[] {"Hora est\u00E1ndar Central (territorio del Norte)", "CST",
    -                                         "Hora de verano Central (territorio del Norte)", "CST"};
    -         String DUBLIN[] = new String[] {"Hora del Meridiano de Greenwich", "GMT",
    -                                         "Hora de verano de Irlanda", "IST"};
    -@@ -103,10 +101,10 @@
    -                                      "Hora de verano de Groenlandia Oriental", "EGST"};
    -         String EST[] = new String[] {"Hora est\u00e1ndar Oriental", "EST",
    -                                      "Hora de verano Oriental", "EDT"};
    --        String EST_NSW[] = new String[] {"Hora est\u00e1ndar Oriental (Nueva Gales del Sur)", "EST",
    -+        String EST_NSW[] = new String[] {"Hora est\u00E1ndar Oriental (Nueva Gales del Sur)", "EST",
    -                                          "Hora de verano Oriental (Nueva Gales del Sur)", "EST"};
    --        String FET[] = new String[] {"Further-eastern European Time", "FET",
    --                                     "Further-eastern European Summer Time", "FEST"};
    -+        String FET[] = new String[] {"Hora de Europa m\u00E1s Oriental", "FET",
    -+                                     "Hora de verano de Europa m\u00E1s Oriental", "FEST"};
    -         String GHMT[] = new String[] {"Hora central de Ghana", "GMT",
    -                                       "Hora de verano de Ghana", "GHST"};
    -         String GAMBIER[] =  new String[] {"Hora de Gambier", "GAMT",
    -@@ -173,7 +171,7 @@
    -                                      "Hora de verano de  Singapur", "SGST"};
    -         String SLST[] = new String[] {"Hora del Meridiano de Greenwich", "GMT",
    -                                       "Hora de verano de Sierra Leona", "SLST"};
    --        String TASMANIA[] = new String[] {"Hora est\u00e1ndar del Este (Tasmania)", "EST",
    -+        String TASMANIA[] = new String[] {"Hora est\u00E1ndar del Este (Tasmania)", "EST",
    -                                           "Hora de verano del Este (Tasmania)", "EST"};
    -         String TMT[] = new String[] {"Hora de Turkmenist\u00e1n", "TMT",
    -                                      "Hora de verano de Turkmenist\u00e1n", "TMST"};
    -@@ -183,7 +181,7 @@
    -                                      "Hora Universal Coordinada", "UTC"};
    -         String UZT[] = new String[] {"Hora de Uzbekist\u00e1n", "UZT",
    -                                      "Hora de verano de Uzbekist\u00e1n", "UZST"};
    --        String VICTORIA[] = new String[] {"Hora est\u00e1ndar del Este (Victoria)", "EST",
    -+        String VICTORIA[] = new String[] {"Hora est\u00E1ndar del Este (Victoria)", "EST",
    -                                           "Hora de verano del Este (Victoria)", "EST"};
    -         String VLAT[] = new String[] {"Hora de Vladivostok", "VLAT",
    -                                       "Hora de verano de Vladivostok", "VLAST"};
    -@@ -193,9 +191,9 @@
    -                                      "Hora de verano de \u00c1frica Occidental", "WAST"};
    -         String WET[] = new String[] {"Hora de Europa Occidental", "WET",
    -                                      "Hora de verano de Europa Occidental", "WEST"};
    --        String WIT[] = new String[] {"Hora de Indonesia Occidental", "WIT",
    -+        String WIT[] = new String[] {"Hora de Indonesia Occidental", "WIB",
    -                                      "Indonesia Hora de verano de Indonesia Occidental", "WIST"};
    --        String WST_AUS[] = new String[] {"Hora est\u00e1ndar Occidental (Australia)", "WST",
    -+        String WST_AUS[] = new String[] {"Hora est\u00E1ndar Occidental (Australia)", "WST",
    -                                          "Hora de verano Occidental (Australia)", "WST"};
    -         String WST_SAMOA[] = new String[] {"Hora de Samoa Occidental", "WST",
    -                                            "Hora de verano de Samoa Occidental", "WSDT"};
    -@@ -308,7 +306,7 @@
    -             {"America/Argentina/Rio_Gallegos", AGT},
    -             {"America/Argentina/Salta", AGT},
    -             {"America/Argentina/San_Juan", AGT},
    --            {"America/Argentina/San_Luis", WART},
    -+            {"America/Argentina/San_Luis", AGT},
    -             {"America/Argentina/Tucuman", AGT},
    -             {"America/Argentina/Ushuaia", AGT},
    -             {"America/Aruba", AST},
    -@@ -483,7 +481,7 @@
    -             {"Asia/Aden", ARAST},
    -             {"Asia/Almaty", new String[] {"Hora de Alma-Ata", "ALMT",
    -                                           "Hora de verano de Alma-Ata", "ALMST"}},
    --            {"Asia/Amman", EET},
    -+            {"Asia/Amman", ARAST},
    -             {"Asia/Anadyr", new String[] {"Hora de Anadyr", "ANAT",
    -                                           "Hora de verano de Anadyr", "ANAST"}},
    -             {"Asia/Aqtau", new String[] {"Hora de Aqtau", "AQTT",
    -@@ -527,7 +525,7 @@
    -                                            "Hora de verano de Irkutsk", "IRKST"}},
    -             {"Asia/Istanbul", EET},
    -             {"Asia/Jakarta", WIT},
    --            {"Asia/Jayapura", new String[] {"Hora de Indonesia Oriental", "EIT",
    -+            {"Asia/Jayapura", new String[] {"Hora de Indonesia Oriental", "WIT",
    -                                             "Hora de verano de Indonesia Oriental", "EIST"}},
    -             {"Asia/Kabul", new String[] {"Hora de Afganist\u00e1n", "AFT",
    -                                          "Hora de verano de Afganist\u00e1n", "AFST"}},
    -@@ -537,7 +535,8 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    --            {"Asia/Khandyga", YAKT},
    -+            {"Asia/Khandyga", new String[] {"Hora de Khandyga", "YAKT",
    -+                                            "Hora de verano de Khandyga", "YAKST"}},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"Hora de Krasnoyarsk", "KRAT",
    -                                                "Hora de verano de Krasnoyarsk", "KRAST"}},
    -@@ -586,7 +585,8 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    --            {"Asia/Ust-Nera", VLAT},
    -+            {"Asia/Ust-Nera", new String[] {"Hora de Ust-Nera", "VLAT",
    -+                                            "Hora de verano de Ust-Nera", "VLAST"}},
    -             {"Asia/Vientiane", ICT},
    -             {"Asia/Vladivostok", VLAT},
    -             {"Asia/Yakutsk", YAKT},
    -@@ -616,8 +616,8 @@
    -             {"Australia/Canberra", EST_NSW},
    -             {"Australia/Currie", EST_NSW},
    -             {"Australia/Darwin", DARWIN},
    --            {"Australia/Eucla", new String[] {"Hora est\u00e1ndar de Australia Central y Occidental", "CWST",
    --                                              "Hora de verano de Australia Central y Occidental", "CWST"}},
    -+            {"Australia/Eucla", new String[] {"Hora est\u00E1ndar de Australia Central y Occidental", "CWST",
    -+                                              "Hora est\u00E1ndar de verano de Australia Central y Occidental", "CWST"}},
    -             {"Australia/Hobart", TASMANIA},
    -             {"Australia/LHI", LORD_HOWE},
    -             {"Australia/Lindeman", BRISBANE},
    -diff -r fd7850833158 -r 3d28326a9e5d src/share/classes/sun/util/resources/TimeZoneNames_fr.java
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java	Thu Oct 24 17:14:18 2013 +0400
    -@@ -43,10 +43,8 @@
    - public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
    - 
    -     protected final Object[][] getContents() {
    --        String ACT[] = new String[] {"Heure de l'Acre", "ACT",
    --                                     "Heure d'\u00e9t\u00e9 de l'Acre", "ACST"};
    -         String ADELAIDE[] = new String[] {"Heure standard d'Australie centrale (Australie du sud)", "CST",
    --                                          "Heure d'\u00e9t\u00e9 d'Australie centrale (Australie du sud)", "CST"};
    -+                                          "Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud)", "CST"};
    -         String AGT[] = new String[] {"Heure D'Argentine", "ART",
    -                                      "Heure d'\u00e9t\u00e9 D'Argentine", "ARST"};
    -         String AKST[] = new String[] {"Heure normale d'Alaska", "AKST",
    -@@ -62,9 +60,9 @@
    -         String BDT[] = new String[] {"Heure du Bangladesh", "BDT",
    -                                      "Heure d'\u00e9t\u00e9 du Bangladesh", "BDST"};
    -         String BRISBANE[] = new String[] {"Heure standard d'Australie orientale (Queensland)", "EST",
    --                                          "Heure d'\u00e9t\u00e9 d'Australie orientale (Queensland)", "EST"};
    -+                                          "Heure d'\u00E9t\u00E9 d'Australie orientale (Queensland)", "EST"};
    -         String BROKEN_HILL[] = new String[] {"Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "CST",
    --                                             "Heure d'\u00e9t\u00e9 d'Australie centrale(Australie du sud/Nouvelle-Galles du sud)", "CST"};
    -+                                             "Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "CST"};
    -         String BRT[] = new String[] {"Heure du Br\u00e9sil", "BRT",
    -                                      "Heure d'\u00e9t\u00e9 du Br\u00e9sil", "BRST"};
    -         String BTT[] = new String[] {"Heure du Bhoutan", "BTT",
    -@@ -77,9 +75,9 @@
    -                                        "Heure avanc\u00e9e de Chatham", "CHADT"};
    -         String ChST[] = new String[] {"Heure normale des \u00eeles Mariannes", "ChST",
    -                       "Heure d'\u00e9t\u00e9 des \u00eeles Mariannes", "ChDT"};
    --        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    --                                      "Chuuk Summer Time", "CHUST"};
    --        String CIT[] = new String[] {"Heure d'Indon\u00e9sie centrale", "CIT",
    -+        String CHUT[] = new String[] {"Heure de Chuuk", "CHUT",
    -+                                      "Heure d'\u00E9t\u00E9 de Chuuk", "CHUST"};
    -+        String CIT[] = new String[] {"Heure d'Indon\u00e9sie centrale", "WITA",
    -                                      "Heure d'\u00e9t\u00e9 d'Indon\u00e9sie centrale", "CIST"};
    -         String CLT[] = new String[] {"Heure du Chili", "CLT",
    -                                      "Heure d'\u00e9t\u00e9 du Chili", "CLST"};
    -@@ -90,7 +88,7 @@
    -         String CUBA[] = new String[] {"Heure standard de Cuba", "CST",
    -                                       "Heure d'\u00e9t\u00e9 de Cuba", "CDT"};
    -         String DARWIN[] = new String[] {"Heure standard d'Australie centrale (Territoire du Nord)", "CST",
    --                                        "Heure d'\u00e9t\u00e9 d'Australie centrale (Territoire du Nord)", "CST"};
    -+                                        "Heure d'\u00E9t\u00E9 d'Australie centrale (Territoire du Nord)", "CST"};
    -         String DUBLIN[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT",
    -                                         "Heure d'\u00e9t\u00e9 irlandaise", "IST"};
    -         String EAT[] = new String[] {"Heure d'Afrique de l'Est", "EAT",
    -@@ -104,9 +102,9 @@
    -         String EST[] = new String[] {"Heure normale de l'Est", "EST",
    -                                      "Heure avanc\u00e9e de l'Est", "EDT"};
    -         String EST_NSW[] = new String[] {"Heure normale de l'Est (Nouvelle-Galles du Sud)", "EST",
    --                                         "Heure d'\u00e9t\u00e9 de l'Est (Nouvelle-Galles du Sud)", "EST"};
    --        String FET[] = new String[] {"Further-eastern European Time", "FET",
    --                                     "Further-eastern European Summer Time", "FEST"};
    -+                                         "Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud)", "EST"};
    -+        String FET[] = new String[] {"Heure d'Europe de l'Est UTC+3", "FET",
    -+                                     "Heure d'\u00E9t\u00E9 d'Europe de l'Est UTC+3", "FEST"};
    -         String GHMT[] = new String[] {"Heure du Ghana", "GMT",
    -                                       "Heure d'\u00e9t\u00e9 du Ghana", "GHST"};
    -         String GAMBIER[] =  new String[] {"Heure de Gambi", "GAMT",
    -@@ -159,8 +157,8 @@
    -                                           "heure avanc\u00e9e des Pitcairn", "PDT"};
    -         String PKT[] = new String[] {"Heure du Pakistan", "PKT",
    -                                      "Heure d'\u00e9t\u00e9 du Pakistan", "PKST"};
    --        String PONT[] = new String[] {"Pohnpei Time", "PONT",
    --                                      "Pohnpei Summer Time", "PONST"};
    -+        String PONT[] = new String[] {"Heure de Pohnpei", "PONT",
    -+                                      "Heure d'\u00E9t\u00E9 de Pohnpei", "PONST"};
    -         String PST[] = new String[] {"Heure normale du Pacifique", "PST",
    -                                      "Heure avanc\u00e9e du Pacifique", "PDT"};
    -         String SAMOA[] = new String[] {"Heure standard de Samoa", "SST",
    -@@ -174,7 +172,7 @@
    -         String SLST[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT",
    -                                       "Heure d'\u00e9t\u00e9 de Sierra Leone", "SLST"};
    -         String TASMANIA[] = new String[] {"Heure standard d'Australie orientale (Tasmanie)", "EST",
    --                                          "Heure d'\u00e9t\u00e9 d'Australie orientale (Tasmanie)", "EST"};
    -+                                          "Heure d'\u00E9t\u00E9 d'Australie orientale (Tasmanie)", "EST"};
    -         String TMT[] = new String[] {"Heure du Turkm\u00e9nistan", "TMT",
    -                                      "Heure d'\u00e9t\u00e9 du Turkm\u00e9nistan", "TMST"};
    -         String ULAT[]= new String[] {"Heure de l'Ulaanbaatar", "ULAT",
    -@@ -184,7 +182,7 @@
    -         String UZT[] = new String[] {"Heure de l'Ouzb\u00e9kistan", "UZT",
    -                                      "Heure d'\u00e9t\u00e9 de l'Ouzb\u00e9kistan", "UZST"};
    -         String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "EST",
    --                                          "Heure d'\u00e9t\u00e9 d'Australie orientale (Victoria)", "EST"};
    -+                                          "Heure d'\u00E9t\u00E9 d'Australie orientale (Victoria)", "EST"};
    -         String VLAT[] = new String[] {"Heure de Vladivostok", "VLAT",
    -                                       "Heure d'\u00e9t\u00e9 de Vladivostok", "VLAST"};
    -         String WART[] = new String[] {"Heure D'Argentine de l'Ouest", "WART",
    -@@ -193,10 +191,10 @@
    -                                      "Heure d'\u00e9t\u00e9 d'Afrique de l'Ouest", "WAST"};
    -         String WET[] = new String[] {"Heure d'Europe de l'Ouest", "WET",
    -                                      "Heure d'\u00e9t\u00e9 d'Europe de l'Ouest", "WEST"};
    --        String WIT[] = new String[] {"Heure de l'Indon\u00e9sie occidentale", "WIT",
    -+        String WIT[] = new String[] {"Heure de l'Indon\u00e9sie occidentale", "WIB",
    -                                      "Heure d'\u00e9t\u00e9 de l'Indon\u00e9sie occidentale", "WIST"};
    -         String WST_AUS[] = new String[] {"Heure normale de l'Ouest (Australie)", "WST",
    --                                         "Heure d'\u00e9t\u00e9 de l'Ouest (Australie)", "WST"};
    -+                                         "Heure d'\u00E9t\u00E9 de l'Ouest (Australie)", "WST"};
    -         String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WST",
    -                                            "Heure d'\u00e9t\u00e9 des Samoas occidentales", "WSDT"};
    -         String YAKT[] = new String[] {"Heure du Iakoutsk", "YAKT",
    -@@ -308,7 +306,7 @@
    -             {"America/Argentina/Rio_Gallegos", AGT},
    -             {"America/Argentina/Salta", AGT},
    -             {"America/Argentina/San_Juan", AGT},
    --            {"America/Argentina/San_Luis", WART},
    -+            {"America/Argentina/San_Luis", AGT},
    -             {"America/Argentina/Tucuman", AGT},
    -             {"America/Argentina/Ushuaia", AGT},
    -             {"America/Aruba", AST},
    -@@ -401,8 +399,8 @@
    -             {"America/Mendoza", AGT},
    -             {"America/Menominee", CST},
    -             {"America/Merida", CST},
    --            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
    --                                                 "Metlakatla Daylight Time", "MeDT"}},
    -+            {"America/Metlakatla", new String[] {"Heure normale de Metlakatla", "MeST",
    -+                                                 "Heure avanc\u00E9e de Metlakatla", "MeDT"}},
    -             {"America/Mexico_City", CST},
    -             {"America/Miquelon", new String[] {"Heure normale de Saint-Pierre et Miquelon", "PMST",
    -                                                "Heure avanc\u00e9e de Saint-Pierre et Miquelon", "PMDT"}},
    -@@ -466,8 +464,8 @@
    -                                                "Heure d'\u00e9t\u00e9 de Davis", "DAVST"}},
    -             {"Antarctica/DumontDUrville", new String[] {"Heure de Dumont-d'Urville", "DDUT",
    -                                                         "Heure d'\u00e9t\u00e9 de Dumont-d'Urville", "DDUST"}},
    --            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
    --                                                   "Macquarie Island Summer Time", "MIST"}},
    -+            {"Antarctica/Macquarie", new String[] {"Heure de l'Ile Macquarie", "MIST",
    -+                                                   "Heure d'\u00E9t\u00E9 de l'Ile Macquarie", "MIST"}},
    -             {"Antarctica/Mawson", new String[] {"Heure de Mawson", "MAWT",
    -                                                 "Heure d'\u00e9t\u00e9 de Mawson", "MAWST"}},
    -             {"Antarctica/McMurdo", NZST},
    -@@ -483,7 +481,7 @@
    -             {"Asia/Aden", ARAST},
    -             {"Asia/Almaty", new String[] {"Heure d'Alma-Ata", "ALMT",
    -                                           "Heure d'\u00e9t\u00e9 d'Alma-Ata", "ALMST"}},
    --            {"Asia/Amman", EET},
    -+            {"Asia/Amman", ARAST},
    -             {"Asia/Anadyr", new String[] {"Heure d'Anadyr", "ANAT",
    -                                           "Heure d'\u00e9t\u00e9 d'Anadyr", "ANAST"}},
    -             {"Asia/Aqtau", new String[] {"Heure d'Aqtau", "AQTT",
    -@@ -527,7 +525,7 @@
    -                                            "Heure d'\u00e9t\u00e9 d'Irkutsk", "IRKST"}},
    -             {"Asia/Istanbul", EET},
    -             {"Asia/Jakarta", WIT},
    --            {"Asia/Jayapura", new String[] {"Heure d'Indon\u00e9sie orientale", "EIT",
    -+            {"Asia/Jayapura", new String[] {"Heure d'Indon\u00e9sie orientale", "WIT",
    -                                             "Heure d'\u00e9t\u00e9 d'Indon\u00e9sie orientale", "EIST"}},
    -             {"Asia/Kabul", new String[] {"Heure d'Afghanistan", "AFT",
    -                                          "Heure d'\u00e9t\u00e9 d'Afghanistan", "AFST"}},
    -@@ -537,7 +535,8 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    --            {"Asia/Khandyga", YAKT},
    -+            {"Asia/Khandyga", new String[] {"Heure de Khandyga", "YAKT",
    -+                                            "Heure d'\u00E9t\u00E9 de Khandyga", "YAKST"}},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"Heure de Krasno\u00efarsk", "KRAT",
    -                                                "Heure d'\u00e9t\u00e9 de Krasno\u00efarsk", "KRAST"}},
    -@@ -586,7 +585,8 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    --            {"Asia/Ust-Nera", VLAT},
    -+            {"Asia/Ust-Nera", new String[] {"Heure d'Ust-Nera", "VLAT",
    -+                                            "Heure d'\u00E9t\u00E9 d'Ust-Nera", "VLAST"}},
    -             {"Asia/Vientiane", ICT},
    -             {"Asia/Vladivostok", VLAT},
    -             {"Asia/Yakutsk", YAKT},
    -@@ -617,7 +617,7 @@
    -             {"Australia/Currie", EST_NSW},
    -             {"Australia/Darwin", DARWIN},
    -             {"Australia/Eucla", new String[] {"Heure standard de l'Australie occidentale (centre)", "CWST",
    --                                              "Heure d'\u00e9t\u00e9 de l'Australie occidentale (centre)", "CWST"}},
    -+                                              "Heure d'\u00E9t\u00E9 de l'Australie occidentale (centre)", "CWST"}},
    -             {"Australia/Hobart", TASMANIA},
    -             {"Australia/LHI", LORD_HOWE},
    -             {"Australia/Lindeman", BRISBANE},
    -diff -r fd7850833158 -r 3d28326a9e5d src/share/classes/sun/util/resources/TimeZoneNames_it.java
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java	Thu Oct 24 17:14:18 2013 +0400
    -@@ -43,10 +43,8 @@
    - public final class TimeZoneNames_it extends TimeZoneNamesBundle {
    - 
    -     protected final Object[][] getContents() {
    --        String ACT[] = new String[] {"Ora di Acre", "ACT",
    --                                     "Ora estiva di Acre", "ACST"};
    --        String ADELAIDE[] = new String[] {"Ora centrale standard (Australia del Sud)", "CST",
    --                                          "Ora estiva standard (Australia del Sud)", "CST"};
    -+        String ADELAIDE[] = new String[] {"Ora standard centrale (Australia del Sud)", "CST",
    -+                                          "Ora estiva centrale (Australia del Sud)", "CST"};
    -         String AGT[] = new String[] {"Ora dell'Argentina", "ART",
    -                                      "Ora estiva dell'Argentina", "ARST"};
    -         String AKST[] = new String[] {"Ora solare dell'Alaska", "AKST",
    -@@ -61,9 +59,9 @@
    -                                      "Ora legale dell'Atlantico occidentale", "ADT"};
    -         String BDT[] = new String[] {"Ora del Bangladesh", "BDT",
    -                                      "Ora estiva del Bangladesh", "BDST"};
    --        String BRISBANE[] = new String[] {"Ora orientale standard (Queensland)", "EST",
    -+        String BRISBANE[] = new String[] {"Ora standard orientale (Queensland)", "EST",
    -                                           "Ora estiva orientale (Queensland)", "EST"};
    --        String BROKEN_HILL[] = new String[] {"Ora centrale standard (Australia del Sud/Nuovo Galles del Sud)", "CST",
    -+        String BROKEN_HILL[] = new String[] {"Ora standard centrale (Australia del Sud/Nuovo Galles del Sud)", "CST",
    -                                              "Ora estiva centrale (Australia del Sud/Nuovo Galles del Sud)", "CST"};
    -         String BRT[] = new String[] {"Ora del Brasile", "BRT",
    -                                      "Ora estiva del Brasile", "BRST"};
    -@@ -75,11 +73,11 @@
    -                                      "Ora estiva dell'Europa centrale", "CEST"};
    -         String CHAST[] = new String[] {"Ora di Chatham standard", "CHAST",
    -                                        "Ora legale di Chatham", "CHADT"};
    --        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    --                                      "Chuuk Summer Time", "CHUST"};
    -+        String CHUT[] = new String[] {"Ora di Chuuk", "CHUT",
    -+                                      "Ora estiva di Chuuk", "CHUST"};
    -         String ChST[] = new String[] {"Ora standard di Chamorro", "ChST",
    -                               "Ora legale di Chamorro", "ChDT"};
    --        String CIT[] = new String[] {"Ora dell'Indonesia centrale", "CIT",
    -+        String CIT[] = new String[] {"Ora dell'Indonesia centrale", "WITA",
    -                                      "Ora estiva dell'Indonesia centrale", "CIST"};
    -         String CLT[] = new String[] {"Ora del Cile", "CLT",
    -                                      "Ora estiva del Cile", "CLST"};
    -@@ -89,7 +87,7 @@
    -                                      "Ora legale della Cina", "CDT"};
    -         String CUBA[] = new String[] {"Ora solare Cuba", "CST",
    -                                       "Ora legale Cuba", "CDT"};
    --        String DARWIN[] = new String[] {"Ora centrale standard (Territori del Nord)", "CST",
    -+        String DARWIN[] = new String[] {"Ora standard centrale (Territori del Nord)", "CST",
    -                                         "Ora estiva centrale (Territori del Nord)", "CST"};
    -         String DUBLIN[] = new String[] {"Ora media di Greenwich", "GMT",
    -                                         "Ora estiva irlandese", "IST"};
    -@@ -103,10 +101,10 @@
    -                                      "Ora estiva della Groenlandia orientale", "EGST"};
    -         String EST[] = new String[] {"Ora solare USA orientale", "EST",
    -                                      "Ora legale USA orientale", "EDT"};
    --        String EST_NSW[] = new String[] {"Ora solare dell'Australia orientale (Nuovo Galles del Sud)", "EST",
    -+        String EST_NSW[] = new String[] {"Ora standard dell'Australia orientale (Nuovo Galles del Sud)", "EST",
    -                                          "Ora estiva dell'Australia orientale (Nuovo Galles del Sud)", "EST"};
    --        String FET[] = new String[] {"Further-eastern European Time", "FET",
    --                                     "Further-eastern European Summer Time", "FEST"};
    -+        String FET[] = new String[] {"Ora dei paesi europei pi\u00F9 orientali", "FET",
    -+                                     "Ora estiva dei paesi europei pi\u00F9 orientali", "FEST"};
    -         String GHMT[] = new String[] {"Ora media del Ghana", "GMT",
    -                                       "Ora legale del Ghana", "GHST"};
    -         String GAMBIER[] =  new String[] {"Ora di Gambier", "GAMT",
    -@@ -159,8 +157,8 @@
    -                                           "Ora legale di Pitcairn", "PDT"};
    -         String PKT[] = new String[] {"Ora del Pakistan", "PKT",
    -                                      "Ora estiva del Pakistan", "PKST"};
    --        String PONT[] = new String[] {"Pohnpei Time", "PONT",
    --                                      "Pohnpei Summer Time", "PONST"};
    -+        String PONT[] = new String[] {"Ora di Pohnpei", "PONT",
    -+                                      "Ora estiva di Pohnpei", "PONST"};
    -         String PST[] = new String[] {"Ora solare della costa occidentale USA", "PST",
    -                                      "Ora legale della costa occidentale USA", "PDT"};
    -         String SAMOA[] = new String[] {"Ora standard di Samoa", "SST",
    -@@ -173,7 +171,7 @@
    -                                      "Ora estiva di Singapore", "SGST"};
    -         String SLST[] = new String[] {"Ora media di Greenwich", "GMT",
    -                                       "Ora legale della Sierra Leone", "SLST"};
    --        String TASMANIA[] = new String[] {"Ora orientale standard (Tasmania)", "EST",
    -+        String TASMANIA[] = new String[] {"Ora standard orientale (Tasmania)", "EST",
    -                                           "Ora estiva orientale (Tasmania)", "EST"};
    -         String TMT[] = new String[] {"Ora del Turkmenistan", "TMT",
    -                                      "Ora estiva del Turkmenistan", "TMST"};
    -@@ -183,7 +181,7 @@
    -                                      "Tempo universale coordinato", "UTC"};
    -         String UZT[] = new String[] {"Ora dell'Uzbekistan", "UZT",
    -                                      "Ora estiva dell'Uzbekistan", "UZST"};
    --        String VICTORIA[] = new String[] {"Ora orientale standard (Victoria)", "EST",
    -+        String VICTORIA[] = new String[] {"Ora standard orientale (Victoria)", "EST",
    -                                           "Ora estiva orientale (Victoria)", "EST"};
    -         String VLAT[] = new String[] {"Ora di Vladivostok", "VLAT",
    -                                       "Ora estiva di Vladivostok", "VLAST"};
    -@@ -193,9 +191,9 @@
    -                                      "Ora estiva dell'Africa occidentale", "WAST"};
    -         String WET[] = new String[] {"Ora dell'Europa occidentale", "WET",
    -                                      "Ora estiva dell'Europa occidentale", "WEST"};
    --        String WIT[] = new String[] {"Ora dell'Indonesia occidentale", "WIT",
    -+        String WIT[] = new String[] {"Ora dell'Indonesia occidentale", "WIB",
    -                                      "Ora estiva dell'Indonesia occidentale", "WIST"};
    --        String WST_AUS[] = new String[] {"Ora solare dell'Australia occidentale", "WST",
    -+        String WST_AUS[] = new String[] {"Ora standard dell'Australia occidentale", "WST",
    -                                          "Ora estiva dell'Australia occidentale", "WST"};
    -         String WST_SAMOA[] = new String[] {"Ora di Samoa", "WST",
    -                                            "Ora estiva di Samoa", "WSDT"};
    -@@ -308,7 +306,7 @@
    -             {"America/Argentina/Rio_Gallegos", AGT},
    -             {"America/Argentina/Salta", AGT},
    -             {"America/Argentina/San_Juan", AGT},
    --            {"America/Argentina/San_Luis", WART},
    -+            {"America/Argentina/San_Luis", AGT},
    -             {"America/Argentina/Tucuman", AGT},
    -             {"America/Argentina/Ushuaia", AGT},
    -             {"America/Aruba", AST},
    -@@ -401,8 +399,8 @@
    -             {"America/Mendoza", AGT},
    -             {"America/Menominee", CST},
    -             {"America/Merida", CST},
    --            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
    --                                                 "Metlakatla Daylight Time", "MeDT"}},
    -+            {"America/Metlakatla", new String[] {"Ora standard di Metlakatla", "MeST",
    -+                                                 "Ora legale di Metlakatla", "MeDT"}},
    -             {"America/Mexico_City", CST},
    -             {"America/Miquelon", new String[] {"Ora solare di Saint-Pierre e Miquelon", "PMST",
    -                                                "Ora legale di Saint-Pierre e Miquelon", "PMDT"}},
    -@@ -466,8 +464,8 @@
    -                                                "Ora estiva di Davis", "DAVST"}},
    -             {"Antarctica/DumontDUrville", new String[] {"Ora di Dumont-d'Urville", "DDUT",
    -                                                         "Ora estiva di Dumont-d'Urville", "DDUST"}},
    --            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
    --                                                   "Macquarie Island Summer Time", "MIST"}},
    -+            {"Antarctica/Macquarie", new String[] {"Ora dell'Isola Macquarie", "MIST",
    -+                                                   "Ora estiva dell'Isola Macquarie", "MIST"}},
    -             {"Antarctica/Mawson", new String[] {"Ora di Mawson", "MAWT",
    -                                                 "Ora estiva di Mawson", "MAWST"}},
    -             {"Antarctica/McMurdo", NZST},
    -@@ -483,7 +481,7 @@
    -             {"Asia/Aden", ARAST},
    -             {"Asia/Almaty", new String[] {"Ora di Alma-Ata", "ALMT",
    -                                           "Ora estiva di Alma-Ata", "ALMST"}},
    --            {"Asia/Amman", EET},
    -+            {"Asia/Amman", ARAST},
    -             {"Asia/Anadyr", new String[] {"Ora di Anadyr", "ANAT",
    -                                           "Ora estiva di Anadyr", "ANAST"}},
    -             {"Asia/Aqtau", new String[] {"Ora di Aqtau", "AQTT",
    -@@ -527,7 +525,7 @@
    -                                            "Ora estiva di Irkutsk", "IRKST"}},
    -             {"Asia/Istanbul", EET},
    -             {"Asia/Jakarta", WIT},
    --            {"Asia/Jayapura", new String[] {"Ora dell'Indonesia orientale", "EIT",
    -+            {"Asia/Jayapura", new String[] {"Ora dell'Indonesia orientale", "WIT",
    -                                             "Ora estiva dell'Indonesia orientale", "EIST"}},
    -             {"Asia/Kabul", new String[] {"Ora dell'Afghanistan", "AFT",
    -                                          "Ora estiva dell'Afghanistan", "AFST"}},
    -@@ -537,7 +535,8 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    --            {"Asia/Khandyga", YAKT},
    -+            {"Asia/Khandyga", new String[] {"Ora di Khandyga", "YAKT",
    -+                                            "Ora estiva di Khandyga", "YAKST"}},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"Ora di Krasnojarsk", "KRAT",
    -                                                "Ora estiva di Krasnojarsk", "KRAST"}},
    -@@ -586,7 +585,8 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    --            {"Asia/Ust-Nera", VLAT},
    -+            {"Asia/Ust-Nera", new String[] {"Ora di Ust-Nera", "VLAT",
    -+                                            "Ora estiva di Ust-Nera", "VLAST"}},
    -             {"Asia/Vientiane", ICT},
    -             {"Asia/Vladivostok", VLAT},
    -             {"Asia/Yakutsk", YAKT},
    -@@ -616,8 +616,8 @@
    -             {"Australia/Canberra", EST_NSW},
    -             {"Australia/Currie", EST_NSW},
    -             {"Australia/Darwin", DARWIN},
    --            {"Australia/Eucla", new String[] {"Ora solare Australia centrorientale", "CWST",
    --                                              "Ora estiva Australia centrorientale", "CWST"}},
    -+            {"Australia/Eucla", new String[] {"Ora standard Australia centro-occidentale", "CWST",
    -+                                              "Ora estiva Australia centro-occidentale", "CWST"}},
    -             {"Australia/Hobart", TASMANIA},
    -             {"Australia/LHI", LORD_HOWE},
    -             {"Australia/Lindeman", BRISBANE},
    -diff -r fd7850833158 -r 3d28326a9e5d src/share/classes/sun/util/resources/TimeZoneNames_ja.java
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java	Thu Oct 24 17:14:18 2013 +0400
    -@@ -43,10 +43,8 @@
    - public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
    - 
    -     protected final Object[][] getContents() {
    --        String ACT[] = new String[] {"\u30a2\u30af\u30ec\u6642\u9593", "ACT",
    --                                     "\u30a2\u30af\u30ec\u590f\u6642\u9593", "ACST"};
    --        String ADELAIDE[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642 (\u5357\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "CST",
    --                                          "\u4e2d\u90e8\u590f\u6642\u9593 (\u5357\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "CST"};
    -+        String ADELAIDE[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CST",
    -+                                          "\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CST"};
    -         String AGT[] = new String[] {"\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "ART",
    -                                      "\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "ARST"};
    -         String AKST[] = new String[] {"\u30a2\u30e9\u30b9\u30ab\u6a19\u6e96\u6642", "AKST",
    -@@ -61,10 +59,10 @@
    -                                      "\u5927\u897f\u6d0b\u590f\u6642\u9593", "ADT"};
    -         String BDT[] = new String[] {"\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5\u6642\u9593", "BDT",
    -                                      "\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5\u590f\u6642\u9593", "BDST"};
    --        String BRISBANE[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30af\u30a4\u30fc\u30f3\u30ba\u30e9\u30f3\u30c9)", "EST",
    --                                          "\u6771\u90e8\u590f\u6642\u9593 (\u30af\u30a4\u30fc\u30f3\u30ba\u30e9\u30f3\u30c9)", "EST"};
    --        String BROKEN_HILL[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642 (\u5357\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2/\u30cb\u30e5\u30fc\u30b5\u30a6\u30b9\u30a6\u30a7\u30fc\u30eb\u30ba)", "CST",
    --                                             "\u4e2d\u90e8\u590f\u6642\u9593 (\u5357\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2/\u30cb\u30e5\u30fc\u30b5\u30a6\u30b9\u30a6\u30a7\u30fc\u30eb\u30ba)", "CST"};
    -+        String BRISBANE[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "EST",
    -+                                          "\u6771\u90E8\u590F\u6642\u9593(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "EST"};
    -+        String BROKEN_HILL[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "CST",
    -+                                             "\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "CST"};
    -         String BRT[] = new String[] {"\u30d6\u30e9\u30b8\u30eb\u6642\u9593", "BRT",
    -                                      "\u30d6\u30e9\u30b8\u30eb\u590f\u6642\u9593", "BRST"};
    -         String BTT[] = new String[] {"\u30d6\u30fc\u30bf\u30f3\u6642\u9593", "BTT",
    -@@ -77,9 +75,9 @@
    -                                        "\u30c1\u30e3\u30bf\u30e0\u590f\u6642\u9593", "CHADT"};
    -         String ChST[] = new String[] {"\u30b0\u30a2\u30e0\u6a19\u6e96\u6642", "ChST",
    -                                       "\u30b0\u30a2\u30e0\u590f\u6642\u9593", "ChDT"};
    --        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    --                                      "Chuuk Summer Time", "CHUST"};
    --        String CIT[] = new String[] {"\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "CIT",
    -+        String CHUT[] = new String[] {"\u30C1\u30E5\u30FC\u30AF\u6642\u9593", "CHUT",
    -+                                      "Chuuk Time", "CHUST"};
    -+        String CIT[] = new String[] {"\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "WITA",
    -                                      "\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "CIST"};
    -         String CLT[] = new String[] {"\u30c1\u30ea\u6642\u9593", "CLT",
    -                                      "\u30c1\u30ea\u590f\u6642\u9593", "CLST"};
    -@@ -89,8 +87,8 @@
    -                                      "\u4e2d\u56fd\u590f\u6642\u9593", "CDT"};
    -         String CUBA[] = new String[] {"\u30ad\u30e5\u30fc\u30d0\u6a19\u6e96\u6642", "CST",
    -                                       "\u30ad\u30e5\u30fc\u30d0\u590f\u6642\u9593", "CDT"};
    --        String DARWIN[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642 (\u30ce\u30fc\u30b6\u30f3\u30c6\u30ea\u30c8\u30ea\u30fc)", "CST",
    --                                        "\u4e2d\u90e8\u590f\u6642\u9593 (\u30ce\u30fc\u30b6\u30f3\u30c6\u30ea\u30c8\u30ea\u30fc)", "CST"};
    -+        String DARWIN[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "CST",
    -+                                        "\u4E2D\u90E8\u590F\u6642\u9593(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "CST"};
    -         String DUBLIN[] = new String[] {"\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642", "GMT",
    -                                         "\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9\u590f\u6642\u9593", "IST"};
    -         String EAT[] = new String[] {"\u6771\u30a2\u30d5\u30ea\u30ab\u6642\u9593", "EAT",
    -@@ -103,10 +101,10 @@
    -                                      "\u6771\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u590f\u6642\u9593", "EGST"};
    -         String EST[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642", "EST",
    -                                      "\u6771\u90e8\u590f\u6642\u9593", "EDT"};
    --        String EST_NSW[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30cb\u30e5\u30fc\u30b5\u30a6\u30b9\u30a6\u30a7\u30fc\u30eb\u30ba)", "EST",
    --                                         "\u6771\u90e8\u590f\u6642\u9593 (\u30cb\u30e5\u30fc\u30b5\u30a6\u30b9\u30a6\u30a7\u30fc\u30eb\u30ba)", "EST"};
    --        String FET[] = new String[] {"Further-eastern European Time", "FET",
    --                                     "Further-eastern European Summer Time", "FEST"};
    -+        String EST_NSW[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "EST",
    -+                                         "\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "EST"};
    -+        String FET[] = new String[] {"\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593", "FET",
    -+                                     "\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u590F\u6642\u9593", "FEST"};
    -         String GHMT[] = new String[] {"\u30ac\u30fc\u30ca\u6a19\u6e96\u6642", "GMT",
    -                                      "\u30ac\u30fc\u30ca\u590f\u6642\u9593", "GHST"};
    -         String GAMBIER[] =  new String[] {"\u30ac\u30f3\u30d3\u30a2\u6642\u9593", "GAMT",
    -@@ -159,8 +157,8 @@
    -                                           "\u30d4\u30c8\u30b1\u30eb\u30f3\u5cf6\u590f\u6642\u9593", "PDT"};
    -         String PKT[] = new String[] {"\u30d1\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "PKT",
    -                                      "\u30d1\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "PKST"};
    --        String PONT[] = new String[] {"Pohnpei Time", "PONT",
    --                                      "Pohnpei Summer Time", "PONST"};
    -+        String PONT[] = new String[] {"\u30DD\u30F3\u30DA\u30A4\u6642\u9593", "PONT",
    -+                                      "\u30DD\u30F3\u30DA\u30A4\u590F\u6642\u9593", "PONST"};
    -         String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642", "PST",
    -                                      "\u592a\u5e73\u6d0b\u590f\u6642\u9593", "PDT"};
    -         String SAMOA[] = new String[] {"\u30b5\u30e2\u30a2\u6a19\u6e96\u6642", "SST",
    -@@ -173,8 +171,8 @@
    -                                      "\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb\u590f\u6642\u9593", "SGST"};
    -         String SLST[] = new String[] {"\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642", "GMT",
    -                                       "\u30b7\u30a8\u30e9\u30ec\u30aa\u30cd\u590f\u6642\u9593", "SLST"};
    --        String TASMANIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30bf\u30b9\u30de\u30cb\u30a2)", "EST",
    --                                          "\u6771\u90e8\u590f\u6642\u9593 (\u30bf\u30b9\u30de\u30cb\u30a2)", "EST"};
    -+        String TASMANIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2)", "EST",
    -+                                          "\u6771\u90E8\u590F\u6642\u9593(\u30BF\u30B9\u30DE\u30CB\u30A2)", "EST"};
    -         String TMT[] = new String[] {"\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u6642\u9593", "TMT",
    -                                      "\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u590f\u6642\u9593", "TMST"};
    -         String ULAT[]= new String[] {"\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u6642\u9593", "ULAT",
    -@@ -183,8 +181,8 @@
    -                                      "\u5354\u5b9a\u4e16\u754c\u6642", "UTC"};
    -         String UZT[] = new String[] {"\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "UZT",
    -                                      "\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "UZST"};
    --        String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST",
    --                                          "\u6771\u90e8\u590f\u6642\u9593 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST"};
    -+        String VICTORIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2)", "EST",
    -+                                          "\u6771\u90E8\u590F\u6642\u9593(\u30D3\u30AF\u30C8\u30EA\u30A2)", "EST"};
    -         String VLAT[] = new String[] {"\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u6642\u9593", "VLAT",
    -                                       "\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u590f\u6642\u9593", "VLAST"};
    -         String WART[] = new String[] {"\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "WART",
    -@@ -193,10 +191,10 @@
    -                                      "\u897f\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "WAST"};
    -         String WET[] = new String[] {"\u897f\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593", "WET",
    -                                      "\u897f\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "WEST"};
    --        String WIT[] = new String[] {"\u897f\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "WIT",
    -+        String WIT[] = new String[] {"\u897f\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "WIB",
    -                                      "\u897f\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "WIST"};
    --        String WST_AUS[] = new String[] {"\u897f\u90e8\u6a19\u6e96\u6642 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "WST",
    --                                         "\u897f\u90e8\u590f\u6642\u9593 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "WST"};
    -+        String WST_AUS[] = new String[] {"\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "WST",
    -+                                         "\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "WST"};
    -         String WST_SAMOA[] = new String[] {"\u897f\u30b5\u30e2\u30a2\u6642\u9593", "WST",
    -                                            "\u897f\u30b5\u30e2\u30a2\u590f\u6642\u9593", "WSDT"};
    -         String YAKT[] = new String[] {"\u30e4\u30af\u30fc\u30c4\u30af\u6642\u9593", "YAKT",
    -@@ -308,7 +306,7 @@
    -             {"America/Argentina/Rio_Gallegos", AGT},
    -             {"America/Argentina/Salta", AGT},
    -             {"America/Argentina/San_Juan", AGT},
    --            {"America/Argentina/San_Luis", WART},
    -+            {"America/Argentina/San_Luis", AGT},
    -             {"America/Argentina/Tucuman", AGT},
    -             {"America/Argentina/Ushuaia", AGT},
    -             {"America/Aruba", AST},
    -@@ -401,8 +399,8 @@
    -             {"America/Mendoza", AGT},
    -             {"America/Menominee", CST},
    -             {"America/Merida", CST},
    --            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
    --                                                 "Metlakatla Daylight Time", "MeDT"}},
    -+            {"America/Metlakatla", new String[] {"\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u6A19\u6E96\u6642\u9593", "MeST",
    -+                                                 "\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u590F\u6642\u9593", "MeDT"}},
    -             {"America/Mexico_City", CST},
    -             {"America/Miquelon", new String[] {"\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u6a19\u6e96\u6642", "PMST",
    -                                                "\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u590f\u6642\u9593", "PMDT"}},
    -@@ -466,8 +464,8 @@
    -                                                "\u30c7\u30a4\u30d3\u30b9\u590f\u6642\u9593", "DAVST"}},
    -             {"Antarctica/DumontDUrville", new String[] {"\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u6642\u9593", "DDUT",
    -                                                         "\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u590f\u6642\u9593", "DDUST"}},
    --            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
    --                                                   "Macquarie Island Summer Time", "MIST"}},
    -+            {"Antarctica/Macquarie", new String[] {"\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u6642\u9593", "MIST",
    -+                                                   "\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u590F\u6642\u9593", "MIST"}},
    -             {"Antarctica/Mawson", new String[] {"\u30e2\u30fc\u30bd\u30f3\u6642\u9593", "MAWT",
    -                                                 "\u30e2\u30fc\u30bd\u30f3\u590f\u6642\u9593", "MAWST"}},
    -             {"Antarctica/McMurdo", NZST},
    -@@ -483,7 +481,7 @@
    -             {"Asia/Aden", ARAST},
    -             {"Asia/Almaty", new String[] {"\u30a2\u30eb\u30de\u30a2\u30bf\u6642\u9593", "ALMT",
    -                                           "\u30a2\u30eb\u30de\u30a2\u30bf\u590f\u6642\u9593", "ALMST"}},
    --            {"Asia/Amman", EET},
    -+            {"Asia/Amman", ARAST},
    -             {"Asia/Anadyr", new String[] {"\u30a2\u30ca\u30c9\u30a5\u30a4\u30ea\u6642\u9593", "ANAT",
    -                                           "\u30a2\u30ca\u30c9\u30a5\u30a4\u30ea\u590f\u6642\u9593", "ANAST"}},
    -             {"Asia/Aqtau", new String[] {"\u30a2\u30af\u30bf\u30a6\u6642\u9593", "AQTT",
    -@@ -527,7 +525,7 @@
    -                                            "\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "IRKST"}},
    -             {"Asia/Istanbul", EET},
    -             {"Asia/Jakarta", WIT},
    --            {"Asia/Jayapura", new String[] {"\u6771\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "EIT",
    -+            {"Asia/Jayapura", new String[] {"\u6771\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "WIT",
    -                                             "\u6771\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "EIST" }},
    -             {"Asia/Kabul", new String[] {"\u30a2\u30d5\u30ac\u30cb\u30b9\u30bf\u30f3\u6642\u9593", "AFT",
    -                                          "\u30a2\u30d5\u30ac\u30cb\u30b9\u30bf\u30f3\u590f\u6642\u9593", "AFST"}},
    -@@ -537,7 +535,8 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    --            {"Asia/Khandyga", YAKT},
    -+            {"Asia/Khandyga", new String[] {"\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u6642\u9593", "YAKT",
    -+                                            "\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u590F\u6642\u9593", "YAKST"}},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u6642\u9593", "KRAT",
    -                                                "\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u590f\u6642\u9593", "KRAST"}},
    -@@ -586,7 +585,8 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    --            {"Asia/Ust-Nera", VLAT},
    -+            {"Asia/Ust-Nera", new String[] {"\u30A6\u30B9\u30C1\u30CD\u30E9\u6642\u9593", "VLAT",
    -+                                            "\u30A6\u30B9\u30C1\u30CD\u30E9\u590F\u6642\u9593", "VLAST"}},
    -             {"Asia/Vientiane", ICT},
    -             {"Asia/Vladivostok", VLAT},
    -             {"Asia/Yakutsk", YAKT},
    -@@ -616,8 +616,8 @@
    -             {"Australia/Canberra", EST_NSW},
    -             {"Australia/Currie", EST_NSW},
    -             {"Australia/Darwin", DARWIN},
    --            {"Australia/Eucla", new String[] {"\u4e2d\u897f\u90e8\u6a19\u6e96\u6642 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "CWST",
    --                                              "\u4e2d\u897f\u90e8\u590f\u6642\u9593 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "CWST"}},
    -+            {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CWST",
    -+                                              "\u4E2D\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CWST"}},
    -             {"Australia/Hobart", TASMANIA},
    -             {"Australia/LHI", LORD_HOWE},
    -             {"Australia/Lindeman", BRISBANE},
    -diff -r fd7850833158 -r 3d28326a9e5d src/share/classes/sun/util/resources/TimeZoneNames_ko.java
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java	Thu Oct 24 17:14:18 2013 +0400
    -@@ -43,10 +43,8 @@
    - public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
    - 
    -     protected final Object[][] getContents() {
    --        String ACT[] = new String[] {"\uc5d0\uc774\ucee4 \uc2dc\uac04", "ACT",
    --                                     "\uc5d0\uc774\ucee4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ACST"};
    --        String ADELAIDE[] = new String[] {"\uc911\ubd80 \ud45c\uc900\uc2dc(\uc0ac\uc6b0\uc2a4 \uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544)", "CST",
    --                                          "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\uc0ac\uc6b0\uc2a4 \uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544)", "CST"};
    -+        String ADELAIDE[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CST",
    -+                                          "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CST"};
    -         String AGT[] = new String[] {"\uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "ART",
    -                                      "\uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ARST"};
    -         String AKST[] = new String[] {"\uc54c\ub798\uc2a4\uce74 \ud45c\uc900\uc2dc", "AKST",
    -@@ -61,10 +59,10 @@
    -                                      "\ub300\uc11c\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ADT"};
    -         String BDT[] = new String[] {"\ubc29\uae00\ub77c\ub370\uc2dc \uc2dc\uac04", "BDT",
    -                                      "\ubc29\uae00\ub77c\ub370\uc2dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BDST"};
    --        String BRISBANE[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ud038\uc990\ub79c\ub4dc)", "EST",
    --                                          "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ud038\uc990\ub79c\ub4dc)", "EST"};
    --        String BROKEN_HILL[] = new String[] {"\uc911\ubd80 \ud45c\uc900\uc2dc(\uc0ac\uc6b0\uc2a4 \uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544/\ub274 \uc0ac\uc6b0\uc2a4 \uc6e8\uc77c\uc988)", "CST",
    --                                             "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\uc0ac\uc6b0\uc2a4 \uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544/\ub274 \uc0ac\uc6b0\uc2a4 \uc6e8\uc77c\uc988)", "CST"};
    -+        String BRISBANE[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC)", "EST",
    -+                                          "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD038\uC990\uB79C\uB4DC)", "EST"};
    -+        String BROKEN_HILL[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "CST",
    -+                                             "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "CST"};
    -         String BRT[] = new String[] {"\ube0c\ub77c\uc9c8\ub9ac\uc544 \uc2dc\uac04", "BRT",
    -                                      "\ube0c\ub77c\uc9c8\ub9ac\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BRST"};
    -         String BTT[] = new String[] {"\ubd80\ud0c4 \uc2dc\uac04", "BTT",
    -@@ -77,9 +75,9 @@
    -                                        "Chatham \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CHADT"};
    -         String ChST[] = new String[] {"\ucc28\ubaa8\ub85c \ud45c\uc900\uc2dc", "ChST",
    -                                       "\ucc28\ubaa8\ub85c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ChDT"};
    --        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    --                                      "Chuuk Summer Time", "CHUST"};
    --        String CIT[] = new String[] {"\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "CIT",
    -+        String CHUT[] = new String[] {"\uCD94\uD06C \uD45C\uC900\uC2DC", "CHUT",
    -+                                      "\uCD94\uD06C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "CHUST"};
    -+        String CIT[] = new String[] {"\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "WITA",
    -                                      "\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CIST"};
    -         String CLT[] = new String[] {"\uce60\ub808 \uc2dc\uac04", "CLT",
    -                                      "\uce60\ub808 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CLST"};
    -@@ -89,8 +87,8 @@
    -                                      "\uc911\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"};
    -         String CUBA[] = new String[] {"\ucfe0\ubc14 \ud45c\uc900\uc2dc", "CST",
    -                                       "\ucfe0\ubc14 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"};
    --        String DARWIN[] = new String[] {"\uc911\ubd80 \ud45c\uc900\uc2dc(\ub178\ub358 \uc9c0\uc5ed)", "CST",
    --                                        "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ub178\ub358 \uc9c0\uc5ed)", "CST"};
    -+        String DARWIN[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED)", "CST",
    -+                                        "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBD81\uBD80 \uC9C0\uC5ED)", "CST"};
    -         String DUBLIN[] = new String[] {"\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc", "GMT",
    -                                         "\uc544\uc77c\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IST"};
    -         String EAT[] = new String[] {"\ub3d9\ubd80 \uc544\ud504\ub9ac\uce74 \uc2dc\uac04", "EAT",
    -@@ -103,10 +101,10 @@
    -                                      "\ub3d9\ubd80 \uadf8\ub9b0\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EGST"};
    -         String EST[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc", "EST",
    -                                      "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EDT"};
    --        String EST_NSW[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ub274 \uc0ac\uc6b0\uc2a4 \uc6e8\uc77c\uc988)", "EST",
    --                                         "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ub274 \uc0ac\uc6b0\uc2a4 \uc6e8\uc77c\uc988)", "EST"};
    --        String FET[] = new String[] {"Further-eastern European Time", "FET",
    --                                     "Further-eastern European Summer Time", "FEST"};
    -+        String EST_NSW[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "EST",
    -+                                         "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "EST"};
    -+        String FET[] = new String[] {"\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC", "FET",
    -+                                     "\uADF9\uB3D9 \uC720\uB7FD \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "FEST"};
    -         String GHMT[] = new String[] {"\uac00\ub098 \ud45c\uc900\uc2dc", "GMT",
    -                                      "\uac00\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GHST"};
    -         String GAMBIER[] =  new String[] {"\uac10\ube44\uc544 \uc2dc\uac04", "GAMT",
    -@@ -159,8 +157,8 @@
    -                                           "Pitcairn \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"};
    -         String PKT[] = new String[] {"\ud30c\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "PKT",
    -                                      "\ud30c\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PKST"};
    --        String PONT[] = new String[] {"Pohnpei Time", "PONT",
    --                                      "Pohnpei Summer Time", "PONST"};
    -+        String PONT[] = new String[] {"\uD3F0\uD398\uC774 \uD45C\uC900\uC2DC", "PONT",
    -+                                      "\uD3F0\uD398\uC774 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "PONST"};
    -         String PST[] = new String[] {"\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc", "PST",
    -                                      "\ud0dc\ud3c9\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"};
    -         String SAMOA[] = new String[] {"\uc0ac\ubaa8\uc544 \ud45c\uc900\uc2dc", "SST",
    -@@ -173,8 +171,8 @@
    -                                      "\uc2f1\uac00\ud3ec\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SGST"};
    -         String SLST[] = new String[] {"\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc", "GMT",
    -                                       "\uc2dc\uc5d0\ub77c\ub9ac\uc628 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SLST"};
    --        String TASMANIA[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ud0dc\uc988\uba54\uc774\ub2c8\uc544)", "EST",
    --                                          "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ud0dc\uc988\uba54\uc774\ub2c8\uc544)", "EST"};
    -+        String TASMANIA[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "EST",
    -+                                          "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "EST"};
    -         String TMT[] = new String[] {"\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc2dc\uac04", "TMT",
    -                                      "\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TMST"};
    -         String ULAT[]= new String[] {"\uc6b8\ub780\ubc14\ud0c0\ub974 \uc2dc\uac04", "ULAT",
    -@@ -183,8 +181,8 @@
    -                                      "\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC"};
    -         String UZT[] = new String[] {"\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "UZT",
    -                                      "\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "UZST"};
    --        String VICTORIA[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ube45\ud1a0\ub9ac\uc544)", "EST",
    --                                          "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ube45\ud1a0\ub9ac\uc544)", "EST"};
    -+        String VICTORIA[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544)", "EST",
    -+                                          "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBE45\uD1A0\uB9AC\uC544)", "EST"};
    -         String VLAT[] = new String[] {"\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc2dc\uac04", "VLAT",
    -                                       "\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VLAST"};
    -         String WART[] = new String[] {"\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "WART",
    -@@ -193,10 +191,10 @@
    -                                      "\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WAST"};
    -         String WET[] = new String[] {"\uc11c\uc720\ub7fd \uc2dc\uac04", "WET",
    -                                      "\uc11c\uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WEST"};
    --        String WIT[] = new String[] {"\uc11c\uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "WIT",
    -+        String WIT[] = new String[] {"\uc11c\uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "WIB",
    -                                      "\uc11c\uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WIST"};
    --        String WST_AUS[] = new String[] {"\uc11c\ubd80 \ud45c\uc900\uc2dc(\ud638\uc8fc)", "WST",
    --                                         "\uc11c\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ud638\uc8fc)", "WST"};
    -+        String WST_AUS[] = new String[] {"\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "WST",
    -+                                         "\uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "WST"};
    -         String WST_SAMOA[] = new String[] {"\uc11c\uc0ac\ubaa8\uc544 \uc2dc\uac04", "WST",
    -                                            "\uc11c\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WSDT"};
    -         String YAKT[] = new String[] {"\uc57c\uce20\ud06c \uc2dc\uac04", "YAKT",
    -@@ -308,7 +306,7 @@
    -             {"America/Argentina/Rio_Gallegos", AGT},
    -             {"America/Argentina/Salta", AGT},
    -             {"America/Argentina/San_Juan", AGT},
    --            {"America/Argentina/San_Luis", WART},
    -+            {"America/Argentina/San_Luis", AGT},
    -             {"America/Argentina/Tucuman", AGT},
    -             {"America/Argentina/Ushuaia", AGT},
    -             {"America/Aruba", AST},
    -@@ -401,8 +399,8 @@
    -             {"America/Mendoza", AGT},
    -             {"America/Menominee", CST},
    -             {"America/Merida", CST},
    --            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
    --                                                 "Metlakatla Daylight Time", "MeDT"}},
    -+            {"America/Metlakatla", new String[] {"\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uD45C\uC900\uC2DC", "MeST",
    -+                                                 "\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "MeDT"}},
    -             {"America/Mexico_City", CST},
    -             {"America/Miquelon", new String[] {"\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \ud45c\uc900\uc2dc", "PMST",
    -                                                "\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PMDT"}},
    -@@ -466,8 +464,8 @@
    -                                                "Davis \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "DAVST"}},
    -             {"Antarctica/DumontDUrville", new String[] {"\ub4a4\ubabd \ub4a4\ub974\ube4c \uc2dc\uac04", "DDUT",
    -                                                         "\ub4a4\ubabd \ub4a4\ub974\ube4c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "DDUST"}},
    --            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
    --                                                   "Macquarie Island Summer Time", "MIST"}},
    -+            {"Antarctica/Macquarie", new String[] {"\uB9E4\uCF70\uB9AC \uC12C \uD45C\uC900\uC2DC", "MIST",
    -+                                                   "\uB9E4\uCF70\uB9AC \uC12C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "MIST"}},
    -             {"Antarctica/Mawson", new String[] {"\ubaa8\uc2a8 \uc2dc\uac04", "MAWT",
    -                                                 "\ubaa8\uc2a8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MAWST"}},
    -             {"Antarctica/McMurdo", NZST},
    -@@ -483,7 +481,7 @@
    -             {"Asia/Aden", ARAST},
    -             {"Asia/Almaty", new String[] {"\uc54c\ub9c8\uc544\ud0c0 \uc2dc\uac04", "ALMT",
    -                                           "\uc54c\ub9c8\uc544\ud0c0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ALMST"}},
    --            {"Asia/Amman", EET},
    -+            {"Asia/Amman", ARAST},
    -             {"Asia/Anadyr", new String[] {"\uc544\ub098\ub514\ub974 \uc2dc\uac04", "ANAT",
    -                                           "\uc544\ub098\ub514\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ANAST"}},
    -             {"Asia/Aqtau", new String[] {"\uc545\ud0c0\uc6b0 \uc2dc\uac04", "AQTT",
    -@@ -527,7 +525,7 @@
    -                                             "\uc774\ub974\ucfe0\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IRKST"}},
    -             {"Asia/Istanbul", EET},
    -             {"Asia/Jakarta", WIT},
    --            {"Asia/Jayapura", new String[] {"\ub3d9\ubd80 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "EIT",
    -+            {"Asia/Jayapura", new String[] {"\ub3d9\ubd80 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "WIT",
    -                                             "\ub3d9\ubd80 \uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EIST"}},
    -             {"Asia/Kabul", new String[] {"\uc544\ud504\uac00\ub2c8\uc2a4\ud0c4 \uc2dc\uac04", "AFT",
    -                                          "\uc544\ud504\uac00\ub2c8\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "AFST"}},
    -@@ -537,7 +535,8 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    --            {"Asia/Khandyga", YAKT},
    -+            {"Asia/Khandyga", new String[] {"\uD55C\uB514\uAC00 \uD45C\uC900\uC2DC", "YAKT",
    -+                                            "\uD55C\uB514\uAC00 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "YAKST"}},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc2dc\uac04", "KRAT",
    -                                                "\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KRAST"}},
    -@@ -586,7 +585,8 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    --            {"Asia/Ust-Nera", VLAT},
    -+            {"Asia/Ust-Nera", new String[] {"\uC6B0\uC2A4\uD2F0\uB124\uB77C \uD45C\uC900\uC2DC", "VLAT",
    -+                                            "\uC6B0\uC2A4\uD2F0\uB124\uB77C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "VLAST"}},
    -             {"Asia/Vientiane", ICT},
    -             {"Asia/Vladivostok", VLAT},
    -             {"Asia/Yakutsk", YAKT},
    -@@ -616,8 +616,8 @@
    -             {"Australia/Canberra", EST_NSW},
    -             {"Australia/Currie", EST_NSW},
    -             {"Australia/Darwin", DARWIN},
    --            {"Australia/Eucla", new String[] {"\uc911\uc11c\ubd80 \ud45c\uc900\uc2dc(\uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544)", "CWST",
    --                                              "\uc911\uc11c\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544)", "CWST"}},
    -+            {"Australia/Eucla", new String[] {"\uC911\uC559 \uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CWST",
    -+                                              "\uC911\uC559 \uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CWST"}},
    -             {"Australia/Hobart", TASMANIA},
    -             {"Australia/LHI", LORD_HOWE},
    -             {"Australia/Lindeman", BRISBANE},
    -diff -r fd7850833158 -r 3d28326a9e5d src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java	Thu Oct 24 17:14:18 2013 +0400
    -@@ -43,10 +43,8 @@
    - public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle {
    - 
    -     protected final Object[][] getContents() {
    --        String ACT[] = new String[] {"Fuso hor\u00e1rio do Acre", "ACT",
    --                                     "Fuso hor\u00e1rio de ver\u00e3o do Acre", "ACST"};
    --        String ADELAIDE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central (Austr\u00e1lia do Sul)", "CST",
    --                                          "Fuso hor\u00e1rio de ver\u00e3o central (Austr\u00e1lia do Sul)", "CST"};
    -+        String ADELAIDE[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul)", "CST",
    -+                                          "Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul)", "CST"};
    -         String AGT[] = new String[] {"Fuso hor\u00e1rio da Argentina", "ART",
    -                                      "Fuso hor\u00e1rio de ver\u00e3o da Argentina", "ARST"};
    -         String AKST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Alaska", "AKST",
    -@@ -61,10 +59,10 @@
    -                                      "Hor\u00e1rio de luz natural do Atl\u00e2ntico", "ADT"};
    -         String BDT[] = new String[] {"Fuso hor\u00e1rio de Bangladesh", "BDT",
    -                                      "Fuso hor\u00e1rio de ver\u00e3o de Bangladesh", "BDST"};
    --        String BRISBANE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Queensland)", "EST",
    --                                          "Fuso hor\u00e1rio de ver\u00e3o oriental (Queensland)", "EST"};
    --        String BROKEN_HILL[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central (Austr\u00e1lia do Sul/Nova Gales do Sul)", "CST",
    --                                             "Fuso hor\u00e1rio de ver\u00e3o central (Austr\u00e1lia do Sul/Nova Gales do Sul)", "CST"};
    -+        String BRISBANE[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Queensland)", "EST",
    -+                                          "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Queensland)", "EST"};
    -+        String BROKEN_HILL[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "CST",
    -+                                             "Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "CST"};
    -         String BRT[] = new String[] {"Fuso hor\u00e1rio de Bras\u00edlia", "BRT",
    -                                      "Fuso hor\u00e1rio de ver\u00e3o de Bras\u00edlia", "BRST"};
    -         String BTT[] = new String[] {"Fuso hor\u00e1rio de But\u00e3o", "BTT",
    -@@ -77,7 +75,7 @@
    -                                        "Hor\u00e1rio de luz natural de Chatham", "CHADT"};
    -         String ChST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chamorro", "ChST",
    -                                       "Hor\u00e1rio de luz natural de Chamorro", "ChDT"};
    --        String CIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Central", "CIT",
    -+        String CIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Central", "WITA",
    -                                      "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Central", "CIST"};
    -         String CLT[] = new String[] {"Fuso hor\u00e1rio do Chile", "CLT",
    -                                      "Fuso hor\u00e1rio de ver\u00e3o do Chile", "CLST"};
    -@@ -87,8 +85,8 @@
    -                                      "Hor\u00e1rio de luz natural da China", "CDT"};
    -         String CUBA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Cuba", "CST",
    -                                       "Hor\u00e1rio de luz natural de Cuba", "CDT"};
    --        String DARWIN[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central (Territ\u00f3rio do Norte)", "CST",
    --                                        "Fuso hor\u00e1rio de ver\u00e3o central (Territ\u00f3rio do Norte)", "CST"};
    -+        String DARWIN[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Territ\u00F3rio do Norte)", "CST",
    -+                                        "Fuso Hor\u00E1rio de Ver\u00E3o Central (Territ\u00F3rio do Norte)", "CST"};
    -         String DUBLIN[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT",
    -                                         "Fuso hor\u00e1rio de ver\u00e3o da Irlanda", "IST"};
    -         String EAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Oriental", "EAT",
    -@@ -101,10 +99,10 @@
    -                                      "Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Oriental", "EGST"};
    -         String EST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental", "EST",
    -                                      "Hor\u00e1rio de luz natural oriental", "EDT"};
    --        String EST_NSW[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Nova Gales do Sul)", "EST",
    --                                         "Fuso hor\u00e1rio de ver\u00e3o oriental (Nova Gales do Sul)", "EST"};
    --        String FET[] = new String[] {"Further-eastern European Time", "FET",
    --                                     "Further-eastern European Summer Time", "FEST"};
    -+        String EST_NSW[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul)", "EST",
    -+                                         "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul)", "EST"};
    -+        String FET[] = new String[] {"Hor\u00E1rio do Extremo Leste Europeu (FET)", "FET",
    -+                                     "Fuso Hor\u00E1rio de Ver\u00E3o do Extremo Leste Europeu", "FEST"};
    -         String GHMT[] = new String[] {"Fuso hor\u00e1rio do meridiano de Gana", "GMT",
    -                                       "Fuso hor\u00e1rio de ver\u00e3o de Gana", "GHST"};
    -         String GAMBIER[] =  new String[] {"Fuso hor\u00e1rio de Gambier", "GAMT",
    -@@ -157,8 +155,8 @@
    -                                           "Hor\u00e1rio de luz natural de Pitcairn", "PDT"};
    -         String PKT[] = new String[] {"Fuso hor\u00e1rio do Paquist\u00e3o", "PKT",
    -                                      "Fuso hor\u00e1rio de ver\u00e3o do Paquist\u00e3o", "PKST"};
    --        String PONT[] = new String[] {"Fuso hor\u00e1rio de Pohnpei", "PONT",
    --                                      "Fuso hor\u00e1rio de ver\u00e3o de Pohnpei", "PONST"};
    -+        String PONT[] = new String[] {"Fuso Hor\u00E1rio de Pohnpei", "PONT",
    -+                                      "Fuso Hor\u00E1rio de Ver\u00E3o de Pohnpei", "PONST"};
    -         String PST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Pac\u00edfico", "PST",
    -                                      "Hor\u00e1rio de luz natural do Pac\u00edfico", "PDT"};
    -         String SAMOA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Samoa", "SST",
    -@@ -171,20 +169,20 @@
    -                                      "Fuso hor\u00e1rio de ver\u00e1 de Cingapura", "SGST"};
    -         String SLST[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT",
    -                                       "Fuso hor\u00e1rio de ver\u00e3o de Serra Leoa", "SLST"};
    --        String TASMANIA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Tasm\u00e2nia)", "EST",
    --                                          "Fuso hor\u00e1rio de ver\u00e3o oriental (Tasm\u00e2nia)", "EST"};
    -+        String TASMANIA[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Tasm\u00E2nia)", "EST",
    -+                                          "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Tasm\u00E2nia)", "EST"};
    -         String TMT[] = new String[] {"Fuso hor\u00e1rio do Turcomenist\u00e3o", "TMT",
    -                                      "Fuso hor\u00e1rio de ver\u00e3o do Turcomenist\u00e3o", "TMST"};
    --        String TRUT[] = new String[] {"Fuso hor\u00e1rio de Chuuk", "CHUT",
    --                                      "Fuso hor\u00e1rio de ver\u00e3o de Chuuk", "CHUST"};
    -+        String TRUT[] = new String[] {"Fuso Hor\u00E1rio de Chuuk", "CHUT",
    -+                                      "Fuso Hor\u00E1rio de Ver\u00E3o de Chuuk", "CHUST"};
    -         String ULAT[]= new String[] {"Fuso hor\u00e1rio de Ulan Bator", "ULAT",
    -                                      "Fuso hor\u00e1rio de ver\u00e3o de Ulan Bator", "ULAST"};
    -         String UTC[] = new String[] {"Tempo universal coordenado", "UTC",
    -                                      "Tempo universal coordenado", "UTC"};
    -         String UZT[] = new String[] {"Fuso hor\u00e1rio do Uzbequist\u00e3o", "UZT",
    -                                      "Fuso hor\u00e1rio de ver\u00e3o do Uzbequist\u00e3o", "UZST"};
    --        String VICTORIA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Victoria)", "EST",
    --                                          "Fuso hor\u00e1rio de ver\u00e3o oriental (Victoria)", "EST"};
    -+        String VICTORIA[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Victoria)", "EST",
    -+                                          "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Victoria)", "EST"};
    -         String VLAT[] = new String[] {"Fuso hor\u00e1rio de Vladivostok", "VLAT",
    -                                       "Fuso hor\u00e1rio de ver\u00e3o de Vladivostok", "VLAST"};
    -         String WART[] = new String[] {"Fuso hor\u00e1rio da Argentina Ocidental", "WART",
    -@@ -193,10 +191,10 @@
    -                                      "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica Ocidental", "WAST"};
    -         String WET[] = new String[] {"Fuso hor\u00e1rio da Europa Ocidental", "WET",
    -                                      "Fuso hor\u00e1rio de ver\u00e3o da Europa Ocidental", "WEST"};
    --        String WIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Ocidental", "WIT",
    -+        String WIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Ocidental", "WIB",
    -                                      "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Ocidental", "WIST"};
    --        String WST_AUS[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o ocidental (Austr\u00e1lia)", "WST",
    --                                         "Fuso hor\u00e1rio de ver\u00e3o ocidental (Austr\u00e1lia)", "WST"};
    -+        String WST_AUS[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Ocidental (Austr\u00E1lia)", "WST",
    -+                                         "Fuso Hor\u00E1rio de Ver\u00E3o Ocidental (Austr\u00E1lia)", "WST"};
    -         String WST_SAMOA[] = new String[] {"Fuso hor\u00e1rio de Samoa Ocidental", "WST",
    -                                            "Fuso hor\u00e1rio de ver\u00e3o de Samoa Ocidental", "WSDT"};
    -         String YAKT[] = new String[] {"Fuso hor\u00e1rio de Yakutsk", "YAKT",
    -@@ -308,7 +306,7 @@
    -             {"America/Argentina/Rio_Gallegos", AGT},
    -             {"America/Argentina/Salta", AGT},
    -             {"America/Argentina/San_Juan", AGT},
    --            {"America/Argentina/San_Luis", WART},
    -+            {"America/Argentina/San_Luis", AGT},
    -             {"America/Argentina/Tucuman", AGT},
    -             {"America/Argentina/Ushuaia", AGT},
    -             {"America/Aruba", AST},
    -@@ -401,8 +399,8 @@
    -             {"America/Mendoza", AGT},
    -             {"America/Menominee", CST},
    -             {"America/Merida", CST},
    --            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
    --                                                 "Metlakatla Daylight Time", "MeDT"}},
    -+            {"America/Metlakatla", new String[] {"Hor\u00E1rio Padr\u00E3o de Metlakatla", "MeST",
    -+                                                 "Hor\u00E1rio de Luz Natural de Metlakatla", "MeDT"}},
    -             {"America/Mexico_City", CST},
    -             {"America/Miquelon", new String[] {"Fuso hor\u00e1rio padr\u00e3o de S\u00e3o Pedro e Miquelon", "PMST",
    -                                                "Hor\u00e1rio de luz natural de S\u00e3o Pedro e Miquelon", "PMDT"}},
    -@@ -466,8 +464,8 @@
    -                                                "Fuso hor\u00e1rio de ver\u00e3o de Davis", "DAVST"}},
    -             {"Antarctica/DumontDUrville", new String[] {"Fuso hor\u00e1rio de Dumont-d'Urville", "DDUT",
    -                                                         "Fuso hor\u00e1rio de ver\u00e3o de Dumont-d'Urville", "DDUST"}},
    --            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
    --                                                   "Macquarie Island Summer Time", "MIST"}},
    -+            {"Antarctica/Macquarie", new String[] {"Fuso Hor\u00E1rio da Ilha de Macquarie", "MIST",
    -+                                                   "Fuso Hor\u00E1rio de Ver\u00E3o da Ilha de Macquarie", "MIST"}},
    -             {"Antarctica/Mawson", new String[] {"Fuso hor\u00e1rio de Mawson", "MAWT",
    -                                                 "Fuso hor\u00e1rio de ver\u00e3o de Mawson", "MAWST"}},
    -             {"Antarctica/McMurdo", NZST},
    -@@ -483,7 +481,7 @@
    -             {"Asia/Aden", ARAST},
    -             {"Asia/Almaty", new String[] {"Fuso hor\u00e1rio de Alma-Ata", "ALMT",
    -                                           "Fuso hor\u00e1rio de ver\u00e3o de Alma-Ata", "ALMST"}},
    --            {"Asia/Amman", EET},
    -+            {"Asia/Amman", ARAST},
    -             {"Asia/Anadyr", new String[] {"Fuso hor\u00e1rio de Anadyr", "ANAT",
    -                                           "Fuso hor\u00e1rio de ver\u00e3o de Anadyr", "ANAST"}},
    -             {"Asia/Aqtau", new String[] {"Fuso hor\u00e1rio de Aqtau", "AQTT",
    -@@ -527,7 +525,7 @@
    -                                            "Fuso hor\u00e1rio de ver\u00e3o de Irkutsk", "IRKST"}},
    -             {"Asia/Istanbul", EET},
    -             {"Asia/Jakarta", WIT},
    --            {"Asia/Jayapura", new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Oriental", "EIT",
    -+            {"Asia/Jayapura", new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Oriental", "WIT",
    -                                             "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Oriental", "EIST"}},
    -             {"Asia/Kabul", new String[] {"Fuso hor\u00e1rio do Afeganist\u00e3o", "AFT",
    -                                          "Fuso hor\u00e1rio de ver\u00e3o do Afeganist\u00e3o", "AFST"}},
    -@@ -537,7 +535,8 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    --            {"Asia/Khandyga", YAKT},
    -+            {"Asia/Khandyga", new String[] {"Hor\u00E1rio de Khandyga", "YAKT",
    -+                                            "Hor\u00E1rio de Ver\u00E3o de Khandyga", "YAKST"}},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"Fuso hor\u00e1rio de Krasnoyarsk", "KRAT",
    -                                                "Fuso hor\u00e1rio de ver\u00e3o de Krasnoyarsk", "KRAST"}},
    -@@ -586,7 +585,8 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    --            {"Asia/Ust-Nera", VLAT},
    -+            {"Asia/Ust-Nera", new String[] {"Hor\u00E1rio de Ust-Nera", "VLAT",
    -+                                            "Hor\u00E1rio de Ver\u00E3o de Ust-Nera", "VLAST"}},
    -             {"Asia/Vientiane", ICT},
    -             {"Asia/Vladivostok", VLAT},
    -             {"Asia/Yakutsk", YAKT},
    -@@ -616,8 +616,8 @@
    -             {"Australia/Canberra", EST_NSW},
    -             {"Australia/Currie", EST_NSW},
    -             {"Australia/Darwin", DARWIN},
    --            {"Australia/Eucla", new String[] {"Fuso hor\u00e1rio ocidental central (Austr\u00e1lia)", "CWST",
    --                                              "Fuso hor\u00e1rio de ver\u00e3o ocidental central (Austr\u00e1lia)", "CWST"}},
    -+            {"Australia/Eucla", new String[] {"Fuso Hor\u00E1rio Ocidental Central (Austr\u00E1lia)", "CWST",
    -+                                              "Fuso Hor\u00E1rio de Ver\u00E3o Ocidental Central (Austr\u00E1lia)", "CWST"}},
    -             {"Australia/Hobart", TASMANIA},
    -             {"Australia/LHI", LORD_HOWE},
    -             {"Australia/Lindeman", BRISBANE},
    -diff -r fd7850833158 -r 3d28326a9e5d src/share/classes/sun/util/resources/TimeZoneNames_sv.java
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java	Thu Oct 24 17:14:18 2013 +0400
    -@@ -43,10 +43,8 @@
    - public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
    - 
    -     protected final Object[][] getContents() {
    --        String ACT[] = new String[] {"Acre, normaltid", "ACT",
    --                                     "Acre, sommartid", "ACST"};
    --        String ADELAIDE[] = new String[] {"Central normaltid (S\u00f6dra Australien)", "CST",
    --                                          "Central sommartid (S\u00f6dra Australien)", "CST"};
    -+        String ADELAIDE[] = new String[] {"Central standardtid (Sydaustralien)", "CST",
    -+                                          "Central sommartid (South Australia)", "CST"};
    -         String AGT[] = new String[] {"Argentina, normaltid", "ART",
    -                                      "Argentina, sommartid", "ARST"};
    -         String AKST[] = new String[] {"Alaska, normaltid", "AKST",
    -@@ -61,10 +59,10 @@
    -                                      "Atlantisk sommartid", "ADT"};
    -         String BDT[] = new String[] {"Bangladesh, normaltid", "BDT",
    -                                      "Bangladesh, sommartid", "BDST"};
    --        String BRISBANE[] = new String[] {"\u00d6stlig normaltid (Queensland)", "EST",
    --                                          "\u00d6stlig sommartid (Queensland)", "EST"};
    --        String BROKEN_HILL[] = new String[] {"Central normaltid (S\u00f6dra Australien/Nya Sydwales)", "CST",
    --                                             "Central sommartid (S\u00f6dra Australien/Nya Sydwales)", "CST"};
    -+        String BRISBANE[] = new String[] {"\u00D6stlig standardtid (Queensland)", "EST",
    -+                                          "\u00D6stlig sommartid (Queensland)", "EST"};
    -+        String BROKEN_HILL[] = new String[] {"Central standardtid (Sydaustralien)/New South Wales)", "CST",
    -+                                             "Central sommartid (South Australia/New South Wales)", "CST"};
    -         String BRT[] = new String[] {"Brasilien, normaltid", "BRT",
    -                                      "Brasilien, sommartid", "BRST"};
    -         String BTT[] = new String[] {"Bhutan, normaltid", "BTT",
    -@@ -77,9 +75,9 @@
    -                                        "Chatham, sommartid", "CHADT"};
    -         String ChST[] = new String[] {"Chamorro, normaltid", "ChST",
    -                                       "Chamorro, sommartid", "ChDT"};
    --        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    --                                      "Chuuk Summer Time", "CHUST"};
    --        String CIT[] = new String[] {"Centralindonesisk tid", "CIT",
    -+        String CHUT[] = new String[] {"Chuuk, normaltid", "CHUT",
    -+                                      "Chuuk, sommartid", "CHUST"};
    -+        String CIT[] = new String[] {"Centralindonesisk tid", "WITA",
    -                                      "Centralindonesisk sommartid", "CIST"};
    -         String CLT[] = new String[] {"Chile, normaltid", "CLT",
    -                                      "Chile, sommartid", "CLST"};
    -@@ -89,7 +87,7 @@
    -                                      "Kina, sommartid", "CDT"};
    -         String CUBA[] = new String[] {"Kuba, normaltid", "CST",
    -                                       "Kuba, sommartid", "CDT"};
    --        String DARWIN[] = new String[] {"Central normaltid (Nordterritoriet)", "CST",
    -+        String DARWIN[] = new String[] {"Central standardtid (Nordterritoriet)", "CST",
    -                                         "Central sommartid (Nordterritoriet)", "CST"};
    -         String DUBLIN[] = new String[] {"Greenwichtid", "GMT",
    -                                         "Irland, sommartid", "IST"};
    -@@ -103,10 +101,10 @@
    -                                      "\u00d6stgr\u00f6nl\u00e4ndsk sommartid", "EGST"};
    -         String EST[] = new String[] {"Eastern, normaltid", "EST",
    -                                      "Eastern, sommartid", "EDT"};
    --        String EST_NSW[] = new String[] {"Eastern, normaltid (Nya Sydwales)", "EST",
    --                                         "Eastern, sommartid (Nya Sydwales)", "EST"};
    --        String FET[] = new String[] {"Further-eastern European Time", "FET",
    --                                     "Further-eastern European Summer Time", "FEST"};
    -+        String EST_NSW[] = new String[] {"\u00D6stlig standardtid (New South Wales)", "EST",
    -+                                         "\u00D6stlig sommartid (New South Wales)", "EST"};
    -+        String FET[] = new String[] {"Kaliningradtid", "FET",
    -+                                     "\u00D6steuropeisk sommartid", "FEST"};
    -         String GHMT[] = new String[] {"Ghana, normaltid", "GMT",
    -                                       "Ghana, sommartid", "GHST"};
    -         String GAMBIER[] =  new String[] {"Gambier, normaltid", "GAMT",
    -@@ -159,8 +157,8 @@
    -                                           "Pitcairn, sommartid", "PDT"};
    -         String PKT[] = new String[] {"Pakistan, normaltid", "PKT",
    -                                      "Pakistan, sommartid", "PKST"};
    --        String PONT[] = new String[] {"Pohnpei Time", "PONT",
    --                                      "Pohnpei Summer Time", "PONST"};
    -+        String PONT[] = new String[] {"Pohnpei, normaltid", "PONT",
    -+                                      "Pohnpei, sommartid", "PONST"};
    -         String PST[] = new String[] {"Stilla havet, normaltid", "PST",
    -                                      "Stilla havet, sommartid", "PDT"};
    -         String SAMOA[] = new String[] {"Samoa, normaltid", "SST",
    -@@ -173,8 +171,8 @@
    -                                      "Singapore, sommartid", "SGST"};
    -         String SLST[] = new String[] {"Greenwichtid", "GMT",
    -                                       "Sierra Leone, sommartid", "SLST"};
    --        String TASMANIA[] = new String[] {"Eastern, normaltid (Tasmanien)", "EST",
    --                                          "Eastern, sommartid (Tasmanien)", "EST"};
    -+        String TASMANIA[] = new String[] {"\u00D6stlig standardtid (Tasmania)", "EST",
    -+                                          "\u00D6stlig sommartid (Tasmanien)", "EST"};
    -         String TMT[] = new String[] {"Turkmenistan, normaltid", "TMT",
    -                                      "Turkmenistan, sommartid", "TMST"};
    -         String ULAT[]= new String[] {"Ulaanbaatar, normaltid", "ULAT",
    -@@ -183,8 +181,8 @@
    -                                      "Koordinerad universell tid", "UTC"};
    -         String UZT[] = new String[] {"Uzbekistan, normaltid", "UZT",
    -                                      "Uzbekistan, sommartid", "UZST"};
    --        String VICTORIA[] = new String[] {"\u00d6stlig normaltid (Victoria)", "EST",
    --                                          "\u00d6stlig sommartid (Victoria)", "EST"};
    -+        String VICTORIA[] = new String[] {"\u00D6stlig standardtid (Victoria)", "EST",
    -+                                          "\u00D6stlig sommartid (Victoria)", "EST"};
    -         String VLAT[] = new String[] {"Vladivostok, normaltid", "VLAT",
    -                                       "Vladivostok, sommartid", "VLAST"};
    -         String WART[] = new String[] {"V\u00e4stargentina, normaltid", "WART",
    -@@ -193,10 +191,10 @@
    -                                      "V\u00e4stafrikansk sommartid", "WAST"};
    -         String WET[] = new String[] {"V\u00e4steuropeisk tid", "WET",
    -                                      "V\u00e4steuropeisk sommartid", "WEST"};
    --        String WIT[] = new String[] {"V\u00e4stindonesisk tid", "WIT",
    -+        String WIT[] = new String[] {"V\u00e4stindonesisk tid", "WIB",
    -                                      "V\u00e4stindonesisk sommartid", "WIST"};
    --        String WST_AUS[] = new String[] {"V\u00e4stlig normaltid (Australien)", "WST",
    --                                         "V\u00e4stlig sommartid (Australien)", "WST"};
    -+        String WST_AUS[] = new String[] {"Western Standard Time (Australien)", "WST",
    -+                                         "V\u00E4stlig sommartid (Australien)", "WST"};
    -         String WST_SAMOA[] = new String[] {"V\u00e4stsamoansk tid", "WST",
    -                                            "V\u00e4stsamoansk sommartid", "WSDT"};
    -         String YAKT[] = new String[] {"Jakutsk, normaltid", "YAKT",
    -@@ -308,7 +306,7 @@
    -             {"America/Argentina/Rio_Gallegos", AGT},
    -             {"America/Argentina/Salta", AGT},
    -             {"America/Argentina/San_Juan", AGT},
    --            {"America/Argentina/San_Luis", WART},
    -+            {"America/Argentina/San_Luis", AGT},
    -             {"America/Argentina/Tucuman", AGT},
    -             {"America/Argentina/Ushuaia", AGT},
    -             {"America/Aruba", AST},
    -@@ -401,8 +399,8 @@
    -             {"America/Mendoza", AGT},
    -             {"America/Menominee", CST},
    -             {"America/Merida", CST},
    --            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
    --                                                 "Metlakatla Daylight Time", "MeDT"}},
    -+            {"America/Metlakatla", new String[] {"Metlakatla, normaltid", "MeST",
    -+                                                 "Metlakatla, sommartid", "MeDT"}},
    -             {"America/Mexico_City", CST},
    -             {"America/Miquelon", new String[] {"Saint-Pierre-et-Miquelon, normaltid", "PMST",
    -                                                "Saint-Pierre-et-Miquelon, sommartid", "PMDT"}},
    -@@ -466,8 +464,8 @@
    -                                                "Davis, sommartid", "DAVST"}},
    -             {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville, normaltid", "DDUT",
    -                                                         "Dumont-d'Urville, sommartid", "DDUST"}},
    --            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
    --                                                   "Macquarie Island Summer Time", "MIST"}},
    -+            {"Antarctica/Macquarie", new String[] {"Macquarie\u00F6n, normaltid", "MIST",
    -+                                                   "Macquarie\u00F6n, sommartid", "MIST"}},
    -             {"Antarctica/Mawson", new String[] {"Mawson, normaltid", "MAWT",
    -                                                 "Mawson, sommartid", "MAWST"}},
    -             {"Antarctica/McMurdo", NZST},
    -@@ -483,7 +481,7 @@
    -             {"Asia/Aden", ARAST},
    -             {"Asia/Almaty", new String[] {"Alma-Ata, normaltid", "ALMT",
    -                                           "Alma-Ata, sommartid", "ALMST"}},
    --            {"Asia/Amman", EET},
    -+            {"Asia/Amman", ARAST},
    -             {"Asia/Anadyr", new String[] {"Anadyr, normaltid", "ANAT",
    -                                           "Anadyr, sommartid", "ANAST"}},
    -             {"Asia/Aqtau", new String[] {"Aqtau, normaltid", "AQTT",
    -@@ -527,7 +525,7 @@
    -                                            "Irkutsk, sommartid", "IRKST"}},
    -             {"Asia/Istanbul", EET},
    -             {"Asia/Jakarta", WIT},
    --            {"Asia/Jayapura", new String[] {"\u00d6stindonesisk tid", "EIT",
    -+            {"Asia/Jayapura", new String[] {"\u00d6stindonesisk tid", "WIT",
    -                                             "\u00d6stindonesisk sommartid", "EIST"}},
    -             {"Asia/Kabul", new String[] {"Afghanistan, normaltid", "AFT",
    -                                          "Afghanistan, sommartid", "AFST"}},
    -@@ -537,7 +535,8 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    --            {"Asia/Khandyga", YAKT},
    -+            {"Asia/Khandyga", new String[] {"Khandyga, normaltid", "YAKT",
    -+                                            "Khandyga, sommartid", "YAKST"}},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"Krasnojarsk, normaltid", "KRAT",
    -                                                "Krasnojarsk, sommartid", "KRAST"}},
    -@@ -586,7 +585,8 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    --            {"Asia/Ust-Nera", VLAT},
    -+            {"Asia/Ust-Nera", new String[] {"Ust-Nera, normaltid", "VLAT",
    -+                                            "Ust-Nera, sommartid", "VLAST"}},
    -             {"Asia/Vientiane", ICT},
    -             {"Asia/Vladivostok", VLAT},
    -             {"Asia/Yakutsk", YAKT},
    -@@ -616,8 +616,8 @@
    -             {"Australia/Canberra", EST_NSW},
    -             {"Australia/Currie", EST_NSW},
    -             {"Australia/Darwin", DARWIN},
    --            {"Australia/Eucla", new String[] {"Central v\u00e4stlig normaltid (Australien)", "CWST",
    --                                              "Central v\u00e4stlig sommartid (Australien)", "CWST"}},
    -+            {"Australia/Eucla", new String[] {"Central v\u00E4stlig normaltid (Australien)", "CWST",
    -+                                              "Central v\u00E4stlig sommartid (Australien)", "CWST"}},
    -             {"Australia/Hobart", TASMANIA},
    -             {"Australia/LHI", LORD_HOWE},
    -             {"Australia/Lindeman", BRISBANE},
    -diff -r fd7850833158 -r 3d28326a9e5d src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java	Thu Oct 24 17:14:18 2013 +0400
    -@@ -43,10 +43,8 @@
    - public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
    - 
    -     protected final Object[][] getContents() {
    --        String ACT[] = new String[] {"Acre \u65f6\u95f4", "ACT",
    --                                     "Acre \u590f\u4ee4\u65f6", "ACST"};
    --        String ADELAIDE[] = new String[] {"\u4e2d\u592e\u6807\u51c6\u65f6\u95f4\uff08\u5357\u6fb3\u5927\u5229\u4e9a\uff09", "CST",
    --                                          "\u4e2d\u592e\u590f\u4ee4\u65f6\uff08\u5357\u6fb3\u5927\u5229\u4e9a\uff09", "CST"};
    -+        String ADELAIDE[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A)", "CST",
    -+                                          "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A)", "CST"};
    -         String AGT[] = new String[] {"\u963f\u6839\u5ef7\u65f6\u95f4", "ART",
    -                                      "\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "ARST"};
    -         String AKST[] = new String[] {"\u963f\u62c9\u65af\u52a0\u6807\u51c6\u65f6\u95f4", "AKST",
    -@@ -61,10 +59,10 @@
    -                                      "\u5927\u897f\u6d0b\u590f\u4ee4\u65f6", "ADT"};
    -         String BDT[] = new String[] {"\u5b5f\u52a0\u62c9\u65f6\u95f4", "BDT",
    -                                      "\u5b5f\u52a0\u62c9\u590f\u4ee4\u65f6", "BDST"};
    --        String BRISBANE[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u6606\u58eb\u5170\uff09", "EST",
    --                                          "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u6606\u58eb\u5170\uff09", "EST"};
    --        String BROKEN_HILL[] = new String[] {"\u4e2d\u592e\u6807\u51c6\u65f6\u95f4\uff08\u5357\u6fb3\u5927\u5229\u4e9a/\u65b0\u5357\u5a01\u5c14\u65af\uff09", "CST",
    --                                             "\u4e2d\u592e\u590f\u4ee4\u65f6\uff08\u5357\u6fb3\u5927\u5229\u4e9a/\u65b0\u5357\u5a01\u5c14\u65af\uff09", "CST"};
    -+        String BRISBANE[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u6606\u58EB\u5170)", "EST",
    -+                                          "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u6606\u58EB\u5170)", "EST"};
    -+        String BROKEN_HILL[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "CST",
    -+                                             "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "CST"};
    -         String BRT[] = new String[] {"\u5df4\u897f\u5229\u4e9a\u65f6\u95f4", "BRT",
    -                                      "\u5df4\u897f\u5229\u4e9a\u590f\u4ee4\u65f6", "BRST"};
    -         String BTT[] = new String[] {"\u4e0d\u4e39\u65f6\u95f4", "BTT",
    -@@ -77,9 +75,9 @@
    -                                        "\u67e5\u8428\u59c6\u590f\u4ee4\u65f6", "CHADT"};
    -         String ChST[] = new String[] {"Chamorro \u6807\u51c6\u65f6\u95f4", "ChST",
    -                                       "Chamorro \u590f\u4ee4\u65f6", "ChDT"};
    --        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    --                                      "Chuuk Summer Time", "CHUST"};
    --        String CIT[] = new String[] {"\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "CIT",
    -+        String CHUT[] = new String[] {"\u4E18\u514B\u65F6\u95F4", "CHUT",
    -+                                      "\u4E18\u514B\u590F\u4EE4\u65F6", "CHUST"};
    -+        String CIT[] = new String[] {"\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "WITA",
    -                                      "\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "CIST"};
    -         String CLT[] = new String[] {"\u667a\u5229\u65f6\u95f4", "CLT",
    -                                      "\u667a\u5229\u590f\u4ee4\u65f6", "CLST"};
    -@@ -89,8 +87,8 @@
    -                                      "\u4e2d\u56fd\u590f\u4ee4\u65f6", "CDT"};
    -         String CUBA[] = new String[] {"\u53e4\u5df4\u6807\u51c6\u65f6\u95f4", "CST",
    -                                       "\u53e4\u5df4\u590f\u4ee4\u65f6", "CDT"};
    --        String DARWIN[] = new String[] {"\u4e2d\u592e\u6807\u51c6\u65f6\u95f4\uff08\u5317\u9886\u5730\uff09", "CST",
    --                                        "\u4e2d\u592e\u590f\u4ee4\u65f6\uff08\u5317\u9886\u5730\uff09", "CST"};
    -+        String DARWIN[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5317\u9886\u5730)", "CST",
    -+                                        "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5317\u9886\u5730)", "CST"};
    -         String DUBLIN[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u65f6\u95f4", "GMT",
    -                                         "\u7231\u5c14\u5170\u590f\u4ee4\u65f6", "IST"};
    -         String EAT[] = new String[] {"\u4e1c\u975e\u65f6\u95f4", "EAT",
    -@@ -103,10 +101,10 @@
    -                                      "\u4e1c\u683c\u6797\u5c9b\u590f\u4ee4\u65f6", "EGST"};
    -         String EST[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4", "EST",
    -                                      "\u4e1c\u90e8\u590f\u4ee4\u65f6", "EDT"};
    --        String EST_NSW[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u65b0\u5357\u5a01\u5c14\u65af\uff09", "EST",
    --                                         "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u65b0\u5357\u5a01\u5c14\u65af\uff09", "EST"};
    --        String FET[] = new String[] {"Further-eastern European Time", "FET",
    --                                     "Further-eastern European Summer Time", "FEST"};
    -+        String EST_NSW[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)", "EST",
    -+                                         "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF)", "EST"};
    -+        String FET[] = new String[] {"\u8FDC\u4E1C\u6B27\u65F6\u95F4", "FET",
    -+                                     "\u8FDC\u4E1C\u6B27\u590F\u4EE4\u65F6", "FEST"};
    -         String GHMT[] = new String[] {"\u52a0\u7eb3\u65f6\u95f4", "GMT",
    -                                      "\u52a0\u7eb3\u590f\u4ee4\u65f6", "GHST"};
    -         String GAMBIER[] =  new String[] {"\u5188\u6bd4\u4e9a\u65f6\u95f4", "GAMT",
    -@@ -159,8 +157,8 @@
    -                                           "\u76ae\u7279\u5eb7\u5c9b\u590f\u4ee4\u65f6", "PDT"};
    -         String PKT[] = new String[] {"\u5df4\u57fa\u65af\u5766\u65f6\u95f4", "PKT",
    -                                      "\u5df4\u57fa\u65af\u5766\u590f\u4ee4\u65f6", "PKST"};
    --        String PONT[] = new String[] {"Pohnpei Time", "PONT",
    --                                      "Pohnpei Summer Time", "PONST"};
    -+        String PONT[] = new String[] {"\u6CE2\u7EB3\u4F69\u65F6\u95F4", "PONT",
    -+                                      "\u6CE2\u7EB3\u4F69\u590F\u4EE4\u65F6", "PONST"};
    -         String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4", "PST",
    -                                      "\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6", "PDT"};
    -         String SAMOA[] = new String[] {"\u8428\u6469\u4e9a\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "SST",
    -@@ -173,8 +171,8 @@
    -                                      "\u65b0\u52a0\u5761\u590f\u4ee4\u65f6", "SGST"};
    -         String SLST[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u65f6\u95f4", "GMT",
    -                                       "\u585e\u62c9\u5229\u6602\u590f\u4ee4\u65f6", "SLST"};
    --        String TASMANIA[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u5854\u65af\u9a6c\u5c3c\u4e9a\uff09", "EST",
    --                                          "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u5854\u65af\u9a6c\u5c3c\u4e9a\uff09", "EST"};
    -+        String TASMANIA[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "EST",
    -+                                          "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "EST"};
    -         String TMT[] = new String[] {"\u571f\u5e93\u66fc\u65f6\u95f4", "TMT",
    -                                      "\u571f\u5e93\u66fc\u590f\u4ee4\u65f6", "TMST"};
    -         String ULAT[]= new String[] {"\u5e93\u4f26\u65f6\u95f4", "ULAT",
    -@@ -183,8 +181,8 @@
    -                                      "\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC"};
    -         String UZT[] = new String[] {"\u4e4c\u5179\u522b\u514b\u65af\u5766\u65f6\u95f4", "UZT",
    -                                      "\u4e4c\u5179\u522b\u514b\u65af\u5766\u590f\u4ee4\u65f6", "UZST"};
    --        String VICTORIA[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST",
    --                                          "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST"};
    -+        String VICTORIA[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A)", "EST",
    -+                                          "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u7EF4\u591A\u5229\u4E9A)", "EST"};
    -         String VLAT[] = new String[] {"\u6d77\u53c2\u5d34\u65f6\u95f4", "VLAT",
    -                                       "\u6d77\u53c2\u5d34\u590f\u4ee4\u65f6", "VLAST"};
    -         String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u65f6\u95f4", "WART",
    -@@ -193,10 +191,10 @@
    -                                      "\u897f\u975e\u590f\u4ee4\u65f6", "WAST"};
    -         String WET[] = new String[] {"\u897f\u6b27\u65f6\u95f4", "WET",
    -                                      "\u897f\u6b27\u590f\u4ee4\u65f6", "WEST"};
    --        String WIT[] = new String[] {"\u897f\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "WIT",
    -+        String WIT[] = new String[] {"\u897f\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "WIB",
    -                                      "\u897f\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "WIST"};
    --        String WST_AUS[] = new String[] {"\u897f\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "WST",
    --                                         "\u897f\u90e8\u590f\u4ee4\u65f6\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "WST"};
    -+        String WST_AUS[] = new String[] {"\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "WST",
    -+                                         "\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)", "WST"};
    -         String WST_SAMOA[] = new String[] {"\u897f\u8428\u6469\u4e9a\u65f6\u95f4", "WST",
    -                                            "\u897f\u8428\u6469\u4e9a\u590f\u4ee4\u65f6", "WSDT"};
    -         String YAKT[] = new String[] {"\u4e9a\u5e93\u6b21\u514b\u65f6\u95f4", "YAKT",
    -@@ -308,7 +306,7 @@
    -             {"America/Argentina/Rio_Gallegos", AGT},
    -             {"America/Argentina/Salta", AGT},
    -             {"America/Argentina/San_Juan", AGT},
    --            {"America/Argentina/San_Luis", WART},
    -+            {"America/Argentina/San_Luis", AGT},
    -             {"America/Argentina/Tucuman", AGT},
    -             {"America/Argentina/Ushuaia", AGT},
    -             {"America/Aruba", AST},
    -@@ -401,8 +399,8 @@
    -             {"America/Mendoza", AGT},
    -             {"America/Menominee", CST},
    -             {"America/Merida", CST},
    --            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
    --                                                 "Metlakatla Daylight Time", "MeDT"}},
    -+            {"America/Metlakatla", new String[] {"\u6885\u7279\u62C9\u5361\u7279\u62C9\u6807\u51C6\u65F6\u95F4", "MeST",
    -+                                                 "\u6885\u7279\u62C9\u5361\u7279\u62C9\u590F\u4EE4\u65F6", "MeDT"}},
    -             {"America/Mexico_City", CST},
    -             {"America/Miquelon", new String[] {"\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u6807\u51c6\u65f6\u95f4", "PMST",
    -                                                "\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u590f\u4ee4\u65f6", "PMDT"}},
    -@@ -466,8 +464,8 @@
    -                                                "\u6234\u7ef4\u65af\u590f\u4ee4\u65f6", "DAVST"}},
    -             {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u65f6\u95f4", "DDUT",
    -                                                         "Dumont-d'Urville \u590f\u4ee4\u65f6", "DDUST"}},
    --            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
    --                                                   "Macquarie Island Summer Time", "MIST"}},
    -+            {"Antarctica/Macquarie", new String[] {"\u9EA6\u5938\u91CC\u5C9B\u65F6\u95F4", "MIST",
    -+                                                   "\u9EA6\u5938\u91CC\u5C9B\u590F\u4EE4\u65F6", "MIST"}},
    -             {"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u65f6\u95f4", "MAWT",
    -                                                 "\u83ab\u68ee\u590f\u4ee4\u65f6", "MAWST"}},
    -             {"Antarctica/McMurdo", NZST},
    -@@ -483,7 +481,7 @@
    -             {"Asia/Aden", ARAST},
    -             {"Asia/Almaty", new String[] {"Alma-Ata \u65f6\u95f4", "ALMT",
    -                                           "Alma-Ata \u590f\u4ee4\u65f6", "ALMST"}},
    --            {"Asia/Amman", EET},
    -+            {"Asia/Amman", ARAST},
    -             {"Asia/Anadyr", new String[] {"\u963f\u90a3\u5e95\u6cb3\u65f6\u95f4", "ANAT",
    -                                           "\u963f\u90a3\u5e95\u6cb3\u590f\u4ee4\u65f6", "ANAST"}},
    -             {"Asia/Aqtau", new String[] {"Aqtau \u65f6\u95f4", "AQTT",
    -@@ -527,7 +525,7 @@
    -                                            "\u4f0a\u5c14\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "IRKST"}},
    -             {"Asia/Istanbul", EET},
    -             {"Asia/Jakarta", WIT},
    --            {"Asia/Jayapura", new String[] {"\u4e1c\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "EIT",
    -+            {"Asia/Jayapura", new String[] {"\u4e1c\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "WIT",
    -                                             "\u4e1c\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "EIST"}},
    -             {"Asia/Kabul", new String[] {"\u963f\u5bcc\u6c57\u65f6\u95f4", "AFT",
    -                                          "\u963f\u5bcc\u6c57\u590f\u4ee4\u65f6", "AFST"}},
    -@@ -537,7 +535,8 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    --            {"Asia/Khandyga", YAKT},
    -+            {"Asia/Khandyga", new String[] {"\u6C49\u5FB7\u52A0\u65F6\u95F4", "YAKT",
    -+                                            "\u6C49\u5FB7\u52A0\u590F\u4EE4\u65F6", "YAKST"}},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u65f6\u95f4", "KRAT",
    -                                                "\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u590f\u4ee4\u65f6", "KRAST"}},
    -@@ -586,7 +585,8 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    --            {"Asia/Ust-Nera", VLAT},
    -+            {"Asia/Ust-Nera", new String[] {"\u4E4C\u65AF\u5B63\u6D85\u62C9\u65F6\u95F4", "VLAT",
    -+                                            "\u4E4C\u65AF\u5B63\u6D85\u62C9\u590F\u4EE4\u65F6", "VLAST"}},
    -             {"Asia/Vientiane", ICT},
    -             {"Asia/Vladivostok", VLAT},
    -             {"Asia/Yakutsk", YAKT},
    -@@ -616,8 +616,8 @@
    -             {"Australia/Canberra", EST_NSW},
    -             {"Australia/Currie", EST_NSW},
    -             {"Australia/Darwin", DARWIN},
    --            {"Australia/Eucla", new String[] {"\u4e2d\u897f\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "CWST",
    --                                              "\u4e2d\u897f\u90e8\u590f\u4ee4\u65f6\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "CWST"}},
    -+            {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "CWST",
    -+                                              "\u4E2D\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)", "CWST"}},
    -             {"Australia/Hobart", TASMANIA},
    -             {"Australia/LHI", LORD_HOWE},
    -             {"Australia/Lindeman", BRISBANE},
    -diff -r fd7850833158 -r 3d28326a9e5d src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
    ---- openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java	Mon Oct 28 20:26:05 2013 +0400
    -+++ openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java	Thu Oct 24 17:14:18 2013 +0400
    -@@ -43,10 +43,8 @@
    - public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
    - 
    -     protected final Object[][] getContents() {
    --        String ACT[] = new String[] {"Acre \u6642\u9593", "ACT",
    --                                     "Acre \u590f\u4ee4\u6642\u9593", "ACST"};
    --        String ADELAIDE[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e\u5357\u5340)", "CST",
    --                                          "\u4e2d\u90e8\u590f\u4ee4\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e\u5357\u5340)", "CST"};
    -+        String ADELAIDE[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8)", "CST",
    -+                                          "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340)", "CST"};
    -         String AGT[] = new String[] {"\u963f\u6839\u5ef7\u6642\u9593", "ART",
    -                                      "\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "ARST"};
    -         String AKST[] = new String[] {"\u963f\u62c9\u65af\u52a0\u6a19\u6e96\u6642\u9593", "AKST",
    -@@ -61,10 +59,10 @@
    -                                      "\u5927\u897f\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ADT"};
    -         String BDT[] = new String[] {"\u5b5f\u52a0\u62c9\u6642\u9593", "BDT",
    -                                      "\u5b5f\u52a0\u62c9\u590f\u4ee4\u6642\u9593", "BDST"};
    --        String BRISBANE[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642\u9593 (\u6606\u58eb\u862d)", "EST",
    --                                          "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u6606\u58eb\u862d)", "EST"};
    --        String BROKEN_HILL[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e\u5357\u5340/\u65b0\u5357\u5a01\u723e\u65af)", "CST",
    --                                             "\u4e2d\u90e8\u590f\u4ee4\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e\u5357\u5340/\u65b0\u5357\u5a01\u723e\u65af)", "CST"};
    -+        String BRISBANE[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u6606\u58EB\u862D)", "EST",
    -+                                          "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u6606\u58EB\u862D)", "EST"};
    -+        String BROKEN_HILL[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)", "CST",
    -+                                             "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)", "CST"};
    -         String BRT[] = new String[] {"\u5df4\u897f\u5229\u4e9e\u6642\u9593", "BRT",
    -                                      "\u5df4\u897f\u5229\u4e9e\u590f\u4ee4\u6642\u9593", "BRST"};
    -         String BTT[] = new String[] {"\u4e0d\u4e39\u6642\u9593", "BTT",
    -@@ -77,9 +75,9 @@
    -                                        "\u67e5\u5766\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CHADT"};
    -         String ChST[] = new String[] {"\u67e5\u83ab\u6d1b\u6a19\u6e96\u6642\u9593", "ChST",
    -                                      "\u67e5\u83ab\u6d1b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ChDT"};
    --        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
    --                                      "Chuuk Summer Time", "CHUST"};
    --        String CIT[] = new String[] {"\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "CIT",
    -+        String CHUT[] = new String[] {"\u695A\u514B\u6642\u9593", "CHUT",
    -+                                      "\u695A\u514B\u590F\u4EE4\u6642\u9593", "CHUST"};
    -+        String CIT[] = new String[] {"\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "WITA",
    -                                      "\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u590f\u4ee4\u6642\u9593", "CIST"};
    -         String CLT[] = new String[] {"\u667a\u5229\u6642\u9593", "CLT",
    -                                      "\u667a\u5229\u590f\u4ee4\u6642\u9593", "CLST"};
    -@@ -89,8 +87,8 @@
    -                                      "\u4e2d\u570b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"};
    -         String CUBA[] = new String[] {"\u53e4\u5df4\u6a19\u6e96\u6642\u9593", "CST",
    -                                       "\u53e4\u5df4\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"};
    --        String DARWIN[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642\u9593 (\u5317\u90e8\u5404\u5730\u5340)", "CST",
    --                                        "\u4e2d\u90e8\u590f\u4ee4\u6642\u9593 (\u5317\u90e8\u5404\u5730\u5340)", "CST"};
    -+        String DARWIN[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)", "CST",
    -+                                        "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)", "CST"};
    -         String DUBLIN[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u5e73\u5747\u6642\u9593", "GMT",
    -                                         "\u611b\u723e\u862d\u590f\u4ee4\u6642\u9593", "IST"};
    -         String EAT[] = new String[] {"\u6771\u975e\u6642\u9593", "EAT",
    -@@ -103,10 +101,10 @@
    -                                      "\u6771\u683c\u6797\u5cf6\u590f\u4ee4\u6642\u9593", "EGST"};
    -         String EST[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593", "EST",
    -                                      "\u6771\u65b9\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "EDT"};
    --        String EST_NSW[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593 (\u65b0\u5357\u5a01\u723e\u65af)", "EST",
    --                                         "\u6771\u65b9\u590f\u4ee4\u6642\u9593 (\u65b0\u5357\u5a01\u723e\u65af)", "EST"};
    --        String FET[] = new String[] {"Further-eastern European Time", "FET",
    --                                     "Further-eastern European Summer Time", "FEST"};
    -+        String EST_NSW[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "EST",
    -+                                         "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "EST"};
    -+        String FET[] = new String[] {"\u6771\u6B50\u5167\u9678\u6642\u9593", "FET",
    -+                                     "\u6771\u6B50\u5167\u9678\u590F\u4EE4\u6642\u9593", "FEST"};
    -         String GHMT[] = new String[] {"\u8fe6\u7d0d\u5e73\u5747\u6642\u9593", "GMT",
    -                                       "\u8fe6\u7d0d\u590f\u4ee4\u6642\u9593", "GHST"};
    -         String GAMBIER[] =  new String[] {"\u7518\u6bd4\u723e\u6642\u9593", "GAMT",
    -@@ -159,8 +157,8 @@
    -                                         "\u76ae\u7279\u5eb7\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"};
    -         String PKT[] = new String[] {"\u5df4\u57fa\u65af\u5766\u6642\u9593", "PKT",
    -                                      "\u5df4\u57fa\u65af\u5766\u590f\u4ee4\u6642\u9593", "PKST"};
    --        String PONT[] = new String[] {"Pohnpei Time", "PONT",
    --                                      "Pohnpei Summer Time", "PONST"};
    -+        String PONT[] = new String[] {"\u6CE2\u7D0D\u4F69\u6642\u9593", "PONT",
    -+                                      "\u6CE2\u7D0D\u4F69\u590F\u4EE4\u6642\u9593", "PONST"};
    -         String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642\u9593", "PST",
    -                                      "\u592a\u5e73\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"};
    -         String SAMOA[] = new String[] {"\u85a9\u6469\u4e9e\u6a19\u6e96\u6642\u9593", "SST",
    -@@ -173,8 +171,8 @@
    -                                      "\u65b0\u52a0\u5761\u590f\u4ee4\u6642\u9593", "SGST"};
    -         String SLST[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u5e73\u5747\u6642\u9593", "GMT",
    -                                       "\u7345\u5b50\u5c71\u590f\u4ee4\u6642\u9593", "SLST"};
    --        String TASMANIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642\u9593 (\u5854\u65af\u6885\u5c3c\u4e9e\u5cf6)", "EST",
    --                                          "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u5854\u65af\u6885\u5c3c\u4e9e\u5cf6)", "EST"};
    -+        String TASMANIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)", "EST",
    -+                                          "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)", "EST"};
    -         String TMT[] = new String[] {"\u571f\u5eab\u66fc\u6642\u9593", "TMT",
    -                                      "\u571f\u5eab\u66fc\u590f\u4ee4\u6642\u9593", "TMST"};
    -         String ULAT[]= new String[] {"\u5eab\u502b\u6642\u9593", "ULAT",
    -@@ -183,8 +181,8 @@
    -                                      "\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC"};
    -         String UZT[] = new String[] {"\u70cf\u8332\u5225\u514b\u65af\u5766\u6642\u9593", "UZT",
    -                                      "\u70cf\u8332\u5225\u514b\u65af\u5766\u590f\u4ee4\u6642\u9593", "UZST"};
    --        String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST",
    --                                          "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST"};
    -+        String VICTORIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)", "EST",
    -+                                          "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)", "EST"};
    -         String VLAT[] = new String[] {"\u6d77\u53c3\u5d34\u6642\u9593", "VLAT",
    -                                       "\u6d77\u53c3\u5d34\u590f\u4ee4\u6642\u9593", "VLAST"};
    -         String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u6642\u9593", "WART",
    -@@ -193,10 +191,10 @@
    -                                      "\u897f\u975e\u590f\u4ee4\u6642\u9593", "WAST"};
    -         String WET[] = new String[] {"\u897f\u6b50\u6642\u9593", "WET",
    -                                      "\u897f\u6b50\u590f\u4ee4\u6642\u9593", "WEST"};
    --        String WIT[] = new String[] {"\u897f\u5370\u5c3c\u6642\u9593", "WIT",
    -+        String WIT[] = new String[] {"\u897f\u5370\u5c3c\u6642\u9593", "WIB",
    -                                      "\u897f\u5370\u5c3c\u590f\u4ee4\u6642\u9593", "WIST"};
    --        String WST_AUS[] = new String[] {"\u897f\u65b9\u6a19\u6e96\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "WST",
    --                                         "\u897f\u65b9\u590f\u4ee4\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "WST"};
    -+        String WST_AUS[] = new String[] {"\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "WST",
    -+                                         "\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "WST"};
    -         String WST_SAMOA[] = new String[] {"\u897f\u85a9\u6469\u4e9e\u6642\u9593", "WST",
    -                                            "\u897f\u85a9\u6469\u4e9e\u590f\u4ee4\u6642\u9593", "WSDT"};
    -         String YAKT[] = new String[] {"\u4e9e\u5eab\u6b21\u514b\u6642\u9593", "YAKT",
    -@@ -308,7 +306,7 @@
    -             {"America/Argentina/Rio_Gallegos", AGT},
    -             {"America/Argentina/Salta", AGT},
    -             {"America/Argentina/San_Juan", AGT},
    --            {"America/Argentina/San_Luis", WART},
    -+            {"America/Argentina/San_Luis", AGT},
    -             {"America/Argentina/Tucuman", AGT},
    -             {"America/Argentina/Ushuaia", AGT},
    -             {"America/Aruba", AST},
    -@@ -401,8 +399,8 @@
    -             {"America/Mendoza", AGT},
    -             {"America/Menominee", CST},
    -             {"America/Merida", CST},
    --            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
    --                                                 "Metlakatla Daylight Time", "MeDT"}},
    -+            {"America/Metlakatla", new String[] {"\u6885\u7279\u62C9\u5361\u7279\u62C9\u6A19\u6E96\u6642\u9593", "MeST",
    -+                                                 "\u6885\u7279\u62C9\u5361\u7279\u62C9\u65E5\u5149\u7BC0\u7D04\u6642\u9593", "MeDT"}},
    -             {"America/Mexico_City", CST},
    -             {"America/Miquelon", new String[] {"\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u6a19\u6e96\u6642\u9593", "PMST",
    -                                                "\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PMDT"}},
    -@@ -466,8 +464,8 @@
    -                                                "\u81fa\u7dad\u65af\u590f\u4ee4\u6642\u9593", "DAVST"}},
    -             {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u6642\u9593", "DDUT",
    -                                                         "Dumont-d'Urville \u590f\u4ee4\u6642\u9593", "DDUST"}},
    --            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
    --                                                   "Macquarie Island Summer Time", "MIST"}},
    -+            {"Antarctica/Macquarie", new String[] {"\u9EA5\u5938\u5229\u5CF6\u6642\u9593", "MIST",
    -+                                                   "\u9EA5\u5938\u5229\u5CF6\u590F\u4EE4\u6642\u9593", "MIST"}},
    -             {"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u6642\u9593", "MAWT",
    -                                                 "\u83ab\u68ee\u590f\u4ee4\u6642\u9593", "MAWST"}},
    -             {"Antarctica/McMurdo", NZST},
    -@@ -483,7 +481,7 @@
    -             {"Asia/Aden", ARAST},
    -             {"Asia/Almaty", new String[] {"Alma-Ata \u6642\u9593", "ALMT",
    -                                           "Alma-Ata \u590f\u4ee4\u6642\u9593", "ALMST"}},
    --            {"Asia/Amman", EET},
    -+            {"Asia/Amman", ARAST},
    -             {"Asia/Anadyr", new String[] {"\u963f\u90a3\u5e95\u6cb3\u6642\u9593", "ANAT",
    -                                           "\u963f\u90a3\u5e95\u6cb3\u590f\u4ee4\u6642\u9593", "ANAST"}},
    -             {"Asia/Aqtau", new String[] {"Aqtau \u6642\u9593", "AQTT",
    -@@ -527,7 +525,7 @@
    -                                            "Irkutsk \u590f\u4ee4\u6642\u9593", "IRKST"}},
    -             {"Asia/Istanbul", EET},
    -             {"Asia/Jakarta", WIT},
    --            {"Asia/Jayapura", new String[] {"\u6771\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "EIT",
    -+            {"Asia/Jayapura", new String[] {"\u6771\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "WIT",
    -                                             "\u6771\u5370\u5ea6\u5c3c\u897f\u4e9e\u590f\u65e5\u6642\u9593", "EIST"}},
    -             {"Asia/Kabul", new String[] {"\u963f\u5bcc\u6c57\u6642\u9593", "AFT",
    -                                          "\u963f\u5bcc\u6c57\u590f\u4ee4\u6642\u9593", "AFST"}},
    -@@ -537,7 +535,8 @@
    -             {"Asia/Kashgar", CTT},
    -             {"Asia/Kathmandu", NPT},
    -             {"Asia/Katmandu", NPT},
    --            {"Asia/Khandyga", YAKT},
    -+            {"Asia/Khandyga", new String[] {"\u6F22\u5730\u52A0 (Khandyga) \u6642\u9593", "YAKT",
    -+                                            "\u6F22\u5730\u52A0 (Khandyga) \u590F\u4EE4\u6642\u9593", "YAKST"}},
    -             {"Asia/Kolkata", IST},
    -             {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u6642\u9593", "KRAT",
    -                                                "\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u590f\u4ee4\u6642\u9593", "KRAST"}},
    -@@ -587,7 +586,8 @@
    -             {"Asia/Ulaanbaatar", ULAT},
    -             {"Asia/Ulan_Bator", ULAT},
    -             {"Asia/Urumqi", CTT},
    --            {"Asia/Ust-Nera", VLAT},
    -+            {"Asia/Ust-Nera", new String[] {"\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u6642\u9593", "VLAT",
    -+                                            "\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u590F\u4EE4\u6642\u9593", "VLAST"}},
    -             {"Asia/Vientiane", ICT},
    -             {"Asia/Vladivostok", VLAT},
    -             {"Asia/Yakutsk", YAKT},
    -@@ -617,8 +617,8 @@
    -             {"Australia/Canberra", EST_NSW},
    -             {"Australia/Currie", EST_NSW},
    -             {"Australia/Darwin", DARWIN},
    --            {"Australia/Eucla", new String[] {"\u4e2d\u897f\u90e8\u6a19\u6e96\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "CWST",
    --                                              "\u4e2d\u897f\u90e8\u65e5\u5149\u7bc0\u7d04\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "CWST"}},
    -+            {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "CWST",
    -+                                              "\u4E2D\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "CWST"}},
    -             {"Australia/Hobart", TASMANIA},
    -             {"Australia/LHI", LORD_HOWE},
    -             {"Australia/Lindeman", BRISBANE},
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/8028623-pr2177-hash_code_mismatch_for_extended_characters.patch openjdk-6-6b34-1.13.6/patches/openjdk/8028623-pr2177-hash_code_mismatch_for_extended_characters.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/8028623-pr2177-hash_code_mismatch_for_extended_characters.patch	1970-01-01 00:00:00.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/8028623-pr2177-hash_code_mismatch_for_extended_characters.patch	2015-01-20 09:12:43.000000000 +0000
    @@ -0,0 +1,106 @@
    +# HG changeset patch
    +# User kevinw
    +# Date 1393238800 0
    +#      Mon Feb 24 10:46:40 2014 +0000
    +# Node ID 7a4b0596c5395b5836faee96923b83444cc8a266
    +# Parent  cdd84db3f8331071237232f532705ed8e2de4048
    +8028623, PR2177, RH1168693: SA: hash codes in SymbolTable mismatching java_lang_String::hash_code for extended characters.
    +Reviewed-by: sla, dsamersoff
    +
    +diff -r cdd84db3f833 -r 7a4b0596c539 agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java
    +--- openjdk/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java	Wed Nov 05 02:26:35 2014 +0000
    ++++ openjdk/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java	Mon Feb 24 10:46:40 2014 +0000
    +@@ -1,5 +1,5 @@
    + /*
    +- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
    ++ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
    +  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    +  *
    +  * This code is free software; you can redistribute it and/or modify it
    +@@ -61,8 +61,9 @@
    +     long h = 0;
    +     int s = 0;
    +     int len = buf.length;
    ++    // Emulate the unsigned int in java_lang_String::hash_code
    +     while (len-- > 0) {
    +-      h = 31*h + (0xFFL & buf[s]);
    ++      h = 31*h + (0xFFFFFFFFL & buf[s]);
    +       s++;
    +     }
    +     return h & 0xFFFFFFFFL;
    +diff -r cdd84db3f833 -r 7a4b0596c539 test/serviceability/sa/jmap-hashcode/Test8028623.java
    +--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    ++++ openjdk/hotspot/test/serviceability/sa/jmap-hashcode/Test8028623.java	Mon Feb 24 10:46:40 2014 +0000
    +@@ -0,0 +1,72 @@
    ++/*
    ++ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
    ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    ++ *
    ++ * This code is free software; you can redistribute it and/or modify it
    ++ * under the terms of the GNU General Public License version 2 only, as
    ++ * published by the Free Software Foundation.
    ++ *
    ++ * This code is distributed in the hope that it will be useful, but WITHOUT
    ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    ++ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    ++ * version 2 for more details (a copy is included in the LICENSE file that
    ++ * accompanied this code).
    ++ *
    ++ * You should have received a copy of the GNU General Public License version
    ++ * 2 along with this work; if not, write to the Free Software Foundation,
    ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    ++ *
    ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    ++ * or visit www.oracle.com if you need additional information or have any
    ++ * questions.
    ++ */
    ++
    ++/*
    ++ * @test
    ++ * @bug 8028623
    ++ * @summary Test hashing of extended characters in Serviceability Agent.
    ++ * @library /testlibrary
    ++ */
    ++
    ++import com.oracle.java.testlibrary.JDKToolLauncher;
    ++import com.oracle.java.testlibrary.OutputBuffer;
    ++import com.oracle.java.testlibrary.ProcessTools;
    ++
    ++import java.io.File;
    ++
    ++public class Test8028623 {
    ++
    ++  public static int à = 1;
    ++  public static String dumpFile = "heap.out";
    ++
    ++  public static void main (String[] args) {
    ++
    ++    System.out.println(Ã);
    ++
    ++    try {
    ++        int pid = ProcessTools.getProcessId();
    ++        JDKToolLauncher jmap = JDKToolLauncher.create("jmap")
    ++                                              .addToolArg("-F")
    ++                                              .addToolArg("-dump:live,format=b,file=" + dumpFile)
    ++                                              .addToolArg(Integer.toString(pid));
    ++        ProcessBuilder pb = new ProcessBuilder(jmap.getCommand());
    ++        OutputBuffer output = ProcessTools.getOutput(pb);
    ++        Process p = pb.start();
    ++        int e = p.waitFor();
    ++        System.out.println("stdout:");
    ++        System.out.println(output.getStdout());
    ++        System.out.println("stderr:");
    ++        System.out.println(output.getStderr());
    ++
    ++        if (e != 0) {
    ++            throw new RuntimeException("jmap returns: " + e);
    ++        }
    ++        if (! new File(dumpFile).exists()) {
    ++            throw new RuntimeException("dump file NOT created: '" + dumpFile + "'");
    ++        }
    ++    } catch (Throwable t) {
    ++        t.printStackTrace();
    ++        throw new RuntimeException("Test failed with: " + t);
    ++    }
    ++  }
    ++}
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/8061785-pr2177-test_bug-corrupted_utf8_character.patch openjdk-6-6b34-1.13.6/patches/openjdk/8061785-pr2177-test_bug-corrupted_utf8_character.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/8061785-pr2177-test_bug-corrupted_utf8_character.patch	1970-01-01 00:00:00.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/8061785-pr2177-test_bug-corrupted_utf8_character.patch	2015-01-20 09:12:43.000000000 +0000
    @@ -0,0 +1,36 @@
    +# HG changeset patch
    +# User kevinw
    +# Date 1416851563 28800
    +#      Mon Nov 24 09:52:43 2014 -0800
    +# Node ID 2b280bce222a48a7e1b961f6eeb9a9375b50483d
    +# Parent  94b076895e5dcb781379b85d7fbe522cd3347dfa
    +8061785, PR2177: [TEST_BUG] serviceability/sa/jmap-hashcode/Test8028623.java has utf8 character corrupted by earlier merge
    +Reviewed-by: poonam
    +
    +diff -r 94b076895e5d -r 2b280bce222a test/serviceability/sa/jmap-hashcode/Test8028623.java
    +--- openjdk/hotspot/test/serviceability/sa/jmap-hashcode/Test8028623.java	Tue Oct 21 11:39:21 2014 -0700
    ++++ openjdk/hotspot/test/serviceability/sa/jmap-hashcode/Test8028623.java	Mon Nov 24 09:52:43 2014 -0800
    +@@ -26,6 +26,8 @@
    +  * @bug 8028623
    +  * @summary Test hashing of extended characters in Serviceability Agent.
    +  * @library /testlibrary
    ++ * @compile -encoding utf8 Test8028623.java
    ++ * @run main Test8028623
    +  */
    + 
    + import com.oracle.java.testlibrary.JDKToolLauncher;
    +@@ -36,12 +38,12 @@
    + 
    + public class Test8028623 {
    + 
    +-  public static int à = 1;
    ++  public static int \u00CB = 1;
    +   public static String dumpFile = "heap.out";
    + 
    +   public static void main (String[] args) {
    + 
    +-    System.out.println(Ã);
    ++    System.out.println(\u00CB);
    + 
    +     try {
    +         int pid = ProcessTools.getProcessId();
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/oj51-pr2187-sync_4873188.patch openjdk-6-6b34-1.13.6/patches/openjdk/oj51-pr2187-sync_4873188.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/oj51-pr2187-sync_4873188.patch	1970-01-01 00:00:00.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/oj51-pr2187-sync_4873188.patch	2015-01-21 22:23:45.000000000 +0000
    @@ -0,0 +1,58 @@
    +# HG changeset patch
    +# User andrew
    +# Date 1421870534 0
    +#      Wed Jan 21 20:02:14 2015 +0000
    +# Node ID bbff2a7acd335d23a7946a1b7eedd42946946311
    +# Parent  7fc691671bf07fe00940e02452235f711e50112e
    +OPENJDK6-51: Sync patch for 4873188 with 7 version
    +Reviewed-by: omajid
    +
    +diff -r 7fc691671bf0 -r bbff2a7acd33 src/share/classes/sun/security/ssl/CipherBox.java
    +--- openjdk/jdk/src/share/classes/sun/security/ssl/CipherBox.java	Tue Jan 20 03:06:20 2015 +0000
    ++++ openjdk/jdk/src/share/classes/sun/security/ssl/CipherBox.java	Wed Jan 21 20:02:14 2015 +0000
    +@@ -500,10 +500,9 @@
    +                     byte[] buf = null;
    +                     int limit = bb.limit();
    +                     if (bb.hasArray()) {
    +-                        int arrayOffset = bb.arrayOffset();
    +                         buf = bb.array();
    +-                        System.arraycopy(buf, arrayOffset + pos + blockSize,
    +-                            buf, arrayOffset + pos, limit - pos - blockSize);
    ++                        System.arraycopy(buf, pos + blockSize,
    ++                                         buf, pos, limit - pos - blockSize);
    +                         bb.limit(limit - blockSize);
    +                     } else {
    +                         buf = new byte[limit - pos - blockSize];
    +diff -r 7fc691671bf0 -r bbff2a7acd33 src/share/classes/sun/security/ssl/SSLEngineImpl.java
    +--- openjdk/jdk/src/share/classes/sun/security/ssl/SSLEngineImpl.java	Tue Jan 20 03:06:20 2015 +0000
    ++++ openjdk/jdk/src/share/classes/sun/security/ssl/SSLEngineImpl.java	Wed Jan 21 20:02:14 2015 +0000
    +@@ -1261,6 +1261,14 @@
    +                 writer.writeRecord(eor, ea, writeMAC, writeCipher);
    + 
    +         /*
    ++         * turn off the flag of the first application record if we really
    ++         * consumed at least byte.
    ++         */
    ++        if (isFirstAppOutputRecord && ea.deltaApp() > 0) {
    ++            isFirstAppOutputRecord = false;
    ++        }
    ++
    ++        /*
    +          * We only need to check the sequence number state for
    +          * non-handshaking record.
    +          *
    +@@ -1279,14 +1287,6 @@
    +             }
    +         }
    + 
    +-        /*
    +-         * turn off the flag of the first application record if we really
    +-         * consumed at least byte.
    +-         */
    +-        if (isFirstAppOutputRecord && ea.deltaApp() > 0) {
    +-            isFirstAppOutputRecord = false;
    +-        }
    +-
    +         return hsStatus;
    +     }
    + 
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/oj52-pr2185-no_serbia_montenegro.patch openjdk-6-6b34-1.13.6/patches/openjdk/oj52-pr2185-no_serbia_montenegro.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/oj52-pr2185-no_serbia_montenegro.patch	1970-01-01 00:00:00.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/oj52-pr2185-no_serbia_montenegro.patch	2015-01-21 22:23:45.000000000 +0000
    @@ -0,0 +1,73 @@
    +# HG changeset patch
    +# User andrew
    +# Date 1421873872 0
    +#      Wed Jan 21 20:57:52 2015 +0000
    +# Node ID 31845b0edbd16232f26c266f1f79729fb83a6975
    +# Parent  41b13b19b58f4945f18828e8a7ecf35c3a12a596
    +OPENJDK6-52: Application of 6786276 introduces compatibility issue
    +Summary: Add back ISO-3166 code CS and adjust LocaleTest to account for the extra country.
    +Reviewed-by: omajid
    +
    +diff -r 41b13b19b58f -r 31845b0edbd1 src/share/classes/java/util/LocaleISOData.java
    +--- openjdk/jdk/src/share/classes/java/util/LocaleISOData.java	Wed Jan 21 20:27:18 2015 +0000
    ++++ openjdk/jdk/src/share/classes/java/util/LocaleISOData.java	Wed Jan 21 20:57:52 2015 +0000
    +@@ -275,7 +275,7 @@
    +         + "CN" + "CHN"  // China, People's Republic of
    +         + "CO" + "COL"  // Colombia, Republic of
    +         + "CR" + "CRI"  // Costa Rica, Republic of
    +-//      + "CS" + "SCG"  // Serbia and Montenegro
    ++        + "CS" + "SCG"  // Serbia and Montenegro
    +         + "CU" + "CUB"  // Cuba, Republic of
    +         + "CV" + "CPV"  // Cape Verde, Republic of
    +         + "CW" + "CUW"  // Cura\u00e7ao
    +diff -r 41b13b19b58f -r 31845b0edbd1 test/java/util/Locale/Bug6786276.java
    +--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    ++++ openjdk/jdk/test/java/util/Locale/Bug6786276.java	Wed Jan 21 20:57:52 2015 +0000
    +@@ -0,0 +1,47 @@
    ++/*
    ++ * Copyright 2015 Red Hat, Inc.
    ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    ++ *
    ++ * This code is free software; you can redistribute it and/or modify it
    ++ * under the terms of the GNU General Public License version 2 only, as
    ++ * published by the Free Software Foundation.
    ++ *
    ++ * This code is distributed in the hope that it will be useful, but WITHOUT
    ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    ++ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    ++ * version 2 for more details (a copy is included in the LICENSE file that
    ++ * accompanied this code).
    ++ *
    ++ * You should have received a copy of the GNU General Public License version
    ++ * 2 along with this work; if not, write to the Free Software Foundation,
    ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    ++ *
    ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    ++ * or visit www.oracle.com if you need additional information or have any
    ++ * questions.
    ++ */
    ++/*
    ++ * @test
    ++ * @bug 6786276
    ++ * @summary Verify that the ISO-3166 code for Serbia & Montenegro is still present
    ++ */
    ++
    ++import java.util.Arrays;
    ++import java.util.Locale;
    ++
    ++public class Bug6786276
    ++{
    ++    public static void main(String[] args)
    ++    {
    ++	String[] localeCodes = Locale.getISOCountries();
    ++	System.err.println("Locale codes: " + Arrays.toString(localeCodes));
    ++	int serbiaMontenegro = Arrays.binarySearch(localeCodes, "CS");
    ++	if (serbiaMontenegro >= 0) {
    ++	    System.out.println("Serbia & Montenegro ISO code present, index "
    ++			       + serbiaMontenegro);
    ++	} else {
    ++	    System.out.println("Serbia & Montenegro ISO code not present");
    ++	    throw new RuntimeException("Serbia & Montenegro ISO code not present.");
    ++	}
    ++    }
    ++}
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/oj53-pr2181-strict_aliasing_on_ppc32.patch openjdk-6-6b34-1.13.6/patches/openjdk/oj53-pr2181-strict_aliasing_on_ppc32.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/oj53-pr2181-strict_aliasing_on_ppc32.patch	1970-01-01 00:00:00.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/oj53-pr2181-strict_aliasing_on_ppc32.patch	2015-01-21 22:23:45.000000000 +0000
    @@ -0,0 +1,25 @@
    +diff -Nru openjdk.orig/jdk/make/common/Defs-linux.gmk openjdk/jdk/make/common/Defs-linux.gmk
    +--- openjdk.orig/jdk/make/common/Defs-linux.gmk	2015-01-21 21:25:32.000282631 +0000
    ++++ openjdk/jdk/make/common/Defs-linux.gmk	2015-01-21 21:27:09.061441927 +0000
    +@@ -115,7 +115,7 @@
    + CFLAGS_REQUIRED_m68k    +=
    + CFLAGS_REQUIRED_mips    +=
    + CFLAGS_REQUIRED_mipsel  += -D_LITTLE_ENDIAN
    +-CFLAGS_REQUIRED_ppc     += -m32
    ++CFLAGS_REQUIRED_ppc     += -m32 -fsigned-char -D_BIG_ENDIAN
    + CFLAGS_REQUIRED_ppc64   += -m64
    + CFLAGS_REQUIRED_s390    +=
    + CFLAGS_REQUIRED_s390x   += -m64
    +@@ -160,11 +160,7 @@
    + #
    + # Misc compiler options
    + #
    +-ifeq ($(ARCH),ppc)
    +-  CFLAGS_COMMON   = -fsigned-char
    +-else # ARCH
    +-  CFLAGS_COMMON   = -fno-strict-aliasing
    +-endif # ARCH
    ++CFLAGS_COMMON  = -fno-strict-aliasing
    + PIC_CODE_LARGE = -fPIC
    + PIC_CODE_SMALL = -fpic
    + GLOBAL_KPIC = $(PIC_CODE_LARGE)
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/oj54-pr2182-6911104_reintroduces_test_fragment.patch openjdk-6-6b34-1.13.6/patches/openjdk/oj54-pr2182-6911104_reintroduces_test_fragment.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/oj54-pr2182-6911104_reintroduces_test_fragment.patch	1970-01-01 00:00:00.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/oj54-pr2182-6911104_reintroduces_test_fragment.patch	2015-01-21 22:23:45.000000000 +0000
    @@ -0,0 +1,15 @@
    +diff -r 7fc691671bf0 test/sun/tools/common/CommonSetup.sh
    +--- openjdk/jdk/test/sun/tools/common/CommonSetup.sh	Tue Jan 20 03:06:20 2015 +0000
    ++++ openjdk/jdk/test/sun/tools/common/CommonSetup.sh	Wed Jan 21 01:23:27 2015 +0000
    +@@ -111,11 +111,6 @@
    +     PS=";"
    +     isWindows=true
    +     ;;
    +-  CYGWIN* )
    +-    PS=";"
    +-    OS="Windows"
    +-    isCygwin=true
    +-    ;;
    +   * )
    +     isUnknownOS=true
    +     ;;
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/p11cipher-4898461-support_ecb_and_cbc.patch openjdk-6-6b34-1.13.6/patches/openjdk/p11cipher-4898461-support_ecb_and_cbc.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/p11cipher-4898461-support_ecb_and_cbc.patch	2014-10-08 18:39:25.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/p11cipher-4898461-support_ecb_and_cbc.patch	2015-01-20 09:12:43.000000000 +0000
    @@ -852,13 +852,6 @@
     diff -Nru openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java openjdk/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java
     --- openjdk.orig/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java	2012-09-21 20:03:48.000000000 +0100
     +++ openjdk/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java	2012-10-23 18:09:25.964291180 +0100
    -@@ -1,5 +1,5 @@
    - /*
    -- * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
    -+ * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
    -  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    -  *
    -  * This code is free software; you can redistribute it and/or modify it
     @@ -601,14 +601,26 @@
              // XXX attributes for Ciphers (supported modes, padding)
              d(CIP, "ARCFOUR",                       P11Cipher,      s("RC4"),
    diff -Nru openjdk-6-6b33-1.13.5/patches/openjdk/p11cipher-6604496-support_ckm_aes_ctr.patch openjdk-6-6b34-1.13.6/patches/openjdk/p11cipher-6604496-support_ckm_aes_ctr.patch
    --- openjdk-6-6b33-1.13.5/patches/openjdk/p11cipher-6604496-support_ckm_aes_ctr.patch	2014-10-08 18:39:25.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/openjdk/p11cipher-6604496-support_ckm_aes_ctr.patch	2015-01-20 09:12:43.000000000 +0000
    @@ -102,7 +102,7 @@
     +++ openjdk/jdk/src/share/classes/sun/security/pkcs11/SunPKCS11.java	2012-10-24 03:20:31.807709327 +0100
     @@ -1,5 +1,5 @@
      /*
    -- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
    +- * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved.
     + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
       * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       *
    diff -Nru openjdk-6-6b33-1.13.5/patches/pr2070-type_punning_warnings.patch openjdk-6-6b34-1.13.6/patches/pr2070-type_punning_warnings.patch
    --- openjdk-6-6b33-1.13.5/patches/pr2070-type_punning_warnings.patch	1970-01-01 00:00:00.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/pr2070-type_punning_warnings.patch	2015-01-20 09:12:43.000000000 +0000
    @@ -0,0 +1,36 @@
    +# HG changeset patch
    +# User andrew
    +# Date 1415202016 0
    +#      Wed Nov 05 15:40:16 2014 +0000
    +# Node ID e4aec8a11c8a1ee10edc85d5f0c62119e86aca46
    +# Parent  0af95754ffc5d63e2eeb472e3e87e8d8b7ed3048
    +PR2070: Type-punning warnings still evident on RHEL 5
    +Summary: Add -fno-strict-aliasing to the whole of sun/font and to waiters.cpp
    +
    +diff -r 0af95754ffc5 -r e4aec8a11c8a make/mkdemo/jvmti/waiters/Makefile
    +--- openjdk/jdk/make/mkdemo/jvmti/waiters/Makefile	Tue Feb 26 11:12:40 2013 -0800
    ++++ openjdk/jdk/make/mkdemo/jvmti/waiters/Makefile	Wed Nov 05 15:40:16 2014 +0000
    +@@ -41,3 +41,7 @@
    + #
    + include $(BUILDDIR)/common/Demo.gmk
    + 
    ++# Turn off aliasing with GCC
    ++ifeq ($(PLATFORM), linux)
    ++  CXXFLAGS += -fno-strict-aliasing
    ++endif
    +diff -r 0af95754ffc5 -r e4aec8a11c8a make/sun/font/Makefile
    +--- openjdk/jdk/make/sun/font/Makefile	Tue Feb 26 11:12:40 2013 -0800
    ++++ openjdk/jdk/make/sun/font/Makefile	Wed Nov 05 15:40:16 2014 +0000
    +@@ -94,10 +94,9 @@
    + 
    + endif # PLATFORM
    + 
    +-# Turn off aliasing with GCC for ExtensionSubtables.cpp
    ++# Turn off aliasing with GCC
    + ifeq ($(PLATFORM), linux)
    +-  CXXFLAGS += $(CXXFLAGS_$(@F))
    +-  CXXFLAGS_ExtensionSubtables.o = -fno-strict-aliasing
    ++  CXXFLAGS += -fno-strict-aliasing
    + endif
    + 
    + # Turn on infinality rendering support when requested
    diff -Nru openjdk-6-6b33-1.13.5/patches/pr2082-s390_type_fixes.patch openjdk-6-6b34-1.13.6/patches/pr2082-s390_type_fixes.patch
    --- openjdk-6-6b33-1.13.5/patches/pr2082-s390_type_fixes.patch	1970-01-01 00:00:00.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/pr2082-s390_type_fixes.patch	2015-01-20 09:12:43.000000000 +0000
    @@ -0,0 +1,20 @@
    +# HG changeset patch
    +# User andrew
    +# Date 1379536490 -3600
    +#      Wed Sep 18 21:34:50 2013 +0100
    +# Node ID 034276a67ecac35b850d90f0746de1bee471a255
    +# Parent  1bb9fd504ded29203baab49faf18b0d16f87dba9
    +Cast should use same type as GCDrainStackTargetSize (uintx).
    +
    +diff -r 1bb9fd504ded -r 034276a67eca src/share/vm/gc_implementation/g1/concurrentMark.cpp
    +--- openjdk/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp	Wed Sep 11 16:55:12 2013 +0100
    ++++ openjdk/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp	Wed Sep 18 21:34:50 2013 +0100
    +@@ -3632,7 +3632,7 @@
    +   // of things to do) or totally (at the very end).
    +   size_t target_size;
    +   if (partially) {
    +-    target_size = MIN2((size_t)_task_queue->max_elems()/3, GCDrainStackTargetSize);
    ++    target_size = MIN2((uintx)_task_queue->max_elems()/3, GCDrainStackTargetSize);
    +   } else {
    +     target_size = 0;
    +   }
    diff -Nru openjdk-6-6b33-1.13.5/patches/pr2096-4096-bit_dh.patch openjdk-6-6b34-1.13.6/patches/pr2096-4096-bit_dh.patch
    --- openjdk-6-6b33-1.13.5/patches/pr2096-4096-bit_dh.patch	1970-01-01 00:00:00.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/pr2096-4096-bit_dh.patch	2015-01-20 09:12:43.000000000 +0000
    @@ -0,0 +1,120 @@
    +# HG changeset patch
    +# User andrew
    +# Date 1416871718 0
    +#      Mon Nov 24 23:28:38 2014 +0000
    +# Node ID d909950c3f6dfcad956d7eb90c8339eeea23d65c
    +# Parent  e4aec8a11c8a1ee10edc85d5f0c62119e86aca46
    +PR2096, RH1163501: 2048-bit DH upper bound too small for Fedora infrastructure
    +
    +diff -r e4aec8a11c8a -r d909950c3f6d src/share/classes/com/sun/crypto/provider/DHKeyPairGenerator.java
    +--- openjdk/jdk/src/share/classes/com/sun/crypto/provider/DHKeyPairGenerator.java	Wed Nov 05 15:40:16 2014 +0000
    ++++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/DHKeyPairGenerator.java	Mon Nov 24 23:28:38 2014 +0000
    +@@ -1,5 +1,6 @@
    + /*
    +  * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
    ++ * Copyright (c) 2014 Red Hat Inc.
    +  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    +  *
    +  * This code is free software; you can redistribute it and/or modify it
    +@@ -80,10 +81,10 @@
    +      * @param random the source of randomness
    +      */
    +     public void initialize(int keysize, SecureRandom random) {
    +-        if ((keysize < 512) || (keysize > 2048) || (keysize % 64 != 0)) {
    ++        if ((keysize < 512) || (keysize > 4096) || (keysize % 64 != 0)) {
    +             throw new InvalidParameterException("Keysize must be multiple "
    +                                                 + "of 64, and can only range "
    +-                                                + "from 512 to 2048 "
    ++                                                + "from 512 to 4096 "
    +                                                 + "(inclusive)");
    +         }
    +         this.pSize = keysize;
    +@@ -115,11 +116,11 @@
    + 
    +         params = (DHParameterSpec)algParams;
    +         pSize = params.getP().bitLength();
    +-        if ((pSize < 512) || (pSize > 2048) ||
    ++        if ((pSize < 512) || (pSize > 4096) ||
    +             (pSize % 64 != 0)) {
    +             throw new InvalidAlgorithmParameterException
    +                 ("Prime size must be multiple of 64, and can only range "
    +-                 + "from 512 to 2048 (inclusive)");
    ++                 + "from 512 to 4096 (inclusive)");
    +         }
    + 
    +         // exponent size is optional, could be 0
    +diff -r e4aec8a11c8a -r d909950c3f6d src/share/classes/com/sun/crypto/provider/DHParameterGenerator.java
    +--- openjdk/jdk/src/share/classes/com/sun/crypto/provider/DHParameterGenerator.java	Wed Nov 05 15:40:16 2014 +0000
    ++++ openjdk/jdk/src/share/classes/com/sun/crypto/provider/DHParameterGenerator.java	Mon Nov 24 23:28:38 2014 +0000
    +@@ -1,5 +1,6 @@
    + /*
    +  * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
    ++ * Copyright (c) 2014 Red Hat Inc.
    +  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    +  *
    +  * This code is free software; you can redistribute it and/or modify it
    +@@ -68,10 +69,10 @@
    +      * @param random the source of randomness
    +      */
    +     protected void engineInit(int keysize, SecureRandom random) {
    +-        if ((keysize < 512) || (keysize > 2048) || (keysize % 64 != 0)) {
    ++        if ((keysize < 512) || (keysize > 4096) || (keysize % 64 != 0)) {
    +             throw new InvalidParameterException("Keysize must be multiple "
    +                                                 + "of 64, and can only range "
    +-                                                + "from 512 to 2048 "
    ++                                                + "from 512 to 4096 "
    +                                                 + "(inclusive)");
    +         }
    +         this.primeSize = keysize;
    +@@ -100,10 +101,10 @@
    +             DHGenParameterSpec dhParamSpec = (DHGenParameterSpec)genParamSpec;
    + 
    +             primeSize = dhParamSpec.getPrimeSize();
    +-            if ((primeSize<512) || (primeSize>2048) || (primeSize%64 != 0)) {
    ++            if ((primeSize<512) || (primeSize>4096) || (primeSize%64 != 0)) {
    +                 throw new InvalidAlgorithmParameterException
    +                     ("Modulus size must be multiple of 64, and can only range "
    +-                     + "from 512 to 2048 (inclusive)");
    ++                     + "from 512 to 4096 (inclusive)");
    +             }
    + 
    +             exponentSize = dhParamSpec.getExponentSize();
    +diff -r e4aec8a11c8a -r d909950c3f6d test/com/sun/crypto/provider/KeyAgreement/TestExponentSize.java
    +--- openjdk/jdk/test/com/sun/crypto/provider/KeyAgreement/TestExponentSize.java	Wed Nov 05 15:40:16 2014 +0000
    ++++ openjdk/jdk/test/com/sun/crypto/provider/KeyAgreement/TestExponentSize.java	Mon Nov 24 23:28:38 2014 +0000
    +@@ -1,5 +1,6 @@
    + /*
    +  * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
    ++ * Copyright (c) 2014 Red Hat Inc.
    +  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    +  *
    +  * This code is free software; you can redistribute it and/or modify it
    +@@ -58,7 +59,7 @@
    +      */
    +     private enum Sizes {
    +         two56(256), three84(384), five12(512), seven68(768), ten24(1024),
    +-        twenty48(2048);
    ++        twenty48(2048), forty96(4096);
    + 
    +         private final int intSize;
    +         private final BigInteger bigIntValue;
    +@@ -130,6 +131,19 @@
    +         kp = kpg.generateKeyPair();
    +         checkKeyPair(kp, Sizes.twenty48, Sizes.five12);
    + 
    ++        kpg.initialize(Sizes.forty96.getIntSize());
    ++        kp = kpg.generateKeyPair();
    ++        checkKeyPair(kp, Sizes.forty96, Sizes.twenty48);
    ++
    ++        publicKey = (DHPublicKey)kp.getPublic();
    ++        p = publicKey.getParams().getP();
    ++        g = publicKey.getParams().getG();
    ++
    ++        // test w/ all values specified
    ++        kpg.initialize(new DHParameterSpec(p, g, Sizes.ten24.getIntSize()));
    ++        kp = kpg.generateKeyPair();
    ++        checkKeyPair(kp, Sizes.forty96, Sizes.ten24);
    ++
    +         System.out.println("OK");
    +     }
    + 
    diff -Nru openjdk-6-6b33-1.13.5/patches/pr2125.patch openjdk-6-6b34-1.13.6/patches/pr2125.patch
    --- openjdk-6-6b33-1.13.5/patches/pr2125.patch	1970-01-01 00:00:00.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/pr2125.patch	2015-01-20 09:12:43.000000000 +0000
    @@ -0,0 +1,486 @@
    +diff -r 9665966de2e7 src/share/classes/sun/security/ec/NamedCurve.java
    +--- openjdk/jdk/src/share/classes/sun/security/ec/NamedCurve.java	Fri Dec 05 02:53:29 2014 +0000
    ++++ openjdk/jdk/src/share/classes/sun/security/ec/NamedCurve.java	Fri Dec 05 02:58:18 2014 +0000
    +@@ -162,114 +162,6 @@
    + 
    +     static {
    +         /* SEC2 prime curves */
    +-        add("secp112r1", "1.3.132.0.6", P,
    +-            "DB7C2ABF62E35E668076BEAD208B",
    +-            "DB7C2ABF62E35E668076BEAD2088",
    +-            "659EF8BA043916EEDE8911702B22",
    +-            "09487239995A5EE76B55F9C2F098",
    +-            "A89CE5AF8724C0A23E0E0FF77500",
    +-            "DB7C2ABF62E35E7628DFAC6561C5",
    +-            1);
    +-
    +-        add("secp112r2", "1.3.132.0.7", P,
    +-            "DB7C2ABF62E35E668076BEAD208B",
    +-            "6127C24C05F38A0AAAF65C0EF02C",
    +-            "51DEF1815DB5ED74FCC34C85D709",
    +-            "4BA30AB5E892B4E1649DD0928643",
    +-            "adcd46f5882e3747def36e956e97",
    +-            "36DF0AAFD8B8D7597CA10520D04B",
    +-            4);
    +-
    +-        add("secp128r1", "1.3.132.0.28", P,
    +-            "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF",
    +-            "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC",
    +-            "E87579C11079F43DD824993C2CEE5ED3",
    +-            "161FF7528B899B2D0C28607CA52C5B86",
    +-            "CF5AC8395BAFEB13C02DA292DDED7A83",
    +-            "FFFFFFFE0000000075A30D1B9038A115",
    +-            1);
    +-
    +-        add("secp128r2", "1.3.132.0.29", P,
    +-            "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF",
    +-            "D6031998D1B3BBFEBF59CC9BBFF9AEE1",
    +-            "5EEEFCA380D02919DC2C6558BB6D8A5D",
    +-            "7B6AA5D85E572983E6FB32A7CDEBC140",
    +-            "27B6916A894D3AEE7106FE805FC34B44",
    +-            "3FFFFFFF7FFFFFFFBE0024720613B5A3",
    +-            4);
    +-
    +-        add("secp160k1", "1.3.132.0.9", P,
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73",
    +-            "0000000000000000000000000000000000000000",
    +-            "0000000000000000000000000000000000000007",
    +-            "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB",
    +-            "938CF935318FDCED6BC28286531733C3F03C4FEE",
    +-            "0100000000000000000001B8FA16DFAB9ACA16B6B3",
    +-            1);
    +-
    +-        add("secp160r1", "1.3.132.0.8", P,
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF",
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC",
    +-            "1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45",
    +-            "4A96B5688EF573284664698968C38BB913CBFC82",
    +-            "23A628553168947D59DCC912042351377AC5FB32",
    +-            "0100000000000000000001F4C8F927AED3CA752257",
    +-            1);
    +-
    +-        add("secp160r2", "1.3.132.0.30", P,
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73",
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC70",
    +-            "B4E134D3FB59EB8BAB57274904664D5AF50388BA",
    +-            "52DCB034293A117E1F4FF11B30F7199D3144CE6D",
    +-            "FEAFFEF2E331F296E071FA0DF9982CFEA7D43F2E",
    +-            "0100000000000000000000351EE786A818F3A1A16B",
    +-            1);
    +-
    +-        add("secp192k1", "1.3.132.0.31", P,
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37",
    +-            "000000000000000000000000000000000000000000000000",
    +-            "000000000000000000000000000000000000000000000003",
    +-            "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D",
    +-            "9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D",
    +-            "FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D",
    +-            1);
    +-
    +-        add("secp192r1 [NIST P-192, X9.62 prime192v1]", "1.2.840.10045.3.1.1", PD,
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF",
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC",
    +-            "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1",
    +-            "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012",
    +-            "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811",
    +-            "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831",
    +-            1);
    +-
    +-        add("secp224k1", "1.3.132.0.32", P,
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D",
    +-            "00000000000000000000000000000000000000000000000000000000",
    +-            "00000000000000000000000000000000000000000000000000000005",
    +-            "A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C",
    +-            "7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5",
    +-            "010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7",
    +-            1);
    +-
    +-        add("secp224r1 [NIST P-224]", "1.3.132.0.33", PD,
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001",
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE",
    +-            "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4",
    +-            "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21",
    +-            "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34",
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D",
    +-            1);
    +-
    +-        add("secp256k1", "1.3.132.0.10", P,
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F",
    +-            "0000000000000000000000000000000000000000000000000000000000000000",
    +-            "0000000000000000000000000000000000000000000000000000000000000007",
    +-            "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798",
    +-            "483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8",
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141",
    +-            1);
    +-
    +         add("secp256r1 [NIST P-256, X9.62 prime256v1]", "1.2.840.10045.3.1.7", PD,
    +             "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF",
    +             "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC",
    +@@ -297,367 +189,6 @@
    +             "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409",
    +             1);
    + 
    +-        /* ANSI X9.62 prime curves */
    +-        add("X9.62 prime192v2", "1.2.840.10045.3.1.2", P,
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF",
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC",
    +-            "CC22D6DFB95C6B25E49C0D6364A4E5980C393AA21668D953",
    +-            "EEA2BAE7E1497842F2DE7769CFE9C989C072AD696F48034A",
    +-            "6574D11D69B6EC7A672BB82A083DF2F2B0847DE970B2DE15",
    +-            "FFFFFFFFFFFFFFFFFFFFFFFE5FB1A724DC80418648D8DD31",
    +-            1);
    +-
    +-        add("X9.62 prime192v3", "1.2.840.10045.3.1.3", P,
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF",
    +-            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC",
    +-            "22123DC2395A05CAA7423DAECCC94760A7D462256BD56916",
    +-            "7D29778100C65A1DA1783716588DCE2B8B4AEE8E228F1896",
    +-            "38A90F22637337334B49DCB66A6DC8F9978ACA7648A943B0",
    +-            "FFFFFFFFFFFFFFFFFFFFFFFF7A62D031C83F4294F640EC13",
    +-            1);
    +-
    +-        add("X9.62 prime239v1", "1.2.840.10045.3.1.4", P,
    +-            "7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF",
    +-            "7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC",
    +-            "6B016C3BDCF18941D0D654921475CA71A9DB2FB27D1D37796185C2942C0A",
    +-            "0FFA963CDCA8816CCC33B8642BEDF905C3D358573D3F27FBBD3B3CB9AAAF",
    +-            "7DEBE8E4E90A5DAE6E4054CA530BA04654B36818CE226B39FCCB7B02F1AE",
    +-            "7FFFFFFFFFFFFFFFFFFFFFFF7FFFFF9E5E9A9F5D9071FBD1522688909D0B",
    +-            1);
    +-
    +-        add("X9.62 prime239v2", "1.2.840.10045.3.1.5", P,
    +-            "7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF",
    +-            "7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC",
    +-            "617FAB6832576CBBFED50D99F0249C3FEE58B94BA0038C7AE84C8C832F2C",
    +-            "38AF09D98727705120C921BB5E9E26296A3CDCF2F35757A0EAFD87B830E7",
    +-            "5B0125E4DBEA0EC7206DA0FC01D9B081329FB555DE6EF460237DFF8BE4BA",
    +-            "7FFFFFFFFFFFFFFFFFFFFFFF800000CFA7E8594377D414C03821BC582063",
    +-            1);
    +-
    +-        add("X9.62 prime239v3", "1.2.840.10045.3.1.6", P,
    +-            "7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF",
    +-            "7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC",
    +-            "255705FA2A306654B1F4CB03D6A750A30C250102D4988717D9BA15AB6D3E",
    +-            "6768AE8E18BB92CFCF005C949AA2C6D94853D0E660BBF854B1C9505FE95A",
    +-            "1607E6898F390C06BC1D552BAD226F3B6FCFE48B6E818499AF18E3ED6CF3",
    +-            "7FFFFFFFFFFFFFFFFFFFFFFF7FFFFF975DEB41B3A6057C3C432146526551",
    +-            1);
    +-
    +-        /* SEC2 binary curves */
    +-        add("sect113r1", "1.3.132.0.4", B,
    +-            "020000000000000000000000000201",
    +-            "003088250CA6E7C7FE649CE85820F7",
    +-            "00E8BEE4D3E2260744188BE0E9C723",
    +-            "009D73616F35F4AB1407D73562C10F",
    +-            "00A52830277958EE84D1315ED31886",
    +-            "0100000000000000D9CCEC8A39E56F",
    +-            2);
    +-
    +-        add("sect113r2", "1.3.132.0.5", B,
    +-            "020000000000000000000000000201",
    +-            "00689918DBEC7E5A0DD6DFC0AA55C7",
    +-            "0095E9A9EC9B297BD4BF36E059184F",
    +-            "01A57A6A7B26CA5EF52FCDB8164797",
    +-            "00B3ADC94ED1FE674C06E695BABA1D",
    +-            "010000000000000108789B2496AF93",
    +-            2);
    +-
    +-        add("sect131r1", "1.3.132.0.22", B,
    +-            "080000000000000000000000000000010D",
    +-            "07A11B09A76B562144418FF3FF8C2570B8",
    +-            "0217C05610884B63B9C6C7291678F9D341",
    +-            "0081BAF91FDF9833C40F9C181343638399",
    +-            "078C6E7EA38C001F73C8134B1B4EF9E150",
    +-            "0400000000000000023123953A9464B54D",
    +-            2);
    +-
    +-        add("sect131r2", "1.3.132.0.23", B,
    +-            "080000000000000000000000000000010D",
    +-            "03E5A88919D7CAFCBF415F07C2176573B2",
    +-            "04B8266A46C55657AC734CE38F018F2192",
    +-            "0356DCD8F2F95031AD652D23951BB366A8",
    +-            "0648F06D867940A5366D9E265DE9EB240F",
    +-            "0400000000000000016954A233049BA98F",
    +-            2);
    +-
    +-        add("sect163k1 [NIST K-163]", "1.3.132.0.1", BD,
    +-            "0800000000000000000000000000000000000000C9",
    +-            "000000000000000000000000000000000000000001",
    +-            "000000000000000000000000000000000000000001",
    +-            "02FE13C0537BBC11ACAA07D793DE4E6D5E5C94EEE8",
    +-            "0289070FB05D38FF58321F2E800536D538CCDAA3D9",
    +-            "04000000000000000000020108A2E0CC0D99F8A5EF",
    +-            2);
    +-
    +-        add("sect163r1", "1.3.132.0.2", B,
    +-            "0800000000000000000000000000000000000000C9",
    +-            "07B6882CAAEFA84F9554FF8428BD88E246D2782AE2",
    +-            "0713612DCDDCB40AAB946BDA29CA91F73AF958AFD9",
    +-            "0369979697AB43897789566789567F787A7876A654",
    +-            "00435EDB42EFAFB2989D51FEFCE3C80988F41FF883",
    +-            "03FFFFFFFFFFFFFFFFFFFF48AAB689C29CA710279B",
    +-            2);
    +-
    +-        add("sect163r2 [NIST B-163]", "1.3.132.0.15", BD,
    +-            "0800000000000000000000000000000000000000C9",
    +-            "000000000000000000000000000000000000000001",
    +-            "020A601907B8C953CA1481EB10512F78744A3205FD",
    +-            "03F0EBA16286A2D57EA0991168D4994637E8343E36",
    +-            "00D51FBC6C71A0094FA2CDD545B11C5C0C797324F1",
    +-            "040000000000000000000292FE77E70C12A4234C33",
    +-            2);
    +-
    +-        add("sect193r1", "1.3.132.0.24", B,
    +-            "02000000000000000000000000000000000000000000008001",
    +-            "0017858FEB7A98975169E171F77B4087DE098AC8A911DF7B01",
    +-            "00FDFB49BFE6C3A89FACADAA7A1E5BBC7CC1C2E5D831478814",
    +-            "01F481BC5F0FF84A74AD6CDF6FDEF4BF6179625372D8C0C5E1",
    +-            "0025E399F2903712CCF3EA9E3A1AD17FB0B3201B6AF7CE1B05",
    +-            "01000000000000000000000000C7F34A778F443ACC920EBA49",
    +-            2);
    +-
    +-        add("sect193r2", "1.3.132.0.25", B,
    +-            "02000000000000000000000000000000000000000000008001",
    +-            "0163F35A5137C2CE3EA6ED8667190B0BC43ECD69977702709B",
    +-            "00C9BB9E8927D4D64C377E2AB2856A5B16E3EFB7F61D4316AE",
    +-            "00D9B67D192E0367C803F39E1A7E82CA14A651350AAE617E8F",
    +-            "01CE94335607C304AC29E7DEFBD9CA01F596F927224CDECF6C",
    +-            "010000000000000000000000015AAB561B005413CCD4EE99D5",
    +-            2);
    +-
    +-        add("sect233k1 [NIST K-233]", "1.3.132.0.26", BD,
    +-            "020000000000000000000000000000000000000004000000000000000001",
    +-            "000000000000000000000000000000000000000000000000000000000000",
    +-            "000000000000000000000000000000000000000000000000000000000001",
    +-            "017232BA853A7E731AF129F22FF4149563A419C26BF50A4C9D6EEFAD6126",
    +-            "01DB537DECE819B7F70F555A67C427A8CD9BF18AEB9B56E0C11056FAE6A3",
    +-            "008000000000000000000000000000069D5BB915BCD46EFB1AD5F173ABDF",
    +-            4);
    +-
    +-        add("sect233r1 [NIST B-233]", "1.3.132.0.27", B,
    +-            "020000000000000000000000000000000000000004000000000000000001",
    +-            "000000000000000000000000000000000000000000000000000000000001",
    +-            "0066647EDE6C332C7F8C0923BB58213B333B20E9CE4281FE115F7D8F90AD",
    +-            "00FAC9DFCBAC8313BB2139F1BB755FEF65BC391F8B36F8F8EB7371FD558B",
    +-            "01006A08A41903350678E58528BEBF8A0BEFF867A7CA36716F7E01F81052",
    +-            "01000000000000000000000000000013E974E72F8A6922031D2603CFE0D7",
    +-            2);
    +-
    +-        add("sect239k1", "1.3.132.0.3", B,
    +-            "800000000000000000004000000000000000000000000000000000000001",
    +-            "000000000000000000000000000000000000000000000000000000000000",
    +-            "000000000000000000000000000000000000000000000000000000000001",
    +-            "29A0B6A887A983E9730988A68727A8B2D126C44CC2CC7B2A6555193035DC",
    +-            "76310804F12E549BDB011C103089E73510ACB275FC312A5DC6B76553F0CA",
    +-            "2000000000000000000000000000005A79FEC67CB6E91F1C1DA800E478A5",
    +-            4);
    +-
    +-        add("sect283k1 [NIST K-283]", "1.3.132.0.16", BD,
    +-            "0800000000000000000000000000000000000000000000000000000000000000000010A1",
    +-            "000000000000000000000000000000000000000000000000000000000000000000000000",
    +-            "000000000000000000000000000000000000000000000000000000000000000000000001",
    +-            "0503213F78CA44883F1A3B8162F188E553CD265F23C1567A16876913B0C2AC2458492836",
    +-            "01CCDA380F1C9E318D90F95D07E5426FE87E45C0E8184698E45962364E34116177DD2259",
    +-            "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9AE2ED07577265DFF7F94451E061E163C61",
    +-            4);
    +-
    +-        add("sect283r1 [NIST B-283]", "1.3.132.0.17", B,
    +-            "0800000000000000000000000000000000000000000000000000000000000000000010A1",
    +-            "000000000000000000000000000000000000000000000000000000000000000000000001",
    +-            "027B680AC8B8596DA5A4AF8A19A0303FCA97FD7645309FA2A581485AF6263E313B79A2F5",
    +-            "05F939258DB7DD90E1934F8C70B0DFEC2EED25B8557EAC9C80E2E198F8CDBECD86B12053",
    +-            "03676854FE24141CB98FE6D4B20D02B4516FF702350EDDB0826779C813F0DF45BE8112F4",
    +-            "03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF90399660FC938A90165B042A7CEFADB307",
    +-            2);
    +-
    +-        add("sect409k1 [NIST K-409]", "1.3.132.0.36", BD,
    +-            "02000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000001",
    +-            "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    +-            "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
    +-            "0060F05F658F49C1AD3AB1890F7184210EFD0987E307C84C27ACCFB8F9F67CC2C460189EB5AAAA62EE222EB1B35540CFE9023746",
    +-            "01E369050B7C4E42ACBA1DACBF04299C3460782F918EA427E6325165E9EA10E3DA5F6C42E9C55215AA9CA27A5863EC48D8E0286B",
    +-            "007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5F83B2D4EA20400EC4557D5ED3E3E7CA5B4B5C83B8E01E5FCF",
    +-            4);
    +-
    +-        add("sect409r1 [NIST B-409]", "1.3.132.0.37", B,
    +-            "02000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000001",
    +-            "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
    +-            "0021A5C2C8EE9FEB5C4B9A753B7B476B7FD6422EF1F3DD674761FA99D6AC27C8A9A197B272822F6CD57A55AA4F50AE317B13545F",
    +-            "015D4860D088DDB3496B0C6064756260441CDE4AF1771D4DB01FFE5B34E59703DC255A868A1180515603AEAB60794E54BB7996A7",
    +-            "0061B1CFAB6BE5F32BBFA78324ED106A7636B9C5A7BD198D0158AA4F5488D08F38514F1FDF4B4F40D2181B3681C364BA0273C706",
    +-            "010000000000000000000000000000000000000000000000000001E2AAD6A612F33307BE5FA47C3C9E052F838164CD37D9A21173",
    +-            2);
    +-
    +-        add("sect571k1 [NIST K-571]", "1.3.132.0.38", BD,
    +-            "080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000425",
    +-            "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    +-            "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
    +-            "026EB7A859923FBC82189631F8103FE4AC9CA2970012D5D46024804801841CA44370958493B205E647DA304DB4CEB08CBBD1BA39494776FB988B47174DCA88C7E2945283A01C8972",
    +-            "0349DC807F4FBF374F4AEADE3BCA95314DD58CEC9F307A54FFC61EFC006D8A2C9D4979C0AC44AEA74FBEBBB9F772AEDCB620B01A7BA7AF1B320430C8591984F601CD4C143EF1C7A3",
    +-            "020000000000000000000000000000000000000000000000000000000000000000000000131850E1F19A63E4B391A8DB917F4138B630D84BE5D639381E91DEB45CFE778F637C1001",
    +-            4);
    +-
    +-        add("sect571r1 [NIST B-571]", "1.3.132.0.39", B,
    +-            "080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000425",
    +-            "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
    +-            "02F40E7E2221F295DE297117B7F3D62F5C6A97FFCB8CEFF1CD6BA8CE4A9A18AD84FFABBD8EFA59332BE7AD6756A66E294AFD185A78FF12AA520E4DE739BACA0C7FFEFF7F2955727A",
    +-            "0303001D34B856296C16C0D40D3CD7750A93D1D2955FA80AA5F40FC8DB7B2ABDBDE53950F4C0D293CDD711A35B67FB1499AE60038614F1394ABFA3B4C850D927E1E7769C8EEC2D19",
    +-            "037BF27342DA639B6DCCFFFEB73D69D78C6C27A6009CBBCA1980F8533921E8A684423E43BAB08A576291AF8F461BB2A8B3531D2F0485C19B16E2F1516E23DD3C1A4827AF1B8AC15B",
    +-            "03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE661CE18FF55987308059B186823851EC7DD9CA1161DE93D5174D66E8382E9BB2FE84E47",
    +-            2);
    +-
    +-        /* ANSI X9.62 binary curves */
    +-        add("X9.62 c2tnb191v1", "1.2.840.10045.3.0.5", B,
    +-            "800000000000000000000000000000000000000000000201",
    +-            "2866537B676752636A68F56554E12640276B649EF7526267",
    +-            "2E45EF571F00786F67B0081B9495A3D95462F5DE0AA185EC",
    +-            "36B3DAF8A23206F9C4F299D7B21A9C369137F2C84AE1AA0D",
    +-            "765BE73433B3F95E332932E70EA245CA2418EA0EF98018FB",
    +-            "40000000000000000000000004A20E90C39067C893BBB9A5",
    +-            2);
    +-
    +-        add("X9.62 c2tnb191v2", "1.2.840.10045.3.0.6", B,
    +-            "800000000000000000000000000000000000000000000201",
    +-            "401028774D7777C7B7666D1366EA432071274F89FF01E718",
    +-            "0620048D28BCBD03B6249C99182B7C8CD19700C362C46A01",
    +-            "3809B2B7CC1B28CC5A87926AAD83FD28789E81E2C9E3BF10",
    +-            "17434386626D14F3DBF01760D9213A3E1CF37AEC437D668A",
    +-            "20000000000000000000000050508CB89F652824E06B8173",
    +-            4);
    +-
    +-        add("X9.62 c2tnb191v3", "1.2.840.10045.3.0.7", B,
    +-            "800000000000000000000000000000000000000000000201",
    +-            "6C01074756099122221056911C77D77E77A777E7E7E77FCB",
    +-            "71FE1AF926CF847989EFEF8DB459F66394D90F32AD3F15E8",
    +-            "375D4CE24FDE434489DE8746E71786015009E66E38A926DD",
    +-            "545A39176196575D985999366E6AD34CE0A77CD7127B06BE",
    +-            "155555555555555555555555610C0B196812BFB6288A3EA3",
    +-            6);
    +-
    +-        add("X9.62 c2tnb239v1", "1.2.840.10045.3.0.11", B,
    +-            "800000000000000000000000000000000000000000000000001000000001",
    +-            "32010857077C5431123A46B808906756F543423E8D27877578125778AC76",
    +-            "790408F2EEDAF392B012EDEFB3392F30F4327C0CA3F31FC383C422AA8C16",
    +-            "57927098FA932E7C0A96D3FD5B706EF7E5F5C156E16B7E7C86038552E91D",
    +-            "61D8EE5077C33FECF6F1A16B268DE469C3C7744EA9A971649FC7A9616305",
    +-            "2000000000000000000000000000000F4D42FFE1492A4993F1CAD666E447",
    +-            4);
    +-
    +-        add("X9.62 c2tnb239v2", "1.2.840.10045.3.0.12", B,
    +-            "800000000000000000000000000000000000000000000000001000000001",
    +-            "4230017757A767FAE42398569B746325D45313AF0766266479B75654E65F",
    +-            "5037EA654196CFF0CD82B2C14A2FCF2E3FF8775285B545722F03EACDB74B",
    +-            "28F9D04E900069C8DC47A08534FE76D2B900B7D7EF31F5709F200C4CA205",
    +-            "5667334C45AFF3B5A03BAD9DD75E2C71A99362567D5453F7FA6E227EC833",
    +-            "1555555555555555555555555555553C6F2885259C31E3FCDF154624522D",
    +-            6);
    +-
    +-        add("X9.62 c2tnb239v3", "1.2.840.10045.3.0.13", B,
    +-            "800000000000000000000000000000000000000000000000001000000001",
    +-            "01238774666A67766D6676F778E676B66999176666E687666D8766C66A9F",
    +-            "6A941977BA9F6A435199ACFC51067ED587F519C5ECB541B8E44111DE1D40",
    +-            "70F6E9D04D289C4E89913CE3530BFDE903977D42B146D539BF1BDE4E9C92",
    +-            "2E5A0EAF6E5E1305B9004DCE5C0ED7FE59A35608F33837C816D80B79F461",
    +-            "0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCAC4912D2D9DF903EF9888B8A0E4CFF",
    +-            0xA);
    +-
    +-        add("X9.62 c2tnb359v1", "1.2.840.10045.3.0.18", B,
    +-            "800000000000000000000000000000000000000000000000000000000000000000000000100000000000000001",
    +-            "5667676A654B20754F356EA92017D946567C46675556F19556A04616B567D223A5E05656FB549016A96656A557",
    +-            "2472E2D0197C49363F1FE7F5B6DB075D52B6947D135D8CA445805D39BC345626089687742B6329E70680231988",
    +-            "3C258EF3047767E7EDE0F1FDAA79DAEE3841366A132E163ACED4ED2401DF9C6BDCDE98E8E707C07A2239B1B097",
    +-            "53D7E08529547048121E9C95F3791DD804963948F34FAE7BF44EA82365DC7868FE57E4AE2DE211305A407104BD",
    +-            "01AF286BCA1AF286BCA1AF286BCA1AF286BCA1AF286BC9FB8F6B85C556892C20A7EB964FE7719E74F490758D3B",
    +-            0x4C);
    +-
    +-        add("X9.62 c2tnb431r1", "1.2.840.10045.3.0.20", B,
    +-            "800000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000001",
    +-            "1A827EF00DD6FC0E234CAF046C6A5D8A85395B236CC4AD2CF32A0CADBDC9DDF620B0EB9906D0957F6C6FEACD615468DF104DE296CD8F",
    +-            "10D9B4A3D9047D8B154359ABFB1B7F5485B04CEB868237DDC9DEDA982A679A5A919B626D4E50A8DD731B107A9962381FB5D807BF2618",
    +-            "120FC05D3C67A99DE161D2F4092622FECA701BE4F50F4758714E8A87BBF2A658EF8C21E7C5EFE965361F6C2999C0C247B0DBD70CE6B7",
    +-            "20D0AF8903A96F8D5FA2C255745D3C451B302C9346D9B7E485E7BCE41F6B591F3E8F6ADDCBB0BC4C2F947A7DE1A89B625D6A598B3760",
    +-            "0340340340340340340340340340340340340340340340340340340323C313FAB50589703B5EC68D3587FEC60D161CC149C1AD4A91",
    +-            0x2760);
    +-
    +-        /* ANSI X9.62 binary curves from the 1998 standard but forbidden
    +-         * in the 2005 version of the standard.
    +-         * We don't register them but leave them here for the time being in
    +-         * case we need to support them after all.
    +-         */
    +-/*
    +-        add("X9.62 c2pnb163v1", "1.2.840.10045.3.0.1", B,
    +-            "080000000000000000000000000000000000000107",
    +-            "072546B5435234A422E0789675F432C89435DE5242",
    +-            "00C9517D06D5240D3CFF38C74B20B6CD4D6F9DD4D9",
    +-            "07AF69989546103D79329FCC3D74880F33BBE803CB",
    +-            "01EC23211B5966ADEA1D3F87F7EA5848AEF0B7CA9F",
    +-            "0400000000000000000001E60FC8821CC74DAEAFC1",
    +-            2);
    +-
    +-        add("X9.62 c2pnb163v2", "1.2.840.10045.3.0.2", B,
    +-            "080000000000000000000000000000000000000107",
    +-            "0108B39E77C4B108BED981ED0E890E117C511CF072",
    +-            "0667ACEB38AF4E488C407433FFAE4F1C811638DF20",
    +-            "0024266E4EB5106D0A964D92C4860E2671DB9B6CC5",
    +-            "079F684DDF6684C5CD258B3890021B2386DFD19FC5",
    +-            "03FFFFFFFFFFFFFFFFFFFDF64DE1151ADBB78F10A7",
    +-            2);
    +-
    +-        add("X9.62 c2pnb163v3", "1.2.840.10045.3.0.3", B,
    +-            "080000000000000000000000000000000000000107",
    +-            "07A526C63D3E25A256A007699F5447E32AE456B50E",
    +-            "03F7061798EB99E238FD6F1BF95B48FEEB4854252B",
    +-            "02F9F87B7C574D0BDECF8A22E6524775F98CDEBDCB",
    +-            "05B935590C155E17EA48EB3FF3718B893DF59A05D0",
    +-            "03FFFFFFFFFFFFFFFFFFFE1AEE140F110AFF961309",
    +-            2);
    +-
    +-        add("X9.62 c2pnb176w1", "1.2.840.10045.3.0.4", B,
    +-            "0100000000000000000000000000000000080000000007",
    +-            "E4E6DB2995065C407D9D39B8D0967B96704BA8E9C90B",
    +-            "5DDA470ABE6414DE8EC133AE28E9BBD7FCEC0AE0FFF2",
    +-            "8D16C2866798B600F9F08BB4A8E860F3298CE04A5798",
    +-            "6FA4539C2DADDDD6BAB5167D61B436E1D92BB16A562C",
    +-            "00010092537397ECA4F6145799D62B0A19CE06FE26AD",
    +-            0xFF6E);
    +-
    +-        add("X9.62 c2pnb208w1", "1.2.840.10045.3.0.10", B,
    +-            "010000000000000000000000000000000800000000000000000007",
    +-            "0000000000000000000000000000000000000000000000000000",
    +-            "C8619ED45A62E6212E1160349E2BFA844439FAFC2A3FD1638F9E",
    +-            "89FDFBE4ABE193DF9559ECF07AC0CE78554E2784EB8C1ED1A57A",
    +-            "0F55B51A06E78E9AC38A035FF520D8B01781BEB1A6BB08617DE3",
    +-            "000101BAF95C9723C57B6C21DA2EFF2D5ED588BDD5717E212F9D",
    +-            0xFE48);
    +-
    +-        add("X9.62 c2pnb272w1", "1.2.840.10045.3.0.16", B,
    +-            "010000000000000000000000000000000000000000000000000000010000000000000B",
    +-            "91A091F03B5FBA4AB2CCF49C4EDD220FB028712D42BE752B2C40094DBACDB586FB20",
    +-            "7167EFC92BB2E3CE7C8AAAFF34E12A9C557003D7C73A6FAF003F99F6CC8482E540F7",
    +-            "6108BABB2CEEBCF787058A056CBE0CFE622D7723A289E08A07AE13EF0D10D171DD8D",
    +-            "10C7695716851EEF6BA7F6872E6142FBD241B830FF5EFCACECCAB05E02005DDE9D23",
    +-            "000100FAF51354E0E39E4892DF6E319C72C8161603FA45AA7B998A167B8F1E629521",
    +-            0xFF06);
    +-
    +-        add("X9.62 c2pnb304w1", "1.2.840.10045.3.0.17", B,
    +-            "010000000000000000000000000000000000000000000000000000000000000000000000000807",
    +-            "FD0D693149A118F651E6DCE6802085377E5F882D1B510B44160074C1288078365A0396C8E681",
    +-            "BDDB97E555A50A908E43B01C798EA5DAA6788F1EA2794EFCF57166B8C14039601E55827340BE",
    +-            "197B07845E9BE2D96ADB0F5F3C7F2CFFBD7A3EB8B6FEC35C7FD67F26DDF6285A644F740A2614",
    +-            "E19FBEB76E0DA171517ECF401B50289BF014103288527A9B416A105E80260B549FDC1B92C03B",
    +-            "000101D556572AABAC800101D556572AABAC8001022D5C91DD173F8FB561DA6899164443051D",
    +-            0xFE2E);
    +-
    +-        add("X9.62 c2pnb368w1", "1.2.840.10045.3.0.19", B,
    +-            "0100000000000000000000000000000000000000000000000000000000000000000000002000000000000000000007",
    +-            "E0D2EE25095206F5E2A4F9ED229F1F256E79A0E2B455970D8D0D865BD94778C576D62F0AB7519CCD2A1A906AE30D",
    +-            "FC1217D4320A90452C760A58EDCD30C8DD069B3C34453837A34ED50CB54917E1C2112D84D164F444F8F74786046A",
    +-            "1085E2755381DCCCE3C1557AFA10C2F0C0C2825646C5B34A394CBCFA8BC16B22E7E789E927BE216F02E1FB136A5F",
    +-            "7B3EB1BDDCBA62D5D8B2059B525797FC73822C59059C623A45FF3843CEE8F87CD1855ADAA81E2A0750B80FDA2310",
    +-            "00010090512DA9AF72B08349D98A5DD4C7B0532ECA51CE03E2D10F3B7AC579BD87E909AE40A6F131E9CFCE5BD967",
    +-            0xFF70);
    +-*/
    +-
    +         SPLIT_PATTERN = null;
    +     }
    + 
    diff -Nru openjdk-6-6b33-1.13.5/patches/pr2179-avoid_x86_workaround_on_zero.patch openjdk-6-6b34-1.13.6/patches/pr2179-avoid_x86_workaround_on_zero.patch
    --- openjdk-6-6b33-1.13.5/patches/pr2179-avoid_x86_workaround_on_zero.patch	1970-01-01 00:00:00.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/pr2179-avoid_x86_workaround_on_zero.patch	2015-01-20 09:12:43.000000000 +0000
    @@ -0,0 +1,33 @@
    +# HG changeset patch
    +# User andrew
    +# Date 1405461315 -3600
    +#      Tue Jul 15 22:55:15 2014 +0100
    +# Node ID fae3b09fe959294f7a091a6ecaae91daf1cb4f5c
    +# Parent  a61c666945e741b9b69ba9b27f93eb0951dda696
    +PR1868: Avoid x86 workaround when running Zero rather than a JIT
    +Contributed-by: Matthias Klose 
    +
    +diff -r a61c666945e7 -r fae3b09fe959 src/os/linux/vm/os_linux.cpp
    +--- openjdk/hotspot/src/os/linux/vm/os_linux.cpp	Tue Jun 03 17:16:46 2014 +0100
    ++++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp	Tue Jul 15 22:55:15 2014 +0100
    +@@ -4925,7 +4925,7 @@
    + 
    +   Linux::capture_initial_stack(JavaThread::stack_size_at_create());
    + 
    +-#if defined(IA32)
    ++#if defined(IA32) && !defined(ZERO)
    +   workaround_expand_exec_shield_cs_limit();
    + #endif
    + 
    +diff -r a61c666945e7 -r fae3b09fe959 src/os_cpu/linux_x86/vm/os_linux_x86.cpp
    +--- openjdk/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp	Tue Jun 03 17:16:46 2014 +0100
    ++++ openjdk/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp	Tue Jul 15 22:55:15 2014 +0100
    +@@ -880,7 +880,7 @@
    +  * updates (JDK-8023956).
    +  */
    + void os::workaround_expand_exec_shield_cs_limit() {
    +-#if defined(IA32)
    ++#if defined(IA32) && !defined(ZERO)
    +   size_t page_size = os::vm_page_size();
    +   /*
    +    * Take the highest VA the OS will give us and exec
    diff -Nru openjdk-6-6b33-1.13.5/patches/rh1022017.patch openjdk-6-6b34-1.13.6/patches/rh1022017.patch
    --- openjdk-6-6b33-1.13.5/patches/rh1022017.patch	1970-01-01 00:00:00.000000000 +0000
    +++ openjdk-6-6b34-1.13.6/patches/rh1022017.patch	2015-01-20 09:12:43.000000000 +0000
    @@ -0,0 +1,44 @@
    +diff -r cdfd161703ed src/share/classes/sun/security/ssl/HelloExtensions.java
    +--- openjdk/jdk/src/share/classes/sun/security/ssl/HelloExtensions.java	Wed Oct 23 05:22:55 2013 +0100
    ++++ openjdk/jdk/src/share/classes/sun/security/ssl/HelloExtensions.java	Thu Nov 07 12:41:45 2013 +0000
    +@@ -435,25 +435,11 @@
    +     // the extension value to send in the ClientHello message
    +     static final SupportedEllipticCurvesExtension DEFAULT;
    + 
    +-    private static final boolean fips;
    +-
    +     static {
    +-        int[] ids;
    +-        fips = SunJSSE.isFIPS();
    +-        if (fips == false) {
    +-            ids = new int[] {
    +-                // NIST curves first
    +-                // prefer NIST P-256, rest in order of increasing key length
    +-                23, 1, 3, 19, 21, 6, 7, 9, 10, 24, 11, 12, 25, 13, 14,
    +-                // non-NIST curves
    +-                15, 16, 17, 2, 18, 4, 5, 20, 8, 22,
    +-            };
    +-        } else {
    +-            ids = new int[] {
    +-                // same as above, but allow only NIST curves in FIPS mode
    +-                23, 1, 3, 19, 21, 6, 7, 9, 10, 24, 11, 12, 25, 13, 14,
    +-            };
    +-        }
    ++	int[] ids = new int[] {
    ++	    // NSS currently only supports these three NIST curves
    ++	    23, 24, 25
    ++	};
    +         DEFAULT = new SupportedEllipticCurvesExtension(ids);
    +     }
    + 
    +@@ -545,10 +531,6 @@
    +         if ((index <= 0) || (index >= NAMED_CURVE_OID_TABLE.length)) {
    +             return false;
    +         }
    +-        if (fips == false) {
    +-            // in non-FIPS mode, we support all valid indices
    +-            return true;
    +-        }
    +         return DEFAULT.contains(index);
    +     }
    +