--- a/.hgtags-top-repo Tue Jul 24 11:05:52 2012 -0700
+++ b/.hgtags-top-repo Wed Jul 05 18:17:35 2017 +0200
@@ -169,3 +169,4 @@
633f2378c904c92bb922a6e19e9f62fe8eac14af jdk8-b45
27fa766a2298ba8347dc198f0cf85ba6618e17db jdk8-b46
1dcb4b7b9373e64e135c12fe1f8699f1f80e51e8 jdk8-b47
+3f6c72d1c2a6e5c9e7d81c3dc984886678a128ad jdk8-b48
--- a/THIRD_PARTY_README Tue Jul 24 11:05:52 2012 -0700
+++ b/THIRD_PARTY_README Wed Jul 05 18:17:35 2017 +0200
@@ -3383,3 +3383,397 @@
-------------------------------------------------------------------------------
+%% This notice is provided with respect to Mozilla Network Security
+Services (NSS), which is supplied with the JDK test suite in the OpenJDK
+source code repository. It is licensed under Mozilla Public License (MPL),
+version 2.0.
+
+The NSS libraries are supplied in executable form, built from unmodified
+NSS source code labeled with the "NSS_3.13.1_RTM" release tag.
+
+The NSS source code is available in the OpenJDK source code repository at:
+ jdk/test/sun/security/pkcs11/nss/src
+
+The NSS libraries are available in the OpenJDK source code repository at:
+ jdk/test/sun/security/pkcs11/nss/lib
+
+--- begin of LICENSE ---
+
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+ means each individual or legal entity that creates, contributes to
+ the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+ means the combination of the Contributions of others (if any) used
+ by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+ means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+ means Source Code Form to which the initial Contributor has attached
+ the notice in Exhibit A, the Executable Form of such Source Code
+ Form, and Modifications of such Source Code Form, in each case
+ including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+ means
+
+ (a) that the initial Contributor has attached the notice described
+ in Exhibit B to the Covered Software; or
+
+ (b) that the Covered Software was made available under the terms of
+ version 1.1 or earlier of the License, but not also under the
+ terms of a Secondary License.
+
+1.6. "Executable Form"
+ means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+ means a work that combines Covered Software with other material, in
+ a separate file or files, that is not Covered Software.
+
+1.8. "License"
+ means this document.
+
+1.9. "Licensable"
+ means having the right to grant, to the maximum extent possible,
+ whether at the time of the initial grant or subsequently, any and
+ all of the rights conveyed by this License.
+
+1.10. "Modifications"
+ means any of the following:
+
+ (a) any file in Source Code Form that results from an addition to,
+ deletion from, or modification of the contents of Covered
+ Software; or
+
+ (b) any new file in Source Code Form that contains any Covered
+ Software.
+
+1.11. "Patent Claims" of a Contributor
+ means any patent claim(s), including without limitation, method,
+ process, and apparatus claims, in any patent Licensable by such
+ Contributor that would be infringed, but for the grant of the
+ License, by the making, using, selling, offering for sale, having
+ made, import, or transfer of either its Contributions or its
+ Contributor Version.
+
+1.12. "Secondary License"
+ means either the GNU General Public License, Version 2.0, the GNU
+ Lesser General Public License, Version 2.1, the GNU Affero General
+ Public License, Version 3.0, or any later versions of those
+ licenses.
+
+1.13. "Source Code Form"
+ means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+ means an individual or a legal entity exercising rights under this
+ License. For legal entities, "You" includes any entity that
+ controls, is controlled by, or is under common control with You. For
+ purposes of this definition, "control" means (a) the power, direct
+ or indirect, to cause the direction or management of such entity,
+ whether by contract or otherwise, or (b) ownership of more than
+ fifty percent (50%) of the outstanding shares or beneficial
+ ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+ Licensable by such Contributor to use, reproduce, make available,
+ modify, display, perform, distribute, and otherwise exploit its
+ Contributions, either on an unmodified basis, with Modifications, or
+ as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+ for sale, have made, import, and otherwise transfer either its
+ Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+ or
+
+(b) for infringements caused by: (i) Your and any other third party's
+ modifications of Covered Software, or (ii) the combination of its
+ Contributions with other software (except as part of its Contributor
+ Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+ its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+ Form, as described in Section 3.1, and You must inform recipients of
+ the Executable Form how they can obtain a copy of such Source Code
+ Form by reasonable means in a timely manner, at a charge no more
+ than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+ License, or sublicense it under different terms, provided that the
+ license for the Executable Form does not attempt to limit or alter
+ the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+* *
+* 6. Disclaimer of Warranty *
+* ------------------------- *
+* *
+* Covered Software is provided under this License on an "as is" *
+* basis, without warranty of any kind, either expressed, implied, or *
+* statutory, including, without limitation, warranties that the *
+* Covered Software is free of defects, merchantable, fit for a *
+* particular purpose or non-infringing. The entire risk as to the *
+* quality and performance of the Covered Software is with You. *
+* Should any Covered Software prove defective in any respect, You *
+* (not any Contributor) assume the cost of any necessary servicing, *
+* repair, or correction. This disclaimer of warranty constitutes an *
+* essential part of this License. No use of any Covered Software is *
+* authorized under this License except under this disclaimer. *
+* *
+************************************************************************
+
+************************************************************************
+* *
+* 7. Limitation of Liability *
+* -------------------------- *
+* *
+* Under no circumstances and under no legal theory, whether tort *
+* (including negligence), contract, or otherwise, shall any *
+* Contributor, or anyone who distributes Covered Software as *
+* permitted above, be liable to You for any direct, indirect, *
+* special, incidental, or consequential damages of any character *
+* including, without limitation, damages for lost profits, loss of *
+* goodwill, work stoppage, computer failure or malfunction, or any *
+* and all other commercial damages or losses, even if such party *
+* shall have been informed of the possibility of such damages. This *
+* limitation of liability shall not apply to liability for death or *
+* personal injury resulting from such party's negligence to the *
+* extent applicable law prohibits such limitation. Some *
+* jurisdictions do not allow the exclusion or limitation of *
+* incidental or consequential damages, so this exclusion and *
+* limitation may not apply to You. *
+* *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - "Incompatible With Secondary Licenses" Notice
+---------------------------------------------------------
+
+ This Source Code Form is "Incompatible With Secondary Licenses", as
+ defined by the Mozilla Public License, v. 2.0.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
--- a/corba/.hgtags Tue Jul 24 11:05:52 2012 -0700
+++ b/corba/.hgtags Wed Jul 05 18:17:35 2017 +0200
@@ -169,3 +169,4 @@
747dad9e9d37d244a5c765a1afe9194f7ddae118 jdk8-b45
30141e598d72a6146126cb86b034ed6d0bd191b3 jdk8-b46
21e46ea21c6a26246fb7a1926ac7fe8d580d0518 jdk8-b47
+7e2b179a5b4dbd3f097e28daa00abfcc72ba3e0b jdk8-b48
--- a/hotspot/.hgtags Tue Jul 24 11:05:52 2012 -0700
+++ b/hotspot/.hgtags Wed Jul 05 18:17:35 2017 +0200
@@ -261,3 +261,4 @@
cf37a594c38db2ea926954154636f9f81da2e032 jdk8-b46
0c7bb1f4f9c8062b5c5bfa56b3bdca44839b4109 jdk8-b47
66b0450071c1534e014b131892cc86b63f1d009c hs24-b16
+1e26f61bbb521642639f56fae11326f1932f5a7d jdk8-b48
--- a/jaxp/.hgtags Tue Jul 24 11:05:52 2012 -0700
+++ b/jaxp/.hgtags Wed Jul 05 18:17:35 2017 +0200
@@ -169,3 +169,4 @@
57476f66e13c55eea2f2fe2b858369a4c64b9936 jdk8-b45
300f45e990643af230d6cca39477ff62c44a9a54 jdk8-b46
404521944ac9383afda7d55d60713b212c730646 jdk8-b47
+1c88da9a1365797e49be77ae42c34bbc0a3c3f0c jdk8-b48
--- a/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java Wed Jul 05 18:17:35 2017 +0200
@@ -602,7 +602,7 @@
if (reader == null) {
stream = xmlInputSource.getByteStream();
if (stream == null) {
- URL location = new URL(escapeNonUSAscii(expandedSystemId));
+ URL location = new URL(expandedSystemId);
URLConnection connect = location.openConnection();
if (!(connect instanceof HttpURLConnection)) {
stream = connect.getInputStream();
@@ -2586,76 +2586,6 @@
} // fixURI(String):String
- /**
- * Escape invalid URI characters.
- *
- * Passed a URI that contains invalid characters (like spaces, non-ASCII Unicode characters, and the like),
- * this function percent encodes the invalid characters per the URI specification (i.e., as a sequence of
- * %-encoded UTF-8 octets).
- *
- * N.B. There are two problems. If the URI contains a '%' character, that might be an indication that
- * the URI has already been escaped by the author, or it might be an invalid '%'. In the former case,
- * it's important not to escape it, or we'll wind up with invalid, doubly-escaped '%'s. In the latter,
- * the URI is broken if we don't encode it. Similarly, a '#' character might be the start of a fragment
- * identifier or it might be an invalid '#'.
- *
- * Given that the former is vastly more likely than the latter in each case (most users are familiar with
- * the magic status of '%' and '#' and they occur relatively infrequently in filenames, and if the user parses
- * a proper Java File, we will already have %-escaped the URI), we simply assume that %'s and #'s are legit.
- *
- * Very rarely, we may be wrong. If so, tell the user to fix the clearly broken URI.
- */
- protected static String escapeNonUSAscii(String str) {
- if (str == null) {
- return str;
- }
- int len = str.length(), i=0, ch;
- for (; i < len; i++) {
- ch = str.charAt(i);
- // if it's not an ASCII 7 character, break here, and use UTF-8 encoding
- if (ch >= 128)
- break;
- }
-
- // we saw no non-ascii-7 character
- if (i == len) {
- return str;
- }
-
- // get UTF-8 bytes for the string
- StringBuffer buffer = new StringBuffer();
- byte[] bytes = null;
- byte b;
- try {
- bytes = str.getBytes("UTF-8");
- } catch (java.io.UnsupportedEncodingException e) {
- // should never happen
- return str;
- }
-
- len = bytes.length;
-
- // for each byte
- for (i = 0; i < len; i++) {
- b = bytes[i];
- // for non-ascii character: make it positive, then escape
- if (b < 0) {
- ch = b + 256;
- buffer.append('%');
- buffer.append(gHexChs[ch >> 4]);
- buffer.append(gHexChs[ch & 0xf]);
- }
- else if (b != '%' && b != '#' && gNeedEscaping[b]) {
- buffer.append('%');
- buffer.append(gAfterEscaping1[b]);
- buffer.append(gAfterEscaping2[b]);
- }
- else {
- buffer.append((char)b);
- }
- }
- return buffer.toString();
- }
//
// Package visible methods
--- a/jaxws/.hgtags Tue Jul 24 11:05:52 2012 -0700
+++ b/jaxws/.hgtags Wed Jul 05 18:17:35 2017 +0200
@@ -169,3 +169,4 @@
e80ac58b5ba904f24e125c742c30d0d740f05f86 jdk8-b45
ae368a83c2404b65c9e38c65e2aa081f2201ca74 jdk8-b46
fe6a060afc404dcf0921708a740de770666b781f jdk8-b47
+efb564de8a8ee397a65fab77d45cb20200f6ddd8 jdk8-b48
--- a/jdk/.hgtags Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/.hgtags Wed Jul 05 18:17:35 2017 +0200
@@ -169,3 +169,4 @@
b92353a01aa049bc508fc56f0347d5934b7c4390 jdk8-b45
8d2ed9d58453c8049715a72a6d26b6b66b37a94c jdk8-b46
00b22b23269a57d0bb46c57753be2fe9a9d2c1a3 jdk8-b47
+3e4ab821f46166fcf63e8fe5c8046216003c941f jdk8-b48
--- a/jdk/THIRD_PARTY_README Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/THIRD_PARTY_README Wed Jul 05 18:17:35 2017 +0200
@@ -3383,3 +3383,397 @@
-------------------------------------------------------------------------------
+%% This notice is provided with respect to Mozilla Network Security
+Services (NSS), which is supplied with the JDK test suite in the OpenJDK
+source code repository. It is licensed under Mozilla Public License (MPL),
+version 2.0.
+
+The NSS libraries are supplied in executable form, built from unmodified
+NSS source code labeled with the "NSS_3.13.1_RTM" release tag.
+
+The NSS source code is available in the OpenJDK source code repository at:
+ jdk/test/sun/security/pkcs11/nss/src
+
+The NSS libraries are available in the OpenJDK source code repository at:
+ jdk/test/sun/security/pkcs11/nss/lib
+
+--- begin of LICENSE ---
+
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+ means each individual or legal entity that creates, contributes to
+ the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+ means the combination of the Contributions of others (if any) used
+ by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+ means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+ means Source Code Form to which the initial Contributor has attached
+ the notice in Exhibit A, the Executable Form of such Source Code
+ Form, and Modifications of such Source Code Form, in each case
+ including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+ means
+
+ (a) that the initial Contributor has attached the notice described
+ in Exhibit B to the Covered Software; or
+
+ (b) that the Covered Software was made available under the terms of
+ version 1.1 or earlier of the License, but not also under the
+ terms of a Secondary License.
+
+1.6. "Executable Form"
+ means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+ means a work that combines Covered Software with other material, in
+ a separate file or files, that is not Covered Software.
+
+1.8. "License"
+ means this document.
+
+1.9. "Licensable"
+ means having the right to grant, to the maximum extent possible,
+ whether at the time of the initial grant or subsequently, any and
+ all of the rights conveyed by this License.
+
+1.10. "Modifications"
+ means any of the following:
+
+ (a) any file in Source Code Form that results from an addition to,
+ deletion from, or modification of the contents of Covered
+ Software; or
+
+ (b) any new file in Source Code Form that contains any Covered
+ Software.
+
+1.11. "Patent Claims" of a Contributor
+ means any patent claim(s), including without limitation, method,
+ process, and apparatus claims, in any patent Licensable by such
+ Contributor that would be infringed, but for the grant of the
+ License, by the making, using, selling, offering for sale, having
+ made, import, or transfer of either its Contributions or its
+ Contributor Version.
+
+1.12. "Secondary License"
+ means either the GNU General Public License, Version 2.0, the GNU
+ Lesser General Public License, Version 2.1, the GNU Affero General
+ Public License, Version 3.0, or any later versions of those
+ licenses.
+
+1.13. "Source Code Form"
+ means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+ means an individual or a legal entity exercising rights under this
+ License. For legal entities, "You" includes any entity that
+ controls, is controlled by, or is under common control with You. For
+ purposes of this definition, "control" means (a) the power, direct
+ or indirect, to cause the direction or management of such entity,
+ whether by contract or otherwise, or (b) ownership of more than
+ fifty percent (50%) of the outstanding shares or beneficial
+ ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+ Licensable by such Contributor to use, reproduce, make available,
+ modify, display, perform, distribute, and otherwise exploit its
+ Contributions, either on an unmodified basis, with Modifications, or
+ as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+ for sale, have made, import, and otherwise transfer either its
+ Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+ or
+
+(b) for infringements caused by: (i) Your and any other third party's
+ modifications of Covered Software, or (ii) the combination of its
+ Contributions with other software (except as part of its Contributor
+ Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+ its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+ Form, as described in Section 3.1, and You must inform recipients of
+ the Executable Form how they can obtain a copy of such Source Code
+ Form by reasonable means in a timely manner, at a charge no more
+ than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+ License, or sublicense it under different terms, provided that the
+ license for the Executable Form does not attempt to limit or alter
+ the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+* *
+* 6. Disclaimer of Warranty *
+* ------------------------- *
+* *
+* Covered Software is provided under this License on an "as is" *
+* basis, without warranty of any kind, either expressed, implied, or *
+* statutory, including, without limitation, warranties that the *
+* Covered Software is free of defects, merchantable, fit for a *
+* particular purpose or non-infringing. The entire risk as to the *
+* quality and performance of the Covered Software is with You. *
+* Should any Covered Software prove defective in any respect, You *
+* (not any Contributor) assume the cost of any necessary servicing, *
+* repair, or correction. This disclaimer of warranty constitutes an *
+* essential part of this License. No use of any Covered Software is *
+* authorized under this License except under this disclaimer. *
+* *
+************************************************************************
+
+************************************************************************
+* *
+* 7. Limitation of Liability *
+* -------------------------- *
+* *
+* Under no circumstances and under no legal theory, whether tort *
+* (including negligence), contract, or otherwise, shall any *
+* Contributor, or anyone who distributes Covered Software as *
+* permitted above, be liable to You for any direct, indirect, *
+* special, incidental, or consequential damages of any character *
+* including, without limitation, damages for lost profits, loss of *
+* goodwill, work stoppage, computer failure or malfunction, or any *
+* and all other commercial damages or losses, even if such party *
+* shall have been informed of the possibility of such damages. This *
+* limitation of liability shall not apply to liability for death or *
+* personal injury resulting from such party's negligence to the *
+* extent applicable law prohibits such limitation. Some *
+* jurisdictions do not allow the exclusion or limitation of *
+* incidental or consequential damages, so this exclusion and *
+* limitation may not apply to You. *
+* *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - "Incompatible With Secondary Licenses" Notice
+---------------------------------------------------------
+
+ This Source Code Form is "Incompatible With Secondary Licenses", as
+ defined by the Mozilla Public License, v. 2.0.
+
+--- end of LICENSE ---
+
+-------------------------------------------------------------------------------
+
--- a/jdk/make/sun/security/Makefile Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/make/sun/security/Makefile Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1996, 2011, 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
@@ -44,15 +44,8 @@
JGSS_WRAPPER = jgss/wrapper
endif
-# Build PKCS#11 on all platforms except 64-bit Windows.
-# We exclude windows-amd64 because we don't have any
-# 64-bit PKCS#11 implementations to test with on that platform.
+# Build PKCS#11 on all platforms
PKCS11 = pkcs11
-ifeq ($(ARCH_DATA_MODEL), 64)
- ifeq ($(PLATFORM), windows)
- PKCS11 =
- endif
-endif
# Build Microsoft CryptoAPI provider only on Windows platform.
MSCAPI =
--- a/jdk/src/macosx/classes/com/apple/laf/AquaPanelUI.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/classes/com/apple/laf/AquaPanelUI.java Wed Jul 05 18:17:35 2017 +0200
@@ -32,10 +32,20 @@
import com.apple.laf.AquaUtils.RecyclableSingleton;
import com.apple.laf.AquaUtils.RecyclableSingletonFromDefaultConstructor;
+import java.awt.Graphics;
+
public class AquaPanelUI extends BasicPanelUI {
static RecyclableSingleton<AquaPanelUI> instance = new RecyclableSingletonFromDefaultConstructor<AquaPanelUI>(AquaPanelUI.class);
public static ComponentUI createUI(final JComponent c) {
return instance.get();
}
+
+ @Override
+ public final void update(final Graphics g, final JComponent c) {
+ if (c.isOpaque()) {
+ AquaUtils.fillRect(g, c);
+ }
+ paint(g, c);
+ }
}
--- a/jdk/src/macosx/classes/com/apple/laf/AquaRootPaneUI.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/classes/com/apple/laf/AquaRootPaneUI.java Wed Jul 05 18:17:35 2017 +0200
@@ -319,4 +319,12 @@
updateComponentTreeUIActivation(element, active);
}
}
+
+ @Override
+ public final void update(final Graphics g, final JComponent c) {
+ if (c.isOpaque()) {
+ AquaUtils.fillRect(g, c);
+ }
+ paint(g, c);
+ }
}
--- a/jdk/src/macosx/classes/com/apple/laf/AquaToolBarUI.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/classes/com/apple/laf/AquaToolBarUI.java Wed Jul 05 18:17:35 2017 +0200
@@ -73,9 +73,7 @@
g.translate(x, y);
if (c.isOpaque()) {
- final Color background = c.getBackground();
- g.setColor(background);
- g.fillRect(0, 0, w - 1, h - 1);
+ AquaUtils.fillRect(g, c, c.getBackground(), 0, 0, w - 1, h - 1);
}
final Color oldColor = g.getColor();
@@ -137,4 +135,12 @@
return true;
}
}
+
+ @Override
+ public final void update(final Graphics g, final JComponent c) {
+ if (c.isOpaque()) {
+ AquaUtils.fillRect(g, c);
+ }
+ paint(g, c);
+ }
}
--- a/jdk/src/macosx/classes/com/apple/laf/AquaUtils.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/classes/com/apple/laf/AquaUtils.java Wed Jul 05 18:17:35 2017 +0200
@@ -28,18 +28,19 @@
import java.awt.*;
import java.awt.image.*;
import java.lang.ref.SoftReference;
-import java.lang.ref.WeakReference;
import java.lang.reflect.Method;
import java.security.PrivilegedAction;
import java.util.*;
import javax.swing.*;
import javax.swing.border.Border;
+import javax.swing.plaf.UIResource;
import sun.awt.AppContext;
import sun.lwawt.macosx.CImage;
import sun.lwawt.macosx.CImage.Creator;
+import sun.lwawt.macosx.CPlatformWindow;
import sun.swing.SwingUtilities2;
import com.apple.laf.AquaImageFactory.SlicedImageControl;
@@ -389,4 +390,51 @@
return false;
}
}
+
+ protected static boolean isWindowTextured(final Component c) {
+ if (!(c instanceof JComponent)) {
+ return false;
+ }
+ final JRootPane pane = ((JComponent) c).getRootPane();
+ if (pane == null) {
+ return false;
+ }
+ Object prop = pane.getClientProperty(
+ CPlatformWindow.WINDOW_BRUSH_METAL_LOOK);
+ if (prop != null) {
+ return Boolean.parseBoolean(prop.toString());
+ }
+ prop = pane.getClientProperty(CPlatformWindow.WINDOW_STYLE);
+ return prop != null && "textured".equals(prop);
+ }
+
+ private static Color resetAlpha(final Color color) {
+ return new Color(color.getRed(), color.getGreen(), color.getBlue(), 0);
+ }
+
+ protected static void fillRect(final Graphics g, final Component c) {
+ fillRect(g, c, c.getBackground(), 0, 0, c.getWidth(), c.getHeight());
+ }
+
+ protected static void fillRect(final Graphics g, final Component c,
+ final Color color, final int x, final int y,
+ final int w, final int h) {
+ if (!(g instanceof Graphics2D)) {
+ return;
+ }
+ final Graphics2D cg = (Graphics2D) g.create();
+ try {
+ if (color instanceof UIResource && isWindowTextured(c)
+ && color.equals(SystemColor.window)) {
+ cg.setComposite(AlphaComposite.Src);
+ cg.setColor(resetAlpha(color));
+ } else {
+ cg.setColor(color);
+ }
+ cg.fillRect(x, y, w, h);
+ } finally {
+ cg.dispose();
+ }
+ }
}
+
--- a/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferences.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferences.java Wed Jul 05 18:17:35 2017 +0200
@@ -35,16 +35,16 @@
private static final String defaultAppName = "com.apple.java.util.prefs";
// true if this node is a child of userRoot or is userRoot
- private boolean isUser;
+ private final boolean isUser;
// true if this node is userRoot or systemRoot
- private boolean isRoot;
+ private final boolean isRoot;
// CF's storage location for this node and its keys
- private MacOSXPreferencesFile file;
+ private final MacOSXPreferencesFile file;
// absolutePath() + "/"
- private String path;
+ private final String path;
// User root and system root nodes
private static MacOSXPreferences userRoot = null;
@@ -73,36 +73,40 @@
// Create a new root node. Called by getUserRoot() and getSystemRoot()
// Synchronization is provided by the caller.
- private MacOSXPreferences(boolean newIsUser)
- {
- super(null, "");
- isUser = newIsUser;
- isRoot = true;
-
- initFields();
+ private MacOSXPreferences(boolean newIsUser) {
+ this(null, "", false, true, newIsUser);
}
// Create a new non-root node with the given parent.
// Called by childSpi().
- private MacOSXPreferences(MacOSXPreferences parent, String name)
+ private MacOSXPreferences(MacOSXPreferences parent, String name) {
+ this(parent, name, false, false, false);
+ }
+
+ private MacOSXPreferences(MacOSXPreferences parent, String name,
+ boolean isNew)
{
- super(parent, name);
- isUser = isUserNode();
- isRoot = false;
-
- initFields();
+ this(parent, name, isNew, false, false);
}
-
- private void initFields()
+ private MacOSXPreferences(MacOSXPreferences parent, String name,
+ boolean isNew, boolean isRoot, boolean isUser)
{
+ super(parent, name);
+ this.isRoot = isRoot;
+ if (isRoot)
+ this.isUser = isUser;
+ else
+ this.isUser = isUserNode();
path = isRoot ? absolutePath() : absolutePath() + "/";
file = cfFileForNode(isUser);
- newNode = file.addNode(path);
+ if (isNew)
+ newNode = isNew;
+ else
+ newNode = file.addNode(path);
}
-
// Create and return the MacOSXPreferencesFile for this node.
// Does not write anything to the file.
private MacOSXPreferencesFile cfFileForNode(boolean isUser)
@@ -160,7 +164,7 @@
// AbstractPreferences implementation
@Override
protected void removeNodeSpi()
- throws BackingStoreException
+ throws BackingStoreException
{
// Disallow flush or sync between these two operations
// (they may be manipulating two different files)
@@ -180,7 +184,7 @@
// AbstractPreferences implementation
@Override
protected String[] childrenNamesSpi()
- throws BackingStoreException
+ throws BackingStoreException
{
String[] result = file.getChildrenForNode(path);
if (result == null) throw new BackingStoreException("Couldn't get list of children for node '" + path + "'");
@@ -190,7 +194,7 @@
// AbstractPreferences implementation
@Override
protected String[] keysSpi()
- throws BackingStoreException
+ throws BackingStoreException
{
String[] result = file.getKeysForNode(path);
if (result == null) throw new BackingStoreException("Couldn't get list of keys for node '" + path + "'");
@@ -204,15 +208,15 @@
// Add to parent's child list here and disallow sync
// because parent and child might be in different files.
synchronized(MacOSXPreferencesFile.class) {
- file.addChildToNode(path, name);
- return new MacOSXPreferences(this, name);
+ boolean isNew = file.addChildToNode(path, name);
+ return new MacOSXPreferences(this, name, isNew);
}
}
// AbstractPreferences override
@Override
public void flush()
- throws BackingStoreException
+ throws BackingStoreException
{
// Flush should *not* check for removal, unlike sync, but should
// prevent simultaneous removal.
@@ -227,7 +231,7 @@
// AbstractPreferences implementation
@Override
protected void flushSpi()
- throws BackingStoreException
+ throws BackingStoreException
{
// nothing here - overridden flush() doesn't call this
}
@@ -235,7 +239,7 @@
// AbstractPreferences override
@Override
public void sync()
- throws BackingStoreException
+ throws BackingStoreException
{
synchronized(lock) {
if (isRemoved())
@@ -256,7 +260,7 @@
// AbstractPreferences implementation
@Override
protected void syncSpi()
- throws BackingStoreException
+ throws BackingStoreException
{
// nothing here - overridden sync() doesn't call this
}
--- a/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferencesFile.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferencesFile.java Wed Jul 05 18:17:35 2017 +0200
@@ -360,11 +360,11 @@
}
}
- void addChildToNode(String path, String child)
+ boolean addChildToNode(String path, String child)
{
synchronized(MacOSXPreferencesFile.class) {
markChanged();
- addChildToNode(path, child+"/", appName, user, host);
+ return addChildToNode(path, child+"/", appName, user, host);
}
}
@@ -433,7 +433,7 @@
addNode(String path, String name, long user, long host);
private static final native void
removeNode(String path, String name, long user, long host);
- private static final native void
+ private static final native boolean
addChildToNode(String path, String child,
String name, long user, long host);
private static final native void
--- a/jdk/src/macosx/classes/sun/awt/CGraphicsDevice.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/classes/sun/awt/CGraphicsDevice.java Wed Jul 05 18:17:35 2017 +0200
@@ -48,6 +48,9 @@
private static AWTPermission fullScreenExclusivePermission;
+ // Save/restore DisplayMode for the Full Screen mode
+ private DisplayMode originalMode;
+
public CGraphicsDevice(int displayID) {
this.displayID = displayID;
configs = new GraphicsConfiguration[] {
@@ -124,18 +127,22 @@
}
boolean fsSupported = isFullScreenSupported();
+
if (fsSupported && old != null) {
// enter windowed mode (and restore original display mode)
exitFullScreenExclusive(old);
-
- // TODO: restore display mode
+ if (originalMode != null) {
+ setDisplayMode(originalMode);
+ originalMode = null;
+ }
}
super.setFullScreenWindow(w);
if (fsSupported && w != null) {
- // TODO: save current display mode
-
+ if (isDisplayChangeSupported()) {
+ originalMode = getDisplayMode();
+ }
// enter fullscreen mode
enterFullScreenExclusive(w);
}
--- a/jdk/src/macosx/classes/sun/java2d/opengl/CGLLayer.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/classes/sun/java2d/opengl/CGLLayer.java Wed Jul 05 18:17:35 2017 +0200
@@ -68,11 +68,12 @@
}
public boolean isOpaque() {
- return peer.isOpaque();
+ return !peer.isTranslucent();
}
public int getTransparency() {
- return (peer.isOpaque() ? Transparency.OPAQUE : Transparency.TRANSLUCENT);
+ return peer.isTranslucent() ? Transparency.TRANSLUCENT :
+ Transparency.OPAQUE;
}
public Object getDestination() {
--- a/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java Wed Jul 05 18:17:35 2017 +0200
@@ -424,8 +424,7 @@
@Override
public final Graphics getGraphics() {
- Graphics g = getWindowPeerOrSelf().isOpaque() ? getOnscreenGraphics()
- : getOffscreenGraphics();
+ final Graphics g = getOnscreenGraphics();
if (g != null) {
synchronized (getPeerTreeLock()){
applyConstrain(g);
@@ -443,13 +442,7 @@
final LWWindowPeer wp = getWindowPeerOrSelf();
return wp.getOnscreenGraphics(getForeground(), getBackground(),
getFont());
- }
- public final Graphics getOffscreenGraphics() {
- final LWWindowPeer wp = getWindowPeerOrSelf();
-
- return wp.getOffscreenGraphics(getForeground(), getBackground(),
- getFont());
}
private void applyConstrain(final Graphics g) {
@@ -463,7 +456,7 @@
}
//TODO Move this method to SG2D?
- private void SG2DConstraint(final SunGraphics2D sg2d, Region r) {
+ void SG2DConstraint(final SunGraphics2D sg2d, Region r) {
sg2d.constrainX = sg2d.transX;
sg2d.constrainY = sg2d.transY;
@@ -710,7 +703,7 @@
// Obtain the metrics from the offscreen window where this peer is
// mostly drawn to.
// TODO: check for "use platform metrics" settings
- Graphics g = getWindowPeer().getOffscreenGraphics();
+ Graphics g = getWindowPeer().getGraphics();
try {
if (g != null) {
return g.getFontMetrics(f);
@@ -1011,14 +1004,33 @@
@Override
public final void applyShape(final Region shape) {
synchronized (getStateLock()) {
- region = shape;
+ if (region == shape || (region != null && region.equals(shape))) {
+ return;
+ }
+ }
+ applyShapeImpl(shape);
+ }
+
+ void applyShapeImpl(final Region shape) {
+ synchronized (getStateLock()) {
+ if (shape != null) {
+ region = Region.WHOLE_REGION.getIntersection(shape);
+ } else {
+ region = null;
+ }
}
repaintParent(getBounds());
}
protected final Region getRegion() {
synchronized (getStateLock()) {
- return region == null ? Region.getInstance(getSize()) : region;
+ return isShaped() ? region : Region.getInstance(getSize());
+ }
+ }
+
+ public boolean isShaped() {
+ synchronized (getStateLock()) {
+ return region != null;
}
}
@@ -1386,11 +1398,6 @@
}
}
- // Just a helper method, thus final
- protected final void flushOffscreenGraphics() {
- flushOffscreenGraphics(getSize());
- }
-
protected static final void flushOnscreenGraphics(){
final OGLRenderQueue rq = OGLRenderQueue.getInstance();
rq.lock();
@@ -1401,36 +1408,6 @@
}
}
- /*
- * Flushes the given rectangle from the back buffer to the screen.
- */
- protected void flushOffscreenGraphics(Rectangle r) {
- flushOffscreenGraphics(r.x, r.y, r.width, r.height);
- }
-
- private void flushOffscreenGraphics(int x, int y, int width, int height) {
- Image bb = getWindowPeerOrSelf().getBackBuffer();
- if (bb != null) {
- // g is a screen Graphics from the delegate
- final Graphics g = getOnscreenGraphics();
-
- if (g != null && g instanceof Graphics2D) {
- try {
- Graphics2D g2d = (Graphics2D)g;
- Point p = localToWindow(new Point(0, 0));
- Composite composite = g2d.getComposite();
- g2d.setComposite(AlphaComposite.Src);
- g.drawImage(bb, x, y, x + width, y + height, p.x + x,
- p.y + y, p.x + x + width, p.y + y + height,
- null);
- g2d.setComposite(composite);
- } finally {
- g.dispose();
- }
- }
- }
- }
-
/**
* Used by ContainerPeer to skip all the paint events during layout.
*
--- a/jdk/src/macosx/classes/sun/lwawt/LWRepaintArea.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/LWRepaintArea.java Wed Jul 05 18:17:35 2017 +0200
@@ -58,9 +58,6 @@
private static void flushBuffers(final LWComponentPeer peer) {
if (peer != null) {
- if (!peer.getWindowPeerOrSelf().isOpaque()) {
- peer.flushOffscreenGraphics();
- }
peer.flushOnscreenGraphics();
}
}
--- a/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java Wed Jul 05 18:17:35 2017 +0200
@@ -522,12 +522,6 @@
postEvent(targetToAppContext(event.getSource()), event);
}
- // use peer's back buffer to implement non-opaque windows.
- @Override
- public boolean needUpdateWindow() {
- return true;
- }
-
@Override
public void grab(Window w) {
if (w.getPeer() != null) {
--- a/jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java Wed Jul 05 18:17:35 2017 +0200
@@ -37,6 +37,7 @@
import sun.java2d.*;
import sun.java2d.loops.Blit;
import sun.java2d.loops.CompositeType;
+import sun.java2d.pipe.Region;
import sun.util.logging.PlatformLogger;
public class LWWindowPeer
@@ -109,6 +110,10 @@
private volatile boolean skipNextFocusChange;
+ private static final Color nonOpaqueBackground = new Color(0, 0, 0, 0);
+
+ private volatile boolean textured;
+
/**
* Current modal blocker or null.
*
@@ -169,6 +174,11 @@
setAlwaysOnTop(getTarget().isAlwaysOnTop());
updateMinimumSize();
+ final Shape shape = getTarget().getShape();
+ if (shape != null) {
+ applyShape(Region.getInstance(shape, null));
+ }
+
final float opacity = getTarget().getOpacity();
if (opacity < 1.0f) {
setOpacity(opacity);
@@ -178,7 +188,7 @@
updateInsets(platformWindow.getInsets());
if (getSurfaceData() == null) {
- replaceSurfaceData();
+ replaceSurfaceData(false);
}
}
@@ -280,7 +290,7 @@
// "buffer", that's why numBuffers - 1
assert numBuffers > 1;
- replaceSurfaceData(numBuffers - 1, caps);
+ replaceSurfaceData(numBuffers - 1, caps, false);
} catch (InvalidPipeException z) {
throw new AWTException(z.toString());
}
@@ -420,19 +430,44 @@
public final void setOpaque(final boolean isOpaque) {
if (this.isOpaque != isOpaque) {
this.isOpaque = isOpaque;
- getPlatformWindow().setOpaque(isOpaque);
- replaceSurfaceData();
- repaintPeer();
+ updateOpaque();
}
}
- public final boolean isOpaque() {
- return isOpaque;
+ private void updateOpaque() {
+ getPlatformWindow().setOpaque(!isTranslucent());
+ replaceSurfaceData(false);
+ repaintPeer();
}
@Override
public void updateWindow() {
- flushOffscreenGraphics();
+ }
+
+ public final boolean isTextured() {
+ return textured;
+ }
+
+ public final void setTextured(final boolean isTextured) {
+ textured = isTextured;
+ }
+
+ public final boolean isTranslucent() {
+ synchronized (getStateLock()) {
+ /*
+ * Textured window is a special case of translucent window.
+ * The difference is only in nswindow background. So when we set
+ * texture property our peer became fully translucent. It doesn't
+ * fill background, create non opaque backbuffers and layer etc.
+ */
+ return !isOpaque || isShaped() || isTextured();
+ }
+ }
+
+ @Override
+ final void applyShapeImpl(final Region shape) {
+ super.applyShapeImpl(shape);
+ updateOpaque();
}
@Override
@@ -587,7 +622,20 @@
getFont());
if (g != null) {
try {
- g.clearRect(0, 0, w, h);
+ if (g instanceof Graphics2D) {
+ ((Graphics2D) g).setComposite(AlphaComposite.Src);
+ }
+ if (isTranslucent()) {
+ g.setColor(nonOpaqueBackground);
+ g.fillRect(0, 0, w, h);
+ }
+ if (!isTextured()) {
+ if (g instanceof SunGraphics2D) {
+ SG2DConstraint((SunGraphics2D) g, getRegion());
+ }
+ g.setColor(getBackground());
+ g.fillRect(0, 0, w, h);
+ }
} finally {
g.dispose();
}
@@ -894,35 +942,6 @@
});
}
- /**
- * This method returns a back buffer Graphics to render all the
- * peers to. After the peer is painted, the back buffer contents
- * should be flushed to the screen. All the target painting
- * (Component.paint() method) should be done directly to the screen.
- */
- protected final Graphics getOffscreenGraphics(Color fg, Color bg, Font f) {
- final Image bb = getBackBuffer();
- if (bb == null) {
- return null;
- }
- if (fg == null) {
- fg = SystemColor.windowText;
- }
- if (bg == null) {
- bg = SystemColor.window;
- }
- if (f == null) {
- f = DEFAULT_FONT;
- }
- final Graphics2D g = (Graphics2D) bb.getGraphics();
- if (g != null) {
- g.setColor(fg);
- g.setBackground(bg);
- g.setFont(f);
- }
- return g;
- }
-
/*
* May be called by delegate to provide SD to Java2D code.
*/
@@ -933,11 +952,16 @@
}
private void replaceSurfaceData() {
- replaceSurfaceData(backBufferCount, backBufferCaps);
+ replaceSurfaceData(true);
+ }
+
+ private void replaceSurfaceData(boolean blit) {
+ replaceSurfaceData(backBufferCount, backBufferCaps, blit);
}
private void replaceSurfaceData(int newBackBufferCount,
- BufferCapabilities newBackBufferCaps) {
+ BufferCapabilities newBackBufferCaps,
+ boolean blit) {
synchronized (surfaceDataLock) {
final SurfaceData oldData = getSurfaceData();
surfaceData = platformWindow.replaceSurfaceData();
@@ -950,7 +974,10 @@
if (getSurfaceData() != null && oldData != getSurfaceData()) {
clearBackground(size.width, size.height);
}
- blitSurfaceData(oldData, getSurfaceData());
+
+ if (blit) {
+ blitSurfaceData(oldData, getSurfaceData());
+ }
if (oldData != null && oldData != getSurfaceData()) {
// TODO: drop oldData for D3D/WGL pipelines
@@ -965,11 +992,18 @@
Graphics g = backBuffer.getGraphics();
try {
Rectangle r = getBounds();
- g.setColor(getBackground());
if (g instanceof Graphics2D) {
((Graphics2D) g).setComposite(AlphaComposite.Src);
}
+ g.setColor(nonOpaqueBackground);
g.fillRect(0, 0, r.width, r.height);
+ if (g instanceof SunGraphics2D) {
+ SG2DConstraint((SunGraphics2D) g, getRegion());
+ }
+ if (!isTextured()) {
+ g.setColor(getBackground());
+ g.fillRect(0, 0, r.width, r.height);
+ }
if (oldBB != null) {
// Draw the old back buffer to the new one
g.drawImage(oldBB, 0, 0, null);
@@ -993,7 +1027,7 @@
CompositeType.Src,
dst.getSurfaceType());
if (blit != null) {
- blit.Blit(src, dst, ((Graphics2D) getGraphics()).getComposite(),
+ blit.Blit(src, dst, AlphaComposite.Src,
getRegion(), 0, 0, 0, 0, size.width, size.height);
}
}
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java Wed Jul 05 18:17:35 2017 +0200
@@ -117,7 +117,7 @@
Rectangle r = peer.getBounds();
Image im = null;
if (!r.isEmpty()) {
- int transparency = (peer.isOpaque() ? Transparency.OPAQUE : Transparency.TRANSLUCENT);
+ int transparency = peer.isTranslucent() ? Transparency.TRANSLUCENT : Transparency.OPAQUE;
im = peer.getGraphicsConfiguration().createCompatibleImage(r.width, r.height, transparency);
}
return im;
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java Wed Jul 05 18:17:35 2017 +0200
@@ -64,7 +64,7 @@
}
public boolean isOpaque() {
- return peer.isOpaque();
+ return !peer.isTranslucent();
}
/*
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Wed Jul 05 18:17:35 2017 +0200
@@ -209,6 +209,7 @@
private boolean undecorated; // initialized in getInitialStyleBits()
private Rectangle normalBounds = null; // not-null only for undecorated maximized windows
private CPlatformResponder responder;
+ private volatile boolean zoomed = false; // from native perspective
public CPlatformWindow(final PeerType peerType) {
super(0, true);
@@ -298,7 +299,7 @@
// If the target is a dialog, popup or tooltip we want it to ignore the brushed metal look.
if (isPopup) {
- styleBits = SET(styleBits, TEXTURED, true);
+ styleBits = SET(styleBits, TEXTURED, false);
// Popups in applets don't activate applet's process
styleBits = SET(styleBits, NONACTIVATING, true);
}
@@ -372,6 +373,8 @@
}
}
+ peer.setTextured(IS(TEXTURED, styleBits));
+
return styleBits;
}
@@ -467,26 +470,42 @@
nativeSetNSWindowBounds(getNSWindowPtr(), x, y, w, h);
}
- private void zoom() {
+ private boolean isMaximized() {
+ return undecorated ? this.normalBounds != null : zoomed;
+ }
+
+ private void maximize() {
+ if (isMaximized()) {
+ return;
+ }
if (!undecorated) {
+ zoomed = true;
CWrapper.NSWindow.zoom(getNSWindowPtr());
} else {
- // OS X handles -zoom incorrectly for undecorated windows
- final boolean isZoomed = this.normalBounds == null;
- deliverZoom(isZoomed);
+ deliverZoom(true);
+
+ this.normalBounds = peer.getBounds();
+ long screen = CWrapper.NSWindow.screen(getNSWindowPtr());
+ Rectangle toBounds = CWrapper.NSScreen.visibleFrame(screen).getBounds();
+ // Flip the y coordinate
+ Rectangle frame = CWrapper.NSScreen.frame(screen).getBounds();
+ toBounds.y = frame.height - toBounds.y - toBounds.height;
+ setBounds(toBounds.x, toBounds.y, toBounds.width, toBounds.height);
+ }
+ }
- Rectangle toBounds;
- if (isZoomed) {
- this.normalBounds = peer.getBounds();
- long screen = CWrapper.NSWindow.screen(getNSWindowPtr());
- toBounds = CWrapper.NSScreen.visibleFrame(screen).getBounds();
- // Flip the y coordinate
- Rectangle frame = CWrapper.NSScreen.frame(screen).getBounds();
- toBounds.y = frame.height - toBounds.y - toBounds.height;
- } else {
- toBounds = normalBounds;
- this.normalBounds = null;
- }
+ private void unmaximize() {
+ if (!isMaximized()) {
+ return;
+ }
+ if (!undecorated) {
+ zoomed = false;
+ CWrapper.NSWindow.zoom(getNSWindowPtr());
+ } else {
+ deliverZoom(false);
+
+ Rectangle toBounds = this.normalBounds;
+ this.normalBounds = null;
setBounds(toBounds.x, toBounds.y, toBounds.width, toBounds.height);
}
}
@@ -499,9 +518,9 @@
public void setVisible(boolean visible) {
final long nsWindowPtr = getNSWindowPtr();
- // 1. Process parent-child relationship when hiding
+ // Process parent-child relationship when hiding
if (!visible) {
- // 1a. Unparent my children
+ // Unparent my children
for (Window w : target.getOwnedWindows()) {
WindowPeer p = (WindowPeer)w.getPeer();
if (p instanceof LWWindowPeer) {
@@ -512,30 +531,17 @@
}
}
- // 1b. Unparent myself
+ // Unparent myself
if (owner != null && owner.isVisible()) {
CWrapper.NSWindow.removeChildWindow(owner.getNSWindowPtr(), nsWindowPtr);
}
}
- // 2. Configure stuff
+ // Configure stuff
updateIconImages();
updateFocusabilityForAutoRequestFocus(false);
- // 3. Manage the extended state when hiding
- if (!visible) {
- // Cancel out the current native state of the window
- switch (peer.getState()) {
- case Frame.ICONIFIED:
- CWrapper.NSWindow.deminiaturize(nsWindowPtr);
- break;
- case Frame.MAXIMIZED_BOTH:
- zoom();
- break;
- }
- }
-
- // 4. Actually show or hide the window
+ // Actually show or hide the window
LWWindowPeer blocker = peer.getBlocker();
if (blocker == null || !visible) {
// If it ain't blocked, or is being hidden, go regular way
@@ -564,16 +570,19 @@
}
this.visible = visible;
- // 5. Manage the extended state when showing
+ // Manage the extended state when showing
if (visible) {
- // Re-apply the extended state as expected in shared code
+ // Apply the extended state as expected in shared code
if (target instanceof Frame) {
switch (((Frame)target).getExtendedState()) {
case Frame.ICONIFIED:
CWrapper.NSWindow.miniaturize(nsWindowPtr);
break;
case Frame.MAXIMIZED_BOTH:
- zoom();
+ maximize();
+ break;
+ default: // NORMAL
+ unmaximize(); // in case it was maximized, otherwise this is a no-op
break;
}
}
@@ -581,12 +590,12 @@
nativeSynthesizeMouseEnteredExitedEvents(nsWindowPtr);
- // 6. Configure stuff #2
+ // Configure stuff #2
updateFocusabilityForAutoRequestFocus(true);
- // 7. Manage parent-child relationship when showing
+ // Manage parent-child relationship when showing
if (visible) {
- // 7a. Add myself as a child
+ // Add myself as a child
if (owner != null && owner.isVisible()) {
CWrapper.NSWindow.addChildWindow(owner.getNSWindowPtr(), nsWindowPtr, CWrapper.NSWindow.NSWindowAbove);
if (target.isAlwaysOnTop()) {
@@ -594,7 +603,7 @@
}
}
- // 7b. Add my own children to myself
+ // Add my own children to myself
for (Window w : target.getOwnedWindows()) {
WindowPeer p = (WindowPeer)w.getPeer();
if (p instanceof LWWindowPeer) {
@@ -609,7 +618,7 @@
}
}
- // 8. Deal with the blocker of the window being shown
+ // Deal with the blocker of the window being shown
if (blocker != null && visible) {
// Make sure the blocker is above its siblings
((CPlatformWindow)blocker.getPlatformWindow()).orderAboveSiblings();
@@ -733,10 +742,19 @@
@Override
public void setOpaque(boolean isOpaque) {
CWrapper.NSWindow.setOpaque(getNSWindowPtr(), isOpaque);
- if (!isOpaque) {
+ if (!isOpaque && !peer.isTextured()) {
long clearColor = CWrapper.NSColor.clearColor();
CWrapper.NSWindow.setBackgroundColor(getNSWindowPtr(), clearColor);
}
+
+ //This is a temporary workaround. Looks like after 7124236 will be fixed
+ //the correct place for invalidateShadow() is CGLayer.drawInCGLContext.
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ invalidateShadow();
+ }
+ });
}
@Override
@@ -767,7 +785,7 @@
if (prevWindowState == Frame.MAXIMIZED_BOTH) {
// let's return into the normal states first
// the zoom call toggles between the normal and the max states
- zoom();
+ unmaximize();
}
CWrapper.NSWindow.miniaturize(nsWindowPtr);
break;
@@ -776,14 +794,14 @@
// let's return into the normal states first
CWrapper.NSWindow.deminiaturize(nsWindowPtr);
}
- zoom();
+ maximize();
break;
case Frame.NORMAL:
if (prevWindowState == Frame.ICONIFIED) {
CWrapper.NSWindow.deminiaturize(nsWindowPtr);
} else if (prevWindowState == Frame.MAXIMIZED_BOTH) {
// the zoom call toggles between the normal and the max states
- zoom();
+ unmaximize();
}
break;
default:
@@ -805,6 +823,10 @@
nativeSetEnabled(getNSWindowPtr(), !blocked);
}
+ public final void invalidateShadow(){
+ nativeRevalidateNSWindowShadow(getNSWindowPtr());
+ }
+
// ----------------------------------------------------------------------
// UTILITY METHODS
// ----------------------------------------------------------------------
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java Wed Jul 05 18:17:35 2017 +0200
@@ -750,6 +750,11 @@
}
@Override
+ public boolean isWindowShapingSupported() {
+ return true;
+ }
+
+ @Override
public boolean isWindowTranslucencySupported() {
return true;
}
@@ -759,6 +764,10 @@
return true;
}
+ public boolean isSwingBackbufferTranslucencySupported() {
+ return true;
+ }
+
@Override
public boolean enableInputMethodsForTextComponent() {
return true;
--- a/jdk/src/macosx/native/java/util/MacOSXPreferencesFile.m Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/native/java/util/MacOSXPreferencesFile.m Wed Jul 05 18:17:35 2017 +0200
@@ -641,7 +641,7 @@
// child must end with '/'
-JNIEXPORT void JNICALL
+JNIEXPORT Boolean JNICALL
Java_java_util_prefs_MacOSXPreferencesFile_addChildToNode
(JNIEnv *env, jobject klass, jobject jpath, jobject jchild,
jobject jname, jlong juser, jlong jhost)
@@ -656,6 +656,7 @@
CFDictionaryRef node;
CFStringRef topKey;
CFMutableDictionaryRef topValue;
+ Boolean beforeAdd = false;
if (!path || !child || !name) goto badparams;
@@ -665,9 +666,12 @@
// copyMutableNode creates the node if necessary
parent = copyMutableNode(path, name, user, host, &topKey, &topValue);
throwIfNull(parent, "copyMutableNode failed");
-
+ beforeAdd = CFDictionaryContainsKey(parent, child);
CFDictionaryAddValue(parent, child, node);
-
+ if (!beforeAdd)
+ beforeAdd = CFDictionaryContainsKey(parent, child);
+ else
+ beforeAdd = false;
CFPreferencesSetValue(topKey, topValue, name, user, host);
CFRelease(parent);
@@ -680,6 +684,7 @@
if (path) CFRelease(path);
if (child) CFRelease(child);
if (name) CFRelease(name);
+ return beforeAdd;
}
--- a/jdk/src/macosx/native/sun/awt/AWTWindow.m Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/native/sun/awt/AWTWindow.m Wed Jul 05 18:17:35 2017 +0200
@@ -941,14 +941,17 @@
(JNIEnv *env, jclass clazz, jlong windowPtr)
{
JNF_COCOA_ENTER(env);
-AWT_ASSERT_NOT_APPKIT_THREAD;
NSWindow *nsWindow = OBJC(windowPtr);
- [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
- AWT_ASSERT_APPKIT_THREAD;
+ if ([NSThread isMainThread]) {
+ [nsWindow invalidateShadow];
+ } else {
+ [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
+ AWT_ASSERT_APPKIT_THREAD;
- [nsWindow invalidateShadow];
- }];
+ [nsWindow invalidateShadow];
+ }];
+ }
JNF_COCOA_EXIT(env);
}
--- a/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m Wed Jul 05 18:17:35 2017 +0200
@@ -28,7 +28,7 @@
/*
* Convert the mode string to the more convinient bits per pixel value
*/
-static int getBPPFromModeString(CFStringRef mode)
+static int getBPPFromModeString(CFStringRef mode)
{
if ((CFStringCompare(mode, CFSTR(kIO30BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo)) {
// This is a strange mode, where we using 10 bits per RGB component and pack it into 32 bits
@@ -44,7 +44,7 @@
else if (CFStringCompare(mode, CFSTR(IO8BitIndexedPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) {
return 8;
}
-
+
return 0;
}
@@ -68,6 +68,11 @@
// One of the key parameters does not match
continue;
}
+
+ if (refrate == 0) { // REFRESH_RATE_UNKNOWN
+ return cRef;
+ }
+
// Refresh rate might be 0 in display mode and we ask for specific display rate
// but if we do not find exact match then 0 refresh rate might be just Ok
if (CGDisplayModeGetRefreshRate(cRef) == refrate) {
@@ -165,7 +170,10 @@
}
}
}];
+ } else {
+ [JNFException raise:env as:kIllegalArgumentException reason:"Invalid display mode"];
}
+
CFRelease(allModes);
JNF_COCOA_EXIT(env);
}
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java Wed Jul 05 18:17:35 2017 +0200
@@ -36,6 +36,7 @@
import java.io.PrintStream;
import java.text.MessageFormat;
import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -381,12 +382,15 @@
String prefix = base.getName();
if (prefix.length() < 3) prefix += "tmp";
- File where = base.getParentFile();
+ File where = (base.getParentFile() == null && suffix.equals(".bak"))
+ ? new File(".").getAbsoluteFile()
+ : base.getParentFile();
- if ( base.getParentFile() == null && suffix.equals(".bak"))
- where = new File(".").getAbsoluteFile();
+ Path tmpfile = (where == null)
+ ? Files.createTempFile(prefix, suffix)
+ : Files.createTempFile(where.toPath(), prefix, suffix);
- return Files.createTempFile(where.toPath(), prefix, suffix).toFile();
+ return tmpfile.toFile();
}
static private
--- a/jdk/src/share/classes/java/net/HttpCookie.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/java/net/HttpCookie.java Wed Jul 05 18:17:35 2017 +0200
@@ -137,7 +137,7 @@
private HttpCookie(String name, String value, String header) {
name = name.trim();
- if (name.length() == 0 || !isToken(name) || isReserved(name)) {
+ if (name.length() == 0 || !isToken(name)) {
throw new IllegalArgumentException("Illegal cookie name");
}
@@ -782,33 +782,6 @@
}
/*
- * @param name
- * the name to be tested
- *
- * @return {@code true} if the name is reserved by cookie specification,
- * {@code false} if it is not
- */
- private static boolean isReserved(String name) {
- if (name.equalsIgnoreCase("Comment")
- || name.equalsIgnoreCase("CommentURL") // rfc2965 only
- || name.equalsIgnoreCase("Discard") // rfc2965 only
- || name.equalsIgnoreCase("Domain")
- || name.equalsIgnoreCase("Expires") // netscape draft only
- || name.equalsIgnoreCase("Max-Age")
- || name.equalsIgnoreCase("Path")
- || name.equalsIgnoreCase("Port") // rfc2965 only
- || name.equalsIgnoreCase("Secure")
- || name.equalsIgnoreCase("Version")
- || name.equalsIgnoreCase("HttpOnly")
- || name.charAt(0) == '$')
- {
- return true;
- }
-
- return false;
- }
-
- /*
* Parse header string to cookie object.
*
* @param header
--- a/jdk/src/share/classes/javax/security/auth/kerberos/KerberosPrincipal.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/javax/security/auth/kerberos/KerberosPrincipal.java Wed Jul 05 18:17:35 2017 +0200
@@ -26,7 +26,6 @@
package javax.security.auth.kerberos;
import java.io.*;
-import sun.security.krb5.Asn1Exception;
import sun.security.krb5.KrbException;
import sun.security.krb5.PrincipalName;
import sun.security.krb5.Realm;
@@ -81,14 +80,12 @@
public static final int KRB_NT_UID = 5;
-
private transient String fullName;
private transient String realm;
private transient int nameType;
- private static final char NAME_REALM_SEPARATOR = '@';
/**
* Constructs a KerberosPrincipal from the provided string input. The
@@ -233,41 +230,35 @@
* realm in their DER-encoded form as specified in Section 5.2.2 of
* <a href=http://www.ietf.org/rfc/rfc4120.txt> RFC4120</a>.
*/
-
private void writeObject(ObjectOutputStream oos)
- throws IOException {
+ throws IOException {
- PrincipalName krb5Principal = null;
+ PrincipalName krb5Principal;
try {
- krb5Principal = new PrincipalName(fullName,nameType);
+ krb5Principal = new PrincipalName(fullName, nameType);
oos.writeObject(krb5Principal.asn1Encode());
oos.writeObject(krb5Principal.getRealm().asn1Encode());
} catch (Exception e) {
- IOException ioe = new IOException(e.getMessage());
- ioe.initCause(e);
- throw ioe;
+ throw new IOException(e);
}
}
/**
* Reads this object from a stream (i.e., deserializes it)
*/
-
private void readObject(ObjectInputStream ois)
- throws IOException, ClassNotFoundException {
+ throws IOException, ClassNotFoundException {
byte[] asn1EncPrincipal = (byte [])ois.readObject();
byte[] encRealm = (byte [])ois.readObject();
try {
- PrincipalName krb5Principal = new PrincipalName(new
- DerValue(asn1EncPrincipal));
- realm = (new Realm(new DerValue(encRealm))).toString();
- fullName = krb5Principal.toString() + NAME_REALM_SEPARATOR +
- realm.toString();
+ Realm realmObject = new Realm(new DerValue(encRealm));
+ PrincipalName krb5Principal = new PrincipalName(
+ new DerValue(asn1EncPrincipal), realmObject);
+ realm = realmObject.toString();
+ fullName = krb5Principal.toString();
nameType = krb5Principal.getNameType();
} catch (Exception e) {
- IOException ioe = new IOException(e.getMessage());
- ioe.initCause(e);
- throw ioe;
+ throw new IOException(e);
}
}
@@ -288,9 +279,7 @@
* <a href=http://www.ietf.org/rfc/rfc4120.txt> RFC4120</a>.
*
* @return the name type.
- *
*/
-
public int getNameType() {
return nameType;
}
--- a/jdk/src/share/classes/javax/swing/JViewport.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/javax/swing/JViewport.java Wed Jul 05 18:17:35 2017 +0200
@@ -1586,10 +1586,18 @@
int bdx = blitToX - blitFromX;
int bdy = blitToY - blitFromY;
+ Composite oldComposite = null;
// Shift the scrolled region
+ if (g instanceof Graphics2D) {
+ Graphics2D g2d = (Graphics2D) g;
+ oldComposite = g2d.getComposite();
+ g2d.setComposite(AlphaComposite.Src);
+ }
rm.copyArea(this, g, blitFromX, blitFromY, blitW, blitH, bdx, bdy,
false);
-
+ if (oldComposite != null) {
+ ((Graphics2D) g).setComposite(oldComposite);
+ }
// Paint the newly exposed region.
int x = view.getX();
int y = view.getY();
--- a/jdk/src/share/classes/javax/swing/RepaintManager.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/javax/swing/RepaintManager.java Wed Jul 05 18:17:35 2017 +0200
@@ -119,6 +119,11 @@
// Whether or not a VolatileImage should be used for double-buffered painting
static boolean volatileImageBufferEnabled = true;
/**
+ * Type of VolatileImage which should be used for double-buffered
+ * painting.
+ */
+ private static final int volatileBufferType;
+ /**
* Value of the system property awt.nativeDoubleBuffering.
*/
private static boolean nativeDoubleBuffering;
@@ -204,6 +209,13 @@
((SunGraphicsEnvironment)ge).addDisplayChangedListener(
new DisplayChangedHandler());
}
+ Toolkit tk = Toolkit.getDefaultToolkit();
+ if ((tk instanceof SunToolkit)
+ && ((SunToolkit) tk).isSwingBackbufferTranslucencySupported()) {
+ volatileBufferType = Transparency.TRANSLUCENT;
+ } else {
+ volatileBufferType = Transparency.OPAQUE;
+ }
}
/**
@@ -989,7 +1001,8 @@
if (image != null) {
image.flush();
}
- image = config.createCompatibleVolatileImage(width, height);
+ image = config.createCompatibleVolatileImage(width, height,
+ volatileBufferType);
volatileMap.put(config, image);
}
return image;
@@ -1483,9 +1496,26 @@
for(y=clipY, maxy = clipY + clipH; y < maxy ; y += bh) {
osg.translate(-x, -y);
osg.setClip(x,y,bw,bh);
+ if (volatileBufferType != Transparency.OPAQUE
+ && osg instanceof Graphics2D) {
+ final Graphics2D g2d = (Graphics2D) osg;
+ final Color oldBg = g2d.getBackground();
+ g2d.setBackground(c.getBackground());
+ g2d.clearRect(x, y, bw, bh);
+ g2d.setBackground(oldBg);
+ }
c.paintToOffscreen(osg, x, y, bw, bh, maxx, maxy);
g.setClip(x, y, bw, bh);
- g.drawImage(image, x, y, c);
+ if (volatileBufferType != Transparency.OPAQUE
+ && g instanceof Graphics2D) {
+ final Graphics2D g2d = (Graphics2D) g;
+ final Composite oldComposite = g2d.getComposite();
+ g2d.setComposite(AlphaComposite.Src);
+ g2d.drawImage(image, x, y, c);
+ g2d.setComposite(oldComposite);
+ } else {
+ g.drawImage(image, x, y, c);
+ }
osg.translate(x, y);
}
}
--- a/jdk/src/share/classes/javax/swing/SwingUtilities.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/javax/swing/SwingUtilities.java Wed Jul 05 18:17:35 2017 +0200
@@ -319,7 +319,8 @@
newEvent = new MouseWheelEvent(newSource,
sourceWheelEvent.getID(),
sourceWheelEvent.getWhen(),
- sourceWheelEvent.getModifiers(),
+ sourceWheelEvent.getModifiers()
+ | sourceWheelEvent.getModifiersEx(),
p.x,p.y,
sourceWheelEvent.getXOnScreen(),
sourceWheelEvent.getYOnScreen(),
@@ -334,7 +335,8 @@
newEvent = new MenuDragMouseEvent(newSource,
sourceMenuDragEvent.getID(),
sourceMenuDragEvent.getWhen(),
- sourceMenuDragEvent.getModifiers(),
+ sourceMenuDragEvent.getModifiers()
+ | sourceMenuDragEvent.getModifiersEx(),
p.x,p.y,
sourceMenuDragEvent.getXOnScreen(),
sourceMenuDragEvent.getYOnScreen(),
@@ -347,7 +349,8 @@
newEvent = new MouseEvent(newSource,
sourceEvent.getID(),
sourceEvent.getWhen(),
- sourceEvent.getModifiers(),
+ sourceEvent.getModifiers()
+ | sourceEvent.getModifiersEx(),
p.x,p.y,
sourceEvent.getXOnScreen(),
sourceEvent.getYOnScreen(),
--- a/jdk/src/share/classes/javax/swing/border/TitledBorder.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/javax/swing/border/TitledBorder.java Wed Jul 05 18:17:35 2017 +0200
@@ -440,7 +440,7 @@
* @return the title-font of the titled border
*/
public Font getTitleFont() {
- return titleFont;
+ return titleFont == null ? UIManager.getFont("TitledBorder.font") : titleFont;
}
/**
@@ -449,7 +449,7 @@
* @return the title-color of the titled border
*/
public Color getTitleColor() {
- return titleColor;
+ return titleColor == null ? UIManager.getColor("TitledBorder.titleColor") : titleColor;
}
@@ -681,10 +681,6 @@
if (font != null) {
return font;
}
- font = UIManager.getFont("TitledBorder.font");
- if (font != null) {
- return font;
- }
if (c != null) {
font = c.getFont();
if (font != null) {
@@ -699,10 +695,6 @@
if (color != null) {
return color;
}
- color = UIManager.getColor("TitledBorder.titleColor");
- if (color != null) {
- return color;
- }
return (c != null)
? c.getForeground()
: null;
--- a/jdk/src/share/classes/sun/awt/SunToolkit.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/awt/SunToolkit.java Wed Jul 05 18:17:35 2017 +0200
@@ -1985,6 +1985,13 @@
}
/**
+ * Returns true if swing backbuffer should be translucent.
+ */
+ public boolean isSwingBackbufferTranslucencySupported() {
+ return false;
+ }
+
+ /**
* Returns whether or not a containing top level window for the passed
* component is
* {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT PERPIXEL_TRANSLUCENT}.
@@ -2105,25 +2112,41 @@
private EventQueueItem queueTail = null;
private final EventQueue eventQueue;
+ // For the case when queue is cleared but events are not posted
+ private volatile boolean isFlushing = false;
+
PostEventQueue(EventQueue eq) {
eventQueue = eq;
}
public synchronized boolean noEvents() {
- return queueHead == null;
+ return queueHead == null && !isFlushing;
}
/*
* Continually post pending AWTEvents to the Java EventQueue. The method
* is synchronized to ensure the flush is completed before a new event
* can be posted to this queue.
+ *
+ * 7177040: The method couldn't be wholly synchronized because of calls
+ * of EventQueue.postEvent() that uses pushPopLock, otherwise it could
+ * potentially lead to deadlock
*/
- public synchronized void flush() {
- EventQueueItem tempQueue = queueHead;
- queueHead = queueTail = null;
- while (tempQueue != null) {
- eventQueue.postEvent(tempQueue.event);
- tempQueue = tempQueue.next;
+ public void flush() {
+ EventQueueItem tempQueue;
+ synchronized (this) {
+ tempQueue = queueHead;
+ queueHead = queueTail = null;
+ isFlushing = true;
+ }
+ try {
+ while (tempQueue != null) {
+ eventQueue.postEvent(tempQueue.event);
+ tempQueue = tempQueue.next;
+ }
+ }
+ finally {
+ isFlushing = false;
}
}
--- a/jdk/src/share/classes/sun/font/SunLayoutEngine.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/font/SunLayoutEngine.java Wed Jul 05 18:17:35 2017 +0200
@@ -137,8 +137,9 @@
LayoutEngine e = (LayoutEngine)cache.get(key);
if (e == null) {
- e = new SunLayoutEngine(key.copy());
- cache.put(key, e);
+ LayoutEngineKey copy = key.copy();
+ e = new SunLayoutEngine(copy);
+ cache.put(copy, e);
}
return e;
}
--- a/jdk/src/share/classes/sun/nio/cs/ext/DoubleByte.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/nio/cs/ext/DoubleByte.java Wed Jul 05 18:17:35 2017 +0200
@@ -33,6 +33,8 @@
import java.nio.charset.CoderResult;
import java.util.Arrays;
import sun.nio.cs.Surrogate;
+import sun.nio.cs.ArrayDecoder;
+import sun.nio.cs.ArrayEncoder;
import static sun.nio.cs.CharsetMapping.*;
/*
@@ -107,7 +109,7 @@
}
public static class Decoder extends CharsetDecoder
- implements DelegatableDecoder
+ implements DelegatableDecoder, ArrayDecoder
{
final char[][] b2c;
@@ -209,6 +211,29 @@
return decodeBufferLoop(src, dst);
}
+ public int decode(byte[] src, int sp, int len, char[] dst) {
+ int dp = 0;
+ int sl = sp + len;
+ char repl = replacement().charAt(0);
+ while (sp < sl) {
+ int b1 = src[sp++] & 0xff;
+ char c = b2cSB[b1];
+ if (c == UNMAPPABLE_DECODING) {
+ if (sp < sl) {
+ int b2 = src[sp++] & 0xff;
+ if (b2 >= b2Min && b2 <= b2Max) {
+ c = b2c[b1][b2 - b2Min];
+ }
+ }
+ if (c == UNMAPPABLE_DECODING) {
+ c = repl;
+ }
+ }
+ dst[dp++] = c;
+ }
+ return dp;
+ }
+
public void implReset() {
super.implReset();
}
@@ -228,6 +253,7 @@
return UNMAPPABLE_DECODING;
return b2c[b1][b2 - b2Min];
}
+
}
// IBM_EBCDIC_DBCS
@@ -367,6 +393,46 @@
src.position(mark);
}
}
+
+ public int decode(byte[] src, int sp, int len, char[] dst) {
+ int dp = 0;
+ int sl = sp + len;
+ currentState = SBCS;
+ char repl = replacement().charAt(0);
+ while (sp < sl) {
+ int b1 = src[sp++] & 0xff;
+ if (b1 == SO) { // Shift out
+ if (currentState != SBCS)
+ dst[dp++] = repl;
+ else
+ currentState = DBCS;
+ } else if (b1 == SI) {
+ if (currentState != DBCS)
+ dst[dp++] = repl;
+ else
+ currentState = SBCS;
+ } else {
+ char c = UNMAPPABLE_DECODING;
+ if (currentState == SBCS) {
+ c = b2cSB[b1];
+ if (c == UNMAPPABLE_DECODING)
+ c = repl;
+ } else {
+ if (sl == sp) {
+ c = repl;
+ } else {
+ int b2 = src[sp++] & 0xff;
+ if (b2 < b2Min || b2 > b2Max ||
+ (c = b2c[b1][b2 - b2Min]) == UNMAPPABLE_DECODING) {
+ c = repl;
+ }
+ }
+ }
+ dst[dp++] = c;
+ }
+ }
+ return dp;
+ }
}
// EBCDIC_DBCS_ONLY
@@ -405,9 +471,37 @@
return CoderResult.malformedForLength(1);
return CoderResult.unmappableForLength(2);
}
+
+ public int decode(byte[] src, int sp, int len, char[] dst) {
+ int dp = 0;
+ int sl = sp + len;
+ char repl = replacement().charAt(0);
+ while (sp < sl) {
+ int b1 = src[sp++] & 0xff;
+ char c = b2cSB[b1];
+ if (c == UNMAPPABLE_DECODING) {
+ if (sp < sl) {
+ int b2 = src[sp++] & 0xff;
+ if (b2 < b2Min || b2 > b2Max ||
+ (c = b2c[b1][b2 - b2Min]) == UNMAPPABLE_DECODING) {
+ if (b1 == SS2 || b1 == SS3) {
+ sp--;
+ }
+ c = repl;
+ }
+ } else {
+ c = repl;
+ }
+ }
+ dst[dp++] = c;
+ }
+ return dp;
+ }
}
- public static class Encoder extends CharsetEncoder {
+ public static class Encoder extends CharsetEncoder
+ implements ArrayEncoder
+ {
final int MAX_SINGLEBYTE = 0xff;
private final char[] c2b;
private final char[] c2bIndex;
@@ -516,6 +610,35 @@
return encodeBufferLoop(src, dst);
}
+ public int encode(char[] src, int sp, int len, byte[] dst) {
+ int dp = 0;
+ int sl = sp + len;
+ int dl = dst.length;
+ while (sp < sl) {
+ char c = src[sp++];
+ int bb = encodeChar(c);
+ if (bb == UNMAPPABLE_ENCODING) {
+ if (Character.isHighSurrogate(c) && sp < sl &&
+ Character.isLowSurrogate(src[sp])) {
+ sp++;
+ }
+ byte[] repl = replacement();
+ dst[dp++] = repl[0];
+ if (repl.length > 1)
+ dst[dp++] = repl[1];
+ continue;
+ } //else
+ if (bb > MAX_SINGLEBYTE) { // DoubleByte
+ dst[dp++] = (byte)(bb >> 8);
+ dst[dp++] = (byte)bb;
+ } else { // SingleByte
+ dst[dp++] = (byte)bb;
+ }
+
+ }
+ return dp;
+ }
+
public int encodeChar(char ch) {
return c2b[c2bIndex[ch >> 8] + (ch & 0xff)];
}
@@ -604,7 +727,6 @@
}
}
- // EBCDIC_DBCS_ONLY
public static class Encoder_EBCDIC_DBCSONLY extends Encoder {
Encoder_EBCDIC_DBCSONLY(Charset cs, byte[] repl,
char[] c2b, char[] c2bIndex) {
@@ -619,7 +741,6 @@
}
}
- // for IBM_EBCDIC_DBCS
public static class Encoder_EBCDIC extends Encoder {
static final int SBCS = 0;
static final int DBCS = 1;
@@ -741,6 +862,47 @@
src.position(mark);
}
}
+
+ public int encode(char[] src, int sp, int len, byte[] dst) {
+ int dp = 0;
+ int sl = sp + len;
+ while (sp < sl) {
+ char c = src[sp++];
+ int bb = encodeChar(c);
+
+ if (bb == UNMAPPABLE_ENCODING) {
+ if (Character.isHighSurrogate(c) && sp < sl &&
+ Character.isLowSurrogate(src[sp])) {
+ sp++;
+ }
+ byte[] repl = replacement();
+ dst[dp++] = repl[0];
+ if (repl.length > 1)
+ dst[dp++] = repl[1];
+ continue;
+ } //else
+ if (bb > MAX_SINGLEBYTE) { // DoubleByte
+ if (currentState == SBCS) {
+ currentState = DBCS;
+ dst[dp++] = SO;
+ }
+ dst[dp++] = (byte)(bb >> 8);
+ dst[dp++] = (byte)bb;
+ } else { // SingleByte
+ if (currentState == DBCS) {
+ currentState = SBCS;
+ dst[dp++] = SI;
+ }
+ dst[dp++] = (byte)bb;
+ }
+ }
+
+ if (currentState == DBCS) {
+ currentState = SBCS;
+ dst[dp++] = SI;
+ }
+ return dp;
+ }
}
// EUC_SIMPLE
--- a/jdk/src/share/classes/sun/nio/cs/ext/HKSCS.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/nio/cs/ext/HKSCS.java Wed Jul 05 18:17:35 2017 +0200
@@ -175,6 +175,40 @@
}
}
+ public int decode(byte[] src, int sp, int len, char[] dst) {
+ int dp = 0;
+ int sl = sp + len;
+ char repl = replacement().charAt(0);
+ while (sp < sl) {
+ int b1 = src[sp++] & 0xff;
+ char c = decodeSingle(b1);
+ if (c == UNMAPPABLE_DECODING) {
+ if (sl == sp) {
+ c = repl;
+ } else {
+ int b2 = src[sp++] & 0xff;
+ if (b2 < b2Min || b2 > b2Max) {
+ c = repl;
+ } else if ((c = decodeDouble(b1, b2)) == UNMAPPABLE_DECODING) {
+ c = decodeDoubleEx(b1, b2); //supp
+ if (c == UNMAPPABLE_DECODING) {
+ c = decodeBig5(b1, b2); //big5
+ if (c == UNMAPPABLE_DECODING)
+ c = repl;
+ } else {
+ // supplementary character in u+2xxxx area
+ dst[dp++] = Surrogate.high(0x20000 + c);
+ dst[dp++] = Surrogate.low(0x20000 + c);
+ continue;
+ }
+ }
+ }
+ }
+ dst[dp++] = c;
+ }
+ return dp;
+ }
+
public CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
if (src.hasArray() && dst.hasArray())
return decodeArrayLoop(src, dst);
@@ -322,6 +356,36 @@
return encodeBufferLoop(src, dst);
}
+ public int encode(char[] src, int sp, int len, byte[] dst) {
+ int dp = 0;
+ int sl = sp + len;
+ while (sp < sl) {
+ char c = src[sp++];
+ int bb = encodeChar(c);
+ if (bb == UNMAPPABLE_ENCODING) {
+ if (!Character.isHighSurrogate(c) || sp == sl ||
+ !Character.isLowSurrogate(src[sp]) ||
+ (bb = encodeSupp(Character.toCodePoint(c, src[sp++])))
+ == UNMAPPABLE_ENCODING) {
+ byte[] repl = replacement();
+ dst[dp++] = repl[0];
+ if (repl.length > 1)
+ dst[dp++] = repl[1];
+ continue;
+ }
+ sp++;
+ }
+ if (bb > MAX_SINGLEBYTE) { // DoubleByte
+ dst[dp++] = (byte)(bb >> 8);
+ dst[dp++] = (byte)bb;
+ } else { // SingleByte
+ dst[dp++] = (byte)bb;
+ }
+ }
+ return dp;
+ }
+
+
static char[] C2B_UNMAPPABLE = new char[0x100];
static {
Arrays.fill(C2B_UNMAPPABLE, (char)UNMAPPABLE_ENCODING);
--- a/jdk/src/share/classes/sun/security/jgss/krb5/Krb5NameElement.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/jgss/krb5/Krb5NameElement.java Wed Jul 05 18:17:35 2017 +0200
@@ -27,10 +27,8 @@
import org.ietf.jgss.*;
import sun.security.jgss.spi.*;
-import javax.security.auth.kerberos.*;
import sun.security.krb5.PrincipalName;
import sun.security.krb5.KrbException;
-import sun.security.krb5.ServiceName;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.UnknownHostException;
@@ -119,8 +117,8 @@
hostName = components[1];
String principal = getHostBasedInstance(service, hostName);
- principalName = new ServiceName(principal,
- PrincipalName.KRB_NT_SRV_HST);
+ principalName = new PrincipalName(principal,
+ PrincipalName.KRB_NT_SRV_HST);
}
}
--- a/jdk/src/share/classes/sun/security/krb5/Credentials.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/Credentials.java Wed Jul 05 18:17:35 2017 +0200
@@ -464,8 +464,7 @@
System.out.println(">>> DEBUG: ----Credentials----");
System.out.println("\tclient: " + c.client.toString());
System.out.println("\tserver: " + c.server.toString());
- System.out.println("\tticket: realm: " + c.ticket.realm.toString());
- System.out.println("\t sname: " + c.ticket.sname.toString());
+ System.out.println("\tticket: sname: " + c.ticket.sname.toString());
if (c.startTime != null) {
System.out.println("\tstartTime: " + c.startTime.getTime());
}
--- a/jdk/src/share/classes/sun/security/krb5/KrbApReq.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/KrbApReq.java Wed Jul 05 18:17:35 2017 +0200
@@ -179,7 +179,6 @@
KrbApReq(APOptions apOptions,
Ticket ticket,
EncryptionKey key,
- Realm crealm,
PrincipalName cname,
Checksum cksum,
KerberosTime ctime,
@@ -189,7 +188,7 @@
throws Asn1Exception, IOException,
KdcErrException, KrbCryptoException {
- init(apOptions, ticket, key, crealm, cname,
+ init(apOptions, ticket, key, cname,
cksum, ctime, subKey, seqNumber, authorizationData,
KeyUsage.KU_PA_TGS_REQ_AUTHENTICATOR);
@@ -208,7 +207,6 @@
init(options,
tgs_creds.ticket,
tgs_creds.key,
- tgs_creds.client.getRealm(),
tgs_creds.client,
cksum,
ctime,
@@ -221,7 +219,6 @@
private void init(APOptions apOptions,
Ticket ticket,
EncryptionKey key,
- Realm crealm,
PrincipalName cname,
Checksum cksum,
KerberosTime ctime,
@@ -232,7 +229,7 @@
throws Asn1Exception, IOException,
KdcErrException, KrbCryptoException {
- createMessage(apOptions, ticket, key, crealm, cname,
+ createMessage(apOptions, ticket, key, cname,
cksum, ctime, subKey, seqNumber, authorizationData,
usage);
obuf = apReqMessg.asn1Encode();
@@ -289,9 +286,6 @@
ctime = authenticator.ctime;
cusec = authenticator.cusec;
authenticator.ctime.setMicroSeconds(authenticator.cusec);
- authenticator.cname.setRealm(authenticator.crealm);
- apReqMessg.ticket.sname.setRealm(apReqMessg.ticket.realm);
- enc_ticketPart.cname.setRealm(enc_ticketPart.crealm);
if (!authenticator.cname.equals(enc_ticketPart.cname))
throw new KrbApErrException(Krb5.KRB_AP_ERR_BADMATCH);
@@ -457,7 +451,6 @@
private void createMessage(APOptions apOptions,
Ticket ticket,
EncryptionKey key,
- Realm crealm,
PrincipalName cname,
Checksum cksum,
KerberosTime ctime,
@@ -474,8 +467,7 @@
seqno = new Integer(seqNumber.current());
authenticator =
- new Authenticator(crealm,
- cname,
+ new Authenticator(cname,
cksum,
ctime.getMicroSeconds(),
ctime,
--- a/jdk/src/share/classes/sun/security/krb5/KrbAppMessage.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/KrbAppMessage.java Wed Jul 05 18:17:35 2017 +0200
@@ -48,8 +48,7 @@
HostAddress rAddress,
boolean timestampRequired,
boolean seqNumberRequired,
- PrincipalName packetPrincipal,
- Realm packetRealm)
+ PrincipalName packetPrincipal)
throws KrbApErrException {
if (!Krb5.AP_EMPTY_ADDRESSES_ALLOWED || sAddress != null) {
--- a/jdk/src/share/classes/sun/security/krb5/KrbAsRep.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/KrbAsRep.java Wed Jul 05 18:17:35 2017 +0200
@@ -152,11 +152,10 @@
DerValue encoding = new DerValue(enc_as_rep_part);
EncASRepPart enc_part = new EncASRepPart(encoding);
- rep.ticket.sname.setRealm(rep.ticket.realm);
rep.encKDCRepPart = enc_part;
ASReq req = asReq.getMessage();
- check(req, rep);
+ check(true, req, rep);
creds = new Credentials(
rep.ticket,
--- a/jdk/src/share/classes/sun/security/krb5/KrbAsReq.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/KrbAsReq.java Wed Jul 05 18:17:35 2017 +0200
@@ -115,10 +115,8 @@
}
if (sname == null) {
- sname = new PrincipalName("krbtgt" +
- PrincipalName.NAME_COMPONENT_SEPARATOR +
- cname.getRealmAsString(),
- PrincipalName.KRB_NT_SRV_INST);
+ String realm = cname.getRealmAsString();
+ sname = PrincipalName.tgsService(realm, realm);
}
if (till == null) {
@@ -128,7 +126,6 @@
// enc-authorization-data and additional-tickets never in AS-REQ
KDCReqBody kdc_req_body = new KDCReqBody(options,
cname,
- cname.getRealm(),
sname,
from,
till,
--- a/jdk/src/share/classes/sun/security/krb5/KrbAsReqBuilder.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/KrbAsReqBuilder.java Wed Jul 05 18:17:35 2017 +0200
@@ -99,9 +99,6 @@
// Called by other constructors
private void init(PrincipalName cname)
throws KrbException {
- if (cname.getRealm() == null) {
- cname.setRealm(Config.getInstance().getDefaultRealm());
- }
this.cname = cname;
state = State.INIT;
}
--- a/jdk/src/share/classes/sun/security/krb5/KrbCred.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/KrbCred.java Wed Jul 05 18:17:35 2017 +0200
@@ -96,12 +96,11 @@
PrincipalName princ = delegatedCreds.getClient();
Realm realm = princ.getRealm();
PrincipalName tgService = delegatedCreds.getServer();
- Realm tgsRealm = tgService.getRealm();
- KrbCredInfo credInfo = new KrbCredInfo(sessionKey, realm,
+ KrbCredInfo credInfo = new KrbCredInfo(sessionKey,
princ, delegatedCreds.flags, delegatedCreds.authTime,
delegatedCreds.startTime, delegatedCreds.endTime,
- delegatedCreds.renewTill, tgsRealm, tgService,
+ delegatedCreds.renewTill, tgService,
delegatedCreds.cAddr);
timeStamp = new KerberosTime(KerberosTime.NOW);
@@ -138,19 +137,13 @@
KrbCredInfo credInfo = encPart.ticketInfo[0];
EncryptionKey credInfoKey = credInfo.key;
- Realm prealm = credInfo.prealm;
- // XXX PrincipalName can store realm + principalname or
- // just principal name.
PrincipalName pname = credInfo.pname;
- pname.setRealm(prealm);
TicketFlags flags = credInfo.flags;
KerberosTime authtime = credInfo.authtime;
KerberosTime starttime = credInfo.starttime;
KerberosTime endtime = credInfo.endtime;
KerberosTime renewTill = credInfo.renewTill;
- Realm srealm = credInfo.srealm;
PrincipalName sname = credInfo.sname;
- sname.setRealm(srealm);
HostAddresses caddr = credInfo.caddr;
if (DEBUG) {
--- a/jdk/src/share/classes/sun/security/krb5/KrbException.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/KrbException.java Wed Jul 05 18:17:35 2017 +0200
@@ -45,6 +45,10 @@
super(s);
}
+ public KrbException(Throwable cause) {
+ super(cause);
+ }
+
public KrbException(int i) {
returnCode = i;
}
--- a/jdk/src/share/classes/sun/security/krb5/KrbKdcRep.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/KrbKdcRep.java Wed Jul 05 18:17:35 2017 +0200
@@ -35,28 +35,17 @@
abstract class KrbKdcRep {
static void check(
+ boolean isAsReq,
KDCReq req,
KDCRep rep
) throws KrbApErrException {
- if (!req.reqBody.cname.equalsWithoutRealm(rep.cname)) {
+ if (isAsReq && !req.reqBody.cname.equals(rep.cname)) {
rep.encKDCRepPart.key.destroy();
throw new KrbApErrException(Krb5.KRB_AP_ERR_MODIFIED);
}
- /**** XXX
- if (!req.reqBody.crealm.equals(rep.crealm)) {
- rep.encKDCRepPart.key.destroy();
- throw new KrbApErrException(Krb5.KRB_AP_ERR_MODIFIED);
- }
- *****/
-
- if (!req.reqBody.sname.equalsWithoutRealm(rep.encKDCRepPart.sname)) {
- rep.encKDCRepPart.key.destroy();
- throw new KrbApErrException(Krb5.KRB_AP_ERR_MODIFIED);
- }
-
- if (!req.reqBody.crealm.equals(rep.encKDCRepPart.srealm)) {
+ if (!req.reqBody.sname.equals(rep.encKDCRepPart.sname)) {
rep.encKDCRepPart.key.destroy();
throw new KrbApErrException(Krb5.KRB_AP_ERR_MODIFIED);
}
@@ -73,7 +62,6 @@
throw new KrbApErrException(Krb5.KRB_AP_ERR_MODIFIED);
}
-
for (int i = 1; i < 6; i++) {
if (req.reqBody.kdcOptions.get(i) !=
rep.encKDCRepPart.flags.get(i)) {
--- a/jdk/src/share/classes/sun/security/krb5/KrbPriv.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/KrbPriv.java Wed Jul 05 18:17:35 2017 +0200
@@ -89,8 +89,7 @@
raddr,
timestampRequired,
seqNumberRequired,
- creds.client,
- creds.client.getRealm()
+ creds.client
);
}
@@ -151,8 +150,7 @@
HostAddress rAddress,
boolean timestampRequired,
boolean seqNumberRequired,
- PrincipalName cname,
- Realm crealm
+ PrincipalName cname
) throws Asn1Exception, KdcErrException,
KrbApErrException, IOException, KrbCryptoException {
@@ -172,8 +170,7 @@
rAddress,
timestampRequired,
seqNumberRequired,
- cname,
- crealm
+ cname
);
return enc_part.userData;
--- a/jdk/src/share/classes/sun/security/krb5/KrbSafe.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/KrbSafe.java Wed Jul 05 18:17:35 2017 +0200
@@ -90,8 +90,7 @@
raddr,
timestampRequired,
seqNumberRequired,
- creds.client,
- creds.client.getRealm()
+ creds.client
);
}
@@ -154,8 +153,7 @@
HostAddress rAddress,
boolean timestampRequired,
boolean seqNumberRequired,
- PrincipalName cname,
- Realm crealm
+ PrincipalName cname
) throws Asn1Exception, KdcErrException,
KrbApErrException, IOException, KrbCryptoException {
@@ -177,8 +175,7 @@
rAddress,
timestampRequired,
seqNumberRequired,
- cname,
- crealm
+ cname
);
return krb_safe.safeBody.userData;
--- a/jdk/src/share/classes/sun/security/krb5/KrbTgsRep.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/KrbTgsRep.java Wed Jul 05 18:17:35 2017 +0200
@@ -82,12 +82,11 @@
byte[] enc_tgs_rep_part = rep.encPart.reset(enc_tgs_rep_bytes);
ref = new DerValue(enc_tgs_rep_part);
EncTGSRepPart enc_part = new EncTGSRepPart(ref);
- rep.ticket.sname.setRealm(rep.ticket.realm);
rep.encKDCRepPart = enc_part;
- check(req, rep);
+ check(false, req, rep);
- creds = new Credentials(rep.ticket,
+ this.creds = new Credentials(rep.ticket,
req.reqBody.cname,
rep.ticket.sname,
enc_part.key,
@@ -99,7 +98,6 @@
enc_part.caddr
);
this.rep = rep;
- this.creds = creds;
this.secondTicket = tgsReq.getSecondTicket();
}
--- a/jdk/src/share/classes/sun/security/krb5/KrbTgsReq.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/KrbTgsReq.java Wed Jul 05 18:17:35 2017 +0200
@@ -148,7 +148,6 @@
asCreds.key,
ctime,
princName,
- princName.getRealm(),
servName,
from,
till,
@@ -214,7 +213,6 @@
EncryptionKey key,
KerberosTime ctime,
PrincipalName cname,
- Realm crealm,
PrincipalName sname,
KerberosTime from,
KerberosTime till,
@@ -273,8 +271,6 @@
KDCReqBody reqBody = new KDCReqBody(
kdc_options,
cname,
- // crealm,
- sname.getRealm(), // TO
sname,
from,
req_till,
@@ -315,7 +311,6 @@
new APOptions(),
ticket,
key,
- crealm,
cname,
cksum,
ctime,
--- a/jdk/src/share/classes/sun/security/krb5/PrincipalName.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/PrincipalName.java Wed Jul 05 18:17:35 2017 +0200
@@ -38,15 +38,25 @@
import java.util.Locale;
import java.io.IOException;
import java.math.BigInteger;
+import java.util.Arrays;
import sun.security.krb5.internal.ccache.CCacheOutputStream;
import sun.security.krb5.internal.util.KerberosString;
/**
- * This class encapsulates a Kerberos principal.
+ * Implements the ASN.1 PrincipalName type and its realm in a single class.
+ * <xmp>
+ * Realm ::= KerberosString
+ *
+ * PrincipalName ::= SEQUENCE {
+ * name-type [0] Int32,
+ * name-string [1] SEQUENCE OF KerberosString
+ * }
+ * </xmp>
+ * This class is immutable.
+ * @see Realm
*/
-public class PrincipalName
- implements Cloneable {
+public class PrincipalName implements Cloneable {
//name types
@@ -80,8 +90,6 @@
*/
public static final int KRB_NT_UID = 5;
-
-
/**
* TGS Name
*/
@@ -96,98 +104,109 @@
public static final String NAME_REALM_SEPARATOR_STR = "@";
public static final String REALM_COMPONENT_SEPARATOR_STR = ".";
- private int nameType;
- private String[] nameStrings; // Principal names don't mutate often
+ // Instance fields.
+
+ /**
+ * The name type, from PrincipalName's name-type field.
+ */
+ private final int nameType;
+
+ /**
+ * The name strings, from PrincipalName's name-strings field. This field
+ * must be neither null nor empty. Each entry of it must also be neither
+ * null nor empty. Make sure to clone the field when it's passed in or out.
+ */
+ private final String[] nameStrings;
+
+ /**
+ * The realm this principal belongs to.
+ */
+ private final Realm nameRealm; // not null
+
+ // cached default salt, not used in clone
+ private transient String salt = null;
- private Realm nameRealm; // optional; a null realm means use default
- // Note: the nameRealm is not included in the default ASN.1 encoding
+ // There are 3 basic constructors. All other constructors must call them.
+ // All basic constructors must call validateNameStrings.
+ // 1. From name components
+ // 2. From name
+ // 3. From DER encoding
- // cached salt, might be changed by KDC info, not used in clone
- private String salt = null;
+ /**
+ * Creates a PrincipalName.
+ */
+ public PrincipalName(int nameType, String[] nameStrings, Realm nameRealm) {
+ if (nameRealm == null) {
+ throw new IllegalArgumentException("Null realm not allowed");
+ }
+ validateNameStrings(nameStrings);
+ this.nameType = nameType;
+ this.nameStrings = nameStrings.clone();
+ this.nameRealm = nameRealm;
+ }
- protected PrincipalName() {
+ // This method is called by Windows NativeCred.c
+ public PrincipalName(String[] nameParts, String realm) throws RealmException {
+ this(KRB_NT_UNKNOWN, nameParts, new Realm(realm));
}
public PrincipalName(String[] nameParts, int type)
- throws IllegalArgumentException, IOException {
- if (nameParts == null) {
- throw new IllegalArgumentException("Null input not allowed");
- }
- nameStrings = new String[nameParts.length];
- System.arraycopy(nameParts, 0, nameStrings, 0, nameParts.length);
- nameType = type;
- nameRealm = null;
+ throws IllegalArgumentException, RealmException {
+ this(type, nameParts, Realm.getDefault());
}
- public PrincipalName(String[] nameParts) throws IOException {
- this(nameParts, KRB_NT_UNKNOWN);
+ // Validate a nameStrings argument
+ private static void validateNameStrings(String[] ns) {
+ if (ns == null) {
+ throw new IllegalArgumentException("Null nameStrings not allowed");
+ }
+ if (ns.length == 0) {
+ throw new IllegalArgumentException("Empty nameStrings not allowed");
+ }
+ for (String s: ns) {
+ if (s == null) {
+ throw new IllegalArgumentException("Null nameString not allowed");
+ }
+ if (s.isEmpty()) {
+ throw new IllegalArgumentException("Empty nameString not allowed");
+ }
+ }
}
public Object clone() {
try {
PrincipalName pName = (PrincipalName) super.clone();
- // Re-assign mutable fields
- if (nameStrings != null) {
- pName.nameStrings = nameStrings.clone();
- }
- if (nameRealm != null) {
- pName.nameRealm = (Realm)nameRealm.clone();
- }
+ UNSAFE.putObject(this, NAME_STRINGS_OFFSET, nameStrings.clone());
return pName;
} catch (CloneNotSupportedException ex) {
throw new AssertionError("Should never happen");
}
}
- /*
- * Added to workaround a bug where the equals method that takes a
- * PrincipalName is not being called but Object.equals(Object) is
- * being called.
- */
- public boolean equals(Object o) {
- if (o instanceof PrincipalName)
- return equals((PrincipalName)o);
- else
- return false;
+ private static final long NAME_STRINGS_OFFSET;
+ private static final sun.misc.Unsafe UNSAFE;
+ static {
+ try {
+ sun.misc.Unsafe unsafe = sun.misc.Unsafe.getUnsafe();
+ NAME_STRINGS_OFFSET = unsafe.objectFieldOffset(
+ PrincipalName.class.getDeclaredField("nameStrings"));
+ UNSAFE = unsafe;
+ } catch (ReflectiveOperationException e) {
+ throw new Error(e);
+ }
}
- public boolean equals(PrincipalName other) {
-
-
- if (!equalsWithoutRealm(other)) {
- return false;
- }
-
- if ((nameRealm != null && other.nameRealm == null) ||
- (nameRealm == null && other.nameRealm != null)) {
- return false;
- }
-
- if (nameRealm != null && other.nameRealm != null) {
- if (!nameRealm.equals(other.nameRealm)) {
- return false;
- }
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
}
-
- return true;
- }
-
- boolean equalsWithoutRealm(PrincipalName other) {
-
- if ((nameStrings != null && other.nameStrings == null) ||
- (nameStrings == null && other.nameStrings != null))
- return false;
-
- if (nameStrings != null && other.nameStrings != null) {
- if (nameStrings.length != other.nameStrings.length)
- return false;
- for (int i = 0; i < nameStrings.length; i++)
- if (!nameStrings[i].equals(other.nameStrings[i]))
- return false;
+ if (o instanceof PrincipalName) {
+ PrincipalName other = (PrincipalName)o;
+ return nameRealm.equals(other.nameRealm) &&
+ Arrays.equals(nameStrings, other.nameStrings);
}
-
- return true;
-
+ return false;
}
/**
@@ -208,20 +227,23 @@
* http://www.ietf.org/rfc/rfc4120.txt</a>.
*
* @param encoding a Der-encoded data.
+ * @param realm the realm for this name
* @exception Asn1Exception if an error occurs while decoding
* an ASN1 encoded data.
* @exception Asn1Exception if there is an ASN1 encoding error
* @exception IOException if an I/O error occurs
* @exception IllegalArgumentException if encoding is null
* reading encoded data.
- *
*/
- public PrincipalName(DerValue encoding)
- throws Asn1Exception, IOException {
- nameRealm = null;
+ public PrincipalName(DerValue encoding, Realm realm)
+ throws Asn1Exception, IOException {
+ if (realm == null) {
+ throw new IllegalArgumentException("Null realm not allowed");
+ }
+ nameRealm = realm;
DerValue der;
if (encoding == null) {
- throw new IllegalArgumentException("Null input not allowed");
+ throw new IllegalArgumentException("Null encoding not allowed");
}
if (encoding.getTag() != DerValue.tag_Sequence) {
throw new Asn1Exception(Krb5.ASN1_BAD_ID);
@@ -243,14 +265,12 @@
DerValue subSubDer;
while(subDer.getData().available() > 0) {
subSubDer = subDer.getData().getDerValue();
- v.addElement(new KerberosString(subSubDer).toString());
+ String namePart = new KerberosString(subSubDer).toString();
+ v.addElement(namePart);
}
- if (v.size() > 0) {
- nameStrings = new String[v.size()];
- v.copyInto(nameStrings);
- } else {
- nameStrings = new String[] {""};
- }
+ nameStrings = new String[v.size()];
+ v.copyInto(nameStrings);
+ validateNameStrings(nameStrings);
} else {
throw new Asn1Exception(Krb5.ASN1_BAD_ID);
}
@@ -267,32 +287,35 @@
* more marshaled value.
* @param explicitTag tag number.
* @param optional indicate if this data field is optional
- * @return an instance of <code>PrincipalName</code>.
- *
+ * @param realm the realm for the name
+ * @return an instance of <code>PrincipalName</code>, or null if the
+ * field is optional and missing.
*/
public static PrincipalName parse(DerInputStream data,
byte explicitTag, boolean
- optional)
- throws Asn1Exception, IOException {
+ optional,
+ Realm realm)
+ throws Asn1Exception, IOException, RealmException {
if ((optional) && (((byte)data.peekByte() & (byte)0x1F) !=
explicitTag))
return null;
DerValue der = data.getDerValue();
- if (explicitTag != (der.getTag() & (byte)0x1F))
+ if (explicitTag != (der.getTag() & (byte)0x1F)) {
throw new Asn1Exception(Krb5.ASN1_BAD_ID);
- else {
+ } else {
DerValue subDer = der.getData().getDerValue();
- return new PrincipalName(subDer);
+ if (realm == null) {
+ realm = Realm.getDefault();
+ }
+ return new PrincipalName(subDer, realm);
}
}
- // This is protected because the definition of a principal
- // string is fixed
// XXX Error checkin consistent with MIT krb5_parse_name
// Code repetition, realm parsed again by class Realm
- protected static String[] parseName(String name) {
+ private static String[] parseName(String name) {
Vector<String> tempStrings = new Vector<>();
String temp = name;
@@ -312,13 +335,13 @@
continue;
}
else {
- if (componentStart < i) {
+ if (componentStart <= i) {
component = temp.substring(componentStart, i);
tempStrings.addElement(component);
}
componentStart = i + 1;
}
- } else
+ } else {
if (temp.charAt(i) == NAME_REALM_SEPARATOR) {
/*
* If this separator is escaped then don't treat it
@@ -337,11 +360,11 @@
break;
}
}
+ }
i++;
}
- if (i == temp.length())
- if (componentStart < i) {
+ if (i == temp.length()) {
component = temp.substring(componentStart, i);
tempStrings.addElement(component);
}
@@ -351,30 +374,26 @@
return result;
}
- public PrincipalName(String name, int type)
- throws RealmException {
+ /**
+ * Constructs a PrincipalName from a string.
+ * @param name the name
+ * @param type the type
+ * @param realm the realm, null if not known. Note that when realm is not
+ * null, it will be always used even if there is a realm part in name. When
+ * realm is null, will read realm part from name, or try to map a realm
+ * (for KRB_NT_SRV_HST), or use the default realm, or fail
+ * @throws RealmException
+ */
+ public PrincipalName(String name, int type, String realm)
+ throws RealmException {
if (name == null) {
throw new IllegalArgumentException("Null name not allowed");
}
String[] nameParts = parseName(name);
- Realm tempRealm = null;
- String realmString = Realm.parseRealmAtSeparator(name);
-
- if (realmString == null) {
- try {
- Config config = Config.getInstance();
- realmString = config.getDefaultRealm();
- } catch (KrbException e) {
- RealmException re =
- new RealmException(e.getMessage());
- re.initCause(e);
- throw re;
- }
+ validateNameStrings(nameParts);
+ if (realm == null) {
+ realm = Realm.parseRealmAtSeparator(name);
}
-
- if (realmString != null)
- tempRealm = new Realm(realmString);
-
switch (type) {
case KRB_NT_SRV_HST:
if (nameParts.length >= 2) {
@@ -401,18 +420,22 @@
}
nameStrings = nameParts;
nameType = type;
+
+ if (realm != null) {
+ nameRealm = new Realm(realm);
+ } else {
// We will try to get realm name from the mapping in
// the configuration. If it is not specified
// we will use the default realm. This nametype does
// not allow a realm to be specified. The name string must of
// the form service@host and this is internally changed into
// service/host by Kerberos
-
- String mapRealm = mapHostToRealm(nameParts[1]);
- if (mapRealm != null) {
- nameRealm = new Realm(mapRealm);
- } else {
- nameRealm = tempRealm;
+ String mapRealm = mapHostToRealm(nameParts[1]);
+ if (mapRealm != null) {
+ nameRealm = new Realm(mapRealm);
+ } else {
+ nameRealm = Realm.getDefault();
+ }
}
break;
case KRB_NT_UNKNOWN:
@@ -422,20 +445,34 @@
case KRB_NT_UID:
nameStrings = nameParts;
nameType = type;
- nameRealm = tempRealm;
+ if (realm != null) {
+ nameRealm = new Realm(realm);
+ } else {
+ nameRealm = Realm.getDefault();
+ }
break;
default:
throw new IllegalArgumentException("Illegal name type");
}
}
+ public PrincipalName(String name, int type) throws RealmException {
+ this(name, type, (String)null);
+ }
+
public PrincipalName(String name) throws RealmException {
this(name, KRB_NT_UNKNOWN);
}
public PrincipalName(String name, String realm) throws RealmException {
- this(name, KRB_NT_UNKNOWN);
- nameRealm = new Realm(realm);
+ this(name, KRB_NT_UNKNOWN, realm);
+ }
+
+ public static PrincipalName tgsService(String r1, String r2)
+ throws KrbException {
+ return new PrincipalName(PrincipalName.KRB_NT_SRV_INST,
+ new String[] {PrincipalName.TGS_DEFAULT_SRV_NAME, r1},
+ new Realm(r2));
}
public String getRealmAsString() {
@@ -475,29 +512,17 @@
}
public String getRealmString() {
- if (nameRealm != null)
- return nameRealm.toString();
- return null;
+ return nameRealm.toString();
}
public Realm getRealm() {
return nameRealm;
}
- public void setRealm(Realm new_nameRealm) throws RealmException {
- nameRealm = new_nameRealm;
- }
-
- public void setRealm(String realmsString) throws RealmException {
- nameRealm = new Realm(realmsString);
- }
-
public String getSalt() {
if (salt == null) {
StringBuffer salt = new StringBuffer();
- if (nameRealm != null) {
- salt.append(nameRealm.toString());
- }
+ salt.append(nameRealm.toString());
for (int i = 0; i < nameStrings.length; i++) {
salt.append(nameStrings[i]);
}
@@ -513,11 +538,8 @@
str.append("/");
str.append(nameStrings[i]);
}
- if (nameRealm != null) {
- str.append("@");
- str.append(nameRealm.toString());
- }
-
+ str.append("@");
+ str.append(nameRealm.toString());
return str.toString();
}
@@ -532,7 +554,8 @@
}
/**
- * Encodes a <code>PrincipalName</code> object.
+ * Encodes a <code>PrincipalName</code> object. Note that only the type and
+ * names are encoded. To encode the realm, call getRealm().asn1Encode().
* @return the byte array of the encoded PrncipalName 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.
@@ -597,12 +620,10 @@
public void writePrincipal(CCacheOutputStream cos) throws IOException {
cos.write32(nameType);
cos.write32(nameStrings.length);
- if (nameRealm != null) {
- byte[] realmBytes = null;
- realmBytes = nameRealm.toString().getBytes();
- cos.write32(realmBytes.length);
- cos.write(realmBytes, 0, realmBytes.length);
- }
+ byte[] realmBytes = null;
+ realmBytes = nameRealm.toString().getBytes();
+ cos.write32(realmBytes.length);
+ cos.write(realmBytes, 0, realmBytes.length);
byte[] bytes = null;
for (int i = 0; i < nameStrings.length; i++) {
bytes = nameStrings[i].getBytes();
@@ -612,31 +633,6 @@
}
/**
- * Creates a KRB_NT_SRV_INST name from the supplied
- * name components and realm.
- * @param primary the primary component of the name
- * @param instance the instance component of the name
- * @param realm the realm
- * @throws KrbException
- */
- protected PrincipalName(String primary, String instance, String realm,
- int type)
- throws KrbException {
-
- if (type != KRB_NT_SRV_INST) {
- throw new KrbException(Krb5.KRB_ERR_GENERIC, "Bad name type");
- }
-
- String[] nParts = new String[2];
- nParts[0] = primary;
- nParts[1] = instance;
-
- this.nameStrings = nParts;
- this.nameRealm = new Realm(realm);
- this.nameType = type;
- }
-
- /**
* Returns the instance component of a name.
* In a multi-component name such as a KRB_NT_SRV_INST
* name, the second component is returned.
--- a/jdk/src/share/classes/sun/security/krb5/Realm.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/Realm.java Wed Jul 05 18:17:35 2017 +0200
@@ -46,24 +46,29 @@
* <xmp>
* Realm ::= GeneralString
* </xmp>
+ * This class is immutable.
*/
public class Realm implements Cloneable {
- private String realm;
+ private final String realm; // not null nor empty
private static boolean DEBUG = Krb5.DEBUG;
- private Realm() {
- }
-
public Realm(String name) throws RealmException {
realm = parseRealm(name);
}
+ public static Realm getDefault() throws RealmException {
+ try {
+ return new Realm(Config.getInstance().getDefaultRealm());
+ } catch (RealmException re) {
+ throw re;
+ } catch (KrbException ke) {
+ throw new RealmException(ke);
+ }
+ }
+
+ // Immutable class, no need to clone
public Object clone() {
- Realm new_realm = new Realm();
- if (realm != null) {
- new_realm.realm = new String(realm);
- }
- return new_realm;
+ return this;
}
public boolean equals(Object obj) {
@@ -76,21 +81,11 @@
}
Realm that = (Realm)obj;
- if (this.realm != null && that.realm != null ) {
- return this.realm.equals(that.realm);
- } else {
- return (this.realm == null && that.realm == null);
- }
+ return this.realm.equals(that.realm);
}
public int hashCode() {
- int result = 17 ;
-
- if( realm != null ) {
- result = 37 * result + realm.hashCode();
- }
-
- return result;
+ return realm.hashCode();
}
/**
@@ -116,6 +111,7 @@
return realm;
}
+ // Extract realm from a string like dummy@REALM
public static String parseRealmAtSeparator(String name)
throws RealmException {
if (name == null) {
@@ -128,8 +124,12 @@
while (i < temp.length()) {
if (temp.charAt(i) == PrincipalName.NAME_REALM_SEPARATOR) {
if (i == 0 || temp.charAt(i - 1) != '\\') {
- if (i + 1 < temp.length())
+ if (i + 1 < temp.length()) {
result = temp.substring(i + 1, temp.length());
+ } else {
+ throw new IllegalArgumentException
+ ("empty realm part not allowed");
+ }
break;
}
}
@@ -219,7 +219,8 @@
* @return an instance of Realm.
*
*/
- public static Realm parse(DerInputStream data, byte explicitTag, boolean optional) throws Asn1Exception, IOException, RealmException {
+ public static Realm parse(DerInputStream data, byte explicitTag, boolean optional)
+ throws Asn1Exception, IOException, RealmException {
if ((optional) && (((byte)data.peekByte() & (byte)0x1F) != explicitTag)) {
return null;
}
--- a/jdk/src/share/classes/sun/security/krb5/RealmException.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/RealmException.java Wed Jul 05 18:17:35 2017 +0200
@@ -47,4 +47,7 @@
super(i,s);
}
+ public RealmException(Throwable cause) {
+ super(cause);
+ }
}
--- a/jdk/src/share/classes/sun/security/krb5/ServiceName.java Tue Jul 24 11:05:52 2012 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute 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 IBM Corp. 1999 All Rights Reserved.
- * Copyright 1997 The Open Group Research Institute. All rights reserved.
- */
-
-package sun.security.krb5;
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-
-public class ServiceName extends PrincipalName {
-
- public ServiceName(String name, int type) throws RealmException {
- super(name, type);
-
- }
- public ServiceName(String name) throws RealmException {
- this(name, PrincipalName.KRB_NT_UNKNOWN);
- }
-
- public ServiceName(String name, String realm) throws RealmException {
- this(name, PrincipalName.KRB_NT_UNKNOWN);
- setRealm(realm);
- }
-
- public ServiceName (String service, String instance, String realm)
- throws KrbException
- {
- super(service, instance, realm, PrincipalName.KRB_NT_SRV_INST);
- }
-
-}
--- a/jdk/src/share/classes/sun/security/krb5/internal/ASRep.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/ASRep.java Wed Jul 05 18:17:35 2017 +0200
@@ -42,11 +42,10 @@
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,
+ super(new_pAData, new_cname, new_ticket,
new_encPart, Krb5.KRB_AS_REP);
}
--- a/jdk/src/share/classes/sun/security/krb5/internal/Authenticator.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/Authenticator.java Wed Jul 05 18:17:35 2017 +0200
@@ -61,7 +61,6 @@
public class Authenticator {
public int authenticator_vno;
- public Realm crealm;
public PrincipalName cname;
Checksum cksum; //optional
public int cusec;
@@ -71,7 +70,6 @@
public AuthorizationData authorizationData; //optional
public Authenticator(
- Realm new_crealm,
PrincipalName new_cname,
Checksum new_cksum,
int new_cusec,
@@ -80,7 +78,6 @@
Integer new_seqNumber,
AuthorizationData new_authorizationData) {
authenticator_vno = Krb5.AUTHNETICATOR_VNO;
- crealm = new_crealm;
cname = new_cname;
cksum = new_cksum;
cusec = new_cusec;
@@ -131,8 +128,8 @@
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);
+ Realm crealm = Realm.parse(der.getData(), (byte) 0x01, false);
+ cname = PrincipalName.parse(der.getData(), (byte) 0x02, false, crealm);
cksum = Checksum.parse(der.getData(), (byte) 0x03, true);
subDer = der.getData().getDerValue();
if ((subDer.getTag() & (byte) 0x1F) == 0x04) {
@@ -180,7 +177,7 @@
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) 0x01), cname.getRealm().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()));
--- a/jdk/src/share/classes/sun/security/krb5/internal/CredentialsUtil.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/CredentialsUtil.java Wed Jul 05 18:17:35 2017 +0200
@@ -72,23 +72,9 @@
public static Credentials acquireServiceCreds(
String service, Credentials ccreds)
throws KrbException, IOException {
- ServiceName sname = new ServiceName(service);
+ PrincipalName sname = new PrincipalName(service);
String serviceRealm = sname.getRealmString();
String localRealm = ccreds.getClient().getRealmString();
- String defaultRealm = Config.getInstance().getDefaultRealm();
-
- if (localRealm == null) {
- PrincipalName temp = null;
- if ((temp = ccreds.getServer()) != null)
- localRealm = temp.getRealmString();
- }
- if (localRealm == null) {
- localRealm = defaultRealm;
- }
- if (serviceRealm == null) {
- serviceRealm = localRealm;
- sname.setRealm(serviceRealm);
- }
/*
if (!localRealm.equalsIgnoreCase(serviceRealm)) { //do cross-realm auth entication
@@ -128,13 +114,12 @@
int i = 0, k = 0;
Credentials cTgt = null, newTgt = null, theTgt = null;
- ServiceName tempService = null;
+ PrincipalName tempService = null;
String realm = null, newTgtRealm = null, theTgtRealm = null;
for (cTgt = ccreds, i = 0; i < realms.length;)
{
- tempService = new ServiceName(PrincipalName.TGS_DEFAULT_SRV_NAME,
- serviceRealm, realms[i]);
+ tempService = PrincipalName.tgsService(serviceRealm, realms[i]);
if (DEBUG)
{
@@ -164,9 +149,7 @@
newTgt == null && k > i; k--)
{
- tempService = new ServiceName(
- PrincipalName.TGS_DEFAULT_SRV_NAME,
- realms[k], realms[i]);
+ tempService = PrincipalName.tgsService(realms[k], realms[i]);
if (DEBUG)
{
System.out.println(">>> Credentials acquireServiceCreds: inner loop: [" + k +"] tempService=" + tempService);
@@ -306,7 +289,7 @@
* This method does the real job to request the service credential.
*/
private static Credentials serviceCreds(
- ServiceName service, Credentials ccreds)
+ PrincipalName service, Credentials ccreds)
throws KrbException, IOException {
return new KrbTgsReq(ccreds, service).sendAndGetCreds();
}
--- a/jdk/src/share/classes/sun/security/krb5/internal/EncASRepPart.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/EncASRepPart.java Wed Jul 05 18:17:35 2017 +0200
@@ -46,7 +46,6 @@
KerberosTime new_starttime,
KerberosTime new_endtime,
KerberosTime new_renewTill,
- Realm new_srealm,
PrincipalName new_sname,
HostAddresses new_caddr) {
super(
@@ -59,7 +58,6 @@
new_starttime,
new_endtime,
new_renewTill,
- new_srealm,
new_sname,
new_caddr,
Krb5.KRB_ENC_AS_REP_PART
--- a/jdk/src/share/classes/sun/security/krb5/internal/EncKDCRepPart.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/EncKDCRepPart.java Wed Jul 05 18:17:35 2017 +0200
@@ -74,7 +74,6 @@
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
@@ -89,7 +88,6 @@
KerberosTime new_starttime,
KerberosTime new_endtime,
KerberosTime new_renewTill,
- Realm new_srealm,
PrincipalName new_sname,
HostAddresses new_caddr,
int new_msgType) {
@@ -102,7 +100,6 @@
starttime = new_starttime;
endtime = new_endtime;
renewTill = new_renewTill;
- srealm = new_srealm;
sname = new_sname;
caddr = new_caddr;
msgType = new_msgType;
@@ -158,8 +155,8 @@
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);
+ Realm srealm = Realm.parse(der.getData(), (byte) 0x09, false);
+ sname = PrincipalName.parse(der.getData(), (byte) 0x0A, false, srealm);
if (der.getData().available() > 0) {
caddr = HostAddresses.parse(der.getData(), (byte) 0x0B, true);
}
@@ -206,7 +203,7 @@
true, (byte) 0x08), renewTill.asn1Encode());
}
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
- true, (byte) 0x09), srealm.asn1Encode());
+ true, (byte) 0x09), sname.getRealm().asn1Encode());
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
true, (byte) 0x0A), sname.asn1Encode());
if (caddr != null) {
--- a/jdk/src/share/classes/sun/security/krb5/internal/EncTGSRepPart.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/EncTGSRepPart.java Wed Jul 05 18:17:35 2017 +0200
@@ -45,7 +45,6 @@
KerberosTime new_starttime,
KerberosTime new_endtime,
KerberosTime new_renewTill,
- Realm new_srealm,
PrincipalName new_sname,
HostAddresses new_caddr) {
super(
@@ -58,7 +57,6 @@
new_starttime,
new_endtime,
new_renewTill,
- new_srealm,
new_sname,
new_caddr,
Krb5.KRB_ENC_TGS_REP_PART);
--- a/jdk/src/share/classes/sun/security/krb5/internal/EncTicketPart.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/EncTicketPart.java Wed Jul 05 18:17:35 2017 +0200
@@ -65,7 +65,6 @@
public TicketFlags flags;
public EncryptionKey key;
- public Realm crealm;
public PrincipalName cname;
public TransitedEncoding transited;
public KerberosTime authtime;
@@ -78,7 +77,6 @@
public EncTicketPart(
TicketFlags new_flags,
EncryptionKey new_key,
- Realm new_crealm,
PrincipalName new_cname,
TransitedEncoding new_transited,
KerberosTime new_authtime,
@@ -89,7 +87,6 @@
AuthorizationData new_authorizationData) {
flags = new_flags;
key = new_key;
- crealm = new_crealm;
cname = new_cname;
transited = new_transited;
authtime = new_authtime;
@@ -151,8 +148,8 @@
}
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);
+ Realm crealm = Realm.parse(der.getData(), (byte) 0x02, false);
+ cname = PrincipalName.parse(der.getData(), (byte) 0x03, false, crealm);
transited = TransitedEncoding.parse(der.getData(), (byte) 0x04, false);
authtime = KerberosTime.parse(der.getData(), (byte) 0x05, false);
starttime = KerberosTime.parse(der.getData(), (byte) 0x06, true);
@@ -186,7 +183,7 @@
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
true, (byte) 0x01), key.asn1Encode());
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
- true, (byte) 0x02), crealm.asn1Encode());
+ true, (byte) 0x02), cname.getRealm().asn1Encode());
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
true, (byte) 0x03), cname.asn1Encode());
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
--- a/jdk/src/share/classes/sun/security/krb5/internal/KDCRep.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/KDCRep.java Wed Jul 05 18:17:35 2017 +0200
@@ -61,7 +61,6 @@
*/
public class KDCRep {
- public Realm crealm;
public PrincipalName cname;
public Ticket ticket;
public EncryptedData encPart;
@@ -73,7 +72,6 @@
public KDCRep(
PAData[] new_pAData,
- Realm new_crealm,
PrincipalName new_cname,
Ticket new_ticket,
EncryptedData new_encPart,
@@ -90,7 +88,6 @@
}
}
}
- crealm = new_crealm;
cname = new_cname;
ticket = new_ticket;
encPart = new_encPart;
@@ -174,8 +171,8 @@
} else {
pAData = null;
}
- crealm = Realm.parse(der.getData(), (byte) 0x03, false);
- cname = PrincipalName.parse(der.getData(), (byte) 0x04, false);
+ Realm crealm = Realm.parse(der.getData(), (byte) 0x03, false);
+ cname = PrincipalName.parse(der.getData(), (byte) 0x04, false, crealm);
ticket = Ticket.parse(der.getData(), (byte) 0x05, false);
encPart = EncryptedData.parse(der.getData(), (byte) 0x06, false);
if (der.getData().available() > 0) {
@@ -212,7 +209,7 @@
true, (byte) 0x02), temp);
}
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
- true, (byte) 0x03), crealm.asn1Encode());
+ true, (byte) 0x03), cname.getRealm().asn1Encode());
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
true, (byte) 0x04), cname.asn1Encode());
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
--- a/jdk/src/share/classes/sun/security/krb5/internal/KDCReqBody.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/KDCReqBody.java Wed Jul 05 18:17:35 2017 +0200
@@ -72,7 +72,6 @@
public class KDCReqBody {
public KDCOptions kdcOptions;
public PrincipalName cname; //optional in ASReq only
- public Realm crealm;
public PrincipalName sname; //optional
public KerberosTime from; //optional
public KerberosTime till;
@@ -87,7 +86,6 @@
public KDCReqBody(
KDCOptions new_kdcOptions,
PrincipalName new_cname, //optional in ASReq only
- Realm new_crealm,
PrincipalName new_sname, //optional
KerberosTime new_from, //optional
KerberosTime new_till,
@@ -100,7 +98,6 @@
) throws IOException {
kdcOptions = new_kdcOptions;
cname = new_cname;
- crealm = new_crealm;
sname = new_sname;
from = new_from;
till = new_till;
@@ -142,12 +139,22 @@
throw new Asn1Exception(Krb5.ASN1_BAD_ID);
}
kdcOptions = KDCOptions.parse(encoding.getData(), (byte)0x00, false);
- cname = PrincipalName.parse(encoding.getData(), (byte)0x01, true);
+
+ // cname only appears in AS-REQ and it shares the realm field with
+ // sname. This is the only place where realm comes after the name.
+ // We first give cname a fake realm and reassign it the correct
+ // realm after the realm field is read.
+ cname = PrincipalName.parse(encoding.getData(), (byte)0x01, true,
+ new Realm("PLACEHOLDER"));
if ((msgType != Krb5.KRB_AS_REQ) && (cname != null)) {
throw new Asn1Exception(Krb5.ASN1_BAD_ID);
}
- crealm = Realm.parse(encoding.getData(), (byte)0x02, false);
- sname = PrincipalName.parse(encoding.getData(), (byte)0x03, true);
+ Realm realm = Realm.parse(encoding.getData(), (byte)0x02, false);
+ if (cname != null) {
+ cname = new PrincipalName(
+ cname.getNameType(), cname.getNameStrings(), realm);
+ }
+ sname = PrincipalName.parse(encoding.getData(), (byte)0x03, true, realm);
from = KerberosTime.parse(encoding.getData(), (byte)0x04, true);
till = KerberosTime.parse(encoding.getData(), (byte)0x05, false);
rtime = KerberosTime.parse(encoding.getData(), (byte)0x06, true);
@@ -223,9 +230,11 @@
v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), cname.asn1Encode()));
}
}
- v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), crealm.asn1Encode()));
if (sname != null) {
+ v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), sname.getRealm().asn1Encode()));
v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), sname.asn1Encode()));
+ } else if (cname != null) {
+ v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), cname.getRealm().asn1Encode()));
}
if (from != null) {
v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x04), from.asn1Encode()));
--- a/jdk/src/share/classes/sun/security/krb5/internal/KRBError.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/KRBError.java Wed Jul 05 18:17:35 2017 +0200
@@ -90,9 +90,7 @@
private KerberosTime sTime;
private Integer suSec;
private int errorCode;
- private Realm crealm; //optional
private PrincipalName cname; //optional
- private Realm realm;
private PrincipalName sname;
private String eText; //optional
private byte[] eData; //optional
@@ -128,9 +126,7 @@
KerberosTime new_sTime,
Integer new_suSec,
int new_errorCode,
- Realm new_crealm,
PrincipalName new_cname,
- Realm new_realm,
PrincipalName new_sname,
String new_eText,
byte[] new_eData
@@ -142,9 +138,7 @@
sTime = new_sTime;
suSec = new_suSec;
errorCode = new_errorCode;
- crealm = new_crealm;
cname = new_cname;
- realm = new_realm;
sname = new_sname;
eText = new_eText;
eData = new_eData;
@@ -159,9 +153,7 @@
KerberosTime new_sTime,
Integer new_suSec,
int new_errorCode,
- Realm new_crealm,
PrincipalName new_cname,
- Realm new_realm,
PrincipalName new_sname,
String new_eText,
byte[] new_eData,
@@ -174,9 +166,7 @@
sTime = new_sTime;
suSec = new_suSec;
errorCode = new_errorCode;
- crealm = new_crealm;
cname = new_cname;
- realm = new_realm;
sname = new_sname;
eText = new_eText;
eData = new_eData;
@@ -359,10 +349,10 @@
errorCode = subDer.getData().getBigInteger().intValue();
}
else throw new Asn1Exception(Krb5.ASN1_BAD_ID);
- crealm = Realm.parse(der.getData(), (byte)0x07, true);
- cname = PrincipalName.parse(der.getData(), (byte)0x08, true);
- realm = Realm.parse(der.getData(), (byte)0x09, false);
- sname = PrincipalName.parse(der.getData(), (byte)0x0A, false);
+ Realm crealm = Realm.parse(der.getData(), (byte)0x07, true);
+ cname = PrincipalName.parse(der.getData(), (byte)0x08, true, crealm);
+ Realm realm = Realm.parse(der.getData(), (byte)0x09, false);
+ sname = PrincipalName.parse(der.getData(), (byte)0x0A, false, realm);
eText = null;
eData = null;
eCksum = null;
@@ -403,15 +393,9 @@
System.out.println("\t suSec is " + suSec);
System.out.println("\t error code is " + errorCode);
System.out.println("\t error Message is " + Krb5.getErrorMessage(errorCode));
- if (crealm != null) {
- System.out.println("\t crealm is " + crealm.toString());
- }
if (cname != null) {
System.out.println("\t cname is " + cname.toString());
}
- if (realm != null) {
- System.out.println("\t realm is " + realm.toString());
- }
if (sname != null) {
System.out.println("\t sname is " + sname.toString());
}
@@ -458,14 +442,12 @@
temp.putInteger(BigInteger.valueOf(errorCode));
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x06), temp);
- if (crealm != null) {
- bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x07), crealm.asn1Encode());
- }
if (cname != null) {
+ bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x07), cname.getRealm().asn1Encode());
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x08), cname.asn1Encode());
}
- bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x09), realm.asn1Encode());
+ bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x09), sname.getRealm().asn1Encode());
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x0A), sname.asn1Encode());
if (eText != null) {
@@ -506,9 +488,7 @@
isEqual(sTime, other.sTime) &&
isEqual(suSec, other.suSec) &&
errorCode == other.errorCode &&
- isEqual(crealm, other.crealm) &&
isEqual(cname, other.cname) &&
- isEqual(realm, other.realm) &&
isEqual(sname, other.sname) &&
isEqual(eText, other.eText) &&
java.util.Arrays.equals(eData, other.eData) &&
@@ -528,9 +508,7 @@
if (sTime != null) result = 37 * result + sTime.hashCode();
if (suSec != null) result = 37 * result + suSec.hashCode();
result = 37 * result + errorCode;
- if (crealm != null) result = 37 * result + crealm.hashCode();
if (cname != null) result = 37 * result + cname.hashCode();
- if (realm != null) result = 37 * result + realm.hashCode();
if (sname != null) result = 37 * result + sname.hashCode();
if (eText != null) result = 37 * result + eText.hashCode();
result = 37 * result + Arrays.hashCode(eData);
--- a/jdk/src/share/classes/sun/security/krb5/internal/KrbCredInfo.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/KrbCredInfo.java Wed Jul 05 18:17:35 2017 +0200
@@ -63,14 +63,12 @@
public class KrbCredInfo {
public EncryptionKey key;
- public Realm prealm; //optional
public PrincipalName pname; //optional
public TicketFlags flags; //optional
public KerberosTime authtime; //optional
public KerberosTime starttime; //optional
public KerberosTime endtime; //optional
public KerberosTime renewTill; //optional
- public Realm srealm; //optional
public PrincipalName sname; //optional
public HostAddresses caddr; //optional
@@ -79,26 +77,22 @@
public KrbCredInfo(
EncryptionKey new_key,
- Realm new_prealm,
PrincipalName new_pname,
TicketFlags new_flags,
KerberosTime new_authtime,
KerberosTime new_starttime,
KerberosTime new_endtime,
KerberosTime new_renewTill,
- Realm new_srealm,
PrincipalName new_sname,
HostAddresses new_caddr
) {
key = new_key;
- prealm = new_prealm;
pname = new_pname;
flags = new_flags;
authtime = new_authtime;
starttime = new_starttime;
endtime = new_endtime;
renewTill = new_renewTill;
- srealm = new_srealm;
sname = new_sname;
caddr = new_caddr;
}
@@ -115,21 +109,20 @@
if (encoding.getTag() != DerValue.tag_Sequence) {
throw new Asn1Exception(Krb5.ASN1_BAD_ID);
}
- prealm = null;
pname = null;
flags = null;
authtime = null;
starttime = null;
endtime = null;
renewTill = null;
- srealm = null;
sname = null;
caddr = null;
key = EncryptionKey.parse(encoding.getData(), (byte)0x00, false);
+ Realm prealm = null, srealm = null;
if (encoding.getData().available() > 0)
prealm = Realm.parse(encoding.getData(), (byte)0x01, true);
if (encoding.getData().available() > 0)
- pname = PrincipalName.parse(encoding.getData(), (byte)0x02, true);
+ pname = PrincipalName.parse(encoding.getData(), (byte)0x02, true, prealm);
if (encoding.getData().available() > 0)
flags = TicketFlags.parse(encoding.getData(), (byte)0x03, true);
if (encoding.getData().available() > 0)
@@ -143,7 +136,7 @@
if (encoding.getData().available() > 0)
srealm = Realm.parse(encoding.getData(), (byte)0x08, true);
if (encoding.getData().available() > 0)
- sname = PrincipalName.parse(encoding.getData(), (byte)0x09, true);
+ sname = PrincipalName.parse(encoding.getData(), (byte)0x09, true, srealm);
if (encoding.getData().available() > 0)
caddr = HostAddresses.parse(encoding.getData(), (byte)0x0A, true);
if (encoding.getData().available() > 0)
@@ -159,10 +152,10 @@
public byte[] asn1Encode() throws Asn1Exception, IOException {
Vector<DerValue> 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()));
- if (pname != null)
+ if (pname != null) {
+ v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), pname.getRealm().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()));
if (authtime != null)
@@ -173,10 +166,10 @@
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()));
- if (srealm != null)
- v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x08), srealm.asn1Encode()));
- if (sname != null)
+ if (sname != null) {
+ v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x08), sname.getRealm().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()));
DerValue der[] = new DerValue[v.size()];
@@ -190,8 +183,6 @@
KrbCredInfo kcred = new KrbCredInfo();
kcred.key = (EncryptionKey)key.clone();
// optional fields
- if (prealm != null)
- kcred.prealm = (Realm)prealm.clone();
if (pname != null)
kcred.pname = (PrincipalName)pname.clone();
if (flags != null)
@@ -204,8 +195,6 @@
kcred.endtime = (KerberosTime)endtime.clone();
if (renewTill != null)
kcred.renewTill = (KerberosTime)renewTill.clone();
- if (srealm != null)
- kcred.srealm = (Realm)srealm.clone();
if (sname != null)
kcred.sname = (PrincipalName)sname.clone();
if (caddr != null)
--- a/jdk/src/share/classes/sun/security/krb5/internal/TGSRep.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/TGSRep.java Wed Jul 05 18:17:35 2017 +0200
@@ -42,12 +42,11 @@
public TGSRep(
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,
+ super(new_pAData, new_cname, new_ticket,
new_encPart, Krb5.KRB_TGS_REP);
}
--- a/jdk/src/share/classes/sun/security/krb5/internal/Ticket.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/Ticket.java Wed Jul 05 18:17:35 2017 +0200
@@ -60,7 +60,6 @@
public class Ticket implements Cloneable {
public int tkt_vno;
- public Realm realm;
public PrincipalName sname;
public EncryptedData encPart;
@@ -69,7 +68,6 @@
public Object clone() {
Ticket new_ticket = new Ticket();
- new_ticket.realm = (Realm)realm.clone();
new_ticket.sname = (PrincipalName)sname.clone();
new_ticket.encPart = (EncryptedData)encPart.clone();
new_ticket.tkt_vno = tkt_vno;
@@ -77,12 +75,10 @@
}
public Ticket(
- Realm new_realm,
PrincipalName new_sname,
EncryptedData new_encPart
) {
tkt_vno = Krb5.TICKET_VNO;
- realm = new_realm;
sname = new_sname;
encPart = new_encPart;
}
@@ -123,8 +119,8 @@
tkt_vno = subDer.getData().getBigInteger().intValue();
if (tkt_vno != Krb5.TICKET_VNO)
throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION);
- realm = Realm.parse(der.getData(), (byte)0x01, false);
- sname = PrincipalName.parse(der.getData(), (byte)0x02, false);
+ Realm srealm = Realm.parse(der.getData(), (byte)0x01, false);
+ sname = PrincipalName.parse(der.getData(), (byte)0x02, false, srealm);
encPart = EncryptedData.parse(der.getData(), (byte)0x03, false);
if (der.getData().available() > 0)
throw new Asn1Exception(Krb5.ASN1_BAD_ID);
@@ -142,7 +138,7 @@
DerValue der[] = new DerValue[4];
temp.putInteger(BigInteger.valueOf(tkt_vno));
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), temp);
- bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), realm.asn1Encode());
+ bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), sname.getRealm().asn1Encode());
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), sname.asn1Encode());
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), encPart.asn1Encode());
temp = new DerOutputStream();
--- a/jdk/src/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java Wed Jul 05 18:17:35 2017 +0200
@@ -114,7 +114,6 @@
// made public for KinitOptions to call directly
public PrincipalName readPrincipal(int version) throws IOException, RealmException {
int type, length, namelength, kret;
- PrincipalName p;
String[] pname = null;
String realm;
/* Read principal type */
@@ -144,11 +143,13 @@
realm = result[0];
pname = new String[length];
System.arraycopy(result, 1, pname, 0, length);
- p = new PrincipalName(pname, type);
- p.setRealm(realm);
+ return new PrincipalName(type, pname, new Realm(realm));
}
- else p = new PrincipalName(result, type);
- return p;
+ try {
+ return new PrincipalName(result, type);
+ } catch (RealmException re) {
+ return null;
+ }
}
/*
@@ -342,10 +343,10 @@
Credentials readCred(int version) throws IOException,RealmException, KrbApErrException, Asn1Exception {
PrincipalName cpname = readPrincipal(version);
if (DEBUG)
- System.out.println(">>>DEBUG <CCacheInputStream> client principal is " + cpname.toString());
+ System.out.println(">>>DEBUG <CCacheInputStream> client principal is " + cpname);
PrincipalName spname = readPrincipal(version);
if (DEBUG)
- System.out.println(">>>DEBUG <CCacheInputStream> server principal is " + spname.toString());
+ System.out.println(">>>DEBUG <CCacheInputStream> server principal is " + spname);
EncryptionKey key = readKey(version);
if (DEBUG)
System.out.println(">>>DEBUG <CCacheInputStream> key type: " + key.getEType());
--- a/jdk/src/share/classes/sun/security/krb5/internal/ccache/Credentials.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/ccache/Credentials.java Wed Jul 05 18:17:35 2017 +0200
@@ -36,9 +36,7 @@
public class Credentials {
PrincipalName cname;
- Realm crealm;
PrincipalName sname;
- Realm srealm;
EncryptionKey key;
KerberosTime authtime;
KerberosTime starttime;//optional
@@ -67,15 +65,7 @@
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();
@@ -110,7 +100,6 @@
{
return;
}
- crealm = (Realm) kdcRep.crealm.clone();
cname = (PrincipalName) kdcRep.cname.clone();
ticket = (Ticket) kdcRep.ticket.clone();
key = (EncryptionKey) kdcRep.encKDCRepPart.key.clone();
@@ -123,7 +112,6 @@
if (kdcRep.encKDCRepPart.renewTill != null) {
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();
@@ -138,17 +126,7 @@
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) {
@@ -202,9 +180,6 @@
}
public PrincipalName getServicePrincipal() throws RealmException {
- if (sname.getRealm() == null) {
- sname.setRealm(srealm);
- }
return sname;
}
--- a/jdk/src/share/classes/sun/security/krb5/internal/ccache/CredentialsCache.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/ccache/CredentialsCache.java Wed Jul 05 18:17:35 2017 +0200
@@ -120,6 +120,6 @@
public abstract void save() throws IOException, KrbException;
public abstract Credentials[] getCredsList();
public abstract Credentials getDefaultCreds();
- public abstract Credentials getCreds(PrincipalName sname, Realm srealm) ;
- public abstract Credentials getCreds(LoginOptions options, PrincipalName sname, Realm srealm) ;
+ public abstract Credentials getCreds(PrincipalName sname);
+ public abstract Credentials getCreds(LoginOptions options, PrincipalName sname);
}
--- a/jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java Wed Jul 05 18:17:35 2017 +0200
@@ -59,7 +59,6 @@
public int version;
public Tag tag; // optional
public PrincipalName primaryPrincipal;
- public Realm primaryRealm;
private Vector<Credentials> credentialsList;
private static String dir;
private static boolean DEBUG = Krb5.DEBUG;
@@ -79,7 +78,6 @@
}
if (principal != null) {
fcc.primaryPrincipal = principal;
- fcc.primaryRealm = principal.getRealm();
}
fcc.load(cacheName);
return fcc;
@@ -153,7 +151,6 @@
synchronized void init(PrincipalName principal, String name)
throws IOException, KrbException {
primaryPrincipal = principal;
- primaryRealm = principal.getRealm();
CCacheOutputStream cos =
new CCacheOutputStream(new FileOutputStream(name));
version = KRB5_FCC_FVNO_3;
@@ -183,7 +180,6 @@
}
} else
primaryPrincipal = p;
- primaryRealm = primaryPrincipal.getRealm();
credentialsList = new Vector<Credentials> ();
while (cis.available() > 0) {
Credentials cred = cis.readCred(version);
@@ -291,18 +287,16 @@
}
- public Credentials getCreds(LoginOptions options,
- PrincipalName sname, Realm srealm) {
+ public Credentials getCreds(LoginOptions options, PrincipalName sname) {
if (options == null) {
- return getCreds(sname, srealm);
+ return getCreds(sname);
} else {
Credentials[] list = getCredsList();
if (list == null) {
return null;
} else {
for (int i = 0; i < list.length; i++) {
- if (sname.match(list[i].sname) &&
- (srealm.toString().equals(list[i].srealm.toString()))) {
+ if (sname.match(list[i].sname)) {
if (list[i].flags.match(options)) {
return list[i];
}
@@ -317,16 +311,14 @@
/**
* Gets a credentials for a specified service.
* @param sname service principal name.
- * @param srealm the realm that the service belongs to.
*/
- public Credentials getCreds(PrincipalName sname, Realm srealm) {
+ public Credentials getCreds(PrincipalName sname) {
Credentials[] list = getCredsList();
if (list == null) {
return null;
} else {
for (int i = 0; i < list.length; i++) {
- if (sname.match(list[i].sname) &&
- (srealm.toString().equals(list[i].srealm.toString()))) {
+ if (sname.match(list[i].sname)) {
return list[i];
}
}
@@ -343,7 +335,7 @@
if (list[i].sname.toString().startsWith("krbtgt")) {
String[] nameStrings = list[i].sname.getNameStrings();
// find the TGT for the current realm krbtgt/realm@realm
- if (nameStrings[1].equals(list[i].srealm.toString())) {
+ if (nameStrings[1].equals(list[i].sname.getRealm().toString())) {
return list[i];
}
}
--- a/jdk/src/share/classes/sun/security/krb5/internal/ccache/MemoryCredentialsCache.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/ccache/MemoryCredentialsCache.java Wed Jul 05 18:17:35 2017 +0200
@@ -64,7 +64,7 @@
public abstract Credentials[] getCredsList();
- public abstract Credentials getCreds(PrincipalName sname, Realm srealm) ;
+ public abstract Credentials getCreds(PrincipalName sname) ;
public abstract PrincipalName getPrimaryPrincipal();
--- a/jdk/src/share/classes/sun/security/krb5/internal/ktab/KeyTabInputStream.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/krb5/internal/ktab/KeyTabInputStream.java Wed Jul 05 18:17:35 2017 +0200
@@ -83,8 +83,7 @@
}
int nameType = read(4);
index -= 4;
- PrincipalName service = new PrincipalName(nameParts, nameType);
- service.setRealm(realm);
+ PrincipalName service = new PrincipalName(nameType, nameParts, realm);
KerberosTime timeStamp = readTimeStamp();
int keyVersion = read() & 0xff;
--- a/jdk/src/share/classes/sun/security/ssl/krb5/KerberosClientKeyExchangeImpl.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/classes/sun/security/ssl/krb5/KerberosClientKeyExchangeImpl.java Wed Jul 05 18:17:35 2017 +0200
@@ -163,7 +163,7 @@
EncryptedData encPart = t.encPart;
PrincipalName ticketSname = t.sname;
- Realm ticketRealm = t.realm;
+ Realm ticketRealm = t.sname.getRealm();
String serverPrincipal = serverKeys[0].getPrincipal().getName();
@@ -175,8 +175,7 @@
*/
// Check that ticket Sname matches serverPrincipal
- String ticketPrinc = ticketSname.toString().concat("@" +
- ticketRealm.toString());
+ String ticketPrinc = ticketSname.toString();
if (!ticketPrinc.equals(serverPrincipal)) {
if (debug != null && Debug.isOn("handshake"))
System.out.println("Service principal in Ticket does not"
@@ -224,7 +223,6 @@
if (debug != null && Debug.isOn("handshake")) {
System.out.println("server principal: " + serverPrincipal);
- System.out.println("realm: " + encTicketPart.crealm.toString());
System.out.println("cname: " + encTicketPart.cname.toString());
}
} catch (IOException e) {
--- a/jdk/src/share/native/sun/java2d/opengl/OGLBlitLoops.c Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/share/native/sun/java2d/opengl/OGLBlitLoops.c Wed Jul 05 18:17:35 2017 +0200
@@ -393,7 +393,16 @@
OGLSDOps *dstOps,
jint dx1, jint dy1, jint dx2, jint dy2)
{
+ jboolean adjustAlpha = (pf != NULL && !pf->hasAlpha);
j2d_glBindTexture(dstOps->textureTarget, dstOps->textureID);
+
+ if (adjustAlpha) {
+ // if the source surface does not have an alpha channel,
+ // we need to ensure that the alpha values are forced to 1.0f
+ j2d_glPixelTransferf(GL_ALPHA_SCALE, 0.0f);
+ j2d_glPixelTransferf(GL_ALPHA_BIAS, 1.0f);
+ }
+
// in case pixel stride is not a multiple of scanline stride the copy
// has to be done line by line (see 6207877)
if (srcInfo->scanStride % srcInfo->pixelStride != 0) {
@@ -413,6 +422,11 @@
dx1, dy1, dx2-dx1, dy2-dy1,
pf->format, pf->type, srcInfo->rasBase);
}
+ if (adjustAlpha) {
+ // restore scale/bias to their original values
+ j2d_glPixelTransferf(GL_ALPHA_SCALE, 1.0f);
+ j2d_glPixelTransferf(GL_ALPHA_BIAS, 0.0f);
+ }
}
/**
--- a/jdk/src/solaris/classes/sun/nio/fs/LinuxUserDefinedFileAttributeView.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/solaris/classes/sun/nio/fs/LinuxUserDefinedFileAttributeView.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 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
@@ -55,7 +55,7 @@
name = USER_NAMESPACE + name;
byte[] bytes = name.getBytes();
if (bytes.length > XATTR_NAME_MAX) {
- throw new FileSystemException(file.getPathForExecptionMessage(),
+ throw new FileSystemException(file.getPathForExceptionMessage(),
null, "'" + name + "' is too big");
}
return bytes;
@@ -116,7 +116,7 @@
buffer = NativeBuffers.getNativeBuffer(size);
continue;
}
- throw new FileSystemException(file.getPathForExecptionMessage(),
+ throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Unable to get list of extended attributes: " +
x.getMessage());
}
@@ -138,7 +138,7 @@
// fgetxattr returns size if called with size==0
return fgetxattr(fd, nameAsBytes(file,name), 0L, 0);
} catch (UnixException x) {
- throw new FileSystemException(file.getPathForExecptionMessage(),
+ throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Unable to get size of extended attribute '" + name +
"': " + x.getMessage());
} finally {
@@ -191,7 +191,7 @@
} catch (UnixException x) {
String msg = (x.errno() == ERANGE) ?
"Insufficient space in buffer" : x.getMessage();
- throw new FileSystemException(file.getPathForExecptionMessage(),
+ throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Error reading extended attribute '" + name + "': " + msg);
} finally {
close(fd);
@@ -243,7 +243,7 @@
src.position(pos + rem);
return rem;
} catch (UnixException x) {
- throw new FileSystemException(file.getPathForExecptionMessage(),
+ throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Error writing extended attribute '" + name + "': " +
x.getMessage());
} finally {
@@ -264,7 +264,7 @@
try {
fremovexattr(fd, nameAsBytes(file,name));
} catch (UnixException x) {
- throw new FileSystemException(file.getPathForExecptionMessage(),
+ throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Unable to delete extended attribute '" + name + "': " + x.getMessage());
} finally {
close(fd);
--- a/jdk/src/solaris/classes/sun/nio/fs/LinuxWatchService.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/solaris/classes/sun/nio/fs/LinuxWatchService.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 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
@@ -246,7 +246,7 @@
return x.asIOException(dir);
}
if (!attrs.isDirectory()) {
- return new NotDirectoryException(dir.getPathForExecptionMessage());
+ return new NotDirectoryException(dir.getPathForExceptionMessage());
}
// register with inotify (replaces existing mask if already registered)
--- a/jdk/src/solaris/classes/sun/nio/fs/SolarisAclFileAttributeView.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/solaris/classes/sun/nio/fs/SolarisAclFileAttributeView.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 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
@@ -324,7 +324,7 @@
return decode(address, n);
} catch (UnixException x) {
if ((x.errno() == ENOSYS) || !isAclsEnabled(fd)) {
- throw new FileSystemException(file.getPathForExecptionMessage(),
+ throw new FileSystemException(file.getPathForExceptionMessage(),
null, x.getMessage() + " (file system does not support NFSv4 ACLs)");
}
x.rethrowAsIOException(file);
@@ -355,7 +355,7 @@
facl(fd, ACE_SETACL, n, address);
} catch (UnixException x) {
if ((x.errno() == ENOSYS) || !isAclsEnabled(fd)) {
- throw new FileSystemException(file.getPathForExecptionMessage(),
+ throw new FileSystemException(file.getPathForExceptionMessage(),
null, x.getMessage() + " (file system does not support NFSv4 ACLs)");
}
if (x.errno() == EINVAL && (n < 3))
--- a/jdk/src/solaris/classes/sun/nio/fs/SolarisUserDefinedFileAttributeView.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/solaris/classes/sun/nio/fs/SolarisUserDefinedFileAttributeView.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 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 @@
if (bytes.length <= 1 ||
(bytes.length == 2 && bytes[1] == '.'))
{
- throw new FileSystemException(file.getPathForExecptionMessage(),
+ throw new FileSystemException(file.getPathForExceptionMessage(),
null, "'" + name + "' is not a valid name");
}
}
@@ -96,7 +96,7 @@
}
return Collections.unmodifiableList(list);
} catch (UnixException x) {
- throw new FileSystemException(file.getPathForExecptionMessage(),
+ throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Unable to get list of extended attributes: " +
x.getMessage());
}
@@ -126,7 +126,7 @@
close(afd);
}
} catch (UnixException x) {
- throw new FileSystemException(file.getPathForExecptionMessage(),
+ throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Unable to get size of extended attribute '" + name +
"': " + x.getMessage());
}
@@ -165,7 +165,7 @@
fc.close();
}
} catch (UnixException x) {
- throw new FileSystemException(file.getPathForExecptionMessage(),
+ throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Unable to read extended attribute '" + name +
"': " + x.getMessage());
}
@@ -201,7 +201,7 @@
fc.close();
}
} catch (UnixException x) {
- throw new FileSystemException(file.getPathForExecptionMessage(),
+ throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Unable to write extended attribute '" + name +
"': " + x.getMessage());
}
@@ -224,7 +224,7 @@
close(dfd);
}
} catch (UnixException x) {
- throw new FileSystemException(file.getPathForExecptionMessage(),
+ throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Unable to delete extended attribute '" + name +
"': " + x.getMessage());
} finally {
--- a/jdk/src/solaris/classes/sun/nio/fs/SolarisWatchService.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/solaris/classes/sun/nio/fs/SolarisWatchService.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 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
@@ -288,7 +288,7 @@
return x.asIOException(dir);
}
if (!attrs.isDirectory()) {
- return new NotDirectoryException(dir.getPathForExecptionMessage());
+ return new NotDirectoryException(dir.getPathForExceptionMessage());
}
// return existing watch key after updating events if already
--- a/jdk/src/solaris/classes/sun/nio/fs/UnixCopyFile.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/solaris/classes/sun/nio/fs/UnixCopyFile.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 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
@@ -383,8 +383,8 @@
} catch (UnixException x) {
if (x.errno() == EXDEV) {
throw new AtomicMoveNotSupportedException(
- source.getPathForExecptionMessage(),
- target.getPathForExecptionMessage(),
+ source.getPathForExceptionMessage(),
+ target.getPathForExceptionMessage(),
x.errorString());
}
x.rethrowAsIOException(source, target);
@@ -420,7 +420,7 @@
return; // nothing to do as files are identical
if (!flags.replaceExisting) {
throw new FileAlreadyExistsException(
- target.getPathForExecptionMessage());
+ target.getPathForExceptionMessage());
}
// attempt to delete target
@@ -436,7 +436,7 @@
(x.errno() == EEXIST || x.errno() == ENOTEMPTY))
{
throw new DirectoryNotEmptyException(
- target.getPathForExecptionMessage());
+ target.getPathForExceptionMessage());
}
x.rethrowAsIOException(target);
}
@@ -489,7 +489,7 @@
(x.errno() == EEXIST || x.errno() == ENOTEMPTY))
{
throw new DirectoryNotEmptyException(
- source.getPathForExecptionMessage());
+ source.getPathForExceptionMessage());
}
x.rethrowAsIOException(source);
}
@@ -542,7 +542,7 @@
return; // nothing to do as files are identical
if (!flags.replaceExisting)
throw new FileAlreadyExistsException(
- target.getPathForExecptionMessage());
+ target.getPathForExceptionMessage());
try {
if (targetAttrs.isDirectory()) {
rmdir(target);
@@ -555,7 +555,7 @@
(x.errno() == EEXIST || x.errno() == ENOTEMPTY))
{
throw new DirectoryNotEmptyException(
- target.getPathForExecptionMessage());
+ target.getPathForExceptionMessage());
}
x.rethrowAsIOException(target);
}
--- a/jdk/src/solaris/classes/sun/nio/fs/UnixException.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/solaris/classes/sun/nio/fs/UnixException.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 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
@@ -97,8 +97,8 @@
}
void rethrowAsIOException(UnixPath file, UnixPath other) throws IOException {
- String a = (file == null) ? null : file.getPathForExecptionMessage();
- String b = (other == null) ? null : other.getPathForExecptionMessage();
+ String a = (file == null) ? null : file.getPathForExceptionMessage();
+ String b = (other == null) ? null : other.getPathForExceptionMessage();
IOException x = translateToIOException(a, b);
throw x;
}
@@ -108,6 +108,6 @@
}
IOException asIOException(UnixPath file) {
- return translateToIOException(file.getPathForExecptionMessage(), null);
+ return translateToIOException(file.getPathForExceptionMessage(), null);
}
}
--- a/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystemProvider.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystemProvider.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 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
@@ -238,7 +238,7 @@
// DirectoryNotEmptyException if not empty
if (attrs != null && attrs.isDirectory() &&
(x.errno() == EEXIST || x.errno() == ENOTEMPTY))
- throw new DirectoryNotEmptyException(file.getPathForExecptionMessage());
+ throw new DirectoryNotEmptyException(file.getPathForExceptionMessage());
x.rethrowAsIOException(file);
return false;
@@ -401,7 +401,7 @@
return new UnixDirectoryStream(dir, ptr, filter);
} catch (UnixException x) {
if (x.errno() == ENOTDIR)
- throw new NotDirectoryException(dir.getPathForExecptionMessage());
+ throw new NotDirectoryException(dir.getPathForExceptionMessage());
x.rethrowAsIOException(dir);
}
}
@@ -421,7 +421,7 @@
if (dfd2 != -1)
UnixNativeDispatcher.close(dfd2);
if (x.errno() == UnixConstants.ENOTDIR)
- throw new NotDirectoryException(dir.getPathForExecptionMessage());
+ throw new NotDirectoryException(dir.getPathForExceptionMessage());
x.rethrowAsIOException(dir);
}
return new UnixSecureDirectoryStream(dir, dp, dfd2, filter);
@@ -490,7 +490,7 @@
return new UnixPath(link.getFileSystem(), target);
} catch (UnixException x) {
if (x.errno() == UnixConstants.EINVAL)
- throw new NotLinkException(link.getPathForExecptionMessage());
+ throw new NotLinkException(link.getPathForExceptionMessage());
x.rethrowAsIOException(link);
return null; // keep compiler happy
}
--- a/jdk/src/solaris/classes/sun/nio/fs/UnixPath.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/solaris/classes/sun/nio/fs/UnixPath.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 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
@@ -179,7 +179,7 @@
}
// use this message when throwing exceptions
- String getPathForExecptionMessage() {
+ String getPathForExceptionMessage() {
return toString();
}
@@ -780,7 +780,7 @@
x.setError(ELOOP);
if (x.errno() == ELOOP)
- throw new FileSystemException(getPathForExecptionMessage(), null,
+ throw new FileSystemException(getPathForExceptionMessage(), null,
x.getMessage() + " or unable to access attributes of symbolic link");
x.rethrowAsIOException(this);
--- a/jdk/src/solaris/native/java/net/Inet4AddressImpl.c Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/solaris/native/java/net/Inet4AddressImpl.c Wed Jul 05 18:17:35 2017 +0200
@@ -196,7 +196,7 @@
struct addrinfo *next
= (struct addrinfo*) malloc(sizeof(struct addrinfo));
if (!next) {
- JNU_ThrowOutOfMemoryError(env, "heap allocation failed");
+ JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed");
ret = NULL;
goto cleanupAndReturn;
}
@@ -465,7 +465,7 @@
struct addrinfo *next
= (struct addrinfo*) malloc(sizeof(struct addrinfo));
if (!next) {
- JNU_ThrowOutOfMemoryError(env, "heap allocation failed");
+ JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed");
ret = NULL;
goto cleanupAndReturn;
}
--- a/jdk/src/solaris/native/java/net/Inet6AddressImpl.c Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/solaris/native/java/net/Inet6AddressImpl.c Wed Jul 05 18:17:35 2017 +0200
@@ -267,7 +267,7 @@
struct addrinfo *next
= (struct addrinfo*) malloc(sizeof(struct addrinfo));
if (!next) {
- JNU_ThrowOutOfMemoryError(env, "heap allocation failed");
+ JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed");
ret = NULL;
goto cleanupAndReturn;
}
--- a/jdk/src/solaris/native/java/net/NetworkInterface.c Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/solaris/native/java/net/NetworkInterface.c Wed Jul 05 18:17:35 2017 +0200
@@ -804,7 +804,7 @@
do{ \
_pointer = (_type)malloc( _size ); \
if (_pointer == NULL) { \
- JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); \
+ JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed"); \
return ifs; /* return untouched list */ \
} \
} while(0)
--- a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c Wed Jul 05 18:17:35 2017 +0200
@@ -485,7 +485,7 @@
fullPacket = (char *)malloc(packetBufferLen);
if (!fullPacket) {
- JNU_ThrowOutOfMemoryError(env, "heap allocation failed");
+ JNU_ThrowOutOfMemoryError(env, "Send buffer native heap allocation failed");
return;
} else {
mallocedPacket = JNI_TRUE;
@@ -714,7 +714,7 @@
fullPacket = (char *)malloc(packetBufferLen);
if (!fullPacket) {
- JNU_ThrowOutOfMemoryError(env, "heap allocation failed");
+ JNU_ThrowOutOfMemoryError(env, "Peek buffer native heap allocation failed");
return -1;
} else {
mallocedPacket = JNI_TRUE;
@@ -874,7 +874,7 @@
fullPacket = (char *)malloc(packetBufferLen);
if (!fullPacket) {
- JNU_ThrowOutOfMemoryError(env, "heap allocation failed");
+ JNU_ThrowOutOfMemoryError(env, "Receive buffer native heap allocation failed");
return;
} else {
mallocedPacket = JNI_TRUE;
--- a/jdk/src/windows/classes/sun/security/krb5/internal/tools/Kinit.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/windows/classes/sun/security/krb5/internal/tools/Kinit.java Wed Jul 05 18:17:35 2017 +0200
@@ -206,9 +206,7 @@
System.out.println(">>> Kinit realm name is " + realm);
}
- PrincipalName sname = new PrincipalName("krbtgt" + "/" + realm,
- PrincipalName.KRB_NT_SRV_INST);
- sname.setRealm(realm);
+ PrincipalName sname = PrincipalName.tgsService(realm, realm);
builder.setTarget(sname);
if (DEBUG) {
--- a/jdk/src/windows/classes/sun/security/krb5/internal/tools/KinitOptions.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/windows/classes/sun/security/krb5/internal/tools/KinitOptions.java Wed Jul 05 18:17:35 2017 +0200
@@ -146,15 +146,6 @@
"Principal name: " + p +
e.getMessage());
}
- if (principal.getRealm() == null) {
- String realm =
- Config.getInstance().getDefault("default_realm",
- "libdefaults");
- if (realm != null) {
- principal.setRealm(realm);
- } else throw new IllegalArgumentException("invalid " +
- "Realm name");
- }
} else if (this.password == null) {
// Have already processed a Principal, this must be a password
password = args[i].toCharArray();
@@ -175,16 +166,6 @@
}
PrincipalName getDefaultPrincipal() {
- String cname;
- String realm = null;
- try {
- realm = Config.getInstance().getDefaultRealm();
- } catch (KrbException e) {
- System.out.println ("Can not get default realm " +
- e.getMessage());
- e.printStackTrace();
- return null;
- }
// get default principal name from the cachename if it is
// available.
@@ -204,10 +185,6 @@
}
PrincipalName p = cis.readPrincipal(version);
cis.close();
- String temp = p.getRealmString();
- if (temp == null) {
- p.setRealm(realm);
- }
if (DEBUG) {
System.out.println(">>>KinitOptions principal name from "+
"the cache is :" + p);
@@ -230,19 +207,15 @@
System.out.println(">>>KinitOptions default username is :"
+ username);
}
- if (realm != null) {
- try {
- PrincipalName p = new PrincipalName(username);
- if (p.getRealm() == null)
- p.setRealm(realm);
- return p;
- } catch (RealmException e) {
- // ignore exception , return null
- if (DEBUG) {
- System.out.println ("Exception in getting principal " +
- "name " + e.getMessage());
- e.printStackTrace();
- }
+ try {
+ PrincipalName p = new PrincipalName(username);
+ return p;
+ } catch (RealmException e) {
+ // ignore exception , return null
+ if (DEBUG) {
+ System.out.println ("Exception in getting principal " +
+ "name " + e.getMessage());
+ e.printStackTrace();
}
}
return null;
--- a/jdk/src/windows/classes/sun/security/krb5/internal/tools/Ktab.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/windows/classes/sun/security/krb5/internal/tools/Ktab.java Wed Jul 05 18:17:35 2017 +0200
@@ -273,9 +273,6 @@
PrincipalName pname = null;
try {
pname = new PrincipalName(principal);
- if (pname.getRealm() == null) {
- pname.setRealm(Config.getInstance().getDefaultRealm());
- }
} catch (KrbException e) {
System.err.println("Failed to add " + principal +
" to keytab.");
@@ -382,9 +379,6 @@
PrincipalName pname = null;
try {
pname = new PrincipalName(principal);
- if (pname.getRealm() == null) {
- pname.setRealm(Config.getInstance().getDefaultRealm());
- }
if (!forced) {
String answer;
BufferedReader cis =
--- a/jdk/src/windows/native/java/net/DualStackPlainDatagramSocketImpl.c Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/windows/native/java/net/DualStackPlainDatagramSocketImpl.c Wed Jul 05 18:17:35 2017 +0200
@@ -265,7 +265,7 @@
}
fullPacket = (char *)malloc(packetBufferLen);
if (!fullPacket) {
- JNU_ThrowOutOfMemoryError(env, "heap allocation failed");
+ JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed");
return -1;
}
} else {
@@ -427,7 +427,7 @@
}
fullPacket = (char *)malloc(length);
if (!fullPacket) {
- JNU_ThrowOutOfMemoryError(env, "heap allocation failed");
+ JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed");
return;
}
} else {
--- a/jdk/src/windows/native/java/net/Inet6AddressImpl.c Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/windows/native/java/net/Inet6AddressImpl.c Wed Jul 05 18:17:35 2017 +0200
@@ -197,7 +197,7 @@
struct addrinfo *next
= (struct addrinfo*) malloc(sizeof(struct addrinfo));
if (!next) {
- JNU_ThrowOutOfMemoryError(env, "heap allocation failed");
+ JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed");
ret = NULL;
goto cleanupAndReturn;
}
--- a/jdk/src/windows/native/java/net/NetworkInterface.c Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/windows/native/java/net/NetworkInterface.c Wed Jul 05 18:17:35 2017 +0200
@@ -270,7 +270,7 @@
}
}
if (curr == NULL) {
- JNU_ThrowOutOfMemoryError(env, "heap allocation failure");
+ JNU_ThrowOutOfMemoryError(env, "Native heap allocation failure");
free_netif(netifP);
free(tableP);
return -1;
@@ -370,7 +370,7 @@
netaddr *curr = (netaddr *)malloc(sizeof(netaddr));
if (curr == NULL) {
- JNU_ThrowOutOfMemoryError(env, "heap allocation failure");
+ JNU_ThrowOutOfMemoryError(env, "Native heap allocation failure");
free_netaddr(netaddrP);
free(tableP);
return -1;
--- a/jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c Wed Jul 05 18:17:35 2017 +0200
@@ -243,7 +243,7 @@
addrList = curr;
}
LeaveCriticalSection(&sizeCheckLock);
- JNU_ThrowOutOfMemoryError(env, "heap allocation failed");
+ JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed");
return JNI_TRUE;
}
curr->addr = htonl((*addrp)->S_un.S_addr);
@@ -740,7 +740,7 @@
*/
fullPacket = (char *)malloc(packetBufferLen);
if (!fullPacket) {
- JNU_ThrowOutOfMemoryError(env, "heap allocation failed");
+ JNU_ThrowOutOfMemoryError(env, "Send buf native heap allocation failed");
return;
}
} else {
@@ -1003,7 +1003,7 @@
*/
fullPacket = (char *)malloc(packetBufferLen);
if (!fullPacket) {
- JNU_ThrowOutOfMemoryError(env, "heap allocation failed");
+ JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed");
return -1;
}
} else {
@@ -1287,7 +1287,7 @@
*/
fullPacket = (char *)malloc(packetBufferLen);
if (!fullPacket) {
- JNU_ThrowOutOfMemoryError(env, "heap allocation failed");
+ JNU_ThrowOutOfMemoryError(env, "Receive buf native heap allocation failed");
return;
}
} else {
--- a/jdk/src/windows/native/sun/security/krb5/NativeCreds.c Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/src/windows/native/sun/security/krb5/NativeCreds.c Wed Jul 05 18:17:35 2017 +0200
@@ -67,7 +67,6 @@
jmethodID ticketFlagsConstructor = 0;
jmethodID kerberosTimeConstructor = 0;
jmethodID krbcredsConstructor = 0;
-jmethodID setRealmMethod = 0;
/*
* Function prototypes for internal routines
@@ -279,7 +278,7 @@
}
principalNameConstructor = (*env)->GetMethodID(env, principalNameClass,
- "<init>", "([Ljava/lang/String;)V");
+ "<init>", "([Ljava/lang/String;Ljava/lang/String;)V");
if (principalNameConstructor == 0) {
printf("LSA: Couldn't find PrincipalName constructor\n");
return JNI_ERR;
@@ -318,14 +317,6 @@
printf("LSA: Found KerberosTime constructor\n");
}
- // 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;
- }
-
if (native_debug) {
printf("LSA: Finished OnLoad processing\n");
}
@@ -952,13 +943,12 @@
// 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);
+
+ principal = (*env)->NewObject(env, principalNameClass,
+ principalNameConstructor, stringArray, realmStr);
// free local resources
LocalFree(realm);
--- a/jdk/test/ProblemList.txt Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/ProblemList.txt Wed Jul 05 18:17:35 2017 +0200
@@ -122,9 +122,6 @@
# jdk_lang
-# 7123972
-java/lang/annotation/loaderLeak/Main.java generic-all
-
# 6944188
java/lang/management/ThreadMXBean/ThreadStateTest.java generic-all
@@ -161,9 +158,6 @@
# 6988950
demo/jvmti/compiledMethodLoad/CompiledMethodLoadTest.java generic-all
-# Need to be marked othervm, or changed to be samevm safe
-com/sun/jndi/rmi/registry/RegistryContext/UnbindIdempotent.java generic-all
-
# 7162111
demo/jvmti/mtrace/TraceJFrame.java macosx-all
javax/script/CauseExceptionTest.java macosx-all
@@ -268,21 +262,11 @@
# jdk_rmi
-# 7140992
-java/rmi/server/Unreferenced/finiteGCLatency/FiniteGCLatency.java generic-all
-
-# 6948101
-java/rmi/transport/pinLastArguments/PinLastArguments.java generic-all
-
# 7146541
java/rmi/transport/rapidExportUnexport/RapidExportUnexport.java linux-all
# 7132247
java/rmi/registry/readTest/readTest.sh windows-all
-
-# 7142596
-java/rmi/transport/pinClientSocketFactory/PinClientSocketFactory.java generic-all
-
############################################################################
# jdk_security
--- a/jdk/test/TEST.ROOT Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/TEST.ROOT Wed Jul 05 18:17:35 2017 +0200
@@ -9,4 +9,4 @@
othervm.dirs=java/rmi sun/rmi javax/management
# Tests that cannot run concurrently
-exclusiveAccess.dirs=java/rmi sun/rmi sun/management/jmxremote sun/tools/jstatd
+exclusiveAccess.dirs=java/rmi/Naming sun/management/jmxremote sun/tools/jstatd
--- a/jdk/test/com/sun/crypto/provider/KeyFactory/TestProviderLeak.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/com/sun/crypto/provider/KeyFactory/TestProviderLeak.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2010, 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
@@ -28,50 +28,111 @@
* LoginContext
* @author Brad Wetmore
*
- * @run main/othervm -Xmx2m -XX:OldSize=1m -XX:NewSize=512k TestProviderLeak
+ * @run main/othervm -Xmx20m TestProviderLeak
*
- * The original test invocation is below, but had to use the above
- * workaround for bug 6923123.
- *
- * run main/othervm -Xmx2m TestProviderLeak
*/
/*
- * We force the leak to become a problem by specifying the minimum
- * size heap we can (above). In current runs on a server and client
- * machine, it took roughly 220-240 iterations to have the memory leak
- * shut down other operations. It complained about "Unable to verify
- * the SunJCE provider."
+ * We force the leak to become a problem by eating up most JVM free memory.
+ * In current runs on a server and client machine, it took roughly 50-150
+ * iterations to have the memory leak or time-out shut down other operations.
+ * It complained about "JCE cannot authenticate the provider SunJCE" or timed
+ * out.
*/
import javax.crypto.*;
import javax.crypto.spec.*;
+import java.util.*;
+import java.util.concurrent.*;
+
public class TestProviderLeak {
+ private static final int MB = 1024 * 1024;
+ // Currently, 3MB heap size is reserved for running testing iterations.
+ // It is tweaked to make sure the test quickly triggers the memory leak
+ // or throws out TimeoutException.
+ private static final int RESERVATION = 3;
+ // The maximum time, 5 seconds, to wait for each iteration.
+ private static final int TIME_OUT = 5;
+
+ private static Deque<byte []> eatupMemory() throws Exception {
+ dumpMemoryStats("Before memory allocation");
+
+ Deque<byte []> data = new ArrayDeque<byte []>();
+ boolean hasException = false;
+ while (!hasException) {
+ byte [] megaByte;
+ try {
+ megaByte = new byte [MB];
+ data.add(megaByte);
+ } catch (OutOfMemoryError e) {
+ System.out.println("OOME is thrown when allocating "
+ + data.size() + "MB memory.");
+ megaByte = null;
+
+ for (int j = 0; j < RESERVATION && !data.isEmpty(); j++) {
+ data.removeLast();
+ }
+ System.gc();
+ hasException = true;
+ }
+ }
+ dumpMemoryStats("After memory allocation");
+
+ return data;
+ }
+
private static void dumpMemoryStats(String s) throws Exception {
Runtime rt = Runtime.getRuntime();
- System.out.println(s + ":\t" +
- rt.freeMemory() + " bytes free");
+ System.out.println(s + ":\t"
+ + rt.freeMemory() + " bytes free");
}
public static void main(String [] args) throws Exception {
- SecretKeyFactory skf =
+ // Eat up memory
+ Deque<byte []> dummyData = eatupMemory();
+ assert (dummyData != null);
+
+ // Prepare the test
+ final SecretKeyFactory skf =
SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1", "SunJCE");
- PBEKeySpec pbeKS = new PBEKeySpec(
+ final PBEKeySpec pbeKS = new PBEKeySpec(
"passPhrase".toCharArray(), new byte [] { 0 }, 5, 512);
- for (int i = 0; i <= 1000; i++) {
- try {
- skf.generateSecret(pbeKS);
+
+ ExecutorService executor = Executors.newSingleThreadExecutor();
+ Callable<SecretKey> task = new Callable<SecretKey>() {
+ @Override
+ public SecretKey call() throws Exception {
+ return skf.generateSecret(pbeKS);
+ }
+ };
+
+ // Start testing iteration
+ try {
+ for (int i = 0; i <= 1000; i++) {
if ((i % 20) == 0) {
- // Calling gc() isn't dependable, but doesn't hurt.
- // Gives better output in leak cases.
+ // Calling gc() isn't dependable, but doesn't hurt.
+ // Gives better output in leak cases.
System.gc();
dumpMemoryStats("Iteration " + i);
}
- } catch (Exception e) {
- dumpMemoryStats("\nException seen at iteration " + i);
- throw e;
+
+ Future<SecretKey> future = executor.submit(task);
+
+ try {
+ future.get(TIME_OUT, TimeUnit.SECONDS);
+ } catch (Exception e) {
+ dumpMemoryStats("\nException seen at iteration " + i);
+ throw e;
+ }
}
+ } finally {
+ // JTReg will time out after two minutes. Proactively release
+ // the memory to avoid JTReg time-out situation.
+ dummyData = null;
+ System.gc();
+ dumpMemoryStats("Memory dereference");
+ executor.shutdownNow();
}
}
}
--- a/jdk/test/com/sun/jndi/rmi/registry/RegistryContext/ContextWithNullProperties.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/com/sun/jndi/rmi/registry/RegistryContext/ContextWithNullProperties.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 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
@@ -25,26 +25,21 @@
* @test
* @bug 6676075
* @summary RegistryContext (com.sun.jndi.url.rmi.rmiURLContext) coding problem
+ * @library ../../../../../../java/rmi/testlibrary
+ * @build TestLibrary
+ * @run main ContextWithNullProperties
*/
-import java.rmi.RemoteException;
-import java.rmi.registry.LocateRegistry;
-
-import com.sun.jndi.rmi.registry.*;
+import com.sun.jndi.rmi.registry.RegistryContext;
+import java.rmi.registry.Registry;
public class ContextWithNullProperties {
-
public static void main(String[] args) throws Exception {
-
- // Create registry on port 1099 if one is not already running.
- try {
- LocateRegistry.createRegistry(1099);
- } catch (RemoteException e) {
- }
-
+ Registry registry = TestLibrary.createRegistryOnUnusedPort();
+ int registryPort = TestLibrary.getRegistryPort(registry);
System.out.println("Connecting to the default Registry...");
// Connect to the default Registry.
// Pass null as the JNDI environment properties (see final argument)
- RegistryContext ctx = new RegistryContext(null, -1, null);
+ RegistryContext ctx = new RegistryContext(null, registryPort, null);
}
}
--- a/jdk/test/com/sun/jndi/rmi/registry/RegistryContext/UnbindIdempotent.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/com/sun/jndi/rmi/registry/RegistryContext/UnbindIdempotent.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,26 +1,52 @@
+/*
+ * 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
+ * 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 4278121
* @summary Ensure that calling unbind() on an unbound name returns
* successfully.
+ * @library ../../../../../../java/rmi/testlibrary
+ * @build TestLibrary
+ * @run main UnbindIdempotent
*/
-import javax.naming.*;
+import java.rmi.registry.Registry;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NameNotFoundException;
+import javax.naming.NamingException;
public class UnbindIdempotent {
public static void main(String[] args) throws Exception {
+ Registry registry = TestLibrary.createRegistryOnUnusedPort();
+ int registryPort = TestLibrary.getRegistryPort(registry);
+ InitialContext ictx = new InitialContext();
+ Context rctx;
- // Create registry on port 1099 if one is not already running.
try {
- java.rmi.registry.LocateRegistry.createRegistry(1099);
- } catch (java.rmi.RemoteException e) {
- }
-
- Context ictx = new InitialContext();
- Context rctx;
- try {
- rctx = (Context)ictx.lookup("rmi://localhost:1099");
+ rctx = (Context)ictx.lookup("rmi://localhost:" + Integer.toString(registryPort));
} catch (NamingException e) {
// Unable to set up for test.
return;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/FontMetrics/StyledSpaceAdvance.java Wed Jul 05 18:17:35 2017 +0200
@@ -0,0 +1,64 @@
+/*
+ * 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 7183458
+ * @summary Verify advance of space is not overly widened by bold styling.
+ * @run main StyledSpaceAdvance
+ */
+import java.awt.Font;
+import java.awt.font.FontRenderContext;
+import java.awt.geom.Rectangle2D;
+import java.util.Locale;
+
+public class StyledSpaceAdvance {
+
+ static String name = "Gulim";
+
+ public static void main(String args[]) {
+ for (int sz=9;sz<18;sz++) {
+ test(sz);
+ }
+ }
+
+ static void test(int sz) {
+ Font reg = new Font(name, Font.PLAIN, sz);
+ Font bold = new Font(name, Font.BOLD, sz);
+ //System.out.println("reg="+reg);
+ //System.out.println("bold="+bold);
+ FontRenderContext frc = new FontRenderContext(null, false, false);
+ if (reg.getFontName(Locale.ENGLISH).equals(name) &&
+ bold.getFontName(Locale.ENGLISH).equals(name)) {
+ Rectangle2D rb = reg.getStringBounds(" ", frc);
+ Rectangle2D bb = bold.getStringBounds(" ", frc);
+ if (bb.getWidth() > rb.getWidth() + 1.01f) {
+ System.err.println("reg="+reg+" bds = " + rb);
+ System.err.println("bold="+bold+" bds = " + bb);
+ throw new RuntimeException("Advance difference too great.");
+ }
+ } else {
+ System.out.println("Skipping test because fonts aren't as expected");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Frame/HideMaximized/HideMaximized.java Wed Jul 05 18:17:35 2017 +0200
@@ -0,0 +1,70 @@
+/*
+ * 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 7177173
+ @summary The maximized state shouldn't be reset upon hiding a frame
+ @author anthony.petrov@oracle.com: area=awt.toplevel
+ @run main HideMaximized
+*/
+
+import java.awt.*;
+
+public class HideMaximized {
+ public static void main(String[] args) {
+ if (!Toolkit.getDefaultToolkit().isFrameStateSupported(Frame.MAXIMIZED_BOTH)) {
+ // Nothing to test
+ return;
+ }
+
+ // First test a decorated frame
+ Frame frame = new Frame("test");
+ test(frame);
+
+ // Now test an undecorated frames
+ frame = new Frame("undecorated test");
+ frame.setUndecorated(true);
+ test(frame);
+ }
+
+ private static void test(Frame frame) {
+ frame.setExtendedState(Frame.MAXIMIZED_BOTH);
+ frame.setVisible(true);
+
+ try { Thread.sleep(1000); } catch (Exception ex) {}
+
+ if (frame.getExtendedState() != Frame.MAXIMIZED_BOTH) {
+ throw new RuntimeException("The maximized state has not been applied");
+ }
+
+ // This will hide the frame, and also clean things up for safe exiting
+ frame.dispose();
+
+ try { Thread.sleep(1000); } catch (Exception ex) {}
+
+ if (frame.getExtendedState() != Frame.MAXIMIZED_BOTH) {
+ throw new RuntimeException("The maximized state has been reset");
+ }
+ }
+}
--- a/jdk/test/java/lang/annotation/loaderLeak/Main.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/lang/annotation/loaderLeak/Main.java Wed Jul 05 18:17:35 2017 +0200
@@ -57,9 +57,17 @@
System.gc();
System.gc();
loader = null;
- System.gc();
- System.gc();
- if (c.get() != null) throw new AssertionError();
+
+ // Might require multiple calls to System.gc() for weak-references
+ // processing to be complete. If the weak-reference is not cleared as
+ // expected we will hang here until timed out by the test harness.
+ while (true) {
+ System.gc();
+ Thread.sleep(20);
+ if (c.get() == null) {
+ break;
+ }
+ }
}
}
--- a/jdk/test/java/net/CookieHandler/TestHttpCookie.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/net/CookieHandler/TestHttpCookie.java Wed Jul 05 18:17:35 2017 +0200
@@ -243,10 +243,6 @@
test("set-cookie2: Customer = \"WILE_E_COYOTE\"; Version = \"1\"; Path = \"/acme\"")
.n("Customer").v("WILE_E_COYOTE").ver(1).p("/acme");
- // $NAME is reserved; result should be null
- test("set-cookie2: $Customer = \"WILE_E_COYOTE\"; Version = \"1\"; Path = \"/acme\"")
- .nil();
-
// a 'full' cookie
test("set-cookie2: Customer=\"WILE_E_COYOTE\"" +
";Version=\"1\"" +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/HttpCookie/IllegalCookieNameTest.java Wed Jul 05 18:17:35 2017 +0200
@@ -0,0 +1,74 @@
+/*
+ * 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 7183292
+ */
+import java.net.*;
+import java.util.*;
+import java.io.*;
+import com.sun.net.httpserver.*;
+
+public class IllegalCookieNameTest {
+ public static void main(String[] args) throws IOException {
+ HttpServer s = null;
+ try {
+ InetSocketAddress addr = new InetSocketAddress(0);
+ s = HttpServer.create(addr, 10);
+ s.createContext("/", new HHandler());
+ s.start();
+ String u = "http://127.0.0.1:" + s.getAddress().getPort() + "/";
+ CookieHandler.setDefault(new TestCookieHandler());
+ URL url = new URL(u);
+ HttpURLConnection c = (HttpURLConnection) url.openConnection();
+ c.getHeaderFields();
+ System.out.println ("OK");
+ } finally {
+ s.stop(1);
+ }
+ }
+}
+
+class TestCookieHandler extends CookieHandler {
+ @Override
+ public Map<String, List<String>> get(URI uri, Map<String, List<String>> requestHeaders) {
+ return new HashMap<String, List<String>>();
+ }
+
+ @Override
+ public void put(URI uri, Map<String, List<String>> responseHeaders) {
+ }
+}
+
+class HHandler implements HttpHandler {
+ public void handle (HttpExchange e) {
+ try {
+ Headers h = e.getResponseHeaders();
+ h.set ("Set-Cookie", "domain=; expires=Mon, 01-Jan-1990 00:00:00 GMT; path=/; domain=.foo.com");
+ e.sendResponseHeaders(200, -1);
+ e.close();
+ } catch (Exception ex) {
+ System.out.println (ex);
+ }
+ }
+}
--- a/jdk/test/java/rmi/Naming/LookupNameWithColon.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/Naming/LookupNameWithColon.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 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
@@ -25,10 +25,13 @@
* @bug 4387038
* @summary Ensure that java.rmi.Naming.lookup functions properly for names
* containing embedded ':' characters.
+ *
+ * @library ../testlibrary
+ * @build TestLibrary
+ * @run main LookupNameWithColon
*/
import java.rmi.Naming;
-import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class LookupNameWithColon {
@@ -38,15 +41,12 @@
"multiple:colons:in:name"
};
- Registry reg;
- try {
- reg = LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
- } catch (Exception ex) {
- reg = LocateRegistry.getRegistry();
- }
+ Registry reg = TestLibrary.createRegistryOnUnusedPort();
+ int port = TestLibrary.getRegistryPort(reg);
+
for (int i = 0; i < names.length; i++) {
reg.rebind(names[i], reg);
- Naming.lookup("rmi://localhost/" + names[i]);
+ Naming.lookup("rmi://localhost:" + port + "/" + names[i]);
}
}
}
--- a/jdk/test/java/rmi/Naming/RmiIsNoScheme.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/Naming/RmiIsNoScheme.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 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
@@ -39,9 +39,6 @@
import java.rmi.registry.*;
public class RmiIsNoScheme implements Remote, Serializable {
-
- private static final int REGISTRY_PORT = 2002;
-
private RmiIsNoScheme() {}
public static void main(String[] args) {
@@ -49,10 +46,11 @@
System.err.println("\nRegression test for bug 4626311\n");
try {
- LocateRegistry.createRegistry(REGISTRY_PORT);
- Naming.rebind("//:" + REGISTRY_PORT + "/RmiIsNoScheme",
+ Registry registry = TestLibrary.createRegistryOnUnusedPort();
+ int registryPort = TestLibrary.getRegistryPort(registry);
+ Naming.rebind("//:" + registryPort + "/RmiIsNoScheme",
new RmiIsNoScheme());
- String name = Naming.list("//:" + REGISTRY_PORT)[0];
+ String name = Naming.list("//:" + registryPort)[0];
System.err.println("name = " + name);
if (name.startsWith("rmi:", 0) == false) {
System.err.println("TEST PASSED: rmi scheme not present");
--- a/jdk/test/java/rmi/Naming/UnderscoreHost.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/Naming/UnderscoreHost.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,37 +1,37 @@
-/*
- * 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.
- */
+ /*
+ * 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.
+ *
+ * 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 5083594
- * @summary Ensure that Naming.java correctly parses host names with '_' in
- * them.
- * @author Vinod Johnson
- *
- * @library ../testlibrary
- * @build TestLibrary
- * @build UnderscoreHost UnderscoreHost_Stub
- * @run main/othervm UnderscoreHost
+ /*
+ * @test
+ * @bug 5083594
+ * @summary Ensure that Naming.java correctly parses host names with '_' in
+ * them.
+ * @author Vinod Johnson
+ *
+ * @library ../testlibrary
+ * @build TestLibrary
+ * @build UnderscoreHost UnderscoreHost_Stub
+ * @run main/othervm UnderscoreHost
*/
import java.io.IOException;
@@ -77,11 +77,12 @@
try {
HostVerifyingSocketFactory hvf = new HostVerifyingSocketFactory();
RMISocketFactory.setSocketFactory(hvf);
- Registry r = LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
+ Registry r = TestLibrary.createRegistryOnUnusedPort();
+ int port = TestLibrary.getRegistryPort(r);
t = new UnderscoreHost();
r.rebind(NAME, t);
Naming.lookup("rmi://" + HOSTNAME +
- ":" + Registry.REGISTRY_PORT + "/" + NAME);
+ ":" + port + "/" + NAME);
/*
* This test is coded to pass whether java.net.URI obeys
* RFC 2396 or RFC 3986 (see 5085902, 6394131, etc.).
--- a/jdk/test/java/rmi/Naming/legalRegistryNames/LegalRegistryNames.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/Naming/legalRegistryNames/LegalRegistryNames.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -45,7 +45,9 @@
/**
* Ensure that all legal forms of Naming URLs operate with the
- * java.rmi.Naming interface
+ * java.rmi.Naming interface. This test requires using the default RMI Registry
+ * port as it tests all of the RMI naming URL's, including the ones which do not
+ * take a port (and therefore uses the default port).
*/
public class LegalRegistryNames extends UnicastRemoteObject
implements Legal
--- a/jdk/test/java/rmi/activation/Activatable/checkActivateRef/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/checkActivateRef/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -29,11 +29,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group
permission java.lang.RuntimePermission "setFactory";
--- a/jdk/test/java/rmi/activation/Activatable/checkAnnotations/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/checkAnnotations/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -21,11 +21,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// required for test to create an ActivationGroup
permission java.lang.RuntimePermission "setFactory";
--- a/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -32,11 +32,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// required for test to create an ActivationGroup
permission java.lang.RuntimePermission "setFactory";
--- a/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -21,17 +21,18 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group
permission java.lang.RuntimePermission "setFactory";
// allow exporting of remote objects on an arbitrary port.
- permission java.net.SocketPermission "*:1024-", "connect,accept";
+ permission java.net.SocketPermission "*:1024-", "connect,accept,listen";
// allow exporting object with non-public remote interface
permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe";
--- a/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -21,11 +21,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group
permission java.lang.RuntimePermission "setFactory";
--- a/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -31,11 +31,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// allow exporting of remote objects on an arbitrary port.
permission java.net.SocketPermission "*:1024-", "connect,accept,listen";
--- a/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -30,11 +30,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group
permission java.lang.RuntimePermission "setFactory";
--- a/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -17,11 +17,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// allow exporting of remote objects on an arbitrary port.
permission java.net.SocketPermission "*:1024-", "connect,accept,listen";
--- a/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -21,11 +21,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group
permission java.lang.RuntimePermission "setFactory";
--- a/jdk/test/java/rmi/activation/Activatable/inactiveGroup/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/inactiveGroup/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -21,17 +21,18 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group
permission java.lang.RuntimePermission "setFactory";
// allow exporting of remote objects on an arbitrary port.
- permission java.net.SocketPermission "*:1024-", "connect,accept";
+ permission java.net.SocketPermission "*:1024-", "connect,accept,listen";
// allow exporting object with non-public remote interface
permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe";
--- a/jdk/test/java/rmi/activation/Activatable/lookupActivationSystem/LookupActivationSystem.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/lookupActivationSystem/LookupActivationSystem.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 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
@@ -58,7 +58,7 @@
System.err.println("look up activation system");
Registry rmidRegistry =
- LocateRegistry.getRegistry(ActivationSystem.SYSTEM_PORT);
+ LocateRegistry.getRegistry(rmid.getPort());
ActivationSystem system = (ActivationSystem)
rmidRegistry.lookup(NAME);
--- a/jdk/test/java/rmi/activation/Activatable/nestedActivate/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/nestedActivate/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -21,17 +21,18 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group
permission java.lang.RuntimePermission "setFactory";
// allow exporting of remote objects on an arbitrary port.
- permission java.net.SocketPermission "*:1024-", "connect,accept";
+ permission java.net.SocketPermission "*:1024-", "connect,accept,listen";
// allow exporting of non-public remote interface
permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe";
--- a/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -21,11 +21,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group
permission java.lang.RuntimePermission "setFactory";
--- a/jdk/test/java/rmi/activation/Activatable/restartCrashedService/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/restartCrashedService/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -21,11 +21,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group
permission java.lang.RuntimePermission "setFactory";
--- a/jdk/test/java/rmi/activation/Activatable/restartLatecomer/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/restartLatecomer/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -21,11 +21,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Used in remote impl of Activator.inactive; by the method
// "restartThread.dispose()"when it calls thread.interrupt()
--- a/jdk/test/java/rmi/activation/Activatable/restartService/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/restartService/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -21,11 +21,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Used in remote impl of Activator.inactive; by the method
// "restartThread.dispose()"when it calls thread.interrupt()
--- a/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -21,11 +21,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// allow exporting of remote objects on an arbitrary port.
permission java.net.SocketPermission "*:1024-", "connect,accept,listen";
--- a/jdk/test/java/rmi/activation/Activatable/unregisterInactive/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/Activatable/unregisterInactive/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -21,11 +21,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group
permission java.lang.RuntimePermission "setFactory";
--- a/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -21,11 +21,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// required for test to create an ActivationGroup
permission java.lang.RuntimePermission "setFactory";
--- a/jdk/test/java/rmi/activation/ActivationSystem/activeGroup/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/ActivationSystem/activeGroup/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -15,11 +15,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// test needs to export rmid and communicate with objects on arbitrary ports
permission java.net.SocketPermission "*:1024-", "connect,accept,listen";
--- a/jdk/test/java/rmi/activation/ActivationSystem/modifyDescriptor/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/ActivationSystem/modifyDescriptor/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -21,11 +21,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// required for test to create an ActivationGroup
permission java.lang.RuntimePermission "setFactory";
--- a/jdk/test/java/rmi/activation/ActivationSystem/stubClassesPermitted/StubClassesPermitted.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/ActivationSystem/stubClassesPermitted/StubClassesPermitted.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -61,7 +61,7 @@
extends Activatable implements Runnable, CanCreateStubs
{
public static boolean sameGroup = false;
-
+ private static int registryPort = -1;
private static CanCreateStubs canCreateStubs = null;
private static Registry registry = null;
@@ -76,8 +76,8 @@
try {
TestLibrary.suggestSecurityManager("java.lang.SecurityManager");
- registry = java.rmi.registry.LocateRegistry.
- createRegistry(TestLibrary.REGISTRY_PORT);
+ registry = TestLibrary.createRegistryOnUnusedPort();
+ registryPort = TestLibrary.getRegistryPort(registry);
// must run with java.lang.SecurityManager or the test
// result will be nullified if running with a build where
@@ -192,7 +192,7 @@
// obtain reference to the test registry
registry = java.rmi.registry.LocateRegistry.
- getRegistry(TestLibrary.REGISTRY_PORT);
+ getRegistry(registryPort);
}
/**
--- a/jdk/test/java/rmi/activation/ActivationSystem/stubClassesPermitted/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/ActivationSystem/stubClassesPermitted/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -21,15 +21,22 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// required for test to create an ActivationGroup
permission java.lang.RuntimePermission "setFactory";
+ // required for test to get the registry port
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.registry";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.server";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport.tcp";
+
// test needs to export rmid and communicate with objects on arbitrary ports
permission java.net.SocketPermission "*:1024-", "connect,accept,listen";
};
--- a/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/UnregisterGroup.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/UnregisterGroup.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, 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
@@ -74,7 +74,7 @@
private static boolean done = false;
private static ActivateMe lastResortExitObj = null;
private static final int NUM_OBJECTS = 10;
- private static int PORT = 2006;
+ private static int registryPort = -1;
public UnregisterGroup(ActivationID id, MarshalledObject mobj)
throws Exception
@@ -116,7 +116,7 @@
try {
CallbackInterface cobj =
- (CallbackInterface)Naming.lookup("//:" + PORT + "/Callback");
+ (CallbackInterface)Naming.lookup("//:" + registryPort + "/Callback");
cobj.inc();
} catch (Exception e) {
System.err.println("cobj.inc exception");
@@ -235,7 +235,8 @@
try {
// create reg and export callback object
- registry = LocateRegistry.createRegistry(PORT);
+ registry = TestLibrary.createRegistryOnUnusedPort();
+ registryPort = TestLibrary.getRegistryPort(registry);
Callback robj = new Callback();
registry.bind("Callback", robj);
--- a/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -21,11 +21,12 @@
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
- // used by TestLibrary to determine test environment
+ // used by TestLibrary to determine test environment
permission java.util.PropertyPermission "test.classes", "read";
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// required for test to create an ActivationGroup
permission java.lang.RuntimePermission "setFactory";
--- a/jdk/test/java/rmi/activation/CommandEnvironment/SetChildEnv.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/CommandEnvironment/SetChildEnv.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2000, 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
@@ -53,31 +53,37 @@
public static void main(String argv[])
throws Exception
{
+ int runningPort = TestLibrary.getUnusedRandomPort();
+
System.out.println("java.compiler=" + System.getProperty("java.compiler"));
// don't embed spaces in any of the test args/props, because
// they won't be parsed properly
- runwith (new String[0], new String[0]);
+ runwith (new String[0], new String[0], runningPort);
runwith (
new String[] { "-verbosegc" },
new String[] { "foo.bar=SetChildEnvTest",
- "sun.rmi.server.doSomething=true" }
+ "sun.rmi.server.doSomething=true" },
+ runningPort
);
runwith (
new String[] { },
- new String[] { "parameter.count=zero" }
+ new String[] { "parameter.count=zero" },
+ runningPort
);
runwith (
new String[] { "-Xmx32m" },
- new String[] { }
+ new String[] { },
+ runningPort
);
}
private static void runwith(
String[] params, // extra args
- String[] props // extra system properties
+ String[] props, // extra system properties
+ int port // port on which to communicate
)
throws Exception
{
@@ -89,7 +95,8 @@
RMID.removeLog();
RMID rmid = RMID.createRMID(watcher.otherEnd(), watcher.otherEnd(),
- true); // debugExec turned on
+ true, // debugExec turned on
+ true, port);
rmid.start();
@@ -195,7 +202,7 @@
actsys.unregisterGroup(gid);
Thread.sleep(5000);
- rmid.destroy();
+ ActivationLibrary.rmidCleanup(rmid);
}
public static class DebugExecWatcher
@@ -243,7 +250,19 @@
System.err.println(line);
}
} catch (IOException e) {
- e.printStackTrace();
+ /* During termination of distant rmid, StreamPipes will be broken when
+ * distant vm terminates. A "Pipe broken" exception is expected because
+ * DebugExecWatcher points to the same streams as StreamPipes used by RMID.
+ * If we get this exception. We just terminate the thread.
+ */
+ if (e.getMessage().equals("Pipe broken")) {
+ try {
+ str.close();
+ } catch (IOException ioe) {}
+ }
+ else {
+ e.printStackTrace();
+ }
}
}
}
--- a/jdk/test/java/rmi/activation/CommandEnvironment/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/CommandEnvironment/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -27,6 +27,7 @@
permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// required for test to create an ActivationGroup
permission java.lang.RuntimePermission "setFactory";
--- a/jdk/test/java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 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
@@ -31,8 +31,7 @@
* @library ../../testlibrary
* @build RMID ActivationLibrary
* @build InheritedChannelNotServerSocket
- * @run main/othervm/timeout=240 -Djava.rmi.activation.port=5398
- * InheritedChannelNotServerSocket
+ * @run main/othervm/timeout=240 InheritedChannelNotServerSocket
*/
import java.io.IOException;
@@ -55,8 +54,6 @@
import java.rmi.server.UnicastRemoteObject;
public class InheritedChannelNotServerSocket {
-
- private static final int PORT = 5398;
private static final Object lock = new Object();
private static boolean notified = false;
@@ -79,7 +76,8 @@
public static void main(String[] args) throws Exception {
System.err.println("\nRegression test for bug 6261402\n");
-
+ System.setProperty("java.rmi.activation.port",
+ Integer.toString(TestLibrary.INHERITEDCHANNELNOTSERVERSOCKET_ACTIVATION_PORT));
RMID rmid = null;
Callback obj = null;
try {
@@ -91,7 +89,8 @@
Callback proxy =
(Callback) UnicastRemoteObject.exportObject(obj, 0);
Registry registry =
- LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT);
+ LocateRegistry.createRegistry(
+ TestLibrary.INHERITEDCHANNELNOTSERVERSOCKET_REGISTRY_PORT);
registry.bind("Callback", proxy);
/*
@@ -99,7 +98,8 @@
*/
System.err.println("start rmid with inherited channel");
RMID.removeLog();
- rmid = RMID.createRMID(System.out, System.err, true, true, PORT);
+ rmid = RMID.createRMID(System.out, System.err, true, true,
+ TestLibrary.INHERITEDCHANNELNOTSERVERSOCKET_ACTIVATION_PORT);
rmid.addOptions(new String[]{
"-Djava.nio.channels.spi.SelectorProvider=" +
"InheritedChannelNotServerSocket$SP"});
@@ -122,7 +122,7 @@
if (obj != null) {
UnicastRemoteObject.unexportObject(obj, true);
}
- ActivationLibrary.rmidCleanup(rmid, PORT);
+ ActivationLibrary.rmidCleanup(rmid);
}
}
@@ -175,7 +175,7 @@
try {
System.err.println("notify test...");
Registry registry =
- LocateRegistry.getRegistry(TestLibrary.REGISTRY_PORT);
+ LocateRegistry.getRegistry(TestLibrary.INHERITEDCHANNELNOTSERVERSOCKET_REGISTRY_PORT);
Callback obj = (Callback) registry.lookup("Callback");
obj.notifyTest();
} catch (NotBoundException nbe) {
--- a/jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 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
@@ -29,7 +29,8 @@
* @library ../../testlibrary
* @build RMID ActivationLibrary
* @build RmidViaInheritedChannel
- * @run main/othervm/timeout=240 -Djava.rmi.activation.port=5398 RmidViaInheritedChannel
+ * @build TestLibrary
+ * @run main/othervm/timeout=240 RmidViaInheritedChannel
*/
import java.io.IOException;
@@ -48,8 +49,6 @@
import java.rmi.server.UnicastRemoteObject;
public class RmidViaInheritedChannel implements Callback {
-
- private static final int PORT = 5398;
private static final Object lock = new Object();
private static boolean notified = false;
@@ -64,7 +63,8 @@
}
public static void main(String[] args) throws Exception {
-
+ System.setProperty("java.rmi.activation.port",
+ Integer.toString(TestLibrary.RMIDVIAINHERITEDCHANNEL_ACTIVATION_PORT));
RMID rmid = null;
Callback obj = null;
@@ -77,7 +77,8 @@
Callback proxy = (Callback)
UnicastRemoteObject.exportObject(obj, 0);
Registry registry =
- LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT);
+ LocateRegistry.createRegistry(
+ TestLibrary.RMIDVIAINHERITEDCHANNEL_REGISTRY_PORT);
registry.bind("Callback", proxy);
/*
@@ -85,7 +86,8 @@
*/
System.err.println("start rmid with inherited channel");
RMID.removeLog();
- rmid = RMID.createRMID(System.out, System.err, true, false, PORT);
+ rmid = RMID.createRMID(System.out, System.err, true, false,
+ TestLibrary.RMIDVIAINHERITEDCHANNEL_ACTIVATION_PORT);
rmid.addOptions(new String[]{
"-Djava.nio.channels.spi.SelectorProvider=RmidViaInheritedChannel$RmidSelectorProvider"});
rmid.start();
@@ -108,7 +110,7 @@
if (obj != null) {
UnicastRemoteObject.unexportObject(obj, true);
}
- ActivationLibrary.rmidCleanup(rmid, PORT);
+ ActivationLibrary.rmidCleanup(rmid);
}
}
@@ -166,7 +168,8 @@
channel = ServerSocketChannel.open();
ServerSocket serverSocket = channel.socket();
serverSocket.bind(
- new InetSocketAddress(InetAddress.getLocalHost(), PORT));
+ new InetSocketAddress(InetAddress.getLocalHost(),
+ TestLibrary.RMIDVIAINHERITEDCHANNEL_ACTIVATION_PORT));
System.err.println("serverSocket = " + serverSocket);
/*
@@ -175,7 +178,7 @@
try {
System.err.println("notify test...");
Registry registry =
- LocateRegistry.getRegistry(TestLibrary.REGISTRY_PORT);
+ LocateRegistry.getRegistry(TestLibrary.RMIDVIAINHERITEDCHANNEL_REGISTRY_PORT);
Callback obj = (Callback) registry.lookup("Callback");
obj.notifyTest();
} catch (NotBoundException nbe) {
--- a/jdk/test/java/rmi/activation/rmidViaInheritedChannel/rmid.security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/activation/rmidViaInheritedChannel/rmid.security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -2,4 +2,5 @@
permission java.lang.RuntimePermission "selectorProvider";
permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch";
permission java.net.SocketPermission "*", "connect,accept";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
};
--- a/jdk/test/java/rmi/registry/altSecurityManager/AltSecurityManager.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/registry/altSecurityManager/AltSecurityManager.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -27,7 +27,7 @@
* @author Laird Dornin
*
* @library ../../testlibrary
- * @build StreamPipe TestParams TestLibrary JavaVM
+ * @build StreamPipe TestParams TestLibrary JavaVM RMID
* @build AltSecurityManager TestSecurityManager
* @run main/othervm AltSecurityManager
*/
@@ -41,23 +41,41 @@
* if registry and rmid take too long to exit.
*/
public class AltSecurityManager implements Runnable {
-
+ private final int regPort;
// variable to hold registry and rmid children
static JavaVM vm = null;
// names of utilities
static String utilityToStart = null;
- static String registry = "sun.rmi.registry.RegistryImpl";
- static String rmid = "sun.rmi.server.Activation";
+ static final String REGISTRY_IMPL = "sun.rmi.registry.RegistryImpl";
+ static final String ACTIVATION = "sun.rmi.server.Activation";
// children should exit in at least this time.
static long TIME_OUT = 15000;
+ public AltSecurityManager(int port) {
+ if (port <= 0) {
+ TestLibrary.bomb("Port must be greater then 0.");
+ }
+
+ this.regPort = port;
+ }
+
public void run() {
try {
- vm = new JavaVM(utilityToStart,
- " -Djava.security.manager=TestSecurityManager",
- "");
+ if (utilityToStart.equals(REGISTRY_IMPL)) {
+ vm = new JavaVM(utilityToStart,
+ " -Djava.security.manager=TestSecurityManager",
+ Integer.toString(regPort));
+ } else if (utilityToStart.contains(ACTIVATION)) {
+ vm = new JavaVM(utilityToStart,
+ " -Djava.security.manager=TestSecurityManager",
+ "-port " + Integer.toString(regPort));
+ } else {
+ TestLibrary.bomb("Utility to start must be " + REGISTRY_IMPL +
+ " or " + ACTIVATION);
+ }
+
System.err.println("starting " + utilityToStart);
vm.start();
vm.getVM().waitFor();
@@ -75,7 +93,8 @@
utilityToStart = utility;
try {
- Thread thread = new Thread(new AltSecurityManager());
+ int port = TestLibrary.getUnusedRandomPort();
+ Thread thread = new Thread(new AltSecurityManager(port));
System.err.println("expecting RuntimeException for " +
"checkListen in child process");
long start = System.currentTimeMillis();
@@ -90,8 +109,8 @@
// dont pollute other tests; increase the likelihood
// that rmid will go away if it did not exit already.
- if (utility.equals(rmid)) {
- RMID.shutdown();
+ if (utility.equals(ACTIVATION)) {
+ RMID.shutdown(port);
}
TestLibrary.bomb(utilityToStart +
@@ -111,10 +130,10 @@
System.err.println("\nRegression test for bug 4183202\n");
// make sure the registry exits early.
- ensureExit(registry);
+ ensureExit(REGISTRY_IMPL);
// make sure rmid exits early
- ensureExit(rmid);
+ ensureExit(ACTIVATION);
System.err.println("test passed");
--- a/jdk/test/java/rmi/registry/classPathCodebase/ClassPathCodebase.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/registry/classPathCodebase/ClassPathCodebase.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -30,7 +30,7 @@
* @author Peter Jones
*
* @library ../../testlibrary
- * @build ClassPathCodebase Dummy
+ * @build ClassPathCodebase Dummy TestLibrary
* @run main/othervm/policy=security.policy ClassPathCodebase
*/
@@ -83,11 +83,12 @@
System.getProperty("java.home") + File.separator +
"bin" + File.separator + "rmiregistry";
+ int port = TestLibrary.getUnusedRandomPort();
String cmdarray[] = new String[] {
rmiregistryCommand,
"-J-Denv.class.path=.",
"-J-Djava.rmi.server.codebase=" + exportCodebaseURL,
- Integer.toString(TestLibrary.REGISTRY_PORT) };
+ Integer.toString(port) };
System.err.println("\nCommand used to spawn rmiregistry process:");
System.err.println("\t" + Arrays.asList(cmdarray).toString());
@@ -118,7 +119,7 @@
* dummy object to it.
*/
Registry registry = LocateRegistry.getRegistry(
- "localhost", TestLibrary.REGISTRY_PORT);
+ "localhost", port);
try {
registry.bind(dummyBinding, dummyObject);
@@ -133,7 +134,7 @@
{
System.err.println(
"Error: another registry running on port " +
- TestLibrary.REGISTRY_PORT + "?");
+ port + "?");
}
throw e;
}
--- a/jdk/test/java/rmi/registry/emptyName/EmptyName.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/registry/emptyName/EmptyName.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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
@@ -24,6 +24,8 @@
/* @test
* @bug 4399304
* @summary check that registry allows empty names
+ * @library ../../testlibrary
+ * @build TestLibrary
* @run main/othervm EmptyName
*/
import java.rmi.registry.LocateRegistry;
@@ -32,7 +34,7 @@
public class EmptyName {
public static void main(String[] args) throws Exception {
- Registry impl = LocateRegistry.createRegistry(0);
+ Registry impl = TestLibrary.createRegistryOnUnusedPort();
Registry stub = (Registry) RemoteObject.toStub(impl);
stub.bind("", stub);
stub.lookup("");
--- a/jdk/test/java/rmi/registry/interfaceHash/InterfaceHash.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/registry/interfaceHash/InterfaceHash.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 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
@@ -35,8 +35,10 @@
* "interface hash": 4905912898345647071L.
*
* @author Peter Jones
+ * @library ../../testlibrary
* @build InterfaceHash
* @build ReferenceRegistryStub
+ * @build TestLibrary
* @run main/othervm InterfaceHash
*/
@@ -58,7 +60,7 @@
public class InterfaceHash {
- private static final int PORT = 2020;
+ private static final int PORT = TestLibrary.getUnusedRandomPort();
private static final String NAME = "WMM";
public static void main(String[] args) throws Exception {
--- a/jdk/test/java/rmi/registry/multipleRegistries/MultipleRegistries.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/registry/multipleRegistries/MultipleRegistries.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2008, 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
@@ -26,6 +26,8 @@
* @summary Can't run multiple registries in the same VM
* @author Ann Wollrath
*
+ * @library ../../testlibrary
+ * @build TestLibrary
* @build MultipleRegistries
* @run main/othervm/timeout=240 MultipleRegistries
*/
@@ -58,12 +60,13 @@
System.err.println("proxy = " + proxy);
System.err.println("export registries");
- Registry registryImpl1 = LocateRegistry.createRegistry(2030);
- Registry registryImpl2 = LocateRegistry.createRegistry(2040);
-
+ Registry registryImpl1 = TestLibrary.createRegistryOnUnusedPort();
+ int port1 = TestLibrary.getRegistryPort(registryImpl1);
+ Registry registryImpl2 = TestLibrary.createRegistryOnUnusedPort();
+ int port2 = TestLibrary.getRegistryPort(registryImpl2);
System.err.println("bind remote object in registries");
- Registry registry1 = LocateRegistry.getRegistry(2030);
- Registry registry2 = LocateRegistry.getRegistry(2040);
+ Registry registry1 = LocateRegistry.getRegistry(port1);
+ Registry registry2 = LocateRegistry.getRegistry(port2);
registry1.bind(NAME, proxy);
registry2.bind(NAME, proxy);
--- a/jdk/test/java/rmi/registry/readTest/readTest.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/registry/readTest/readTest.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -29,18 +29,19 @@
public class readTest {
public static void main(String args[]) throws Exception {
- int port = 7491;
try {
testPkg.Server obj = new testPkg.Server();
testPkg.Hello stub = (testPkg.Hello) UnicastRemoteObject.exportObject(obj, 0);
// Bind the remote object's stub in the registry
- Registry registry = LocateRegistry.getRegistry(port);
+ Registry registry =
+ LocateRegistry.getRegistry(TestLibrary.READTEST_REGISTRY_PORT);
registry.bind("Hello", stub);
System.err.println("Server ready");
// now, let's test client
- testPkg.Client client = new testPkg.Client(port);
+ testPkg.Client client =
+ new testPkg.Client(TestLibrary.READTEST_REGISTRY_PORT);
String testStubReturn = client.testStub();
if(!testStubReturn.equals(obj.hello)) {
throw new RuntimeException("Test Fails : unexpected string from stub call");
--- a/jdk/test/java/rmi/registry/readTest/readTest.sh Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/registry/readTest/readTest.sh Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 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
@@ -23,6 +23,8 @@
# @test
# @bug 7102369 7094468 7100592
+# @library ../../testlibrary
+# @build TestLibrary
# @summary remove java.rmi.server.codebase property parsing from registyimpl
# @run shell readTest.sh
@@ -44,22 +46,24 @@
;;
esac
+TEST_CLASSPATH=.:$TESTCLASSES
cp -r ${TESTSRC}${FS}* .
${TESTJAVA}${FS}bin${FS}javac testPkg${FS}*java
-${TESTJAVA}${FS}bin${FS}javac readTest.java
+${TESTJAVA}${FS}bin${FS}javac -cp $TEST_CLASSPATH readTest.java
mkdir rmi_tmp
RMIREG_OUT=rmi.out
#start rmiregistry without any local classes on classpath
cd rmi_tmp
-${TESTJAVA}${FS}bin${FS}rmiregistry 7491 > ..${FS}${RMIREG_OUT} 2>&1 &
+# NOTE: This RMI Registry port must match TestLibrary.READTEST_REGISTRY_PORT
+${TESTJAVA}${FS}bin${FS}rmiregistry 64005 > ..${FS}${RMIREG_OUT} 2>&1 &
RMIREG_PID=$!
# allow some time to start
sleep 3
cd ..
# trailing / after code base is important for rmi codebase property.
-${TESTJAVA}${FS}bin${FS}java -Djava.rmi.server.codebase=${FILEURL}`pwd`/ readTest > OUT.TXT 2>&1 &
+${TESTJAVA}${FS}bin${FS}java -cp $TEST_CLASSPATH -Djava.rmi.server.codebase=${FILEURL}`pwd`/ readTest > OUT.TXT 2>&1 &
TEST_PID=$!
#bulk of testcase - let it run for a while
sleep 5
--- a/jdk/test/java/rmi/registry/reexport/Reexport.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/registry/reexport/Reexport.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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,22 +49,21 @@
import java.rmi.server.*;
public class Reexport {
- static public final int regport = TestLibrary.REGISTRY_PORT;
-
static public void main(String[] argv) {
Registry reg = null;
+ int regPort = TestLibrary.getUnusedRandomPort();
try {
System.err.println("\nregression test for 4120329\n");
// establish the registry (we hope)
- System.err.println("Starting registry on port " + regport);
- Reexport.makeRegistry(regport);
+ System.err.println("Starting registry on port " + regPort);
+ Reexport.makeRegistry(regPort);
// Get a handle to the registry
System.err.println("Creating duplicate registry, this should fail...");
- reg = createReg(true);
+ reg = createReg(true, regPort);
if (reg != null) {
TestLibrary.bomb("failed was able to duplicate the registry?!?");
@@ -73,7 +72,7 @@
// Kill the first registry.
System.err.println("Bringing down the first registry");
try {
- Reexport.killRegistry();
+ Reexport.killRegistry(regPort);
} catch (Exception foo) {
}
@@ -81,7 +80,7 @@
System.err.println("Trying again to start our own " +
"registry... this should work");
- reg = createReg(false);
+ reg = createReg(false, regPort);
if (reg == null) {
TestLibrary.bomb("Could not create registry on second try");
@@ -93,17 +92,17 @@
TestLibrary.bomb(e);
} finally {
// dont leave the registry around to affect other tests.
- killRegistry();
+ killRegistry(regPort);
reg = null;
}
}
- static Registry createReg(boolean remoteOk) {
+ static Registry createReg(boolean remoteOk, int port) {
Registry reg = null;
try {
- reg = LocateRegistry.createRegistry(regport);
+ reg = LocateRegistry.createRegistry(port);
} catch (Throwable e) {
if (remoteOk) {
System.err.println("EXPECTING PORT IN USE EXCEPTION:");
@@ -140,10 +139,10 @@
}
private static Process subreg = null;
- public static void killRegistry() {
+ public static void killRegistry(int port) {
if (Reexport.subreg != null) {
- RegistryRunner.requestExit();
+ RegistryRunner.requestExit(port);
try {
Reexport.subreg.waitFor();
--- a/jdk/test/java/rmi/reliability/juicer/AppleUserImpl.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/reliability/juicer/AppleUserImpl.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2008, 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
@@ -59,19 +59,21 @@
* @build Apple AppleEvent AppleImpl AppleUserImpl
* @build Orange OrangeEcho OrangeEchoImpl OrangeImpl
* @build ApplicationServer
+ * @build TestLibrary
*
* @run main/othervm/policy=security.policy AppleUserImpl -seconds 30
*
* @author Peter Jones, Nigel Daley
*/
+import java.rmi.NoSuchObjectException;
import java.rmi.RemoteException;
-import java.rmi.NoSuchObjectException;
-import java.rmi.server.UnicastRemoteObject;
import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
+import java.rmi.server.UnicastRemoteObject;
import java.util.Random;
+import java.util.logging.Level;
import java.util.logging.Logger;
-import java.util.logging.Level;
/**
* The AppleUserImpl class implements the behavior of the remote
@@ -80,7 +82,7 @@
* AppleUserThread is created for each apple.
*/
public class AppleUserImpl extends UnicastRemoteObject implements AppleUser {
-
+ private static int registryPort = -1;
private static final Logger logger =
Logger.getLogger("reliability.appleuser");
private static int threadNum = 0;
@@ -308,8 +310,10 @@
synchronized (user) {
// create new registry and bind new AppleUserImpl in registry
- LocateRegistry.createRegistry(2006);
- LocateRegistry.getRegistry(2006).rebind("AppleUser",user);
+ Registry registry = TestLibrary.createRegistryOnUnusedPort();
+ registryPort = TestLibrary.getRegistryPort(registry);
+ LocateRegistry.getRegistry(registryPort).rebind("AppleUser",
+ user);
// start the other server if applicable
if (othervm) {
@@ -318,7 +322,9 @@
"started in separate process");
} else {
Class app = Class.forName("ApplicationServer");
- server = new Thread((Runnable) app.newInstance());
+ java.lang.reflect.Constructor appConstructor =
+ app.getDeclaredConstructor(new Class[] {Integer.TYPE});
+ server = new Thread((Runnable) appConstructor.newInstance(registryPort));
logger.log(Level.INFO, "Starting application server " +
"in same process");
server.start();
--- a/jdk/test/java/rmi/reliability/juicer/ApplicationServer.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/reliability/juicer/ApplicationServer.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2008, 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
@@ -38,18 +38,21 @@
private static final int LOOKUP_ATTEMPTS = 5;
private static final int DEFAULT_NUMAPPLES = 10;
private static final String DEFAULT_REGISTRYHOST = "localhost";
+ private static final int DEFAULT_REGISTRYPORT = -1;
private final int numApples;
private final String registryHost;
+ private final int registryPort;
private final Apple[] apples;
private AppleUser user;
- ApplicationServer() {
- this(DEFAULT_NUMAPPLES, DEFAULT_REGISTRYHOST);
+ ApplicationServer(int registryPort) {
+ this(DEFAULT_NUMAPPLES, DEFAULT_REGISTRYHOST, registryPort);
}
- ApplicationServer(int numApples, String registryHost) {
+ ApplicationServer(int numApples, String registryHost, int registryPort) {
this.numApples = numApples;
this.registryHost = registryHost;
+ this.registryPort = registryPort;
apples = new Apple[numApples];
}
@@ -71,7 +74,7 @@
for (i = 0; i < LOOKUP_ATTEMPTS; i++) {
try {
Registry registry = LocateRegistry.getRegistry(
- registryHost, 2006);
+ registryHost, registryPort);
user = (AppleUser) registry.lookup("AppleUser");
user.startTest();
break; //successfully obtained AppleUser
@@ -120,16 +123,20 @@
private static void usage() {
System.err.println("Usage: ApplicationServer [-numApples <numApples>]");
System.err.println(" [-registryHost <host>]");
+ System.err.println(" -registryPort <port>");
System.err.println(" numApples The number of apples (threads) to use.");
System.err.println(" The default is 10 apples.");
System.err.println(" host The host running rmiregistry " +
"which contains AppleUser.");
System.err.println(" The default is \"localhost\".");
+ System.err.println(" port The port the rmiregistry is running" +
+ "on.");
System.err.println();
}
public static void main(String[] args) {
int num = DEFAULT_NUMAPPLES;
+ int port = -1;
String host = DEFAULT_REGISTRYHOST;
// parse command line args
@@ -142,17 +149,25 @@
} else if (arg.equals("-registryHost")) {
i++;
host = args[i];
+ } else if (arg.equals("-registryPort")) {
+ i++;
+ port = Integer.parseInt(args[i]);
} else {
usage();
}
}
+
+ if (port == -1) {
+ usage();
+ throw new RuntimeException("Port must be specified.");
+ }
} catch (Throwable t) {
usage();
throw new RuntimeException("TEST FAILED: Bad argument");
}
// start the client server
- Thread server = new Thread(new ApplicationServer(num,host));
+ Thread server = new Thread(new ApplicationServer(num,host,port));
server.start();
// main should exit once all exported remote objects are gc'd
}
--- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/EchoImpl.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/EchoImpl.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, 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
@@ -128,8 +128,9 @@
ActivationGroup.createGroup(groupID, groupDesc, 0);
EchoImpl impl = new EchoImpl(protocol);
- System.out.println("EchoServer: binding in registry");
- Naming.rebind("//:" + UseCustomSocketFactory.REGISTRY_PORT +
+ int registryPort = Integer.parseInt(System.getProperty("rmi.registry.port"));
+ System.out.println("EchoServer: binding in registry on port:" + registryPort);
+ Naming.rebind("//:" + registryPort +
"/EchoServer", impl);
System.out.println("EchoServer ready.");
} catch (Exception e) {
--- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/UseCustomSocketFactory.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/UseCustomSocketFactory.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, 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
@@ -32,6 +32,7 @@
* @build EchoImpl
* @build EchoImpl_Stub
* @build UseCustomSocketFactory
+ * @build TestLibrary
* @run main/othervm/policy=security.policy/timeout=360 UseCustomSocketFactory
*/
@@ -42,8 +43,8 @@
import java.rmi.registry.*;
public class UseCustomSocketFactory {
+ static final int REGISTRY_PORT = TestLibrary.getUnusedRandomPort();
- final static int REGISTRY_PORT = 2006;
static String[] protocol = new String[] { "", "compress", "xor" };
public static void main(String[] args) {
@@ -68,7 +69,7 @@
" -C-Djava.security.manager=java.rmi.RMISecurityManager "});
rmid.start();
- Echo[] echo = spawnAndTest();
+ Echo[] echo = spawnAndTest(rmid.getPort());
reactivateAndTest(echo);
} catch (IOException e) {
TestLibrary.bomb("creating rmid", e);
@@ -78,17 +79,20 @@
}
}
- private static Echo[] spawnAndTest() {
+ private static Echo[] spawnAndTest(int rmidPort) {
System.err.println("\nCreate Test-->");
Echo[] echo = new Echo[protocol.length];
for (int i = 0; i < protocol.length; i++) {
-
JavaVM serverVM = new JavaVM("EchoImpl",
"-Djava.security.policy=" +
- TestParams.defaultPolicy,
+ TestParams.defaultPolicy +
+ " -Drmi.registry.port=" +
+ REGISTRY_PORT +
+ " -Djava.rmi.activation.port=" +
+ rmidPort,
protocol[i]);
System.err.println("\nusing protocol: " +
--- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -30,6 +30,9 @@
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "rmi.registry.port", "read";
+ permission java.util.PropertyPermission "java.rmi.activation.port", "write";
+
// required for test to create an ActivationGroup
permission java.lang.RuntimePermission "setFactory";
--- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/HelloImpl.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/HelloImpl.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, 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
@@ -65,8 +65,9 @@
if (args.length >= 1)
protocol = args[0];
+ int registryPort = Integer.parseInt(System.getProperty("rmi.registry.port"));
registry = java.rmi.registry.LocateRegistry.
- getRegistry("localhost", TestLibrary.REGISTRY_PORT,
+ getRegistry("localhost", registryPort,
new Compress.CompressRMIClientSocketFactory());
UseCustomSocketFactory.checkStub(registry, "RMIClientSocket");
hello = (Hello) registry.lookup("/HelloServer");
--- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/UseCustomSocketFactory.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/UseCustomSocketFactory.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, 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
@@ -32,6 +32,7 @@
* @build Hello
* @build HelloImpl
* @build HelloImpl_Stub
+ * @build TestLibrary
* @build UseCustomSocketFactory
* @build Compress
* @run main/othervm/policy=security.policy/timeout=240 UseCustomSocketFactory
@@ -58,6 +59,7 @@
System.out.println("\nRegression test for bug 4148850\n");
TestLibrary.suggestSecurityManager("java.rmi.RMISecurityManager");
+ int registryPort = TestLibrary.getUnusedRandomPort();
try {
impl = new HelloImpl();
@@ -67,7 +69,7 @@
* allow the rmiregistry to be secure.
*/
registry = LocateRegistry.
- createRegistry(TestLibrary.REGISTRY_PORT,
+ createRegistry(registryPort,
new Compress.CompressRMIClientSocketFactory(),
new Compress.CompressRMIServerSocketFactory());
registry.rebind("/HelloServer", impl);
@@ -77,8 +79,12 @@
TestLibrary.bomb("creating registry", e);
}
- JavaVM serverVM = new JavaVM("HelloImpl", "-Djava.security.policy=" +
- TestParams.defaultPolicy, "");
+ JavaVM serverVM = new JavaVM("HelloImpl",
+ "-Djava.security.policy=" +
+ TestParams.defaultPolicy +
+ " -Drmi.registry.port=" +
+ registryPort,
+ "");
try {
--- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -22,6 +22,8 @@
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "rmi.registry.port", "read";
+
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
--- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/EchoImpl.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/EchoImpl.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, 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
@@ -64,8 +64,9 @@
System.out.println("EchoServer: creating remote object");
EchoImpl impl = new EchoImpl(protocol);
+ int registryPort = Integer.parseInt(System.getProperty("rmi.registry.port"));
System.out.println("EchoServer: binding in registry");
- Naming.rebind("//:" + TestLibrary.REGISTRY_PORT +
+ Naming.rebind("//:" + registryPort +
"/EchoServer", impl);
System.out.println("EchoServer ready.");
} catch (Exception e) {
--- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/UseCustomSocketFactory.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/UseCustomSocketFactory.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, 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
@@ -46,6 +46,8 @@
public static void main(String[] args) {
+ int registryPort = -1;
+
String[] protocol = new String[] { "", "compress", "xor" };
System.out.println("\nRegression test for bug 4127826\n");
@@ -53,7 +55,8 @@
TestLibrary.suggestSecurityManager("java.rmi.RMISecurityManager");
try {
- LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT);
+ Registry registry = TestLibrary.createRegistryOnUnusedPort();
+ registryPort = TestLibrary.getRegistryPort(registry);
} catch (Exception e) {
TestLibrary.bomb("creating registry", e);
}
@@ -65,7 +68,9 @@
JavaVM serverVM = new JavaVM("EchoImpl",
"-Djava.security.policy=" +
- TestParams.defaultPolicy,
+ TestParams.defaultPolicy +
+ " -Drmi.registry.port=" +
+ registryPort,
protocol[i]);
System.err.println("\nusing protocol: " +
(protocol[i] == "" ? "none" : protocol[i]));
@@ -79,7 +84,7 @@
Echo obj = null;
do {
try {
- obj = (Echo) Naming.lookup("//:" + TestLibrary.REGISTRY_PORT +
+ obj = (Echo) Naming.lookup("//:" + registryPort +
"/EchoServer");
break;
} catch (NotBoundException e) {
@@ -109,7 +114,7 @@
} finally {
serverVM.destroy();
try {
- Naming.unbind("//:" + TestLibrary.REGISTRY_PORT +
+ Naming.unbind("//:" + registryPort +
"/EchoServer");
} catch (Exception e) {
TestLibrary.bomb("unbinding EchoServer", e);
--- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -22,9 +22,18 @@
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "rmi.registry.port", "read";
+
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
+ // used by TestLibrary to get the RMI Registry port
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.registry";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.server";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport.proxy";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport.tcp";
+
// test needs to export rmid and communicate with objects on arbitrary ports
permission java.net.SocketPermission "*:1024-", "connect,accept,listen";
};
--- a/jdk/test/java/rmi/server/RemoteServer/AddrInUse.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/RemoteServer/AddrInUse.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2003, 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
@@ -26,6 +26,7 @@
* @summary retryServerSocket should not retry on BindException
* @author Ann Wollrath
*
+ * @library ../../testlibrary
* @build AddrInUse
* @run main/othervm AddrInUse
*/
@@ -36,7 +37,7 @@
public class AddrInUse implements Runnable {
- private static final int PORT = 9999;
+ private static int port = -1;
private static final long TIMEOUT = 10000;
private boolean exportSucceeded = false;
@@ -49,7 +50,7 @@
* has already been bound, and record the result.
*/
try {
- LocateRegistry.createRegistry(PORT);
+ LocateRegistry.createRegistry(port);
synchronized (this) {
exportSucceeded = true;
notifyAll();
@@ -68,8 +69,9 @@
/*
* Bind a server socket to a port.
*/
- System.err.println("create a ServerSocket on port " + PORT + "...");
- ServerSocket server = new ServerSocket(PORT);
+ ServerSocket server = new ServerSocket(0);
+ port = server.getLocalPort();
+ System.err.println("Created a ServerSocket on port " + port + "...");
/*
* Start a thread that creates a registry on the same port,
--- a/jdk/test/java/rmi/server/UnicastRemoteObject/keepAliveDuringCall/KeepAliveDuringCall.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/UnicastRemoteObject/keepAliveDuringCall/KeepAliveDuringCall.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 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
@@ -82,15 +82,17 @@
UnicastRemoteObject.exportObject(obj);
System.err.println("exported shutdown monitor");
- Registry localRegistry =
- LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT);
+ Registry localRegistry = TestLibrary.createRegistryOnUnusedPort();
+ int registryPort = TestLibrary.getRegistryPort(localRegistry);
System.err.println("created local registry");
localRegistry.bind(BINDING, obj);
System.err.println("bound shutdown monitor in local registry");
System.err.println("starting remote ShutdownImpl VM...");
- (new JavaVM("ShutdownImpl")).start();
+ (new JavaVM("ShutdownImpl",
+ "-Drmi.registry.port=" +
+ registryPort, "")).start();
Shutdown s;
synchronized (obj.lock) {
--- a/jdk/test/java/rmi/server/UnicastRemoteObject/keepAliveDuringCall/ShutdownImpl.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/UnicastRemoteObject/keepAliveDuringCall/ShutdownImpl.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 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
@@ -68,8 +68,9 @@
public static void main(String[] args) {
try {
+ int registryPort = Integer.parseInt(System.getProperty("rmi.registry.port"));
Registry registry =
- LocateRegistry.getRegistry("", TestLibrary.REGISTRY_PORT);
+ LocateRegistry.getRegistry("", registryPort);
ShutdownMonitor monitor = (ShutdownMonitor)
registry.lookup(KeepAliveDuringCall.BINDING);
System.err.println("(ShutdownImpl) retrieved shutdown monitor");
--- a/jdk/test/java/rmi/server/UnicastRemoteObject/unexportObject/UnexportLeak.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/UnicastRemoteObject/unexportObject/UnexportLeak.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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
@@ -28,8 +28,10 @@
*
* @author Ann Wollrath
*
+ * @library ../../../testlibrary
* @build UnexportLeak
* @build UnexportLeak_Stub
+ * @build TestLibrary
* @build Ping
* @run main/othervm UnexportLeak
*/
@@ -40,20 +42,18 @@
import java.rmi.registry.*;
public class UnexportLeak implements Ping {
-
- private static int PORT = 2006;
-
public void ping() {
}
public static void main(String[] args) {
try {
System.err.println("\nRegression test for bug 4331349\n");
- LocateRegistry.createRegistry(PORT);
+ Registry registry = TestLibrary.createRegistryOnUnusedPort();
+ int registryPort = TestLibrary.getRegistryPort(registry);
Remote obj = new UnexportLeak();
WeakReference wr = new WeakReference(obj);
UnicastRemoteObject.exportObject(obj);
- LocateRegistry.getRegistry(PORT).rebind("UnexportLeak", obj);
+ LocateRegistry.getRegistry(registryPort).rebind("UnexportLeak", obj);
UnicastRemoteObject.unexportObject(obj, true);
obj = null;
flushRefs();
--- a/jdk/test/java/rmi/server/Unreferenced/finiteGCLatency/FiniteGCLatency.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/Unreferenced/finiteGCLatency/FiniteGCLatency.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, 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,6 +37,7 @@
* @library ../../../testlibrary
* @build FiniteGCLatency
* @build FiniteGCLatency_Stub
+ * @build TestLibrary
* @run main/othervm/timeout=120 FiniteGCLatency
*/
@@ -78,11 +79,11 @@
try {
UnicastRemoteObject.exportObject(obj);
System.err.println("exported remote object");
-
- LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT);
+ Registry registry1 = TestLibrary.createRegistryOnUnusedPort();
+ int port = TestLibrary.getRegistryPort(registry1);
System.err.println("created registry");
- Registry registry = LocateRegistry.getRegistry("", TestLibrary.REGISTRY_PORT);
+ Registry registry = LocateRegistry.getRegistry("", port);
registry.bind(BINDING, obj);
System.err.println("bound remote object in registry");
--- a/jdk/test/java/rmi/server/Unreferenced/leaseCheckInterval/LeaseCheckInterval.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/Unreferenced/leaseCheckInterval/LeaseCheckInterval.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 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
@@ -87,8 +87,9 @@
UnicastRemoteObject.exportObject(obj);
System.err.println("exported remote object");
+ int registryPort = TestLibrary.getUnusedRandomPort();
Registry localRegistry =
- LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT);
+ LocateRegistry.createRegistry(registryPort);
System.err.println("created local registry");
localRegistry.bind(BINDING, obj);
@@ -96,7 +97,8 @@
synchronized (obj.lock) {
System.err.println("starting remote client VM...");
- (new JavaVM("SelfTerminator")).start();
+ (new JavaVM("SelfTerminator", "-Drmi.registry.port=" +
+ registryPort, "")).start();
System.err.println("waiting for unreferenced() callback...");
obj.lock.wait(TIMEOUT);
--- a/jdk/test/java/rmi/server/Unreferenced/leaseCheckInterval/SelfTerminator.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/Unreferenced/leaseCheckInterval/SelfTerminator.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 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
@@ -33,8 +33,10 @@
public static void main(String[] args) {
try {
+ int registryPort =
+ Integer.parseInt(System.getProperty("rmi.registry.port"));
Registry registry =
- LocateRegistry.getRegistry("", TestLibrary.REGISTRY_PORT);
+ LocateRegistry.getRegistry("", registryPort);
Remote stub = registry.lookup(LeaseCheckInterval.BINDING);
Runtime.getRuntime().halt(0);
} catch (Exception e) {
--- a/jdk/test/java/rmi/server/Unreferenced/unreferencedContext/UnreferencedContext.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/Unreferenced/unreferencedContext/UnreferencedContext.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, 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
@@ -41,6 +41,7 @@
* @library ../../../testlibrary
* @build UnreferencedContext
* @build UnreferencedContext_Stub
+ * @build TestLibrary
* @run main/othervm/timeout=120 UnreferencedContext
*/
@@ -119,10 +120,11 @@
UnicastRemoteObject.exportObject(obj);
System.err.println("exported remote object");
- LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT);
+ Registry registry1 = TestLibrary.createRegistryOnUnusedPort();
+ int port = TestLibrary.getRegistryPort(registry1);
System.err.println("created registry");
- Registry registry = LocateRegistry.getRegistry("", TestLibrary.REGISTRY_PORT);
+ Registry registry = LocateRegistry.getRegistry("", port);
registry.bind(BINDING, obj);
System.err.println("bound remote object in registry");
--- a/jdk/test/java/rmi/server/useCustomRef/UseCustomRef.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/useCustomRef/UseCustomRef.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2007, 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
@@ -35,6 +35,7 @@
* @build Ping
* @build UseCustomRef_Stub
* @build UseCustomRef_Skel
+ * @build TestLibrary
* @run main/othervm/policy=security.policy/secure=java.rmi.RMISecurityManager/timeout=120 UseCustomRef
*
* This test was failing to run because the synthetic access
@@ -84,8 +85,9 @@
TestLibrary.suggestSecurityManager("java.rmi.RMISecurityManager");
System.err.println("creating Registry...");
- registry = LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT);
+ registry = TestLibrary.createRegistryOnUnusedPort();
+ int port = TestLibrary.getRegistryPort(registry);
/*
* create object with custom ref and bind in registry
*/
@@ -97,7 +99,7 @@
"instanceof CustomServerRef");
}
- String name = "//:" + TestLibrary.REGISTRY_PORT + "/UseCustomRef";
+ String name = "//:" + port + "/UseCustomRef";
// String name = "UseCustomRef";
System.err.println("binding object in registry...");
Naming.rebind(name, cr);
--- a/jdk/test/java/rmi/server/useCustomRef/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/server/useCustomRef/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -8,8 +8,11 @@
grant {
// the test uses a class in the package sun.rmi.server
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.registry";
permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.server";
permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport.proxy";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport.tcp";
permission java.util.PropertyPermission "package.restrict.access.sun", "read";
permission java.util.PropertyPermission "package.restrict.access.sun.rmi", "read";
--- a/jdk/test/java/rmi/testlibrary/ActivationLibrary.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/testlibrary/ActivationLibrary.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2006, 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
@@ -169,37 +169,10 @@
return false;
}
- /**
- * Check to see if an arry of Strings contains a given string.
- */
- private static boolean
- containsString(String[] strings, String contained)
- {
- if (strings == null) {
- if (contained == null) {
- return true;
- }
- return false;
- }
-
- for (int i = 0 ; i < strings.length ; i ++ ) {
- if ((strings[i] != null) &&
- (strings[i].indexOf(contained) >= 0))
- {
- return true;
- }
- }
- return false;
- }
-
/** cleanup after rmid */
public static void rmidCleanup(RMID rmid) {
- rmidCleanup(rmid, TestLibrary.RMID_PORT);
- }
-
- public static void rmidCleanup(RMID rmid, int port) {
if (rmid != null) {
- if (!ActivationLibrary.safeDestroy(rmid, port, SAFE_WAIT_TIME)) {
+ if (!ActivationLibrary.safeDestroy(rmid, SAFE_WAIT_TIME)) {
TestLibrary.bomb("rmid not destroyed in: " +
SAFE_WAIT_TIME +
" milliseconds");
@@ -215,8 +188,8 @@
* @return whether or not shutdown completed succesfully in the
* timeAllowed
*/
- private static boolean safeDestroy(RMID rmid, int port, long timeAllowed) {
- DestroyThread destroyThread = new DestroyThread(rmid, port);
+ private static boolean safeDestroy(RMID rmid, long timeAllowed) {
+ DestroyThread destroyThread = new DestroyThread(rmid);
destroyThread.start();
try {
@@ -236,9 +209,9 @@
private final int port;
private boolean succeeded = false;
- DestroyThread(RMID rmid, int port) {
+ DestroyThread(RMID rmid) {
this.rmid = rmid;
- this.port = port;
+ this.port = rmid.getPort();
this.setDaemon(true);
}
--- a/jdk/test/java/rmi/testlibrary/RMID.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/testlibrary/RMID.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2006, 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
@@ -28,7 +28,6 @@
import java.io.*;
import java.rmi.*;
import java.rmi.activation.*;
-import java.util.Properties;
/**
* Utility class that creates an instance of rmid with a policy
@@ -133,7 +132,7 @@
boolean debugExec)
{
return createRMID(out, err, debugExec, true,
- TestLibrary.RMID_PORT);
+ TestLibrary.getUnusedRandomPort());
}
public static RMID createRMID(OutputStream out, OutputStream err,
@@ -208,7 +207,7 @@
// if rmid is already running, then the test will fail with
// a well recognized exception (port already in use...).
- mesg("starting rmid...");
+ mesg("starting rmid on port #" + port + "...");
super.start();
int slopFactor = 1;
@@ -235,6 +234,14 @@
// Checking if rmid is present
if (ActivationLibrary.rmidRunning(port)) {
+ /**
+ * We need to set the java.rmi.activation.port value as the
+ * activation system will use the property to determine the
+ * port #. The activation system will use this value if set.
+ * If it isn't set, the activation system will set it to an
+ * incorrect value.
+ */
+ System.setProperty("java.rmi.activation.port", Integer.toString(port));
mesg("finished starting rmid.");
return;
}
@@ -259,10 +266,6 @@
* Shutdown does not nullify possible references to the rmid
* process object (destroy does though).
*/
- public static void shutdown() {
- shutdown(TestLibrary.RMID_PORT);
- }
-
public static void shutdown(int port) {
try {
@@ -301,9 +304,7 @@
* if rmid is a child process of the current VM.
*/
public void destroy() {
-
- // attempt graceful shutdown of the activation system on
- // TestLibrary.RMID_PORT
+ // attempt graceful shutdown of the activation system
shutdown(port);
if (vm != null) {
@@ -357,4 +358,6 @@
vm = null;
}
}
+
+ public int getPort() {return port;}
}
--- a/jdk/test/java/rmi/testlibrary/RegistryRunner.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/testlibrary/RegistryRunner.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -56,12 +56,13 @@
* Request that the registry process exit and handle
* related exceptions.
*/
- public static void requestExit() {
+ public static void requestExit(int port) {
+
try {
RemoteExiter exiter =
(RemoteExiter)
Naming.lookup("rmi://localhost:" +
- TestLibrary.REGISTRY_PORT +
+ port +
"/RemoteExiter");
try {
exiter.exit();
@@ -84,7 +85,7 @@
System.err.println("Usage: <port>");
System.exit(0);
}
- int port = TestLibrary.REGISTRY_PORT;
+ int port = -1;
try {
port = Integer.parseInt(args[0]);
} catch (NumberFormatException nfe) {
--- a/jdk/test/java/rmi/testlibrary/StreamPipe.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/testlibrary/StreamPipe.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 1999, 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
@@ -113,7 +113,9 @@
w.flush();
line = r.readLine();
}
-
+ } catch (InterruptedIOException iioe) {
+ // Thread interrupted during IO operation. Terminate StreamPipe.
+ return;
} catch (IOException e) {
System.err.println("*** IOException in StreamPipe.run:");
e.printStackTrace();
--- a/jdk/test/java/rmi/testlibrary/TestLibrary.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/testlibrary/TestLibrary.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2003, 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
@@ -36,37 +36,62 @@
* not make use of packages.
*/
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
-import java.io.OutputStream;
import java.io.PrintStream;
-import java.net.URL;
import java.net.MalformedURLException;
-import java.rmi.activation.Activatable;
-import java.rmi.activation.ActivationID;
+import java.net.ServerSocket;
+import java.net.URL;
import java.rmi.NoSuchObjectException;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
-import java.rmi.Remote;
+import java.rmi.server.RemoteRef;
import java.rmi.server.UnicastRemoteObject;
import java.util.Enumeration;
-import java.util.Hashtable;
import java.util.Properties;
-import java.io.ByteArrayOutputStream;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
+import sun.rmi.registry.RegistryImpl;
+import sun.rmi.server.UnicastServerRef;
+import sun.rmi.transport.Endpoint;
+import sun.rmi.transport.LiveRef;
+import sun.rmi.transport.tcp.TCPEndpoint;
/**
* Class of utility/library methods (i.e. procedures) that assist with
* the writing and maintainance of rmi regression tests.
*/
public class TestLibrary {
-
- /** standard test port number for registry */
- public final static int REGISTRY_PORT = 2006;
- /** port for rmid necessary: not used to actually start rmid */
- public final static int RMID_PORT = 1098;
+ /**
+ * IMPORTANT!
+ *
+ * RMI tests are run concurrently and port conflicts result when a single
+ * port number is used by multiple tests. When needing a port, use
+ * getUnusedRandomPort() wherever possible. If getUnusedRandomPort() cannot
+ * be used, reserve and specify a port to use for your test here. This
+ * will ensure there are no port conflicts amongst the RMI tests. The
+ * port numbers specified here may also be specified in the respective
+ * tests. Do not change the reserved port numbers here without also
+ * changing the port numbers in the respective tests.
+ *
+ * When needing an instance of the RMIRegistry, use
+ * createRegistryOnUnusedPort wherever possible to prevent port conflicts.
+ *
+ * Reserved port range: FIXED_PORT_MIN to FIXED_PORT_MAX (inclusive) for
+ * tests which cannot use a random port. If new fixed ports are added below
+ * FIXED_PORT_MIN or above FIXED_PORT_MAX, then adjust
+ * FIXED_PORT_MIN/MAX appropriately.
+ */
+ public final static int FIXED_PORT_MIN = 64001;
+ public final static int FIXED_PORT_MAX = 64010;
+ public final static int RMIDVIAINHERITEDCHANNEL_ACTIVATION_PORT = 64001;
+ public final static int RMIDVIAINHERITEDCHANNEL_REGISTRY_PORT = 64002;
+ public final static int INHERITEDCHANNELNOTSERVERSOCKET_ACTIVATION_PORT = 64003;
+ public final static int INHERITEDCHANNELNOTSERVERSOCKET_REGISTRY_PORT = 64004;
+ public final static int READTEST_REGISTRY_PORT = 64005;
static void mesg(Object mesg) {
System.err.println("TEST_LIBRARY: " + mesg.toString());
@@ -340,6 +365,83 @@
}
/**
+ * Creates an RMI {@link Registry} on a random, un-reserved port.
+ *
+ * @returns an RMI Registry, using a random port.
+ * @throws RemoteException if there was a problem creating a Registry.
+ */
+ public static Registry createRegistryOnUnusedPort() throws RemoteException {
+ return LocateRegistry.createRegistry(getUnusedRandomPort());
+ }
+
+ /**
+ * Returns the port number the RMI {@link Registry} is running on.
+ *
+ * @param registry the registry to find the port of.
+ * @return the port number the registry is using.
+ * @throws RuntimeException if there was a problem getting the port number.
+ */
+ public static int getRegistryPort(Registry registry) {
+ int port = -1;
+
+ try {
+ RemoteRef remoteRef = ((RegistryImpl)registry).getRef();
+ LiveRef liveRef = ((UnicastServerRef)remoteRef).getLiveRef();
+ Endpoint endpoint = liveRef.getChannel().getEndpoint();
+ TCPEndpoint tcpEndpoint = (TCPEndpoint) endpoint;
+ port = tcpEndpoint.getPort();
+ } catch (Exception ex) {
+ throw new RuntimeException("Error getting registry port.", ex);
+ }
+
+ return port;
+ }
+
+ /**
+ * Returns an unused random port number which is not a reserved port. Will
+ * try up to 10 times to get a random port before giving up and throwing a
+ * RuntimeException.
+ *
+ * @return an unused random port number.
+ * @throws RuntimeException if there was a problem getting a port.
+ */
+ public static int getUnusedRandomPort() {
+ int numTries = 0;
+ int unusedRandomPort = FIXED_PORT_MIN;
+ Exception ex = null;
+
+ while (numTries++ < 10) {
+ ex = null; //reset
+
+ try (ServerSocket ss = new ServerSocket(0)) {
+ unusedRandomPort = ss.getLocalPort();
+ } catch (Exception e) {
+ ex = e;
+ }
+
+ if (!isReservedPort(unusedRandomPort)) {
+ return unusedRandomPort;
+ }
+ }
+
+ // If we're here, then either an exception was thrown or the port is
+ // a reserved port.
+ throw new RuntimeException("Error getting unused random port.", ex);
+ }
+
+ /**
+ * Determines if a port is one of the reserved port numbers.
+ *
+ * @param port the port to test.
+ * @return {@code true} if the port is a reserved port, otherwise
+ * {@code false}.
+ */
+ public static boolean isReservedPort(int port) {
+ return ((port >= FIXED_PORT_MIN) && (port <= FIXED_PORT_MAX) ||
+ (port == 1099));
+ }
+
+ /**
* Method to capture the stack trace of an exception and return it
* as a string.
*/
--- a/jdk/test/java/rmi/transport/checkFQDN/CheckFQDN.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/transport/checkFQDN/CheckFQDN.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, 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
@@ -34,6 +34,7 @@
*
* @library ../../testlibrary
* @build CheckFQDN CheckFQDNClient CheckFQDN_Stub TellServerName
+ * @build TestLibrary
* @run main/othervm/timeout=120 CheckFQDN
*/
@@ -63,7 +64,7 @@
*/
public class CheckFQDN extends UnicastRemoteObject
implements TellServerName {
-
+ public static int REGISTRY_PORT =-1;
static String propertyBeingTested = null;
static String propertyBeingTestedValue = null;
@@ -77,8 +78,8 @@
System.err.println
("\nRegression test for bug/rfe 4115683\n");
- Registry registry = java.rmi.registry.LocateRegistry.
- createRegistry(TestLibrary.REGISTRY_PORT);
+ Registry registry = TestLibrary.createRegistryOnUnusedPort();
+ REGISTRY_PORT = TestLibrary.getRegistryPort(registry);
registry.bind("CheckFQDN", checkFQDN);
/* test the host name scheme in different environments.*/
@@ -117,7 +118,9 @@
JavaVM jvm = new JavaVM("CheckFQDNClient",
propOption + property +
equal +
- propertyValue + extraProp,
+ propertyValue + extraProp +
+ " -Drmi.registry.port=" +
+ REGISTRY_PORT,
"");
propertyBeingTested=property;
--- a/jdk/test/java/rmi/transport/checkFQDN/CheckFQDNClient.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/transport/checkFQDN/CheckFQDNClient.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, 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
@@ -58,8 +58,9 @@
System.err.println("Client host name: " +
hostname);
+ int registryPort = Integer.parseInt(System.getProperty("rmi.registry.port"));
tell = (TellServerName) Naming.lookup("rmi://:" +
- TestLibrary.REGISTRY_PORT
+ registryPort
+ "/CheckFQDN");
tell.tellServerName(hostname);
System.err.println("client has exited");
--- a/jdk/test/java/rmi/transport/checkLeaseInfoLeak/CheckLeaseLeak.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/transport/checkLeaseInfoLeak/CheckLeaseLeak.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, 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
@@ -29,6 +29,7 @@
*
* @library ../../testlibrary
* @build CheckLeaseLeak CheckLeaseLeak_Stub LeaseLeakClient LeaseLeak
+ * @build TestLibrary
* @run main/othervm/timeout=240 CheckLeaseLeak
*
*/
@@ -57,7 +58,6 @@
import java.rmi.registry.*;
public class CheckLeaseLeak extends UnicastRemoteObject implements LeaseLeak {
-
public CheckLeaseLeak() throws RemoteException { }
public void ping () throws RemoteException { }
@@ -87,8 +87,8 @@
try {
Registry registry =
- java.rmi.registry.LocateRegistry.
- createRegistry(TestLibrary.REGISTRY_PORT);
+ TestLibrary.createRegistryOnUnusedPort();
+ int registryPort = TestLibrary.getRegistryPort(registry);
leakServer = new CheckLeaseLeak();
registry.rebind("/LeaseLeak", leakServer);
@@ -99,7 +99,10 @@
JavaVM jvm = new JavaVM("LeaseLeakClient",
" -Djava.security.policy=" +
- TestParams.defaultPolicy, "");
+ TestParams.defaultPolicy +
+ " -Drmi.registry.port=" +
+ registryPort,
+ "");
jvm.start();
if (jvm.getVM().waitFor() == 1 ) {
--- a/jdk/test/java/rmi/transport/checkLeaseInfoLeak/LeaseLeakClient.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/transport/checkLeaseInfoLeak/LeaseLeakClient.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, 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
@@ -31,11 +31,11 @@
try {
LeaseLeak leaseLeak = null;
+ int registryPort = Integer.parseInt(System.getProperty("rmi.registry.port"));
// put a reference on a remote object.
Registry registry =
- java.rmi.registry.LocateRegistry.getRegistry(
- TestLibrary.REGISTRY_PORT);
+ java.rmi.registry.LocateRegistry.getRegistry(registryPort);
leaseLeak = (LeaseLeak) registry.lookup("/LeaseLeak");
leaseLeak.ping();
--- a/jdk/test/java/rmi/transport/checkLeaseInfoLeak/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/transport/checkLeaseInfoLeak/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -19,6 +19,7 @@
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "rmi.registry.port", "read";
permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "read";
--- a/jdk/test/java/rmi/transport/closeServerSocket/CloseServerSocket.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/transport/closeServerSocket/CloseServerSocket.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2008, 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
@@ -30,7 +30,8 @@
* the local port is released).
* @author Peter Jones
*
- * @build CloseServerSocket
+ * @library ../../testlibrary
+ * @build CloseServerSocket TestLibrary
* @run main/othervm CloseServerSocket
*/
@@ -44,8 +45,7 @@
import java.rmi.server.UnicastRemoteObject;
public class CloseServerSocket implements Remote {
-
- private static final int PORT = 2020;
+ private static final int PORT = TestLibrary.getUnusedRandomPort();
private CloseServerSocket() { }
@@ -88,7 +88,7 @@
}
private static void verifyPortFree(int port) throws IOException {
- ServerSocket ss = new ServerSocket(PORT);
+ ServerSocket ss = new ServerSocket(port);
ss.close();
System.err.println("- port " + port + " is free");
}
--- a/jdk/test/java/rmi/transport/dgcDeadLock/DGCDeadLock.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/transport/dgcDeadLock/DGCDeadLock.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, 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
@@ -32,6 +32,7 @@
* @build Test
* @build TestImpl
* @build TestImpl_Stub
+ * @build TestLibrary
* @run main/othervm/policy=security.policy/timeout=360 DGCDeadLock
*/
@@ -53,7 +54,7 @@
import java.io.*;
public class DGCDeadLock implements Runnable {
-
+ private static final int REGISTRY_PORT = TestLibrary.getUnusedRandomPort();
final static public int HOLD_TARGET_TIME = 25000;
public static int TEST_FAIL_TIME = HOLD_TARGET_TIME + 30000;
public static boolean finished = false;
@@ -75,7 +76,9 @@
TestParams.defaultPolicy +
" -Djava.rmi.dgc.leaseValue=500000" +
" -Dsun.rmi.dgc.checkInterval=" +
- (HOLD_TARGET_TIME - 5000) + "";
+ (HOLD_TARGET_TIME - 5000) +
+ " -Drmi.registry.port=" + REGISTRY_PORT +
+ "" ;
testImplVM = new JavaVM("TestImpl", options, "");
testImplVM.start();
@@ -112,7 +115,7 @@
// create a test client
Test foo = (Test) Naming.lookup("rmi://:" +
- TestLibrary.REGISTRY_PORT +
+ REGISTRY_PORT +
"/Foo");
echo = foo.echo("Hello world");
System.err.println("Test object created.");
@@ -131,7 +134,7 @@
//import "Bar"
Test bar = (Test) Naming.lookup("rmi://:" +
- TestLibrary.REGISTRY_PORT +
+ REGISTRY_PORT +
"/Bar");
/* infinite loop to show the liveness of Client,
--- a/jdk/test/java/rmi/transport/dgcDeadLock/TestImpl.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/transport/dgcDeadLock/TestImpl.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2008, 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
@@ -36,7 +36,6 @@
public class TestImpl extends UnicastRemoteObject
implements Test {
-
static Thread locker = null;
static TestImpl foo = null;
static TestImpl bar = null;
@@ -57,20 +56,21 @@
Registry registry = null;
try {
+ int registryPort = Integer.parseInt(System.getProperty("rmi.registry.port"));
registry = java.rmi.registry.LocateRegistry.
- createRegistry(TestLibrary.REGISTRY_PORT);
+ createRegistry(registryPort);
//export "Foo"
foo = new TestImpl();
Naming.rebind("rmi://:" +
- TestLibrary.REGISTRY_PORT
+ registryPort
+ "/Foo", foo);
try {
//export "Bar" after leases have been expired.
bar = new TestImpl();
Naming.rebind("rmi://localhost:" +
- TestLibrary.REGISTRY_PORT
+ registryPort
+ "/Bar", bar);
} catch (Exception e) {
throw new RemoteException(e.getMessage());
--- a/jdk/test/java/rmi/transport/handshakeFailure/HandshakeFailure.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/transport/handshakeFailure/HandshakeFailure.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 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
@@ -30,7 +30,8 @@
* java.rmi.ConnectException or ConnectIOException, not a MarshalException.
* @author Peter Jones
*
- * @build HandshakeFailure
+ * @library ../../testlibrary
+ * @build HandshakeFailure TestLibrary
* @run main/othervm HandshakeFailure
*/
@@ -44,7 +45,7 @@
public class HandshakeFailure {
- private static final int PORT = 2020;
+ private static final int PORT = TestLibrary.getUnusedRandomPort();
private static final int TIMEOUT = 10000;
public static void main(String[] args) throws Exception {
--- a/jdk/test/java/rmi/transport/handshakeTimeout/HandshakeTimeout.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/transport/handshakeTimeout/HandshakeTimeout.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 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
@@ -33,7 +33,8 @@
* this point (because no data for the invocation has yet been written).
* @author Peter Jones
*
- * @build HandshakeTimeout
+ * @library ../../testlibrary
+ * @build HandshakeTimeout TestLibrary
* @run main/othervm HandshakeTimeout
*/
@@ -46,7 +47,7 @@
public class HandshakeTimeout {
- private static final int PORT = 2020;
+ private static final int PORT = TestLibrary.getUnusedRandomPort();
private static final int TIMEOUT = 10000;
public static void main(String[] args) throws Exception {
--- a/jdk/test/java/rmi/transport/httpSocket/HttpSocketTest.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/transport/httpSocket/HttpSocketTest.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -27,7 +27,7 @@
* @author Dana Burns
*
* @library ../../testlibrary
- * @build HttpSocketTest HttpSocketTest_Stub
+ * @build HttpSocketTest HttpSocketTest_Stub TestLibrary
* @run main/othervm/policy=security.policy HttpSocketTest
*/
@@ -56,10 +56,7 @@
public class HttpSocketTest extends UnicastRemoteObject
implements MyRemoteInterface
{
-
private static final String NAME = "HttpSocketTest";
- private static final String REGNAME =
- "//:" + TestLibrary.REGISTRY_PORT + "/" + NAME;
public HttpSocketTest() throws RemoteException{}
@@ -76,21 +73,20 @@
// Set the socket factory.
System.err.println("installing socket factory");
RMISocketFactory.setSocketFactory(new RMIHttpToPortSocketFactory());
+ int registryPort = -1;
try {
-
System.err.println("Starting registry");
- registry = LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT);
-
+ registry = TestLibrary.createRegistryOnUnusedPort();
+ registryPort = TestLibrary.getRegistryPort(registry);
} catch (Exception e) {
TestLibrary.bomb(e);
}
try {
-
registry.rebind( NAME, new HttpSocketTest() );
MyRemoteInterface httpTest =
- (MyRemoteInterface)Naming.lookup( REGNAME );
+ (MyRemoteInterface)Naming.lookup("//:" + registryPort + "/" + NAME);
httpTest.setRemoteObject( new HttpSocketTest() );
Remote r = httpTest.getRemoteObject();
--- a/jdk/test/java/rmi/transport/httpSocket/security.policy Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/transport/httpSocket/security.policy Wed Jul 05 18:17:35 2017 +0200
@@ -4,6 +4,10 @@
grant {
permission java.net.SocketPermission "*:1024-", "accept,connect,listen";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.registry";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.server";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport";
permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport.proxy";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport.tcp";
permission java.lang.RuntimePermission "setFactory";
};
--- a/jdk/test/java/rmi/transport/pinClientSocketFactory/PinClientSocketFactory.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/transport/pinClientSocketFactory/PinClientSocketFactory.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2008, 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
@@ -31,6 +31,8 @@
* should become unreachable too (through the RMI implementation).
* @author Peter Jones
*
+ * @library ../../testlibrary
+ * @build TestLibrary
* @run main/othervm -Dsun.rmi.transport.connectionTimeout=2000
* PinClientSocketFactory
*/
@@ -56,7 +58,7 @@
public class PinClientSocketFactory {
- private static final int PORT = 2345;
+ private static final int PORT = TestLibrary.getUnusedRandomPort();
private static final int SESSIONS = 50;
public interface Factory extends Remote {
--- a/jdk/test/java/rmi/transport/pinLastArguments/PinLastArguments.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/transport/pinLastArguments/PinLastArguments.java Wed Jul 05 18:17:35 2017 +0200
@@ -78,10 +78,15 @@
}
impl = null;
- System.gc();
-
- if (ref.get() != null) {
- throw new Error("TEST FAILED: impl not garbage collected");
+ // Might require multiple calls to System.gc() for weak-references
+ // processing to be complete. If the weak-reference is not cleared as
+ // expected we will hang here until timed out by the test harness.
+ while (true) {
+ System.gc();
+ Thread.sleep(20);
+ if (ref.get() == null) {
+ break;
+ }
}
System.err.println("TEST PASSED");
--- a/jdk/test/java/rmi/transport/rapidExportUnexport/RapidExportUnexport.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/transport/rapidExportUnexport/RapidExportUnexport.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2008, 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
@@ -31,7 +31,8 @@
* procedure (which sleeps 10 seconds after 10 rapid failures).
* @author Peter Jones
*
- * @build RapidExportUnexport
+ * @library ../../testlibrary
+ * @build TestLibrary RapidExportUnexport
* @run main/othervm RapidExportUnexport
*/
@@ -39,9 +40,7 @@
import java.rmi.server.UnicastRemoteObject;
public class RapidExportUnexport {
-
- private static final int PORT = 2055;
-
+ private static final int PORT = TestLibrary.getUnusedRandomPort();
private static final int REPS = 100;
private static final long TIMEOUT = 60000;
--- a/jdk/test/java/rmi/transport/reuseDefaultPort/ReuseDefaultPort.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/java/rmi/transport/reuseDefaultPort/ReuseDefaultPort.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2008, 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
@@ -33,7 +33,8 @@
* continue to work because existing applications might depend on it.
* @author Peter Jones
*
- * @build ReuseDefaultPort
+ * @library ../../testlibrary
+ * @build ReuseDefaultPort TestLibrary
* @run main/othervm ReuseDefaultPort
*/
@@ -48,7 +49,7 @@
public class ReuseDefaultPort implements Remote {
- private static final int PORT = 2223;
+ private static final int PORT = TestLibrary.getUnusedRandomPort();
private ReuseDefaultPort() { }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/prefs/AddNodeChangeListener.java Wed Jul 05 18:17:35 2017 +0200
@@ -0,0 +1,94 @@
+/*
+ * 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. 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 7160252
+ * @summary Checks if events are delivered to a listener
+ * when a child node is added or removed
+ */
+
+import java.util.prefs.*;
+
+ public class AddNodeChangeListener {
+
+ private static boolean failed = false;
+ private static Preferences userRoot, N2;
+ private static NodeChangeListenerAdd ncla;
+
+ public static void main(String[] args)
+ throws BackingStoreException, InterruptedException
+ {
+ userRoot = Preferences.userRoot();
+ ncla = new NodeChangeListenerAdd();
+ userRoot.addNodeChangeListener(ncla);
+ //Should initiate a node added event
+ addNode();
+ // Should not initiate a node added event
+ addNode();
+ //Should initate a child removed event
+ removeNode();
+
+ if (failed)
+ throw new RuntimeException("Failed");
+ }
+
+ private static void addNode()
+ throws BackingStoreException, InterruptedException
+ {
+ N2 = userRoot.node("N2");
+ userRoot.flush();
+ Thread.sleep(3000);
+ if (ncla.getAddNumber() != 1)
+ failed = true;
+ }
+
+ private static void removeNode()
+ throws BackingStoreException, InterruptedException
+ {
+ N2.removeNode();
+ userRoot.flush();
+ Thread.sleep(3000);
+ if (ncla.getAddNumber() != 0)
+ failed = true;
+ }
+
+ private static class NodeChangeListenerAdd implements NodeChangeListener {
+ private int totalNode = 0;
+
+ @Override
+ public void childAdded(NodeChangeEvent evt) {
+ totalNode++;
+ }
+
+ @Override
+ public void childRemoved(NodeChangeEvent evt) {
+ totalNode--;
+ }
+
+ public int getAddNumber(){
+ return totalNode;
+ }
+ }
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/SwingUtilities/7170657/bug7170657.java Wed Jul 05 18:17:35 2017 +0200
@@ -0,0 +1,78 @@
+/*
+ * 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. 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.
+ */
+
+import java.awt.Frame;
+import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseWheelEvent;
+
+import javax.swing.SwingUtilities;
+import javax.swing.event.MenuDragMouseEvent;
+
+/**
+ * @test
+ * @bug 7170657
+ * @author Sergey Bylokhov
+ */
+public final class bug7170657 {
+
+ private static boolean FAILED;
+
+ public static void main(final String[] args) {
+ final int mask = InputEvent.META_DOWN_MASK | InputEvent.CTRL_MASK;
+
+ Frame f = new Frame();
+
+ MouseEvent mwe = new MouseWheelEvent(f, 1, 1, mask, 1, 1, 1, 1, 1, true,
+ 1, 1, 1);
+ MouseEvent mdme = new MenuDragMouseEvent(f, 1, 1, mask, 1, 1, 1, 1, 1,
+ true, null, null);
+ MouseEvent me = new MouseEvent(f, 1, 1, mask, 1, 1, 1, 1, 1, true,
+ MouseEvent.NOBUTTON);
+
+ test(f, mwe);
+ test(f, mdme);
+ test(f, me);
+
+ if (FAILED) {
+ throw new RuntimeException("Wrong mouse event");
+ }
+ }
+
+
+ private static void test(final Frame frame, final MouseEvent me) {
+ MouseEvent newme = SwingUtilities.convertMouseEvent(frame, me, frame);
+ if (me.getModifiersEx() != newme.getModifiersEx()
+ || me.getModifiers() != newme.getModifiers()) {
+ fail(me, newme);
+ }
+ }
+
+ private static void fail(final MouseEvent exp, final MouseEvent act) {
+ System.err.println("Expected: " + exp);
+ System.err.println("Actual: " + act);
+ FAILED = true;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/border/Test7022041.java Wed Jul 05 18:17:35 2017 +0200
@@ -0,0 +1,133 @@
+/*
+ * Copyright 2012 Red Hat, Inc. All Rights Reserved.
+ * 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.
+ */
+
+import java.awt.Color;
+import java.awt.Font;
+
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.TitledBorder;
+import javax.swing.UIManager;
+import javax.swing.UnsupportedLookAndFeelException;
+
+/* @test
+ * @bug 7022041
+ * @summary This test check the behaviour of getTitleFont() and getTitleColor()
+ * methods of the TitledBorder class.
+ * @author Pavel Tisnovsky
+ */
+public class Test7022041 {
+
+ public static void main(String[] args) throws Exception {
+ UIManager.LookAndFeelInfo[] installedLookAndFeels = UIManager.getInstalledLookAndFeels();
+ // try to test all installed Look and Feels
+ for (UIManager.LookAndFeelInfo lookAndFeel : installedLookAndFeels) {
+ String name = lookAndFeel.getName();
+ System.out.println("Testing " + name);
+ // Some Look and Feels work only when test is run in a GUI environment
+ // (GTK+ LAF is an example)
+ try {
+ UIManager.setLookAndFeel(lookAndFeel.getClassName());
+ checkTitleColor();
+ System.out.println(" titleColor test ok");
+ checkTitleFont();
+ System.out.println(" titleFont test ok");
+ }
+ catch (UnsupportedLookAndFeelException e) {
+ System.out.println(" Note: LookAndFeel " + name
+ + " is not supported on this configuration");
+ }
+ }
+ }
+
+ /**
+ * Check behaviour of method TitledBorder.getTitleColor()
+ */
+ private static void checkTitleColor() {
+ TitledBorder titledBorder = new TitledBorder(new EmptyBorder(1, 1, 1, 1));
+ Color defaultColor = UIManager.getLookAndFeelDefaults().getColor("TitledBorder.titleColor");
+ Color titledBorderColor = titledBorder.getTitleColor();
+
+ // check default configuration
+ if (defaultColor == null) {
+ if (titledBorderColor == null) {
+ return;
+ }
+ else {
+ throw new RuntimeException("TitledBorder default color should be null");
+ }
+ }
+ if (!defaultColor.equals(titledBorderColor)) {
+ throw new RuntimeException("L&F default color " + defaultColor.toString()
+ + " differs from TitledBorder color " + titledBorderColor.toString());
+ }
+
+ // title color is explicitly specified
+ Color color = Color.green;
+ titledBorder.setTitleColor(color);
+ if (!color.equals(titledBorder.getTitleColor())) {
+ throw new RuntimeException("TitledBorder color should be " + color.toString());
+ }
+
+ // title color is unspecified
+ titledBorder.setTitleColor(null);
+ if (!defaultColor.equals(titledBorder.getTitleColor())) {
+ throw new RuntimeException("L&F default color " + defaultColor.toString()
+ + " differs from TitledBorder color " + titledBorderColor.toString());
+ }
+ }
+
+ /**
+ * Check behaviour of method TitledBorder.getTitleFont()
+ */
+ private static void checkTitleFont() {
+ TitledBorder titledBorder = new TitledBorder(new EmptyBorder(1, 1, 1, 1));
+ Font defaultFont = UIManager.getLookAndFeelDefaults().getFont("TitledBorder.font");
+ Font titledBorderFont = titledBorder.getTitleFont();
+
+ // check default configuration
+ if (defaultFont == null) {
+ if (titledBorderFont == null) {
+ return;
+ }
+ else {
+ throw new RuntimeException("TitledBorder default font should be null");
+ }
+ }
+ if (!defaultFont.equals(titledBorderFont)) {
+ throw new RuntimeException("L&F default font " + defaultFont.toString()
+ + " differs from TitledBorder font " + titledBorderFont.toString());
+ }
+
+ // title font is explicitly specified
+ Font font = new Font("Dialog", Font.PLAIN, 10);
+ titledBorder.setTitleFont(font);
+ if (!font.equals(titledBorder.getTitleFont())) {
+ throw new RuntimeException("TitledBorder font should be " + font.toString());
+ }
+
+ // title Font is unspecified
+ titledBorder.setTitleFont(null);
+ if (!defaultFont.equals(titledBorder.getTitleFont())) {
+ throw new RuntimeException("L&F default font " + defaultFont.toString()
+ + " differs from TitledBorder font " + titledBorderFont.toString());
+ }
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/java2d/OpenGL/bug7181438.java Wed Jul 05 18:17:35 2017 +0200
@@ -0,0 +1,83 @@
+/*
+ * 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.
+ */
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsEnvironment;
+import java.awt.Transparency;
+import java.awt.image.BufferedImage;
+import java.awt.image.VolatileImage;
+
+/**
+ * @test
+ * @bug 7181438
+ * @summary Verifies that we get correct alpha, when we draw opaque
+ * BufferedImage to non opaque VolatileImage via intermediate opaque texture.
+ * @author Sergey Bylokhov
+ * @run main/othervm -Dsun.java2d.accthreshold=0 bug7181438
+ */
+public final class bug7181438 {
+
+ private static final int SIZE = 500;
+
+ public static void main(final String[] args) {
+
+ final BufferedImage bi = createBufferedImage();
+ final VolatileImage vi = createVolatileImage();
+ final Graphics s2dVi = vi.getGraphics();
+
+ //sw->texture->surface blit
+ s2dVi.drawImage(bi, 0, 0, null);
+
+ final BufferedImage results = vi.getSnapshot();
+ for (int i = 0; i < SIZE; ++i) {
+ for (int j = 0; j < SIZE; ++j) {
+ //Image should be opaque: (black color and alpha = 255)
+ if (results.getRGB(i, j) != 0xFF000000) {
+ throw new RuntimeException("Failed: Wrong alpha");
+ }
+ }
+ }
+ System.out.println("Passed");
+ }
+
+
+ private static VolatileImage createVolatileImage() {
+ final GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
+ final GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration();
+ return gc.createCompatibleVolatileImage(SIZE, SIZE,
+ Transparency.TRANSLUCENT);
+ }
+
+ private static BufferedImage createBufferedImage() {
+ final BufferedImage bi = new BufferedImage(SIZE, SIZE,
+ BufferedImage.TYPE_INT_RGB);
+ final Graphics bg = bi.getGraphics();
+ //Black color and alpha = 0
+ bg.setColor(new Color(0, 0, 0, 0));
+ bg.fillRect(0, 0, SIZE, SIZE);
+ bg.dispose();
+ return bi;
+ }
+}
--- a/jdk/test/sun/nio/cs/StrCodingBenchmark.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/sun/nio/cs/StrCodingBenchmark.java Wed Jul 05 18:17:35 2017 +0200
@@ -75,7 +75,7 @@
return nanoss;
}
- public static void time(Job ... jobs) throws Throwable {
+ public static long[] time(Job ... jobs) throws Throwable {
long[] warmup = time0(jobs); // Warm up run
long[] nanoss = time0(jobs); // Real timing run
@@ -110,6 +110,7 @@
// Print out absolute and relative times, calibrated against first job
for (int i = 0; i < jobs.length; i++)
System.out.printf(format, jobs[i].name(), milliss[i], ratios[i]);
+ return milliss;
}
public static Job[] filter(Pattern filter, Job[] jobs) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/nio/cs/StrCodingBenchmarkDB.java Wed Jul 05 18:17:35 2017 +0200
@@ -0,0 +1,139 @@
+/*
+ * 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.
+ */
+
+import java.util.*;
+import java.nio.*;
+import java.nio.charset.*;
+import java.util.concurrent.*;
+import java.util.regex.Pattern;
+
+public class StrCodingBenchmarkDB extends StrCodingBenchmark {
+
+
+ public static void main(String[] args) throws Throwable {
+ final int itrs = Integer.getInteger("iterations", 100000);
+ //final int itrs = Integer.getInteger("iterations", 12);
+ final int size = Integer.getInteger("size", 2048);
+ final int subsize = Integer.getInteger("subsize", 128);
+ final int maxchar = Integer.getInteger("maxchar", 128);
+ final String regex = System.getProperty("filter");
+ final Pattern filter = (regex == null) ? null : Pattern.compile(regex);
+ final boolean useSecurityManager = Boolean.getBoolean("SecurityManager");
+ if (useSecurityManager)
+ System.setSecurityManager(new PermissiveSecurityManger());
+ final Random rnd = new Random();
+
+ String[] csns = new String[] {
+ "Big5",
+ "Johab",
+ "EUC_CN",
+ "EUC_KR",
+ "MS932",
+ "MS936",
+ "MS949",
+ "MS950",
+ "GBK",
+
+ "Big5_HKSCS",
+ "Big5_HKSCS_2001",
+ "Big5_Solaris",
+ "MS950_HKSCS",
+ "MS950_HKSCS_XP",
+ "IBM1364",
+ "IBM1381",
+ "IBM1383",
+ "IBM930",
+ "IBM933",
+ "IBM935",
+ "IBM937",
+ "IBM939",
+ "IBM942",
+ "IBM943",
+ "IBM948",
+ "IBM949",
+ "IBM950",
+ "IBM970",
+ };
+
+ ArrayList<long[]> sum = new ArrayList<>();
+
+ for (final String csn : csns) {
+ final Charset cs = Charset.forName(csn);
+ List<Integer> cps = new ArrayList<>(0x4000);
+ int off = 0;
+ int cp = 0;
+ int n = 0;
+ CharsetEncoder enc = cs.newEncoder();
+ while (cp < 0x10000 && n < cps.size()) {
+ if (enc.canEncode((char)cp)) {
+ cps.add(cp);
+ n++;
+ }
+ cp++;
+ }
+ Collections.shuffle(cps);
+ char[] ca = new char[cps.size()];
+ for (int i = 0; i < cps.size(); i++)
+ ca[i] = (char)(int)cps.get(i);
+
+
+ System.out.printf("%n--------%s---------%n", csn);
+ for (int sz = 8; sz <= 2048; sz *= 2) {
+ System.out.printf(" [len=%d]%n", sz);
+
+ final char[] chars = Arrays.copyOf(ca, sz);
+ final String str = new String(chars);
+ final byte[] bs = str.getBytes(cs);
+
+ Job[] jobs = {
+
+ new Job("String decode: csn") {
+ public void work() throws Throwable {
+ for (int i = 0; i < itrs; i++)
+ new String(bs, csn);
+ }},
+
+ new Job("String decode: cs") {
+ public void work() throws Throwable {
+ for (int i = 0; i < itrs; i++)
+ new String(bs, cs);
+ }},
+
+ new Job("String encode: csn") {
+ public void work() throws Throwable {
+ for (int i = 0; i < itrs; i++)
+ str.getBytes(csn);
+ }},
+
+ new Job("String encode: cs") {
+ public void work() throws Throwable {
+ for (int i = 0; i < itrs; i++)
+ str.getBytes(cs);
+ }},
+ };
+ sum.add(time(jobs));
+
+ }
+ }
+ }
+}
--- a/jdk/test/sun/nio/cs/TestStringCoding.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/sun/nio/cs/TestStringCoding.java Wed Jul 05 18:17:35 2017 +0200
@@ -24,7 +24,7 @@
*/
/* @test
- @bug 6636323 6636319 7040220 7096080
+ @bug 6636323 6636319 7040220 7096080 7183053
@summary Test if StringCoding and NIO result have the same de/encoding result
* @run main/othervm/timeout=2000 TestStringCoding
*/
@@ -70,11 +70,62 @@
}
test(cs, Arrays.copyOf(bmpCA, clen), Arrays.copyOf(sbBA, blen));
}
+
+ testMixed(cs);
System.out.println("done!");
}
}
}
+ static void testMixed(Charset cs) throws Throwable {
+ CharsetDecoder dec = cs.newDecoder()
+ .onMalformedInput(CodingErrorAction.REPLACE)
+ .onUnmappableCharacter(CodingErrorAction.REPLACE);
+ CharsetEncoder enc = cs.newEncoder()
+ .onMalformedInput(CodingErrorAction.REPLACE)
+ .onUnmappableCharacter(CodingErrorAction.REPLACE);
+ List<Integer> cps = new ArrayList<>(0x10000);
+ int off = 0;
+ int cp = 0;
+ while (cp < 0x10000) {
+ if (enc.canEncode((char)cp)) {
+ cps.add(cp);
+ }
+ cp++;
+ }
+ Collections.shuffle(cps);
+ char[] bmpCA = new char[cps.size()];
+ for (int i = 0; i < cps.size(); i++)
+ bmpCA[i] = (char)(int)cps.get(i);
+ String bmpStr = new String(bmpCA);
+ //getBytes(csn);
+ byte[] bmpBA = bmpStr.getBytes(cs.name());
+ ByteBuffer bf = enc.reset().encode(CharBuffer.wrap(bmpCA));
+ byte[] baNIO = new byte[bf.limit()];
+ bf.get(baNIO, 0, baNIO.length);
+ if (!Arrays.equals(bmpBA, baNIO)) {
+ throw new RuntimeException("getBytes(csn) failed -> " + cs.name());
+ }
+
+ //getBytes(cs);
+ bmpBA = bmpStr.getBytes(cs);
+ if (!Arrays.equals(bmpBA, baNIO))
+ throw new RuntimeException("getBytes(cs) failed -> " + cs.name());
+
+ //new String(csn);
+ String strSC = new String(bmpBA, cs.name());
+ String strNIO = dec.reset().decode(ByteBuffer.wrap(bmpBA)).toString();
+ if(!strNIO.equals(strSC)) {
+ throw new RuntimeException("new String(csn) failed -> " + cs.name());
+ }
+
+ //new String(cs);
+ strSC = new String(bmpBA, cs);
+ if (!strNIO.equals(strSC))
+ throw new RuntimeException("new String(cs) failed -> " + cs.name());
+
+ }
+
static void test(Charset cs, char[] bmpCA, byte[] sbBA) throws Throwable {
String bmpStr = new String(bmpCA);
CharsetDecoder dec = cs.newDecoder()
@@ -100,6 +151,7 @@
//new String(csn);
String strSC = new String(sbBA, cs.name());
String strNIO = dec.reset().decode(ByteBuffer.wrap(sbBA)).toString();
+
if(!strNIO.equals(strSC))
throw new RuntimeException("new String(csn) failed -> " + cs.name());
@@ -112,7 +164,7 @@
if (enc instanceof sun.nio.cs.ArrayEncoder &&
cs.contains(Charset.forName("ASCII"))) {
if (cs.name().equals("UTF-8") || // utf8 handles surrogates
- cs.name().equals("CESU-8")) // utf8 handles surrogates
+ cs.name().equals("CESU-8")) // utf8 handles surrogates
return;
enc.replaceWith(new byte[] { (byte)'A'});
sun.nio.cs.ArrayEncoder cae = (sun.nio.cs.ArrayEncoder)enc;
@@ -137,12 +189,16 @@
cs.name())))
throw new RuntimeException("encode3(surrogates) failed -> "
+ cs.name());
+ /* sun.nio.cs.ArrayDeEncoder works on the assumption that the
+ invoker (StringCoder) allocates enough output buf, utf8
+ and double-byte coder does not check the output buffer limit.
ba = new byte[str.length() - 1];
n = cae.encode(str.toCharArray(), 0, str.length(), ba);
- if (n != 7 || !"abABABc".equals(new String(ba, 0, n,
- cs.name())))
+ if (n != 7 || !"abABABc".equals(new String(ba, 0, n, cs.name()))) {
throw new RuntimeException("encode4(surrogates) failed -> "
+ cs.name());
+ }
+ */
}
}
--- a/jdk/test/sun/rmi/rmic/newrmic/equivalence/AppleUserImpl.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/sun/rmi/rmic/newrmic/equivalence/AppleUserImpl.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 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
@@ -25,6 +25,7 @@
import java.rmi.Naming;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
import java.util.Random;
import java.util.ArrayList;
import java.util.Date;
@@ -249,11 +250,12 @@
}
synchronized (user) {
+ int port = -1;
// create new registry and bind new AppleUserImpl in registry
try {
- LocateRegistry.createRegistry(1099); //TestLibrary.REGISTRY_PORT);
- Naming.rebind("rmi://localhost:1099/AppleUser",user);
- //TestLibrary.REGISTRY_PORT + "/AppleUser", user);
+ Registry registry = TestLibrary.createRegistryOnUnusedPort();
+ port = TestLibrary.getRegistryPort(registry);
+ Naming.rebind("rmi://localhost:" + port + "/AppleUser",user);
} catch (RemoteException e) {
//TestLibrary.bomb("Failed to bind AppleUser", e);
} catch (java.net.MalformedURLException e) {
@@ -263,10 +265,9 @@
// start the other server if available
try {
Class app = Class.forName("ApplicationServer");
- server = new Thread((Runnable) app.newInstance());
- logger.log(Level.INFO, "Starting application server " +
- "in same process");
- server.start();
+ java.lang.reflect.Constructor appConstructor =
+ app.getDeclaredConstructor(new Class[] {Integer.TYPE});
+ server = new Thread((Runnable) appConstructor.newInstance(port));
} catch (ClassNotFoundException e) {
// assume the other server is running in a separate process
logger.log(Level.INFO, "Application server must be " +
--- a/jdk/test/sun/rmi/rmic/newrmic/equivalence/run.sh Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/sun/rmi/rmic/newrmic/equivalence/run.sh Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2003, 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
@@ -26,6 +26,8 @@
# @summary This test verifies that the new implementation of rmic
# generates equivalent classes as the old implementation, for a set
# of sample input classes.
+# @library ../../../../../java/rmi/testlibrary
+# @build TestLibrary
# @author Peter Jones
#
# @build AgentServerImpl
--- a/jdk/test/sun/rmi/runtime/Log/6409194/NoConsoleOutput.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/sun/rmi/runtime/Log/6409194/NoConsoleOutput.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 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
@@ -90,7 +90,6 @@
}
public static class DoRMIStuff {
- private static final int PORT = 2020;
private interface Foo extends Remote {
Object echo(Object obj) throws RemoteException;
}
@@ -99,8 +98,9 @@
public Object echo(Object obj) { return obj; }
}
public static void main(String[] args) throws Exception {
- LocateRegistry.createRegistry(PORT);
- Registry reg = LocateRegistry.getRegistry("", PORT);
+ Registry registry = TestLibrary.createRegistryOnUnusedPort();
+ int registryPort = TestLibrary.getRegistryPort(registry);
+ Registry reg = LocateRegistry.getRegistry("", registryPort);
FooImpl fooimpl = new FooImpl();
UnicastRemoteObject.exportObject(fooimpl, 0);
reg.rebind("foo", fooimpl);
--- a/jdk/test/sun/rmi/runtime/Log/checkLogging/CheckLogging.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/sun/rmi/runtime/Log/checkLogging/CheckLogging.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 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
@@ -77,8 +77,9 @@
* logger output is non-null.
*/
public class CheckLogging {
- private static final String LOCATION =
- "rmi://localhost:" + TestLibrary.REGISTRY_PORT + "/";
+ private static int REGISTRY_PORT = -1;
+ private static String LOCATION;
+
private static final ByteArrayOutputStream clientCallOut =
new ByteArrayOutputStream();
@@ -100,7 +101,9 @@
private static Registry registry;
static {
try {
- registry = LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT);
+ registry = TestLibrary.createRegistryOnUnusedPort();
+ REGISTRY_PORT = TestLibrary.getRegistryPort(registry);
+ LOCATION = "rmi://localhost:" + REGISTRY_PORT + "/";
} catch (Exception e) {
TestLibrary.bomb("could not create registry");
}
--- a/jdk/test/sun/rmi/transport/proxy/EagerHttpFallback.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/sun/rmi/transport/proxy/EagerHttpFallback.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 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
@@ -25,6 +25,8 @@
* @bug 4290727
* @summary Verify that ConnectException will trigger HTTP fallback if
* sun.rmi.transport.proxy.eagerHttpFallback system property is set.
+ * @library ../../../../java/rmi/testlibrary
+ * @build TestLibrary
* @run main/othervm EagerHttpFallback
*/
@@ -33,8 +35,8 @@
public class EagerHttpFallback {
- static final int INITIAL_PORT = 7070;
- static final int FALLBACK_PORT = 7071;
+ static final int INITIAL_PORT = TestLibrary.getUnusedRandomPort();
+ static final int FALLBACK_PORT = TestLibrary.getUnusedRandomPort();
public static void main(String[] args) throws Exception {
System.setProperty("http.proxyHost", "127.0.0.1");
--- a/jdk/test/sun/rmi/transport/tcp/DeadCachedConnection.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/sun/rmi/transport/tcp/DeadCachedConnection.java Wed Jul 05 18:17:35 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2004, 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
@@ -58,7 +58,7 @@
import java.rmi.server.*;
public class DeadCachedConnection {
- static public final int regport = 17340;
+ static public final int regport = TestLibrary.getUnusedRandomPort();
static public void main(String[] argv)
throws Exception {
--- a/jdk/test/sun/security/krb5/ServiceNameClone.java Tue Jul 24 11:05:52 2012 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-/*
- * 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 6856069
- * @summary PrincipalName.clone() does not invoke super.clone()
- */
-
-import sun.security.krb5.ServiceName;
-
-public class ServiceNameClone {
- public static void main(String[] args) throws Exception {
- ServiceName sn = new ServiceName("me@HERE");
- if (sn.clone().getClass() != ServiceName.class) {
- throw new Exception("ServiceName's clone is not a ServiceName");
- }
- if (!sn.clone().equals(sn)) {
- throw new Exception("ServiceName's clone changed");
- }
- }
-}
--- a/jdk/test/sun/security/krb5/auto/KDC.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/sun/security/krb5/auto/KDC.java Wed Jul 05 18:17:35 2017 +0200
@@ -606,9 +606,8 @@
TGSReq tgsReq = new TGSReq(in);
PrincipalName service = tgsReq.reqBody.sname;
if (options.containsKey(KDC.Option.RESP_NT)) {
- service = new PrincipalName(service.getNameStrings(),
- (int)options.get(KDC.Option.RESP_NT));
- service.setRealm(service.getRealm());
+ service = new PrincipalName((int)options.get(KDC.Option.RESP_NT),
+ service.getNameStrings(), service.getRealm());
}
try {
System.out.println(realm + "> " + tgsReq.reqBody.cname +
@@ -632,7 +631,6 @@
EncryptedData ed = apReq.authenticator;
tkt = apReq.ticket;
int te = tkt.encPart.getEType();
- tkt.sname.setRealm(tkt.realm);
EncryptionKey kkey = keyForUser(tkt.sname, te, true);
byte[] bb = tkt.encPart.decrypt(kkey, KeyUsage.KU_TICKET);
DerInputStream derIn = new DerInputStream(bb);
@@ -693,7 +691,6 @@
EncTicketPart enc = new EncTicketPart(
tFlags,
key,
- etp.crealm,
etp.cname,
new TransitedEncoding(1, new byte[0]), // TODO
new KerberosTime(new Date()),
@@ -709,7 +706,6 @@
throw new KrbException(Krb5.KDC_ERR_SUMTYPE_NOSUPP); // TODO
}
Ticket t = new Ticket(
- body.crealm,
service,
new EncryptedData(skey, enc.asn1Encode(), KeyUsage.KU_TICKET)
);
@@ -725,7 +721,6 @@
new KerberosTime(new Date()),
body.from,
till, body.rtime,
- body.crealm,
service,
body.addresses != null // always set caddr
? body.addresses
@@ -734,7 +729,6 @@
);
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);
@@ -756,8 +750,8 @@
new KerberosTime(new Date()),
0,
ke.returnCode(),
- body.crealm, body.cname,
- new Realm(getRealm()), service,
+ body.cname,
+ service,
KrbException.errorMessage(ke.returnCode()),
null);
}
@@ -780,7 +774,6 @@
if (options.containsKey(KDC.Option.RESP_NT)) {
service = new PrincipalName(service.getNameStrings(),
(int)options.get(KDC.Option.RESP_NT));
- service.setRealm(service.getRealm());
}
try {
System.out.println(realm + "> " + asReq.reqBody.cname +
@@ -788,7 +781,6 @@
service);
KDCReqBody body = asReq.reqBody;
- body.cname.setRealm(getRealm());
eTypes = KDCReqBodyDotEType(body);
int eType = eTypes[0];
@@ -971,7 +963,6 @@
EncTicketPart enc = new EncTicketPart(
tFlags,
key,
- body.crealm,
body.cname,
new TransitedEncoding(1, new byte[0]),
new KerberosTime(new Date()),
@@ -980,7 +971,6 @@
body.addresses,
null);
Ticket t = new Ticket(
- body.crealm,
service,
new EncryptedData(skey, enc.asn1Encode(), KeyUsage.KU_TICKET)
);
@@ -996,14 +986,12 @@
new KerberosTime(new Date()),
body.from,
till, body.rtime,
- body.crealm,
service,
body.addresses
);
EncryptedData edata = new EncryptedData(ckey, enc_part.asn1Encode(), KeyUsage.KU_ENC_AS_REP_PART);
ASRep asRep = new ASRep(
outPAs.toArray(new PAData[outPAs.size()]),
- body.crealm,
body.cname,
t,
edata);
@@ -1024,7 +1012,6 @@
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) {
@@ -1059,8 +1046,8 @@
new KerberosTime(new Date()),
0,
ke.returnCode(),
- body.crealm, body.cname,
- new Realm(getRealm()), service,
+ body.cname,
+ service,
KrbException.errorMessage(ke.returnCode()),
eData);
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/krb5/name/Constructors.java Wed Jul 05 18:17:35 2017 +0200
@@ -0,0 +1,135 @@
+/*
+ * 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 6966259
+ * @summary Make PrincipalName and Realm immutable
+ * @run main/othervm Constructors
+ */
+
+import java.util.Arrays;
+import sun.security.krb5.*;
+
+public class Constructors {
+ public static void main(String[] args) throws Exception {
+
+ int type;
+ boolean testNoDefaultDomain;
+
+ // Part 1: on format
+
+ // Good ones
+ type = PrincipalName.KRB_NT_UNKNOWN;
+ checkName("a", type, "R", "R", "a");
+ checkName("a@R2", type, "R", "R", "a");
+ checkName("a/b", type, "R", "R", "a", "b");
+ checkName("a/b@R2", type, "R", "R", "a", "b");
+ checkName("a/b/c", type, "R", "R", "a", "b", "c");
+ checkName("a/b/c@R2", type, "R", "R", "a", "b", "c");
+ // Weird ones
+ checkName("a\\/b", type, "R", "R", "a/b");
+ checkName("a\\/b\\/c", type, "R", "R", "a/b/c");
+ checkName("a\\/b\\@R2", type, "R", "R", "a/b@R2");
+ // Bad ones
+ checkName("a", type, "", null);
+ checkName("a/", type, "R", null);
+ checkName("/a", type, "R", null);
+ checkName("a//b", type, "R", null);
+ checkName("a@", type, null, null);
+ type = PrincipalName.KRB_NT_SRV_HST;
+
+ // Part 2: on realm choices
+
+ // When there is no default realm
+ System.setProperty("java.security.krb5.conf",
+ System.getProperty("test.src", ".") + "/empty.conf");
+ Config.refresh();
+
+ // A Windows client login to AD always has a default realm
+ try {
+ Realm r = Realm.getDefault();
+ System.out.println("testNoDefaultDomain = false. Realm is " + r);
+ testNoDefaultDomain = false;
+ } catch (RealmException re) {
+ // Great. This is what we expected
+ testNoDefaultDomain = true;
+ }
+
+ if (testNoDefaultDomain) {
+ type = PrincipalName.KRB_NT_UNKNOWN;
+ checkName("a", type, "R1", "R1", "a"); // arg
+ checkName("a@R1", type, null, "R1", "a"); // or r in name
+ checkName("a@R2", type, "R1", "R1", "a"); // arg over r
+ checkName("a", type, null, null); // fail if none
+ checkName("a/b@R1", type, null, "R1", "a", "b");
+ type = PrincipalName.KRB_NT_SRV_HST;
+ // Let's pray "b.h" won't be canonicalized
+ checkName("a/b.h", type, "R1", "R1", "a", "b.h"); // arg
+ checkName("a/b.h@R1", type, null, "R1", "a", "b.h"); // or r in name
+ checkName("a/b.h@R1", type, "R2", "R2", "a", "b.h"); // arg over r
+ checkName("a/b.h", type, null, null); // fail if none
+ }
+
+ // When there is default realm
+ System.setProperty("java.security.krb5.conf",
+ System.getProperty("test.src", ".") + "/krb5.conf");
+ Config.refresh();
+
+ type = PrincipalName.KRB_NT_UNKNOWN;
+ checkName("a", type, "R1", "R1", "a"); // arg
+ checkName("a@R1", type, null, "R1", "a"); // or r in name
+ checkName("a@R2", type, "R1", "R1", "a"); // arg over r
+ checkName("a", type, null, "R", "a"); // default
+ checkName("a/b", type, null, "R", "a", "b");
+ type = PrincipalName.KRB_NT_SRV_HST;
+ checkName("a/b.h3", type, "R1", "R1", "a", "b.h3"); // arg
+ checkName("a/b.h@R1", type, null, "R1", "a", "b.h"); // or r in name
+ checkName("a/b.h3@R2", type, "R1", "R1", "a", "b.h3"); // arg over r
+ checkName("a/b.h2", type, "R1", "R1", "a", "b.h2"); // arg over map
+ checkName("a/b.h2@R1", type, null, "R1", "a", "b.h2"); // r over map
+ checkName("a/b.h2", type, null, "R2", "a", "b.h2"); // map
+ checkName("a/b.h", type, null, "R", "a", "b.h"); // default
+ }
+
+ // Check if the creation matches the expected output.
+ // Note: realm == null means creation failure
+ static void checkName(String n, int t, String s,
+ String realm, String... parts)
+ throws Exception {
+ PrincipalName pn = null;
+ try {
+ pn = new PrincipalName(n, t, s);
+ } catch (Exception e) {
+ if (realm == null) {
+ return; // This is expected
+ } else {
+ throw e;
+ }
+ }
+ if (!pn.getRealmAsString().equals(realm)
+ || !Arrays.equals(pn.getNameStrings(), parts)) {
+ throw new Exception(pn.toString() + " vs "
+ + Arrays.toString(parts) + "@" + realm);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/krb5/name/empty.conf Wed Jul 05 18:17:35 2017 +0200
@@ -0,0 +1,2 @@
+[libdefaults]
+dns_fallback = false
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/krb5/name/krb5.conf Wed Jul 05 18:17:35 2017 +0200
@@ -0,0 +1,10 @@
+[libdefaults]
+default_realm = R
+
+[realms]
+R = {
+ kdc = kdc
+}
+
+[domain_realm]
+.h2 = R2
--- a/jdk/test/sun/security/mscapi/ShortRSAKey1024.sh Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/sun/security/mscapi/ShortRSAKey1024.sh Wed Jul 05 18:17:35 2017 +0200
@@ -27,7 +27,9 @@
# @test
# @bug 7106773
# @summary 512 bits RSA key cannot work with SHA384 and SHA512
-# @run shell ShortRSAKey1024.sh
+# @run shell ShortRSAKey1024.sh 1024
+# @run shell ShortRSAKey1024.sh 768
+# @run shell ShortRSAKey1024.sh 512
# set a few environment variables so that the shell-script can run stand-alone
# in the source directory
@@ -55,6 +57,8 @@
;;
esac
+BITS=$1
+
case "$OS" in
Windows* | CYGWIN* )
@@ -63,9 +67,10 @@
-genkeypair \
-storetype Windows-My \
-keyalg RSA \
- -alias 7106773.1024 \
- -keysize 1024 \
+ -alias 7106773.$BITS \
+ -keysize $BITS \
-dname "cn=localhost,c=US" \
+ -debug \
-noprompt
if [ "$?" -ne "0" ]; then
@@ -77,7 +82,7 @@
echo "Running the test..."
${TESTJAVA}${FS}bin${FS}javac -d . \
${TESTSRC}${FS}ShortRSAKeyWithinTLS.java
- ${TESTJAVA}${FS}bin${FS}java ShortRSAKeyWithinTLS 7106773.1024 1024 \
+ ${TESTJAVA}${FS}bin${FS}java ShortRSAKeyWithinTLS 7106773.$BITS $BITS \
TLSv1.2 TLS_DHE_RSA_WITH_AES_128_CBC_SHA
rc=$?
@@ -87,7 +92,8 @@
${TESTJAVA}${FS}bin${FS}keytool \
-delete \
-storetype Windows-My \
- -alias 7106773.1024
+ -debug \
+ -alias 7106773.$BITS
echo "Done".
exit $rc
--- a/jdk/test/sun/security/mscapi/ShortRSAKey512.sh Tue Jul 24 11:05:52 2012 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,101 +0,0 @@
-#!/bin/sh
-
-#
-# 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 7106773
-# @summary 512 bits RSA key cannot work with SHA384 and SHA512
-# @run shell ShortRSAKey512.sh
-
-# set a few environment variables so that the shell-script can run stand-alone
-# in the source directory
-if [ "${TESTSRC}" = "" ] ; then
- TESTSRC="."
-fi
-
-if [ "${TESTCLASSES}" = "" ] ; then
- TESTCLASSES="."
-fi
-
-if [ "${TESTJAVA}" = "" ] ; then
- echo "TESTJAVA not set. Test cannot execute."
- echo "FAILED!!!"
- exit 1
-fi
-
-OS=`uname -s`
-case "$OS" in
- SunOS | Linux | Darwin | CYGWIN* )
- FS="/"
- ;;
- Windows_* )
- FS="\\"
- ;;
-esac
-
-case "$OS" in
- Windows* | CYGWIN* )
-
- echo "Creating a temporary RSA keypair in the Windows-My store..."
- ${TESTJAVA}${FS}bin${FS}keytool \
- -genkeypair \
- -storetype Windows-My \
- -keyalg RSA \
- -alias 7106773.512 \
- -keysize 512 \
- -dname "cn=localhost,c=US" \
- -noprompt
-
- if [ "$?" -ne "0" ]; then
- echo "Unable to generate key pair in Windows-My keystore"
- exit 1
- fi
-
- echo
- echo "Running the test..."
- ${TESTJAVA}${FS}bin${FS}javac -d . \
- ${TESTSRC}${FS}ShortRSAKeyWithinTLS.java
- ${TESTJAVA}${FS}bin${FS}java ShortRSAKeyWithinTLS 7106773.512 512 \
- TLSv1.2 TLS_DHE_RSA_WITH_AES_128_CBC_SHA
-
-
- rc=$?
-
- echo
- echo "Removing the temporary RSA keypair from the Windows-My store..."
- ${TESTJAVA}${FS}bin${FS}keytool \
- -delete \
- -storetype Windows-My \
- -alias 7106773.512
-
- echo "Done".
- exit $rc
- ;;
-
- * )
- echo "This test is not intended for '$OS' - passing test"
- exit 0
- ;;
-esac
--- a/jdk/test/sun/security/mscapi/ShortRSAKey768.sh Tue Jul 24 11:05:52 2012 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-#!/bin/sh
-
-#
-# 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 7106773
-# @summary 512 bits RSA key cannot work with SHA384 and SHA512
-# @run shell ShortRSAKey768.sh
-
-# set a few environment variables so that the shell-script can run stand-alone
-# in the source directory
-if [ "${TESTSRC}" = "" ] ; then
- TESTSRC="."
-fi
-
-if [ "${TESTCLASSES}" = "" ] ; then
- TESTCLASSES="."
-fi
-
-if [ "${TESTJAVA}" = "" ] ; then
- echo "TESTJAVA not set. Test cannot execute."
- echo "FAILED!!!"
- exit 1
-fi
-
-OS=`uname -s`
-case "$OS" in
- SunOS | Linux | Darwin | CYGWIN* )
- FS="/"
- ;;
- Windows_* )
- FS="\\"
- ;;
-esac
-
-case "$OS" in
- Windows* | CYGWIN* )
-
- echo "Creating a temporary RSA keypair in the Windows-My store..."
- ${TESTJAVA}${FS}bin${FS}keytool \
- -genkeypair \
- -storetype Windows-My \
- -keyalg RSA \
- -alias 7106773.768 \
- -keysize 768 \
- -dname "cn=localhost,c=US" \
- -noprompt
-
- if [ "$?" -ne "0" ]; then
- echo "Unable to generate key pair in Windows-My keystore"
- exit 1
- fi
-
- echo
- echo "Running the test..."
- ${TESTJAVA}${FS}bin${FS}javac -d . \
- ${TESTSRC}${FS}ShortRSAKeyWithinTLS.java
- ${TESTJAVA}${FS}bin${FS}java ShortRSAKeyWithinTLS 7106773.768 768 \
- TLSv1.2 TLS_DHE_RSA_WITH_AES_128_CBC_SHA
-
- rc=$?
-
- echo
- echo "Removing the temporary RSA keypair from the Windows-My store..."
- ${TESTJAVA}${FS}bin${FS}keytool \
- -delete \
- -storetype Windows-My \
- -alias 7106773.768
-
- echo "Done".
- exit $rc
- ;;
-
- * )
- echo "This test is not intended for '$OS' - passing test"
- exit 0
- ;;
-esac
--- a/jdk/test/sun/security/pkcs11/PKCS11Test.java Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/sun/security/pkcs11/PKCS11Test.java Wed Jul 05 18:17:35 2017 +0200
@@ -245,6 +245,10 @@
osMap.put("SunOS-amd64-64", "/usr/lib/mps/64/");
osMap.put("Linux-i386-32", "/usr/lib/");
osMap.put("Linux-amd64-64", "/usr/lib64/");
+ osMap.put("Windows-x86-32",
+ PKCS11_BASE + "/nss/lib/windows-i586/".replace('/', SEP));
+ osMap.put("Windows-amd64-64",
+ PKCS11_BASE + "/nss/lib/windows-amd64/".replace('/', SEP));
}
private final static char[] hexDigits = "0123456789abcdef".toCharArray();
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/freebl3.chk has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/freebl3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libnspr4.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libnspr4.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplc4.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplc4.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplds4.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplds4.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nss3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nss3.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssckbi.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssdbm3.chk has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssdbm3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssutil3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssutil3.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/softokn3.chk has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/softokn3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/sqlite3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/ssl3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/ssl3.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/freebl3.chk has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/freebl3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libnspr4.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libnspr4.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplc4.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplc4.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplds4.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplds4.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nss3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nss3.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssckbi.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssdbm3.chk has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssdbm3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssutil3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssutil3.lib has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/softokn3.chk has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/softokn3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/sqlite3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/ssl3.dll has changed
Binary file jdk/test/sun/security/pkcs11/nss/lib/windows-i586/ssl3.lib has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/pkcs11/nss/src/MD5SUMS Wed Jul 05 18:17:35 2017 +0200
@@ -0,0 +1,1 @@
+1390c8a35c667e05e542 nss-3.13.1.tar.gz
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/pkcs11/nss/src/SHA1SUMS Wed Jul 05 18:17:35 2017 +0200
@@ -0,0 +1,1 @@
+d8e7ee9f9f1e0bfa2ea8b72d25727634fea130a6 nss-3.13.1.tar.gz
Binary file jdk/test/sun/security/pkcs11/nss/src/nss-3.13.1.tar.gz has changed
--- a/jdk/test/sun/security/util/Oid/S11N.sh Tue Jul 24 11:05:52 2012 -0700
+++ b/jdk/test/sun/security/util/Oid/S11N.sh Wed Jul 05 18:17:35 2017 +0200
@@ -71,7 +71,7 @@
i[3-6]86 )
PF="linux-i586"
;;
- amd64* )
+ amd64* | x86_64 )
PF="linux-amd64"
;;
* )
@@ -97,15 +97,29 @@
;;
esac
+echo "==================================================="
+echo "Try to set ALT_JAVA_RE_JDK if you see timeout error"
+echo "==================================================="
+
# the test code
${TESTJAVA}${FS}bin${FS}javac -target 1.4 -source 1.4 \
-d . ${TESTSRC}${FS}SerialTest.java || exit 10
+# You can set ALT_JAVA_RE_JDK to another location that contains the
+# binaries for older JDK releases. You can set it to a non-existent
+# directory to skip the interop tests between different versions.
+
+if [ "$ALT_JAVA_RE_JDK" = "" ]; then
+ JAVA_RE_JDK=/java/re/j2se
+else
+ JAVA_RE_JDK=$ALT_JAVA_RE_JDK
+fi
+
OLDJAVA="
- /java/re/j2se/1.6.0/latest/binaries/${PF}
- /java/re/j2se/1.5.0/latest/binaries/${PF}
- /java/re/j2se/1.4.2/latest/binaries/${PF}
+ $JAVA_RE_JDK/1.6.0/latest/binaries/${PF}
+ $JAVA_RE_JDK/1.5.0/latest/binaries/${PF}
+ $JAVA_RE_JDK/1.4.2/latest/binaries/${PF}
"
SMALL="
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/pack200/RepackTest.java Wed Jul 05 18:17:35 2017 +0200
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ */
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+/*
+ * @test
+ * @bug 7184145
+ * @summary tests repacking of a simple named jarfile.
+ * @compile -XDignore.symbol.file Utils.java RepackTest.java
+ * @run main RepackTest
+ * @author ksrini
+ */
+public class RepackTest {
+
+ public static void main(String... args) throws Exception {
+ testRepack();
+ }
+
+ /*
+ * there are two cases we need to test, where the file in question is
+ * orpaned, ie. without a parent ie. not qualified by a parent path
+ * relative nor absolute
+ * case 1: src and dest are the same
+ * case 2: src and dest are different
+ */
+ static void testRepack() throws IOException {
+
+ // make a copy of the test specimen to local directory
+ File testFile = new File("src_tools.jar");
+ Utils.copyFile(Utils.locateJar("golden.jar"), testFile);
+ List<String> cmdsList = new ArrayList<>();
+
+ // case 1:
+ cmdsList.add(Utils.getPack200Cmd());
+ cmdsList.add("--repack");
+ cmdsList.add(testFile.getName());
+ Utils.runExec(cmdsList);
+
+ // case 2:
+ File dstFile = new File("dst_tools.jar");
+ cmdsList.clear();
+ cmdsList.add(Utils.getPack200Cmd());
+ cmdsList.add("--repack");
+ cmdsList.add(dstFile.getName());
+ cmdsList.add(testFile.getName());
+ Utils.runExec(cmdsList);
+
+ // tidy up
+ testFile.delete();
+ dstFile.delete();
+ }
+}