This commit is contained in:
Lana Steuck 2012-07-18 16:09:35 -07:00
commit 6a79c2b179
225 changed files with 2485 additions and 1454 deletions

View File

@ -3383,3 +3383,397 @@ included with JRE 7, JDK 7, and OpenJDK 7, except where noted:
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
%% 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 ---
-------------------------------------------------------------------------------

View File

@ -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. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@ -44,15 +44,8 @@ ifneq ($(PLATFORM), windows)
JGSS_WRAPPER = jgss/wrapper JGSS_WRAPPER = jgss/wrapper
endif endif
# Build PKCS#11 on all platforms except 64-bit Windows. # Build PKCS#11 on all platforms
# We exclude windows-amd64 because we don't have any
# 64-bit PKCS#11 implementations to test with on that platform.
PKCS11 = pkcs11 PKCS11 = pkcs11
ifeq ($(ARCH_DATA_MODEL), 64)
ifeq ($(PLATFORM), windows)
PKCS11 =
endif
endif
# Build Microsoft CryptoAPI provider only on Windows platform. # Build Microsoft CryptoAPI provider only on Windows platform.
MSCAPI = MSCAPI =

View File

@ -35,16 +35,16 @@ class MacOSXPreferences extends AbstractPreferences {
private static final String defaultAppName = "com.apple.java.util.prefs"; private static final String defaultAppName = "com.apple.java.util.prefs";
// true if this node is a child of userRoot or is userRoot // 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 // 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 // CF's storage location for this node and its keys
private MacOSXPreferencesFile file; private final MacOSXPreferencesFile file;
// absolutePath() + "/" // absolutePath() + "/"
private String path; private final String path;
// User root and system root nodes // User root and system root nodes
private static MacOSXPreferences userRoot = null; private static MacOSXPreferences userRoot = null;
@ -73,36 +73,40 @@ class MacOSXPreferences extends AbstractPreferences {
// Create a new root node. Called by getUserRoot() and getSystemRoot() // Create a new root node. Called by getUserRoot() and getSystemRoot()
// Synchronization is provided by the caller. // Synchronization is provided by the caller.
private MacOSXPreferences(boolean newIsUser) private MacOSXPreferences(boolean newIsUser) {
{ this(null, "", false, true, newIsUser);
super(null, "");
isUser = newIsUser;
isRoot = true;
initFields();
} }
// Create a new non-root node with the given parent. // Create a new non-root node with the given parent.
// Called by childSpi(). // 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)
{
this(parent, name, isNew, false, false);
}
private MacOSXPreferences(MacOSXPreferences parent, String name,
boolean isNew, boolean isRoot, boolean isUser)
{ {
super(parent, name); super(parent, name);
isUser = isUserNode(); this.isRoot = isRoot;
isRoot = false; if (isRoot)
this.isUser = isUser;
initFields(); else
} this.isUser = isUserNode();
private void initFields()
{
path = isRoot ? absolutePath() : absolutePath() + "/"; path = isRoot ? absolutePath() : absolutePath() + "/";
file = cfFileForNode(isUser); file = cfFileForNode(isUser);
newNode = file.addNode(path); if (isNew)
newNode = isNew;
else
newNode = file.addNode(path);
} }
// Create and return the MacOSXPreferencesFile for this node. // Create and return the MacOSXPreferencesFile for this node.
// Does not write anything to the file. // Does not write anything to the file.
private MacOSXPreferencesFile cfFileForNode(boolean isUser) private MacOSXPreferencesFile cfFileForNode(boolean isUser)
@ -160,7 +164,7 @@ class MacOSXPreferences extends AbstractPreferences {
// AbstractPreferences implementation // AbstractPreferences implementation
@Override @Override
protected void removeNodeSpi() protected void removeNodeSpi()
throws BackingStoreException throws BackingStoreException
{ {
// Disallow flush or sync between these two operations // Disallow flush or sync between these two operations
// (they may be manipulating two different files) // (they may be manipulating two different files)
@ -180,7 +184,7 @@ class MacOSXPreferences extends AbstractPreferences {
// AbstractPreferences implementation // AbstractPreferences implementation
@Override @Override
protected String[] childrenNamesSpi() protected String[] childrenNamesSpi()
throws BackingStoreException throws BackingStoreException
{ {
String[] result = file.getChildrenForNode(path); String[] result = file.getChildrenForNode(path);
if (result == null) throw new BackingStoreException("Couldn't get list of children for node '" + path + "'"); if (result == null) throw new BackingStoreException("Couldn't get list of children for node '" + path + "'");
@ -190,7 +194,7 @@ class MacOSXPreferences extends AbstractPreferences {
// AbstractPreferences implementation // AbstractPreferences implementation
@Override @Override
protected String[] keysSpi() protected String[] keysSpi()
throws BackingStoreException throws BackingStoreException
{ {
String[] result = file.getKeysForNode(path); String[] result = file.getKeysForNode(path);
if (result == null) throw new BackingStoreException("Couldn't get list of keys for node '" + path + "'"); if (result == null) throw new BackingStoreException("Couldn't get list of keys for node '" + path + "'");
@ -204,15 +208,15 @@ class MacOSXPreferences extends AbstractPreferences {
// Add to parent's child list here and disallow sync // Add to parent's child list here and disallow sync
// because parent and child might be in different files. // because parent and child might be in different files.
synchronized(MacOSXPreferencesFile.class) { synchronized(MacOSXPreferencesFile.class) {
file.addChildToNode(path, name); boolean isNew = file.addChildToNode(path, name);
return new MacOSXPreferences(this, name); return new MacOSXPreferences(this, name, isNew);
} }
} }
// AbstractPreferences override // AbstractPreferences override
@Override @Override
public void flush() public void flush()
throws BackingStoreException throws BackingStoreException
{ {
// Flush should *not* check for removal, unlike sync, but should // Flush should *not* check for removal, unlike sync, but should
// prevent simultaneous removal. // prevent simultaneous removal.
@ -227,7 +231,7 @@ class MacOSXPreferences extends AbstractPreferences {
// AbstractPreferences implementation // AbstractPreferences implementation
@Override @Override
protected void flushSpi() protected void flushSpi()
throws BackingStoreException throws BackingStoreException
{ {
// nothing here - overridden flush() doesn't call this // nothing here - overridden flush() doesn't call this
} }
@ -235,7 +239,7 @@ class MacOSXPreferences extends AbstractPreferences {
// AbstractPreferences override // AbstractPreferences override
@Override @Override
public void sync() public void sync()
throws BackingStoreException throws BackingStoreException
{ {
synchronized(lock) { synchronized(lock) {
if (isRemoved()) if (isRemoved())
@ -256,7 +260,7 @@ class MacOSXPreferences extends AbstractPreferences {
// AbstractPreferences implementation // AbstractPreferences implementation
@Override @Override
protected void syncSpi() protected void syncSpi()
throws BackingStoreException throws BackingStoreException
{ {
// nothing here - overridden sync() doesn't call this // nothing here - overridden sync() doesn't call this
} }

View File

@ -360,11 +360,11 @@ class MacOSXPreferencesFile {
} }
} }
void addChildToNode(String path, String child) boolean addChildToNode(String path, String child)
{ {
synchronized(MacOSXPreferencesFile.class) { synchronized(MacOSXPreferencesFile.class) {
markChanged(); markChanged();
addChildToNode(path, child+"/", appName, user, host); return addChildToNode(path, child+"/", appName, user, host);
} }
} }
@ -433,7 +433,7 @@ class MacOSXPreferencesFile {
addNode(String path, String name, long user, long host); addNode(String path, String name, long user, long host);
private static final native void private static final native void
removeNode(String path, String name, long user, long host); removeNode(String path, String name, long user, long host);
private static final native void private static final native boolean
addChildToNode(String path, String child, addChildToNode(String path, String child,
String name, long user, long host); String name, long user, long host);
private static final native void private static final native void

View File

@ -641,7 +641,7 @@ Java_java_util_prefs_MacOSXPreferencesFile_removeNode
// child must end with '/' // child must end with '/'
JNIEXPORT void JNICALL JNIEXPORT Boolean JNICALL
Java_java_util_prefs_MacOSXPreferencesFile_addChildToNode Java_java_util_prefs_MacOSXPreferencesFile_addChildToNode
(JNIEnv *env, jobject klass, jobject jpath, jobject jchild, (JNIEnv *env, jobject klass, jobject jpath, jobject jchild,
jobject jname, jlong juser, jlong jhost) jobject jname, jlong juser, jlong jhost)
@ -656,6 +656,7 @@ Java_java_util_prefs_MacOSXPreferencesFile_addChildToNode
CFDictionaryRef node; CFDictionaryRef node;
CFStringRef topKey; CFStringRef topKey;
CFMutableDictionaryRef topValue; CFMutableDictionaryRef topValue;
Boolean beforeAdd = false;
if (!path || !child || !name) goto badparams; if (!path || !child || !name) goto badparams;
@ -665,9 +666,12 @@ Java_java_util_prefs_MacOSXPreferencesFile_addChildToNode
// copyMutableNode creates the node if necessary // copyMutableNode creates the node if necessary
parent = copyMutableNode(path, name, user, host, &topKey, &topValue); parent = copyMutableNode(path, name, user, host, &topKey, &topValue);
throwIfNull(parent, "copyMutableNode failed"); throwIfNull(parent, "copyMutableNode failed");
beforeAdd = CFDictionaryContainsKey(parent, child);
CFDictionaryAddValue(parent, child, node); CFDictionaryAddValue(parent, child, node);
if (!beforeAdd)
beforeAdd = CFDictionaryContainsKey(parent, child);
else
beforeAdd = false;
CFPreferencesSetValue(topKey, topValue, name, user, host); CFPreferencesSetValue(topKey, topValue, name, user, host);
CFRelease(parent); CFRelease(parent);
@ -680,6 +684,7 @@ Java_java_util_prefs_MacOSXPreferencesFile_addChildToNode
if (path) CFRelease(path); if (path) CFRelease(path);
if (child) CFRelease(child); if (child) CFRelease(child);
if (name) CFRelease(name); if (name) CFRelease(name);
return beforeAdd;
} }

View File

@ -36,6 +36,7 @@ import java.io.OutputStream;
import java.io.PrintStream; import java.io.PrintStream;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
@ -381,12 +382,15 @@ class Driver {
String prefix = base.getName(); String prefix = base.getName();
if (prefix.length() < 3) prefix += "tmp"; 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")) Path tmpfile = (where == null)
where = new File(".").getAbsoluteFile(); ? Files.createTempFile(prefix, suffix)
: Files.createTempFile(where.toPath(), prefix, suffix);
return Files.createTempFile(where.toPath(), prefix, suffix).toFile(); return tmpfile.toFile();
} }
static private static private

View File

@ -137,7 +137,7 @@ public final class HttpCookie implements Cloneable {
private HttpCookie(String name, String value, String header) { private HttpCookie(String name, String value, String header) {
name = name.trim(); name = name.trim();
if (name.length() == 0 || !isToken(name) || isReserved(name)) { if (name.length() == 0 || !isToken(name)) {
throw new IllegalArgumentException("Illegal cookie name"); throw new IllegalArgumentException("Illegal cookie name");
} }
@ -781,33 +781,6 @@ public final class HttpCookie implements Cloneable {
return true; return true;
} }
/*
* @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. * Parse header string to cookie object.
* *

View File

@ -26,7 +26,6 @@
package javax.security.auth.kerberos; package javax.security.auth.kerberos;
import java.io.*; import java.io.*;
import sun.security.krb5.Asn1Exception;
import sun.security.krb5.KrbException; import sun.security.krb5.KrbException;
import sun.security.krb5.PrincipalName; import sun.security.krb5.PrincipalName;
import sun.security.krb5.Realm; import sun.security.krb5.Realm;
@ -81,14 +80,12 @@ public final class KerberosPrincipal
public static final int KRB_NT_UID = 5; public static final int KRB_NT_UID = 5;
private transient String fullName; private transient String fullName;
private transient String realm; private transient String realm;
private transient int nameType; private transient int nameType;
private static final char NAME_REALM_SEPARATOR = '@';
/** /**
* Constructs a KerberosPrincipal from the provided string input. The * Constructs a KerberosPrincipal from the provided string input. The
@ -233,41 +230,35 @@ public final class KerberosPrincipal
* realm in their DER-encoded form as specified in Section 5.2.2 of * 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>. * <a href=http://www.ietf.org/rfc/rfc4120.txt> RFC4120</a>.
*/ */
private void writeObject(ObjectOutputStream oos) private void writeObject(ObjectOutputStream oos)
throws IOException { throws IOException {
PrincipalName krb5Principal = null; PrincipalName krb5Principal;
try { try {
krb5Principal = new PrincipalName(fullName,nameType); krb5Principal = new PrincipalName(fullName, nameType);
oos.writeObject(krb5Principal.asn1Encode()); oos.writeObject(krb5Principal.asn1Encode());
oos.writeObject(krb5Principal.getRealm().asn1Encode()); oos.writeObject(krb5Principal.getRealm().asn1Encode());
} catch (Exception e) { } catch (Exception e) {
IOException ioe = new IOException(e.getMessage()); throw new IOException(e);
ioe.initCause(e);
throw ioe;
} }
} }
/** /**
* Reads this object from a stream (i.e., deserializes it) * Reads this object from a stream (i.e., deserializes it)
*/ */
private void readObject(ObjectInputStream ois) private void readObject(ObjectInputStream ois)
throws IOException, ClassNotFoundException { throws IOException, ClassNotFoundException {
byte[] asn1EncPrincipal = (byte [])ois.readObject(); byte[] asn1EncPrincipal = (byte [])ois.readObject();
byte[] encRealm = (byte [])ois.readObject(); byte[] encRealm = (byte [])ois.readObject();
try { try {
PrincipalName krb5Principal = new PrincipalName(new Realm realmObject = new Realm(new DerValue(encRealm));
DerValue(asn1EncPrincipal)); PrincipalName krb5Principal = new PrincipalName(
realm = (new Realm(new DerValue(encRealm))).toString(); new DerValue(asn1EncPrincipal), realmObject);
fullName = krb5Principal.toString() + NAME_REALM_SEPARATOR + realm = realmObject.toString();
realm.toString(); fullName = krb5Principal.toString();
nameType = krb5Principal.getNameType(); nameType = krb5Principal.getNameType();
} catch (Exception e) { } catch (Exception e) {
IOException ioe = new IOException(e.getMessage()); throw new IOException(e);
ioe.initCause(e);
throw ioe;
} }
} }
@ -288,9 +279,7 @@ public final class KerberosPrincipal
* <a href=http://www.ietf.org/rfc/rfc4120.txt> RFC4120</a>. * <a href=http://www.ietf.org/rfc/rfc4120.txt> RFC4120</a>.
* *
* @return the name type. * @return the name type.
*
*/ */
public int getNameType() { public int getNameType() {
return nameType; return nameType;
} }

View File

@ -33,6 +33,8 @@ import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult; import java.nio.charset.CoderResult;
import java.util.Arrays; import java.util.Arrays;
import sun.nio.cs.Surrogate; import sun.nio.cs.Surrogate;
import sun.nio.cs.ArrayDecoder;
import sun.nio.cs.ArrayEncoder;
import static sun.nio.cs.CharsetMapping.*; import static sun.nio.cs.CharsetMapping.*;
/* /*
@ -107,7 +109,7 @@ public class DoubleByte {
} }
public static class Decoder extends CharsetDecoder public static class Decoder extends CharsetDecoder
implements DelegatableDecoder implements DelegatableDecoder, ArrayDecoder
{ {
final char[][] b2c; final char[][] b2c;
@ -209,6 +211,29 @@ public class DoubleByte {
return decodeBufferLoop(src, dst); 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() { public void implReset() {
super.implReset(); super.implReset();
} }
@ -228,6 +253,7 @@ public class DoubleByte {
return UNMAPPABLE_DECODING; return UNMAPPABLE_DECODING;
return b2c[b1][b2 - b2Min]; return b2c[b1][b2 - b2Min];
} }
} }
// IBM_EBCDIC_DBCS // IBM_EBCDIC_DBCS
@ -367,6 +393,46 @@ public class DoubleByte {
src.position(mark); 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 // EBCDIC_DBCS_ONLY
@ -405,9 +471,37 @@ public class DoubleByte {
return CoderResult.malformedForLength(1); return CoderResult.malformedForLength(1);
return CoderResult.unmappableForLength(2); 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; final int MAX_SINGLEBYTE = 0xff;
private final char[] c2b; private final char[] c2b;
private final char[] c2bIndex; private final char[] c2bIndex;
@ -516,6 +610,35 @@ public class DoubleByte {
return encodeBufferLoop(src, dst); 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) { public int encodeChar(char ch) {
return c2b[c2bIndex[ch >> 8] + (ch & 0xff)]; return c2b[c2bIndex[ch >> 8] + (ch & 0xff)];
} }
@ -604,7 +727,6 @@ public class DoubleByte {
} }
} }
// EBCDIC_DBCS_ONLY
public static class Encoder_EBCDIC_DBCSONLY extends Encoder { public static class Encoder_EBCDIC_DBCSONLY extends Encoder {
Encoder_EBCDIC_DBCSONLY(Charset cs, byte[] repl, Encoder_EBCDIC_DBCSONLY(Charset cs, byte[] repl,
char[] c2b, char[] c2bIndex) { char[] c2b, char[] c2bIndex) {
@ -619,7 +741,6 @@ public class DoubleByte {
} }
} }
// for IBM_EBCDIC_DBCS
public static class Encoder_EBCDIC extends Encoder { public static class Encoder_EBCDIC extends Encoder {
static final int SBCS = 0; static final int SBCS = 0;
static final int DBCS = 1; static final int DBCS = 1;
@ -741,6 +862,47 @@ public class DoubleByte {
src.position(mark); 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 // EUC_SIMPLE

View File

@ -175,6 +175,40 @@ public class HKSCS {
} }
} }
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) { public CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
if (src.hasArray() && dst.hasArray()) if (src.hasArray() && dst.hasArray())
return decodeArrayLoop(src, dst); return decodeArrayLoop(src, dst);
@ -322,6 +356,36 @@ public class HKSCS {
return encodeBufferLoop(src, dst); 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 char[] C2B_UNMAPPABLE = new char[0x100];
static { static {
Arrays.fill(C2B_UNMAPPABLE, (char)UNMAPPABLE_ENCODING); Arrays.fill(C2B_UNMAPPABLE, (char)UNMAPPABLE_ENCODING);

View File

@ -27,10 +27,8 @@ package sun.security.jgss.krb5;
import org.ietf.jgss.*; import org.ietf.jgss.*;
import sun.security.jgss.spi.*; import sun.security.jgss.spi.*;
import javax.security.auth.kerberos.*;
import sun.security.krb5.PrincipalName; import sun.security.krb5.PrincipalName;
import sun.security.krb5.KrbException; import sun.security.krb5.KrbException;
import sun.security.krb5.ServiceName;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
@ -119,8 +117,8 @@ public class Krb5NameElement
hostName = components[1]; hostName = components[1];
String principal = getHostBasedInstance(service, hostName); String principal = getHostBasedInstance(service, hostName);
principalName = new ServiceName(principal, principalName = new PrincipalName(principal,
PrincipalName.KRB_NT_SRV_HST); PrincipalName.KRB_NT_SRV_HST);
} }
} }

View File

@ -464,8 +464,7 @@ public class Credentials {
System.out.println(">>> DEBUG: ----Credentials----"); System.out.println(">>> DEBUG: ----Credentials----");
System.out.println("\tclient: " + c.client.toString()); System.out.println("\tclient: " + c.client.toString());
System.out.println("\tserver: " + c.server.toString()); System.out.println("\tserver: " + c.server.toString());
System.out.println("\tticket: realm: " + c.ticket.realm.toString()); System.out.println("\tticket: sname: " + c.ticket.sname.toString());
System.out.println("\t sname: " + c.ticket.sname.toString());
if (c.startTime != null) { if (c.startTime != null) {
System.out.println("\tstartTime: " + c.startTime.getTime()); System.out.println("\tstartTime: " + c.startTime.getTime());
} }

View File

@ -179,7 +179,6 @@ public class KrbApReq {
KrbApReq(APOptions apOptions, KrbApReq(APOptions apOptions,
Ticket ticket, Ticket ticket,
EncryptionKey key, EncryptionKey key,
Realm crealm,
PrincipalName cname, PrincipalName cname,
Checksum cksum, Checksum cksum,
KerberosTime ctime, KerberosTime ctime,
@ -189,7 +188,7 @@ public class KrbApReq {
throws Asn1Exception, IOException, throws Asn1Exception, IOException,
KdcErrException, KrbCryptoException { KdcErrException, KrbCryptoException {
init(apOptions, ticket, key, crealm, cname, init(apOptions, ticket, key, cname,
cksum, ctime, subKey, seqNumber, authorizationData, cksum, ctime, subKey, seqNumber, authorizationData,
KeyUsage.KU_PA_TGS_REQ_AUTHENTICATOR); KeyUsage.KU_PA_TGS_REQ_AUTHENTICATOR);
@ -208,7 +207,6 @@ public class KrbApReq {
init(options, init(options,
tgs_creds.ticket, tgs_creds.ticket,
tgs_creds.key, tgs_creds.key,
tgs_creds.client.getRealm(),
tgs_creds.client, tgs_creds.client,
cksum, cksum,
ctime, ctime,
@ -221,7 +219,6 @@ public class KrbApReq {
private void init(APOptions apOptions, private void init(APOptions apOptions,
Ticket ticket, Ticket ticket,
EncryptionKey key, EncryptionKey key,
Realm crealm,
PrincipalName cname, PrincipalName cname,
Checksum cksum, Checksum cksum,
KerberosTime ctime, KerberosTime ctime,
@ -232,7 +229,7 @@ public class KrbApReq {
throws Asn1Exception, IOException, throws Asn1Exception, IOException,
KdcErrException, KrbCryptoException { KdcErrException, KrbCryptoException {
createMessage(apOptions, ticket, key, crealm, cname, createMessage(apOptions, ticket, key, cname,
cksum, ctime, subKey, seqNumber, authorizationData, cksum, ctime, subKey, seqNumber, authorizationData,
usage); usage);
obuf = apReqMessg.asn1Encode(); obuf = apReqMessg.asn1Encode();
@ -289,9 +286,6 @@ public class KrbApReq {
ctime = authenticator.ctime; ctime = authenticator.ctime;
cusec = authenticator.cusec; cusec = authenticator.cusec;
authenticator.ctime.setMicroSeconds(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)) if (!authenticator.cname.equals(enc_ticketPart.cname))
throw new KrbApErrException(Krb5.KRB_AP_ERR_BADMATCH); throw new KrbApErrException(Krb5.KRB_AP_ERR_BADMATCH);
@ -457,7 +451,6 @@ public class KrbApReq {
private void createMessage(APOptions apOptions, private void createMessage(APOptions apOptions,
Ticket ticket, Ticket ticket,
EncryptionKey key, EncryptionKey key,
Realm crealm,
PrincipalName cname, PrincipalName cname,
Checksum cksum, Checksum cksum,
KerberosTime ctime, KerberosTime ctime,
@ -474,8 +467,7 @@ public class KrbApReq {
seqno = new Integer(seqNumber.current()); seqno = new Integer(seqNumber.current());
authenticator = authenticator =
new Authenticator(crealm, new Authenticator(cname,
cname,
cksum, cksum,
ctime.getMicroSeconds(), ctime.getMicroSeconds(),
ctime, ctime,

View File

@ -48,8 +48,7 @@ abstract class KrbAppMessage {
HostAddress rAddress, HostAddress rAddress,
boolean timestampRequired, boolean timestampRequired,
boolean seqNumberRequired, boolean seqNumberRequired,
PrincipalName packetPrincipal, PrincipalName packetPrincipal)
Realm packetRealm)
throws KrbApErrException { throws KrbApErrException {
if (!Krb5.AP_EMPTY_ADDRESSES_ALLOWED || sAddress != null) { if (!Krb5.AP_EMPTY_ADDRESSES_ALLOWED || sAddress != null) {

View File

@ -152,11 +152,10 @@ class KrbAsRep extends KrbKdcRep {
DerValue encoding = new DerValue(enc_as_rep_part); DerValue encoding = new DerValue(enc_as_rep_part);
EncASRepPart enc_part = new EncASRepPart(encoding); EncASRepPart enc_part = new EncASRepPart(encoding);
rep.ticket.sname.setRealm(rep.ticket.realm);
rep.encKDCRepPart = enc_part; rep.encKDCRepPart = enc_part;
ASReq req = asReq.getMessage(); ASReq req = asReq.getMessage();
check(req, rep); check(true, req, rep);
creds = new Credentials( creds = new Credentials(
rep.ticket, rep.ticket,

View File

@ -115,10 +115,8 @@ public class KrbAsReq {
} }
if (sname == null) { if (sname == null) {
sname = new PrincipalName("krbtgt" + String realm = cname.getRealmAsString();
PrincipalName.NAME_COMPONENT_SEPARATOR + sname = PrincipalName.tgsService(realm, realm);
cname.getRealmAsString(),
PrincipalName.KRB_NT_SRV_INST);
} }
if (till == null) { if (till == null) {
@ -128,7 +126,6 @@ public class KrbAsReq {
// enc-authorization-data and additional-tickets never in AS-REQ // enc-authorization-data and additional-tickets never in AS-REQ
KDCReqBody kdc_req_body = new KDCReqBody(options, KDCReqBody kdc_req_body = new KDCReqBody(options,
cname, cname,
cname.getRealm(),
sname, sname,
from, from,
till, till,

View File

@ -99,9 +99,6 @@ public final class KrbAsReqBuilder {
// Called by other constructors // Called by other constructors
private void init(PrincipalName cname) private void init(PrincipalName cname)
throws KrbException { throws KrbException {
if (cname.getRealm() == null) {
cname.setRealm(Config.getInstance().getDefaultRealm());
}
this.cname = cname; this.cname = cname;
state = State.INIT; state = State.INIT;
} }

View File

@ -96,12 +96,11 @@ public class KrbCred {
PrincipalName princ = delegatedCreds.getClient(); PrincipalName princ = delegatedCreds.getClient();
Realm realm = princ.getRealm(); Realm realm = princ.getRealm();
PrincipalName tgService = delegatedCreds.getServer(); PrincipalName tgService = delegatedCreds.getServer();
Realm tgsRealm = tgService.getRealm();
KrbCredInfo credInfo = new KrbCredInfo(sessionKey, realm, KrbCredInfo credInfo = new KrbCredInfo(sessionKey,
princ, delegatedCreds.flags, delegatedCreds.authTime, princ, delegatedCreds.flags, delegatedCreds.authTime,
delegatedCreds.startTime, delegatedCreds.endTime, delegatedCreds.startTime, delegatedCreds.endTime,
delegatedCreds.renewTill, tgsRealm, tgService, delegatedCreds.renewTill, tgService,
delegatedCreds.cAddr); delegatedCreds.cAddr);
timeStamp = new KerberosTime(KerberosTime.NOW); timeStamp = new KerberosTime(KerberosTime.NOW);
@ -138,19 +137,13 @@ public class KrbCred {
KrbCredInfo credInfo = encPart.ticketInfo[0]; KrbCredInfo credInfo = encPart.ticketInfo[0];
EncryptionKey credInfoKey = credInfo.key; EncryptionKey credInfoKey = credInfo.key;
Realm prealm = credInfo.prealm;
// XXX PrincipalName can store realm + principalname or
// just principal name.
PrincipalName pname = credInfo.pname; PrincipalName pname = credInfo.pname;
pname.setRealm(prealm);
TicketFlags flags = credInfo.flags; TicketFlags flags = credInfo.flags;
KerberosTime authtime = credInfo.authtime; KerberosTime authtime = credInfo.authtime;
KerberosTime starttime = credInfo.starttime; KerberosTime starttime = credInfo.starttime;
KerberosTime endtime = credInfo.endtime; KerberosTime endtime = credInfo.endtime;
KerberosTime renewTill = credInfo.renewTill; KerberosTime renewTill = credInfo.renewTill;
Realm srealm = credInfo.srealm;
PrincipalName sname = credInfo.sname; PrincipalName sname = credInfo.sname;
sname.setRealm(srealm);
HostAddresses caddr = credInfo.caddr; HostAddresses caddr = credInfo.caddr;
if (DEBUG) { if (DEBUG) {

View File

@ -45,6 +45,10 @@ public class KrbException extends Exception {
super(s); super(s);
} }
public KrbException(Throwable cause) {
super(cause);
}
public KrbException(int i) { public KrbException(int i) {
returnCode = i; returnCode = i;
} }

View File

@ -35,28 +35,17 @@ import sun.security.krb5.internal.*;
abstract class KrbKdcRep { abstract class KrbKdcRep {
static void check( static void check(
boolean isAsReq,
KDCReq req, KDCReq req,
KDCRep rep KDCRep rep
) throws KrbApErrException { ) throws KrbApErrException {
if (!req.reqBody.cname.equalsWithoutRealm(rep.cname)) { if (isAsReq && !req.reqBody.cname.equals(rep.cname)) {
rep.encKDCRepPart.key.destroy(); rep.encKDCRepPart.key.destroy();
throw new KrbApErrException(Krb5.KRB_AP_ERR_MODIFIED); throw new KrbApErrException(Krb5.KRB_AP_ERR_MODIFIED);
} }
/**** XXX if (!req.reqBody.sname.equals(rep.encKDCRepPart.sname)) {
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)) {
rep.encKDCRepPart.key.destroy(); rep.encKDCRepPart.key.destroy();
throw new KrbApErrException(Krb5.KRB_AP_ERR_MODIFIED); throw new KrbApErrException(Krb5.KRB_AP_ERR_MODIFIED);
} }
@ -73,7 +62,6 @@ abstract class KrbKdcRep {
throw new KrbApErrException(Krb5.KRB_AP_ERR_MODIFIED); throw new KrbApErrException(Krb5.KRB_AP_ERR_MODIFIED);
} }
for (int i = 1; i < 6; i++) { for (int i = 1; i < 6; i++) {
if (req.reqBody.kdcOptions.get(i) != if (req.reqBody.kdcOptions.get(i) !=
rep.encKDCRepPart.flags.get(i)) { rep.encKDCRepPart.flags.get(i)) {

View File

@ -89,8 +89,7 @@ class KrbPriv extends KrbAppMessage {
raddr, raddr,
timestampRequired, timestampRequired,
seqNumberRequired, seqNumberRequired,
creds.client, creds.client
creds.client.getRealm()
); );
} }
@ -151,8 +150,7 @@ class KrbPriv extends KrbAppMessage {
HostAddress rAddress, HostAddress rAddress,
boolean timestampRequired, boolean timestampRequired,
boolean seqNumberRequired, boolean seqNumberRequired,
PrincipalName cname, PrincipalName cname
Realm crealm
) throws Asn1Exception, KdcErrException, ) throws Asn1Exception, KdcErrException,
KrbApErrException, IOException, KrbCryptoException { KrbApErrException, IOException, KrbCryptoException {
@ -172,8 +170,7 @@ class KrbPriv extends KrbAppMessage {
rAddress, rAddress,
timestampRequired, timestampRequired,
seqNumberRequired, seqNumberRequired,
cname, cname
crealm
); );
return enc_part.userData; return enc_part.userData;

View File

@ -90,8 +90,7 @@ class KrbSafe extends KrbAppMessage {
raddr, raddr,
timestampRequired, timestampRequired,
seqNumberRequired, seqNumberRequired,
creds.client, creds.client
creds.client.getRealm()
); );
} }
@ -154,8 +153,7 @@ class KrbSafe extends KrbAppMessage {
HostAddress rAddress, HostAddress rAddress,
boolean timestampRequired, boolean timestampRequired,
boolean seqNumberRequired, boolean seqNumberRequired,
PrincipalName cname, PrincipalName cname
Realm crealm
) throws Asn1Exception, KdcErrException, ) throws Asn1Exception, KdcErrException,
KrbApErrException, IOException, KrbCryptoException { KrbApErrException, IOException, KrbCryptoException {
@ -177,8 +175,7 @@ class KrbSafe extends KrbAppMessage {
rAddress, rAddress,
timestampRequired, timestampRequired,
seqNumberRequired, seqNumberRequired,
cname, cname
crealm
); );
return krb_safe.safeBody.userData; return krb_safe.safeBody.userData;

View File

@ -82,12 +82,11 @@ public class KrbTgsRep extends KrbKdcRep {
byte[] enc_tgs_rep_part = rep.encPart.reset(enc_tgs_rep_bytes); byte[] enc_tgs_rep_part = rep.encPart.reset(enc_tgs_rep_bytes);
ref = new DerValue(enc_tgs_rep_part); ref = new DerValue(enc_tgs_rep_part);
EncTGSRepPart enc_part = new EncTGSRepPart(ref); EncTGSRepPart enc_part = new EncTGSRepPart(ref);
rep.ticket.sname.setRealm(rep.ticket.realm);
rep.encKDCRepPart = enc_part; 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, req.reqBody.cname,
rep.ticket.sname, rep.ticket.sname,
enc_part.key, enc_part.key,
@ -99,7 +98,6 @@ public class KrbTgsRep extends KrbKdcRep {
enc_part.caddr enc_part.caddr
); );
this.rep = rep; this.rep = rep;
this.creds = creds;
this.secondTicket = tgsReq.getSecondTicket(); this.secondTicket = tgsReq.getSecondTicket();
} }

View File

@ -148,7 +148,6 @@ public class KrbTgsReq {
asCreds.key, asCreds.key,
ctime, ctime,
princName, princName,
princName.getRealm(),
servName, servName,
from, from,
till, till,
@ -214,7 +213,6 @@ public class KrbTgsReq {
EncryptionKey key, EncryptionKey key,
KerberosTime ctime, KerberosTime ctime,
PrincipalName cname, PrincipalName cname,
Realm crealm,
PrincipalName sname, PrincipalName sname,
KerberosTime from, KerberosTime from,
KerberosTime till, KerberosTime till,
@ -273,8 +271,6 @@ public class KrbTgsReq {
KDCReqBody reqBody = new KDCReqBody( KDCReqBody reqBody = new KDCReqBody(
kdc_options, kdc_options,
cname, cname,
// crealm,
sname.getRealm(), // TO
sname, sname,
from, from,
req_till, req_till,
@ -315,7 +311,6 @@ public class KrbTgsReq {
new APOptions(), new APOptions(),
ticket, ticket,
key, key,
crealm,
cname, cname,
cksum, cksum,
ctime, ctime,

View File

@ -38,15 +38,25 @@ import java.util.Vector;
import java.util.Locale; import java.util.Locale;
import java.io.IOException; import java.io.IOException;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.Arrays;
import sun.security.krb5.internal.ccache.CCacheOutputStream; import sun.security.krb5.internal.ccache.CCacheOutputStream;
import sun.security.krb5.internal.util.KerberosString; 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 public class PrincipalName implements Cloneable {
implements Cloneable {
//name types //name types
@ -80,8 +90,6 @@ public class PrincipalName
*/ */
public static final int KRB_NT_UID = 5; public static final int KRB_NT_UID = 5;
/** /**
* TGS Name * TGS Name
*/ */
@ -96,98 +104,109 @@ public class PrincipalName
public static final String NAME_REALM_SEPARATOR_STR = "@"; public static final String NAME_REALM_SEPARATOR_STR = "@";
public static final String REALM_COMPONENT_SEPARATOR_STR = "."; public static final String REALM_COMPONENT_SEPARATOR_STR = ".";
private int nameType; // Instance fields.
private String[] nameStrings; // Principal names don't mutate often
private Realm nameRealm; // optional; a null realm means use default /**
// Note: the nameRealm is not included in the default ASN.1 encoding * The name type, from PrincipalName's name-type field.
*/
private final int nameType;
// cached salt, might be changed by KDC info, not used in clone /**
private String salt = null; * 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;
protected PrincipalName() { /**
* The realm this principal belongs to.
*/
private final Realm nameRealm; // not null
// cached default salt, not used in clone
private transient String salt = null;
// 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
/**
* 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;
}
// 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) public PrincipalName(String[] nameParts, int type)
throws IllegalArgumentException, IOException { throws IllegalArgumentException, RealmException {
if (nameParts == null) { this(type, nameParts, Realm.getDefault());
throw new IllegalArgumentException("Null input not allowed");
}
nameStrings = new String[nameParts.length];
System.arraycopy(nameParts, 0, nameStrings, 0, nameParts.length);
nameType = type;
nameRealm = null;
} }
public PrincipalName(String[] nameParts) throws IOException { // Validate a nameStrings argument
this(nameParts, KRB_NT_UNKNOWN); 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() { public Object clone() {
try { try {
PrincipalName pName = (PrincipalName) super.clone(); PrincipalName pName = (PrincipalName) super.clone();
// Re-assign mutable fields UNSAFE.putObject(this, NAME_STRINGS_OFFSET, nameStrings.clone());
if (nameStrings != null) {
pName.nameStrings = nameStrings.clone();
}
if (nameRealm != null) {
pName.nameRealm = (Realm)nameRealm.clone();
}
return pName; return pName;
} catch (CloneNotSupportedException ex) { } catch (CloneNotSupportedException ex) {
throw new AssertionError("Should never happen"); throw new AssertionError("Should never happen");
} }
} }
/* private static final long NAME_STRINGS_OFFSET;
* Added to workaround a bug where the equals method that takes a private static final sun.misc.Unsafe UNSAFE;
* PrincipalName is not being called but Object.equals(Object) is static {
* being called. 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);
}
}
@Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (o instanceof PrincipalName) if (this == o) {
return equals((PrincipalName)o); return true;
else
return false;
}
public boolean equals(PrincipalName other) {
if (!equalsWithoutRealm(other)) {
return false;
} }
if (o instanceof PrincipalName) {
if ((nameRealm != null && other.nameRealm == null) || PrincipalName other = (PrincipalName)o;
(nameRealm == null && other.nameRealm != null)) { return nameRealm.equals(other.nameRealm) &&
return false; Arrays.equals(nameStrings, other.nameStrings);
} }
return false;
if (nameRealm != null && other.nameRealm != null) {
if (!nameRealm.equals(other.nameRealm)) {
return false;
}
}
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;
}
return true;
} }
/** /**
@ -208,20 +227,23 @@ public class PrincipalName
* http://www.ietf.org/rfc/rfc4120.txt</a>. * http://www.ietf.org/rfc/rfc4120.txt</a>.
* *
* @param encoding a Der-encoded data. * @param encoding a Der-encoded data.
* @param realm the realm for this name
* @exception Asn1Exception if an error occurs while decoding * @exception Asn1Exception if an error occurs while decoding
* an ASN1 encoded data. * an ASN1 encoded data.
* @exception Asn1Exception if there is an ASN1 encoding error * @exception Asn1Exception if there is an ASN1 encoding error
* @exception IOException if an I/O error occurs * @exception IOException if an I/O error occurs
* @exception IllegalArgumentException if encoding is null * @exception IllegalArgumentException if encoding is null
* reading encoded data. * reading encoded data.
*
*/ */
public PrincipalName(DerValue encoding) public PrincipalName(DerValue encoding, Realm realm)
throws Asn1Exception, IOException { throws Asn1Exception, IOException {
nameRealm = null; if (realm == null) {
throw new IllegalArgumentException("Null realm not allowed");
}
nameRealm = realm;
DerValue der; DerValue der;
if (encoding == null) { if (encoding == null) {
throw new IllegalArgumentException("Null input not allowed"); throw new IllegalArgumentException("Null encoding not allowed");
} }
if (encoding.getTag() != DerValue.tag_Sequence) { if (encoding.getTag() != DerValue.tag_Sequence) {
throw new Asn1Exception(Krb5.ASN1_BAD_ID); throw new Asn1Exception(Krb5.ASN1_BAD_ID);
@ -243,14 +265,12 @@ public class PrincipalName
DerValue subSubDer; DerValue subSubDer;
while(subDer.getData().available() > 0) { while(subDer.getData().available() > 0) {
subSubDer = subDer.getData().getDerValue(); 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 { } else {
throw new Asn1Exception(Krb5.ASN1_BAD_ID); throw new Asn1Exception(Krb5.ASN1_BAD_ID);
} }
@ -267,32 +287,35 @@ public class PrincipalName
* more marshaled value. * more marshaled value.
* @param explicitTag tag number. * @param explicitTag tag number.
* @param optional indicate if this data field is optional * @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, public static PrincipalName parse(DerInputStream data,
byte explicitTag, boolean byte explicitTag, boolean
optional) optional,
throws Asn1Exception, IOException { Realm realm)
throws Asn1Exception, IOException, RealmException {
if ((optional) && (((byte)data.peekByte() & (byte)0x1F) != if ((optional) && (((byte)data.peekByte() & (byte)0x1F) !=
explicitTag)) explicitTag))
return null; return null;
DerValue der = data.getDerValue(); DerValue der = data.getDerValue();
if (explicitTag != (der.getTag() & (byte)0x1F)) if (explicitTag != (der.getTag() & (byte)0x1F)) {
throw new Asn1Exception(Krb5.ASN1_BAD_ID); throw new Asn1Exception(Krb5.ASN1_BAD_ID);
else { } else {
DerValue subDer = der.getData().getDerValue(); 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 // XXX Error checkin consistent with MIT krb5_parse_name
// Code repetition, realm parsed again by class Realm // 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<>(); Vector<String> tempStrings = new Vector<>();
String temp = name; String temp = name;
@ -312,13 +335,13 @@ public class PrincipalName
continue; continue;
} }
else { else {
if (componentStart < i) { if (componentStart <= i) {
component = temp.substring(componentStart, i); component = temp.substring(componentStart, i);
tempStrings.addElement(component); tempStrings.addElement(component);
} }
componentStart = i + 1; componentStart = i + 1;
} }
} else } else {
if (temp.charAt(i) == NAME_REALM_SEPARATOR) { if (temp.charAt(i) == NAME_REALM_SEPARATOR) {
/* /*
* If this separator is escaped then don't treat it * If this separator is escaped then don't treat it
@ -337,11 +360,11 @@ public class PrincipalName
break; break;
} }
} }
}
i++; i++;
} }
if (i == temp.length()) if (i == temp.length()) {
if (componentStart < i) {
component = temp.substring(componentStart, i); component = temp.substring(componentStart, i);
tempStrings.addElement(component); tempStrings.addElement(component);
} }
@ -351,30 +374,26 @@ public class PrincipalName
return result; 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) { if (name == null) {
throw new IllegalArgumentException("Null name not allowed"); throw new IllegalArgumentException("Null name not allowed");
} }
String[] nameParts = parseName(name); String[] nameParts = parseName(name);
Realm tempRealm = null; validateNameStrings(nameParts);
String realmString = Realm.parseRealmAtSeparator(name); if (realm == null) {
realm = 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;
}
} }
if (realmString != null)
tempRealm = new Realm(realmString);
switch (type) { switch (type) {
case KRB_NT_SRV_HST: case KRB_NT_SRV_HST:
if (nameParts.length >= 2) { if (nameParts.length >= 2) {
@ -401,18 +420,22 @@ public class PrincipalName
} }
nameStrings = nameParts; nameStrings = nameParts;
nameType = type; nameType = type;
if (realm != null) {
nameRealm = new Realm(realm);
} else {
// We will try to get realm name from the mapping in // We will try to get realm name from the mapping in
// the configuration. If it is not specified // the configuration. If it is not specified
// we will use the default realm. This nametype does // we will use the default realm. This nametype does
// not allow a realm to be specified. The name string must of // not allow a realm to be specified. The name string must of
// the form service@host and this is internally changed into // the form service@host and this is internally changed into
// service/host by Kerberos // service/host by Kerberos
String mapRealm = mapHostToRealm(nameParts[1]);
String mapRealm = mapHostToRealm(nameParts[1]); if (mapRealm != null) {
if (mapRealm != null) { nameRealm = new Realm(mapRealm);
nameRealm = new Realm(mapRealm); } else {
} else { nameRealm = Realm.getDefault();
nameRealm = tempRealm; }
} }
break; break;
case KRB_NT_UNKNOWN: case KRB_NT_UNKNOWN:
@ -422,20 +445,34 @@ public class PrincipalName
case KRB_NT_UID: case KRB_NT_UID:
nameStrings = nameParts; nameStrings = nameParts;
nameType = type; nameType = type;
nameRealm = tempRealm; if (realm != null) {
nameRealm = new Realm(realm);
} else {
nameRealm = Realm.getDefault();
}
break; break;
default: default:
throw new IllegalArgumentException("Illegal name type"); 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 { public PrincipalName(String name) throws RealmException {
this(name, KRB_NT_UNKNOWN); this(name, KRB_NT_UNKNOWN);
} }
public PrincipalName(String name, String realm) throws RealmException { public PrincipalName(String name, String realm) throws RealmException {
this(name, KRB_NT_UNKNOWN); this(name, KRB_NT_UNKNOWN, realm);
nameRealm = new Realm(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() { public String getRealmAsString() {
@ -475,29 +512,17 @@ public class PrincipalName
} }
public String getRealmString() { public String getRealmString() {
if (nameRealm != null) return nameRealm.toString();
return nameRealm.toString();
return null;
} }
public Realm getRealm() { public Realm getRealm() {
return nameRealm; 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() { public String getSalt() {
if (salt == null) { if (salt == null) {
StringBuffer salt = new StringBuffer(); StringBuffer salt = new StringBuffer();
if (nameRealm != null) { salt.append(nameRealm.toString());
salt.append(nameRealm.toString());
}
for (int i = 0; i < nameStrings.length; i++) { for (int i = 0; i < nameStrings.length; i++) {
salt.append(nameStrings[i]); salt.append(nameStrings[i]);
} }
@ -513,11 +538,8 @@ public class PrincipalName
str.append("/"); str.append("/");
str.append(nameStrings[i]); str.append(nameStrings[i]);
} }
if (nameRealm != null) { str.append("@");
str.append("@"); str.append(nameRealm.toString());
str.append(nameRealm.toString());
}
return str.toString(); return str.toString();
} }
@ -532,7 +554,8 @@ public class PrincipalName
} }
/** /**
* 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. * @return the byte array of the encoded PrncipalName object.
* @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data.
* @exception IOException if an I/O error occurs while reading encoded data. * @exception IOException if an I/O error occurs while reading encoded data.
@ -597,12 +620,10 @@ public class PrincipalName
public void writePrincipal(CCacheOutputStream cos) throws IOException { public void writePrincipal(CCacheOutputStream cos) throws IOException {
cos.write32(nameType); cos.write32(nameType);
cos.write32(nameStrings.length); cos.write32(nameStrings.length);
if (nameRealm != null) { byte[] realmBytes = null;
byte[] realmBytes = null; realmBytes = nameRealm.toString().getBytes();
realmBytes = nameRealm.toString().getBytes(); cos.write32(realmBytes.length);
cos.write32(realmBytes.length); cos.write(realmBytes, 0, realmBytes.length);
cos.write(realmBytes, 0, realmBytes.length);
}
byte[] bytes = null; byte[] bytes = null;
for (int i = 0; i < nameStrings.length; i++) { for (int i = 0; i < nameStrings.length; i++) {
bytes = nameStrings[i].getBytes(); bytes = nameStrings[i].getBytes();
@ -611,31 +632,6 @@ public class PrincipalName
} }
} }
/**
* 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. * Returns the instance component of a name.
* In a multi-component name such as a KRB_NT_SRV_INST * In a multi-component name such as a KRB_NT_SRV_INST

View File

@ -46,24 +46,29 @@ import sun.security.krb5.internal.util.KerberosString;
* <xmp> * <xmp>
* Realm ::= GeneralString * Realm ::= GeneralString
* </xmp> * </xmp>
* This class is immutable.
*/ */
public class Realm implements Cloneable { public class Realm implements Cloneable {
private String realm; private final String realm; // not null nor empty
private static boolean DEBUG = Krb5.DEBUG; private static boolean DEBUG = Krb5.DEBUG;
private Realm() {
}
public Realm(String name) throws RealmException { public Realm(String name) throws RealmException {
realm = parseRealm(name); realm = parseRealm(name);
} }
public Object clone() { public static Realm getDefault() throws RealmException {
Realm new_realm = new Realm(); try {
if (realm != null) { return new Realm(Config.getInstance().getDefaultRealm());
new_realm.realm = new String(realm); } catch (RealmException re) {
throw re;
} catch (KrbException ke) {
throw new RealmException(ke);
} }
return new_realm; }
// Immutable class, no need to clone
public Object clone() {
return this;
} }
public boolean equals(Object obj) { public boolean equals(Object obj) {
@ -76,21 +81,11 @@ public class Realm implements Cloneable {
} }
Realm that = (Realm)obj; Realm that = (Realm)obj;
if (this.realm != null && that.realm != null ) { return this.realm.equals(that.realm);
return this.realm.equals(that.realm);
} else {
return (this.realm == null && that.realm == null);
}
} }
public int hashCode() { public int hashCode() {
int result = 17 ; return realm.hashCode();
if( realm != null ) {
result = 37 * result + realm.hashCode();
}
return result;
} }
/** /**
@ -116,6 +111,7 @@ public class Realm implements Cloneable {
return realm; return realm;
} }
// Extract realm from a string like dummy@REALM
public static String parseRealmAtSeparator(String name) public static String parseRealmAtSeparator(String name)
throws RealmException { throws RealmException {
if (name == null) { if (name == null) {
@ -128,8 +124,12 @@ public class Realm implements Cloneable {
while (i < temp.length()) { while (i < temp.length()) {
if (temp.charAt(i) == PrincipalName.NAME_REALM_SEPARATOR) { if (temp.charAt(i) == PrincipalName.NAME_REALM_SEPARATOR) {
if (i == 0 || temp.charAt(i - 1) != '\\') { if (i == 0 || temp.charAt(i - 1) != '\\') {
if (i + 1 < temp.length()) if (i + 1 < temp.length()) {
result = temp.substring(i + 1, temp.length()); result = temp.substring(i + 1, temp.length());
} else {
throw new IllegalArgumentException
("empty realm part not allowed");
}
break; break;
} }
} }
@ -219,7 +219,8 @@ public class Realm implements Cloneable {
* @return an instance of Realm. * @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)) { if ((optional) && (((byte)data.peekByte() & (byte)0x1F) != explicitTag)) {
return null; return null;
} }

View File

@ -47,4 +47,7 @@ public class RealmException extends KrbException {
super(i,s); super(i,s);
} }
public RealmException(Throwable cause) {
super(cause);
}
} }

View File

@ -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);
}
}

View File

@ -42,11 +42,10 @@ public class ASRep extends KDCRep {
public ASRep( public ASRep(
PAData[] new_pAData, PAData[] new_pAData,
Realm new_crealm,
PrincipalName new_cname, PrincipalName new_cname,
Ticket new_ticket, Ticket new_ticket,
EncryptedData new_encPart) throws IOException { 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); new_encPart, Krb5.KRB_AS_REP);
} }

View File

@ -61,7 +61,6 @@ import java.math.BigInteger;
public class Authenticator { public class Authenticator {
public int authenticator_vno; public int authenticator_vno;
public Realm crealm;
public PrincipalName cname; public PrincipalName cname;
Checksum cksum; //optional Checksum cksum; //optional
public int cusec; public int cusec;
@ -71,7 +70,6 @@ public class Authenticator {
public AuthorizationData authorizationData; //optional public AuthorizationData authorizationData; //optional
public Authenticator( public Authenticator(
Realm new_crealm,
PrincipalName new_cname, PrincipalName new_cname,
Checksum new_cksum, Checksum new_cksum,
int new_cusec, int new_cusec,
@ -80,7 +78,6 @@ public class Authenticator {
Integer new_seqNumber, Integer new_seqNumber,
AuthorizationData new_authorizationData) { AuthorizationData new_authorizationData) {
authenticator_vno = Krb5.AUTHNETICATOR_VNO; authenticator_vno = Krb5.AUTHNETICATOR_VNO;
crealm = new_crealm;
cname = new_cname; cname = new_cname;
cksum = new_cksum; cksum = new_cksum;
cusec = new_cusec; cusec = new_cusec;
@ -131,8 +128,8 @@ public class Authenticator {
if (authenticator_vno != 5) { if (authenticator_vno != 5) {
throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION); throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION);
} }
crealm = Realm.parse(der.getData(), (byte) 0x01, false); Realm crealm = Realm.parse(der.getData(), (byte) 0x01, false);
cname = PrincipalName.parse(der.getData(), (byte) 0x02, false); cname = PrincipalName.parse(der.getData(), (byte) 0x02, false, crealm);
cksum = Checksum.parse(der.getData(), (byte) 0x03, true); cksum = Checksum.parse(der.getData(), (byte) 0x03, true);
subDer = der.getData().getDerValue(); subDer = der.getData().getDerValue();
if ((subDer.getTag() & (byte) 0x1F) == 0x04) { if ((subDer.getTag() & (byte) 0x1F) == 0x04) {
@ -180,7 +177,7 @@ public class Authenticator {
DerOutputStream temp = new DerOutputStream(); DerOutputStream temp = new DerOutputStream();
temp.putInteger(BigInteger.valueOf(authenticator_vno)); 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) 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())); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x02), cname.asn1Encode()));
if (cksum != null) { if (cksum != null) {
v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x03), cksum.asn1Encode())); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x03), cksum.asn1Encode()));

View File

@ -72,23 +72,9 @@ rs.
public static Credentials acquireServiceCreds( public static Credentials acquireServiceCreds(
String service, Credentials ccreds) String service, Credentials ccreds)
throws KrbException, IOException { throws KrbException, IOException {
ServiceName sname = new ServiceName(service); PrincipalName sname = new PrincipalName(service);
String serviceRealm = sname.getRealmString(); String serviceRealm = sname.getRealmString();
String localRealm = ccreds.getClient().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 if (!localRealm.equalsIgnoreCase(serviceRealm)) { //do cross-realm auth entication
@ -128,13 +114,12 @@ rs.
int i = 0, k = 0; int i = 0, k = 0;
Credentials cTgt = null, newTgt = null, theTgt = null; Credentials cTgt = null, newTgt = null, theTgt = null;
ServiceName tempService = null; PrincipalName tempService = null;
String realm = null, newTgtRealm = null, theTgtRealm = null; String realm = null, newTgtRealm = null, theTgtRealm = null;
for (cTgt = ccreds, i = 0; i < realms.length;) for (cTgt = ccreds, i = 0; i < realms.length;)
{ {
tempService = new ServiceName(PrincipalName.TGS_DEFAULT_SRV_NAME, tempService = PrincipalName.tgsService(serviceRealm, realms[i]);
serviceRealm, realms[i]);
if (DEBUG) if (DEBUG)
{ {
@ -164,9 +149,7 @@ rs.
newTgt == null && k > i; k--) newTgt == null && k > i; k--)
{ {
tempService = new ServiceName( tempService = PrincipalName.tgsService(realms[k], realms[i]);
PrincipalName.TGS_DEFAULT_SRV_NAME,
realms[k], realms[i]);
if (DEBUG) if (DEBUG)
{ {
System.out.println(">>> Credentials acquireServiceCreds: inner loop: [" + k +"] tempService=" + tempService); System.out.println(">>> Credentials acquireServiceCreds: inner loop: [" + k +"] tempService=" + tempService);
@ -306,7 +289,7 @@ rs.
* This method does the real job to request the service credential. * This method does the real job to request the service credential.
*/ */
private static Credentials serviceCreds( private static Credentials serviceCreds(
ServiceName service, Credentials ccreds) PrincipalName service, Credentials ccreds)
throws KrbException, IOException { throws KrbException, IOException {
return new KrbTgsReq(ccreds, service).sendAndGetCreds(); return new KrbTgsReq(ccreds, service).sendAndGetCreds();
} }

View File

@ -46,7 +46,6 @@ public class EncASRepPart extends EncKDCRepPart {
KerberosTime new_starttime, KerberosTime new_starttime,
KerberosTime new_endtime, KerberosTime new_endtime,
KerberosTime new_renewTill, KerberosTime new_renewTill,
Realm new_srealm,
PrincipalName new_sname, PrincipalName new_sname,
HostAddresses new_caddr) { HostAddresses new_caddr) {
super( super(
@ -59,7 +58,6 @@ public class EncASRepPart extends EncKDCRepPart {
new_starttime, new_starttime,
new_endtime, new_endtime,
new_renewTill, new_renewTill,
new_srealm,
new_sname, new_sname,
new_caddr, new_caddr,
Krb5.KRB_ENC_AS_REP_PART Krb5.KRB_ENC_AS_REP_PART

View File

@ -74,7 +74,6 @@ public class EncKDCRepPart {
public KerberosTime starttime; //optional public KerberosTime starttime; //optional
public KerberosTime endtime; public KerberosTime endtime;
public KerberosTime renewTill; //optional public KerberosTime renewTill; //optional
public Realm srealm;
public PrincipalName sname; public PrincipalName sname;
public HostAddresses caddr; //optional public HostAddresses caddr; //optional
public int msgType; //not included in sequence public int msgType; //not included in sequence
@ -89,7 +88,6 @@ public class EncKDCRepPart {
KerberosTime new_starttime, KerberosTime new_starttime,
KerberosTime new_endtime, KerberosTime new_endtime,
KerberosTime new_renewTill, KerberosTime new_renewTill,
Realm new_srealm,
PrincipalName new_sname, PrincipalName new_sname,
HostAddresses new_caddr, HostAddresses new_caddr,
int new_msgType) { int new_msgType) {
@ -102,7 +100,6 @@ public class EncKDCRepPart {
starttime = new_starttime; starttime = new_starttime;
endtime = new_endtime; endtime = new_endtime;
renewTill = new_renewTill; renewTill = new_renewTill;
srealm = new_srealm;
sname = new_sname; sname = new_sname;
caddr = new_caddr; caddr = new_caddr;
msgType = new_msgType; msgType = new_msgType;
@ -158,8 +155,8 @@ public class EncKDCRepPart {
starttime = KerberosTime.parse(der.getData(), (byte) 0x06, true); starttime = KerberosTime.parse(der.getData(), (byte) 0x06, true);
endtime = KerberosTime.parse(der.getData(), (byte) 0x07, false); endtime = KerberosTime.parse(der.getData(), (byte) 0x07, false);
renewTill = KerberosTime.parse(der.getData(), (byte) 0x08, true); renewTill = KerberosTime.parse(der.getData(), (byte) 0x08, true);
srealm = Realm.parse(der.getData(), (byte) 0x09, false); Realm srealm = Realm.parse(der.getData(), (byte) 0x09, false);
sname = PrincipalName.parse(der.getData(), (byte) 0x0A, false); sname = PrincipalName.parse(der.getData(), (byte) 0x0A, false, srealm);
if (der.getData().available() > 0) { if (der.getData().available() > 0) {
caddr = HostAddresses.parse(der.getData(), (byte) 0x0B, true); caddr = HostAddresses.parse(der.getData(), (byte) 0x0B, true);
} }
@ -206,7 +203,7 @@ public class EncKDCRepPart {
true, (byte) 0x08), renewTill.asn1Encode()); true, (byte) 0x08), renewTill.asn1Encode());
} }
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, 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, bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
true, (byte) 0x0A), sname.asn1Encode()); true, (byte) 0x0A), sname.asn1Encode());
if (caddr != null) { if (caddr != null) {

View File

@ -45,7 +45,6 @@ public class EncTGSRepPart extends EncKDCRepPart {
KerberosTime new_starttime, KerberosTime new_starttime,
KerberosTime new_endtime, KerberosTime new_endtime,
KerberosTime new_renewTill, KerberosTime new_renewTill,
Realm new_srealm,
PrincipalName new_sname, PrincipalName new_sname,
HostAddresses new_caddr) { HostAddresses new_caddr) {
super( super(
@ -58,7 +57,6 @@ public class EncTGSRepPart extends EncKDCRepPart {
new_starttime, new_starttime,
new_endtime, new_endtime,
new_renewTill, new_renewTill,
new_srealm,
new_sname, new_sname,
new_caddr, new_caddr,
Krb5.KRB_ENC_TGS_REP_PART); Krb5.KRB_ENC_TGS_REP_PART);

View File

@ -65,7 +65,6 @@ public class EncTicketPart {
public TicketFlags flags; public TicketFlags flags;
public EncryptionKey key; public EncryptionKey key;
public Realm crealm;
public PrincipalName cname; public PrincipalName cname;
public TransitedEncoding transited; public TransitedEncoding transited;
public KerberosTime authtime; public KerberosTime authtime;
@ -78,7 +77,6 @@ public class EncTicketPart {
public EncTicketPart( public EncTicketPart(
TicketFlags new_flags, TicketFlags new_flags,
EncryptionKey new_key, EncryptionKey new_key,
Realm new_crealm,
PrincipalName new_cname, PrincipalName new_cname,
TransitedEncoding new_transited, TransitedEncoding new_transited,
KerberosTime new_authtime, KerberosTime new_authtime,
@ -89,7 +87,6 @@ public class EncTicketPart {
AuthorizationData new_authorizationData) { AuthorizationData new_authorizationData) {
flags = new_flags; flags = new_flags;
key = new_key; key = new_key;
crealm = new_crealm;
cname = new_cname; cname = new_cname;
transited = new_transited; transited = new_transited;
authtime = new_authtime; authtime = new_authtime;
@ -151,8 +148,8 @@ public class EncTicketPart {
} }
flags = TicketFlags.parse(der.getData(), (byte) 0x00, false); flags = TicketFlags.parse(der.getData(), (byte) 0x00, false);
key = EncryptionKey.parse(der.getData(), (byte) 0x01, false); key = EncryptionKey.parse(der.getData(), (byte) 0x01, false);
crealm = Realm.parse(der.getData(), (byte) 0x02, false); Realm crealm = Realm.parse(der.getData(), (byte) 0x02, false);
cname = PrincipalName.parse(der.getData(), (byte) 0x03, false); cname = PrincipalName.parse(der.getData(), (byte) 0x03, false, crealm);
transited = TransitedEncoding.parse(der.getData(), (byte) 0x04, false); transited = TransitedEncoding.parse(der.getData(), (byte) 0x04, false);
authtime = KerberosTime.parse(der.getData(), (byte) 0x05, false); authtime = KerberosTime.parse(der.getData(), (byte) 0x05, false);
starttime = KerberosTime.parse(der.getData(), (byte) 0x06, true); starttime = KerberosTime.parse(der.getData(), (byte) 0x06, true);
@ -186,7 +183,7 @@ public class EncTicketPart {
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
true, (byte) 0x01), key.asn1Encode()); true, (byte) 0x01), key.asn1Encode());
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, 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, bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
true, (byte) 0x03), cname.asn1Encode()); true, (byte) 0x03), cname.asn1Encode());
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,

View File

@ -61,7 +61,6 @@ import java.math.BigInteger;
*/ */
public class KDCRep { public class KDCRep {
public Realm crealm;
public PrincipalName cname; public PrincipalName cname;
public Ticket ticket; public Ticket ticket;
public EncryptedData encPart; public EncryptedData encPart;
@ -73,7 +72,6 @@ public class KDCRep {
public KDCRep( public KDCRep(
PAData[] new_pAData, PAData[] new_pAData,
Realm new_crealm,
PrincipalName new_cname, PrincipalName new_cname,
Ticket new_ticket, Ticket new_ticket,
EncryptedData new_encPart, EncryptedData new_encPart,
@ -90,7 +88,6 @@ public class KDCRep {
} }
} }
} }
crealm = new_crealm;
cname = new_cname; cname = new_cname;
ticket = new_ticket; ticket = new_ticket;
encPart = new_encPart; encPart = new_encPart;
@ -174,8 +171,8 @@ public class KDCRep {
} else { } else {
pAData = null; pAData = null;
} }
crealm = Realm.parse(der.getData(), (byte) 0x03, false); Realm crealm = Realm.parse(der.getData(), (byte) 0x03, false);
cname = PrincipalName.parse(der.getData(), (byte) 0x04, false); cname = PrincipalName.parse(der.getData(), (byte) 0x04, false, crealm);
ticket = Ticket.parse(der.getData(), (byte) 0x05, false); ticket = Ticket.parse(der.getData(), (byte) 0x05, false);
encPart = EncryptedData.parse(der.getData(), (byte) 0x06, false); encPart = EncryptedData.parse(der.getData(), (byte) 0x06, false);
if (der.getData().available() > 0) { if (der.getData().available() > 0) {
@ -212,7 +209,7 @@ public class KDCRep {
true, (byte) 0x02), temp); true, (byte) 0x02), temp);
} }
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, 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, bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,
true, (byte) 0x04), cname.asn1Encode()); true, (byte) 0x04), cname.asn1Encode());
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT,

View File

@ -72,7 +72,6 @@ import java.math.BigInteger;
public class KDCReqBody { public class KDCReqBody {
public KDCOptions kdcOptions; public KDCOptions kdcOptions;
public PrincipalName cname; //optional in ASReq only public PrincipalName cname; //optional in ASReq only
public Realm crealm;
public PrincipalName sname; //optional public PrincipalName sname; //optional
public KerberosTime from; //optional public KerberosTime from; //optional
public KerberosTime till; public KerberosTime till;
@ -87,7 +86,6 @@ public class KDCReqBody {
public KDCReqBody( public KDCReqBody(
KDCOptions new_kdcOptions, KDCOptions new_kdcOptions,
PrincipalName new_cname, //optional in ASReq only PrincipalName new_cname, //optional in ASReq only
Realm new_crealm,
PrincipalName new_sname, //optional PrincipalName new_sname, //optional
KerberosTime new_from, //optional KerberosTime new_from, //optional
KerberosTime new_till, KerberosTime new_till,
@ -100,7 +98,6 @@ public class KDCReqBody {
) throws IOException { ) throws IOException {
kdcOptions = new_kdcOptions; kdcOptions = new_kdcOptions;
cname = new_cname; cname = new_cname;
crealm = new_crealm;
sname = new_sname; sname = new_sname;
from = new_from; from = new_from;
till = new_till; till = new_till;
@ -142,12 +139,22 @@ public class KDCReqBody {
throw new Asn1Exception(Krb5.ASN1_BAD_ID); throw new Asn1Exception(Krb5.ASN1_BAD_ID);
} }
kdcOptions = KDCOptions.parse(encoding.getData(), (byte)0x00, false); 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)) { if ((msgType != Krb5.KRB_AS_REQ) && (cname != null)) {
throw new Asn1Exception(Krb5.ASN1_BAD_ID); throw new Asn1Exception(Krb5.ASN1_BAD_ID);
} }
crealm = Realm.parse(encoding.getData(), (byte)0x02, false); Realm realm = Realm.parse(encoding.getData(), (byte)0x02, false);
sname = PrincipalName.parse(encoding.getData(), (byte)0x03, true); 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); from = KerberosTime.parse(encoding.getData(), (byte)0x04, true);
till = KerberosTime.parse(encoding.getData(), (byte)0x05, false); till = KerberosTime.parse(encoding.getData(), (byte)0x05, false);
rtime = KerberosTime.parse(encoding.getData(), (byte)0x06, true); rtime = KerberosTime.parse(encoding.getData(), (byte)0x06, true);
@ -223,9 +230,11 @@ public class KDCReqBody {
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)0x01), cname.asn1Encode()));
} }
} }
v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), crealm.asn1Encode()));
if (sname != null) { 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())); 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) { if (from != null) {
v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x04), from.asn1Encode())); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x04), from.asn1Encode()));

View File

@ -90,9 +90,7 @@ public class KRBError implements java.io.Serializable {
private KerberosTime sTime; private KerberosTime sTime;
private Integer suSec; private Integer suSec;
private int errorCode; private int errorCode;
private Realm crealm; //optional
private PrincipalName cname; //optional private PrincipalName cname; //optional
private Realm realm;
private PrincipalName sname; private PrincipalName sname;
private String eText; //optional private String eText; //optional
private byte[] eData; //optional private byte[] eData; //optional
@ -128,9 +126,7 @@ public class KRBError implements java.io.Serializable {
KerberosTime new_sTime, KerberosTime new_sTime,
Integer new_suSec, Integer new_suSec,
int new_errorCode, int new_errorCode,
Realm new_crealm,
PrincipalName new_cname, PrincipalName new_cname,
Realm new_realm,
PrincipalName new_sname, PrincipalName new_sname,
String new_eText, String new_eText,
byte[] new_eData byte[] new_eData
@ -142,9 +138,7 @@ public class KRBError implements java.io.Serializable {
sTime = new_sTime; sTime = new_sTime;
suSec = new_suSec; suSec = new_suSec;
errorCode = new_errorCode; errorCode = new_errorCode;
crealm = new_crealm;
cname = new_cname; cname = new_cname;
realm = new_realm;
sname = new_sname; sname = new_sname;
eText = new_eText; eText = new_eText;
eData = new_eData; eData = new_eData;
@ -159,9 +153,7 @@ public class KRBError implements java.io.Serializable {
KerberosTime new_sTime, KerberosTime new_sTime,
Integer new_suSec, Integer new_suSec,
int new_errorCode, int new_errorCode,
Realm new_crealm,
PrincipalName new_cname, PrincipalName new_cname,
Realm new_realm,
PrincipalName new_sname, PrincipalName new_sname,
String new_eText, String new_eText,
byte[] new_eData, byte[] new_eData,
@ -174,9 +166,7 @@ public class KRBError implements java.io.Serializable {
sTime = new_sTime; sTime = new_sTime;
suSec = new_suSec; suSec = new_suSec;
errorCode = new_errorCode; errorCode = new_errorCode;
crealm = new_crealm;
cname = new_cname; cname = new_cname;
realm = new_realm;
sname = new_sname; sname = new_sname;
eText = new_eText; eText = new_eText;
eData = new_eData; eData = new_eData;
@ -359,10 +349,10 @@ public class KRBError implements java.io.Serializable {
errorCode = subDer.getData().getBigInteger().intValue(); errorCode = subDer.getData().getBigInteger().intValue();
} }
else throw new Asn1Exception(Krb5.ASN1_BAD_ID); else throw new Asn1Exception(Krb5.ASN1_BAD_ID);
crealm = Realm.parse(der.getData(), (byte)0x07, true); Realm crealm = Realm.parse(der.getData(), (byte)0x07, true);
cname = PrincipalName.parse(der.getData(), (byte)0x08, true); cname = PrincipalName.parse(der.getData(), (byte)0x08, true, crealm);
realm = Realm.parse(der.getData(), (byte)0x09, false); Realm realm = Realm.parse(der.getData(), (byte)0x09, false);
sname = PrincipalName.parse(der.getData(), (byte)0x0A, false); sname = PrincipalName.parse(der.getData(), (byte)0x0A, false, realm);
eText = null; eText = null;
eData = null; eData = null;
eCksum = null; eCksum = null;
@ -403,15 +393,9 @@ public class KRBError implements java.io.Serializable {
System.out.println("\t suSec is " + suSec); System.out.println("\t suSec is " + suSec);
System.out.println("\t error code is " + errorCode); System.out.println("\t error code is " + errorCode);
System.out.println("\t error Message is " + Krb5.getErrorMessage(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) { if (cname != null) {
System.out.println("\t cname is " + cname.toString()); System.out.println("\t cname is " + cname.toString());
} }
if (realm != null) {
System.out.println("\t realm is " + realm.toString());
}
if (sname != null) { if (sname != null) {
System.out.println("\t sname is " + sname.toString()); System.out.println("\t sname is " + sname.toString());
} }
@ -458,14 +442,12 @@ public class KRBError implements java.io.Serializable {
temp.putInteger(BigInteger.valueOf(errorCode)); temp.putInteger(BigInteger.valueOf(errorCode));
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x06), temp); 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) { 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)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()); bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x0A), sname.asn1Encode());
if (eText != null) { if (eText != null) {
@ -506,9 +488,7 @@ public class KRBError implements java.io.Serializable {
isEqual(sTime, other.sTime) && isEqual(sTime, other.sTime) &&
isEqual(suSec, other.suSec) && isEqual(suSec, other.suSec) &&
errorCode == other.errorCode && errorCode == other.errorCode &&
isEqual(crealm, other.crealm) &&
isEqual(cname, other.cname) && isEqual(cname, other.cname) &&
isEqual(realm, other.realm) &&
isEqual(sname, other.sname) && isEqual(sname, other.sname) &&
isEqual(eText, other.eText) && isEqual(eText, other.eText) &&
java.util.Arrays.equals(eData, other.eData) && java.util.Arrays.equals(eData, other.eData) &&
@ -528,9 +508,7 @@ public class KRBError implements java.io.Serializable {
if (sTime != null) result = 37 * result + sTime.hashCode(); if (sTime != null) result = 37 * result + sTime.hashCode();
if (suSec != null) result = 37 * result + suSec.hashCode(); if (suSec != null) result = 37 * result + suSec.hashCode();
result = 37 * result + errorCode; result = 37 * result + errorCode;
if (crealm != null) result = 37 * result + crealm.hashCode();
if (cname != null) result = 37 * result + cname.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 (sname != null) result = 37 * result + sname.hashCode();
if (eText != null) result = 37 * result + eText.hashCode(); if (eText != null) result = 37 * result + eText.hashCode();
result = 37 * result + Arrays.hashCode(eData); result = 37 * result + Arrays.hashCode(eData);

View File

@ -63,14 +63,12 @@ import java.io.IOException;
public class KrbCredInfo { public class KrbCredInfo {
public EncryptionKey key; public EncryptionKey key;
public Realm prealm; //optional
public PrincipalName pname; //optional public PrincipalName pname; //optional
public TicketFlags flags; //optional public TicketFlags flags; //optional
public KerberosTime authtime; //optional public KerberosTime authtime; //optional
public KerberosTime starttime; //optional public KerberosTime starttime; //optional
public KerberosTime endtime; //optional public KerberosTime endtime; //optional
public KerberosTime renewTill; //optional public KerberosTime renewTill; //optional
public Realm srealm; //optional
public PrincipalName sname; //optional public PrincipalName sname; //optional
public HostAddresses caddr; //optional public HostAddresses caddr; //optional
@ -79,26 +77,22 @@ public class KrbCredInfo {
public KrbCredInfo( public KrbCredInfo(
EncryptionKey new_key, EncryptionKey new_key,
Realm new_prealm,
PrincipalName new_pname, PrincipalName new_pname,
TicketFlags new_flags, TicketFlags new_flags,
KerberosTime new_authtime, KerberosTime new_authtime,
KerberosTime new_starttime, KerberosTime new_starttime,
KerberosTime new_endtime, KerberosTime new_endtime,
KerberosTime new_renewTill, KerberosTime new_renewTill,
Realm new_srealm,
PrincipalName new_sname, PrincipalName new_sname,
HostAddresses new_caddr HostAddresses new_caddr
) { ) {
key = new_key; key = new_key;
prealm = new_prealm;
pname = new_pname; pname = new_pname;
flags = new_flags; flags = new_flags;
authtime = new_authtime; authtime = new_authtime;
starttime = new_starttime; starttime = new_starttime;
endtime = new_endtime; endtime = new_endtime;
renewTill = new_renewTill; renewTill = new_renewTill;
srealm = new_srealm;
sname = new_sname; sname = new_sname;
caddr = new_caddr; caddr = new_caddr;
} }
@ -115,21 +109,20 @@ public class KrbCredInfo {
if (encoding.getTag() != DerValue.tag_Sequence) { if (encoding.getTag() != DerValue.tag_Sequence) {
throw new Asn1Exception(Krb5.ASN1_BAD_ID); throw new Asn1Exception(Krb5.ASN1_BAD_ID);
} }
prealm = null;
pname = null; pname = null;
flags = null; flags = null;
authtime = null; authtime = null;
starttime = null; starttime = null;
endtime = null; endtime = null;
renewTill = null; renewTill = null;
srealm = null;
sname = null; sname = null;
caddr = null; caddr = null;
key = EncryptionKey.parse(encoding.getData(), (byte)0x00, false); key = EncryptionKey.parse(encoding.getData(), (byte)0x00, false);
Realm prealm = null, srealm = null;
if (encoding.getData().available() > 0) if (encoding.getData().available() > 0)
prealm = Realm.parse(encoding.getData(), (byte)0x01, true); prealm = Realm.parse(encoding.getData(), (byte)0x01, true);
if (encoding.getData().available() > 0) 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) if (encoding.getData().available() > 0)
flags = TicketFlags.parse(encoding.getData(), (byte)0x03, true); flags = TicketFlags.parse(encoding.getData(), (byte)0x03, true);
if (encoding.getData().available() > 0) if (encoding.getData().available() > 0)
@ -143,7 +136,7 @@ public class KrbCredInfo {
if (encoding.getData().available() > 0) if (encoding.getData().available() > 0)
srealm = Realm.parse(encoding.getData(), (byte)0x08, true); srealm = Realm.parse(encoding.getData(), (byte)0x08, true);
if (encoding.getData().available() > 0) 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) if (encoding.getData().available() > 0)
caddr = HostAddresses.parse(encoding.getData(), (byte)0x0A, true); caddr = HostAddresses.parse(encoding.getData(), (byte)0x0A, true);
if (encoding.getData().available() > 0) if (encoding.getData().available() > 0)
@ -159,10 +152,10 @@ public class KrbCredInfo {
public byte[] asn1Encode() throws Asn1Exception, IOException { public byte[] asn1Encode() throws Asn1Exception, IOException {
Vector<DerValue> v = new Vector<>(); Vector<DerValue> v = new Vector<>();
v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), key.asn1Encode())); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), key.asn1Encode()));
if (prealm != null) if (pname != null) {
v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), prealm.asn1Encode())); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), pname.getRealm().asn1Encode()));
if (pname != null)
v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), pname.asn1Encode())); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), pname.asn1Encode()));
}
if (flags != null) if (flags != null)
v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), flags.asn1Encode())); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), flags.asn1Encode()));
if (authtime != null) if (authtime != null)
@ -173,10 +166,10 @@ public class KrbCredInfo {
v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x06), endtime.asn1Encode())); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x06), endtime.asn1Encode()));
if (renewTill != null) if (renewTill != null)
v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x07), renewTill.asn1Encode())); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x07), renewTill.asn1Encode()));
if (srealm != null) if (sname != null) {
v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x08), srealm.asn1Encode())); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x08), sname.getRealm().asn1Encode()));
if (sname != null)
v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x09), sname.asn1Encode())); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x09), sname.asn1Encode()));
}
if (caddr != null) if (caddr != null)
v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x0A), caddr.asn1Encode())); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x0A), caddr.asn1Encode()));
DerValue der[] = new DerValue[v.size()]; DerValue der[] = new DerValue[v.size()];
@ -190,8 +183,6 @@ public class KrbCredInfo {
KrbCredInfo kcred = new KrbCredInfo(); KrbCredInfo kcred = new KrbCredInfo();
kcred.key = (EncryptionKey)key.clone(); kcred.key = (EncryptionKey)key.clone();
// optional fields // optional fields
if (prealm != null)
kcred.prealm = (Realm)prealm.clone();
if (pname != null) if (pname != null)
kcred.pname = (PrincipalName)pname.clone(); kcred.pname = (PrincipalName)pname.clone();
if (flags != null) if (flags != null)
@ -204,8 +195,6 @@ public class KrbCredInfo {
kcred.endtime = (KerberosTime)endtime.clone(); kcred.endtime = (KerberosTime)endtime.clone();
if (renewTill != null) if (renewTill != null)
kcred.renewTill = (KerberosTime)renewTill.clone(); kcred.renewTill = (KerberosTime)renewTill.clone();
if (srealm != null)
kcred.srealm = (Realm)srealm.clone();
if (sname != null) if (sname != null)
kcred.sname = (PrincipalName)sname.clone(); kcred.sname = (PrincipalName)sname.clone();
if (caddr != null) if (caddr != null)

View File

@ -42,12 +42,11 @@ public class TGSRep extends KDCRep {
public TGSRep( public TGSRep(
PAData[] new_pAData, PAData[] new_pAData,
Realm new_crealm,
PrincipalName new_cname, PrincipalName new_cname,
Ticket new_ticket, Ticket new_ticket,
EncryptedData new_encPart EncryptedData new_encPart
) throws IOException { ) throws IOException {
super(new_pAData, new_crealm, new_cname, new_ticket, super(new_pAData, new_cname, new_ticket,
new_encPart, Krb5.KRB_TGS_REP); new_encPart, Krb5.KRB_TGS_REP);
} }

View File

@ -60,7 +60,6 @@ import java.math.BigInteger;
public class Ticket implements Cloneable { public class Ticket implements Cloneable {
public int tkt_vno; public int tkt_vno;
public Realm realm;
public PrincipalName sname; public PrincipalName sname;
public EncryptedData encPart; public EncryptedData encPart;
@ -69,7 +68,6 @@ public class Ticket implements Cloneable {
public Object clone() { public Object clone() {
Ticket new_ticket = new Ticket(); Ticket new_ticket = new Ticket();
new_ticket.realm = (Realm)realm.clone();
new_ticket.sname = (PrincipalName)sname.clone(); new_ticket.sname = (PrincipalName)sname.clone();
new_ticket.encPart = (EncryptedData)encPart.clone(); new_ticket.encPart = (EncryptedData)encPart.clone();
new_ticket.tkt_vno = tkt_vno; new_ticket.tkt_vno = tkt_vno;
@ -77,12 +75,10 @@ public class Ticket implements Cloneable {
} }
public Ticket( public Ticket(
Realm new_realm,
PrincipalName new_sname, PrincipalName new_sname,
EncryptedData new_encPart EncryptedData new_encPart
) { ) {
tkt_vno = Krb5.TICKET_VNO; tkt_vno = Krb5.TICKET_VNO;
realm = new_realm;
sname = new_sname; sname = new_sname;
encPart = new_encPart; encPart = new_encPart;
} }
@ -123,8 +119,8 @@ public class Ticket implements Cloneable {
tkt_vno = subDer.getData().getBigInteger().intValue(); tkt_vno = subDer.getData().getBigInteger().intValue();
if (tkt_vno != Krb5.TICKET_VNO) if (tkt_vno != Krb5.TICKET_VNO)
throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION); throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION);
realm = Realm.parse(der.getData(), (byte)0x01, false); Realm srealm = Realm.parse(der.getData(), (byte)0x01, false);
sname = PrincipalName.parse(der.getData(), (byte)0x02, false); sname = PrincipalName.parse(der.getData(), (byte)0x02, false, srealm);
encPart = EncryptedData.parse(der.getData(), (byte)0x03, false); encPart = EncryptedData.parse(der.getData(), (byte)0x03, false);
if (der.getData().available() > 0) if (der.getData().available() > 0)
throw new Asn1Exception(Krb5.ASN1_BAD_ID); throw new Asn1Exception(Krb5.ASN1_BAD_ID);
@ -142,7 +138,7 @@ public class Ticket implements Cloneable {
DerValue der[] = new DerValue[4]; DerValue der[] = new DerValue[4];
temp.putInteger(BigInteger.valueOf(tkt_vno)); 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)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)0x02), sname.asn1Encode());
bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), encPart.asn1Encode()); bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), encPart.asn1Encode());
temp = new DerOutputStream(); temp = new DerOutputStream();

View File

@ -114,7 +114,6 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
// made public for KinitOptions to call directly // made public for KinitOptions to call directly
public PrincipalName readPrincipal(int version) throws IOException, RealmException { public PrincipalName readPrincipal(int version) throws IOException, RealmException {
int type, length, namelength, kret; int type, length, namelength, kret;
PrincipalName p;
String[] pname = null; String[] pname = null;
String realm; String realm;
/* Read principal type */ /* Read principal type */
@ -144,11 +143,13 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
realm = result[0]; realm = result[0];
pname = new String[length]; pname = new String[length];
System.arraycopy(result, 1, pname, 0, length); System.arraycopy(result, 1, pname, 0, length);
p = new PrincipalName(pname, type); return new PrincipalName(type, pname, new Realm(realm));
p.setRealm(realm); }
try {
return new PrincipalName(result, type);
} catch (RealmException re) {
return null;
} }
else p = new PrincipalName(result, type);
return p;
} }
/* /*
@ -342,10 +343,10 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
Credentials readCred(int version) throws IOException,RealmException, KrbApErrException, Asn1Exception { Credentials readCred(int version) throws IOException,RealmException, KrbApErrException, Asn1Exception {
PrincipalName cpname = readPrincipal(version); PrincipalName cpname = readPrincipal(version);
if (DEBUG) 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); PrincipalName spname = readPrincipal(version);
if (DEBUG) 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); EncryptionKey key = readKey(version);
if (DEBUG) if (DEBUG)
System.out.println(">>>DEBUG <CCacheInputStream> key type: " + key.getEType()); System.out.println(">>>DEBUG <CCacheInputStream> key type: " + key.getEType());

View File

@ -36,9 +36,7 @@ import sun.security.krb5.internal.*;
public class Credentials { public class Credentials {
PrincipalName cname; PrincipalName cname;
Realm crealm;
PrincipalName sname; PrincipalName sname;
Realm srealm;
EncryptionKey key; EncryptionKey key;
KerberosTime authtime; KerberosTime authtime;
KerberosTime starttime;//optional KerberosTime starttime;//optional
@ -67,15 +65,7 @@ public class Credentials {
Ticket new_ticket, Ticket new_ticket,
Ticket new_secondTicket) { Ticket new_secondTicket) {
cname = (PrincipalName) new_cname.clone(); cname = (PrincipalName) new_cname.clone();
if (new_cname.getRealm() != null) {
crealm = (Realm) new_cname.getRealm().clone();
}
sname = (PrincipalName) new_sname.clone(); sname = (PrincipalName) new_sname.clone();
if (new_sname.getRealm() != null) {
srealm = (Realm) new_sname.getRealm().clone();
}
key = (EncryptionKey) new_key.clone(); key = (EncryptionKey) new_key.clone();
authtime = (KerberosTime) new_authtime.clone(); authtime = (KerberosTime) new_authtime.clone();
@ -110,7 +100,6 @@ public class Credentials {
{ {
return; return;
} }
crealm = (Realm) kdcRep.crealm.clone();
cname = (PrincipalName) kdcRep.cname.clone(); cname = (PrincipalName) kdcRep.cname.clone();
ticket = (Ticket) kdcRep.ticket.clone(); ticket = (Ticket) kdcRep.ticket.clone();
key = (EncryptionKey) kdcRep.encKDCRepPart.key.clone(); key = (EncryptionKey) kdcRep.encKDCRepPart.key.clone();
@ -123,7 +112,6 @@ public class Credentials {
if (kdcRep.encKDCRepPart.renewTill != null) { if (kdcRep.encKDCRepPart.renewTill != null) {
renewTill = (KerberosTime) kdcRep.encKDCRepPart.renewTill.clone(); renewTill = (KerberosTime) kdcRep.encKDCRepPart.renewTill.clone();
} }
srealm = (Realm) kdcRep.encKDCRepPart.srealm.clone();
sname = (PrincipalName) kdcRep.encKDCRepPart.sname.clone(); sname = (PrincipalName) kdcRep.encKDCRepPart.sname.clone();
caddr = (HostAddresses) kdcRep.encKDCRepPart.caddr.clone(); caddr = (HostAddresses) kdcRep.encKDCRepPart.caddr.clone();
secondTicket = (Ticket) new_secondTicket.clone(); secondTicket = (Ticket) new_secondTicket.clone();
@ -138,17 +126,7 @@ public class Credentials {
public Credentials(KDCRep kdcRep, Ticket new_ticket) { public Credentials(KDCRep kdcRep, Ticket new_ticket) {
sname = (PrincipalName) kdcRep.encKDCRepPart.sname.clone(); sname = (PrincipalName) kdcRep.encKDCRepPart.sname.clone();
srealm = (Realm) kdcRep.encKDCRepPart.srealm.clone();
try {
sname.setRealm(srealm);
} catch (RealmException e) {
}
cname = (PrincipalName) kdcRep.cname.clone(); cname = (PrincipalName) kdcRep.cname.clone();
crealm = (Realm) kdcRep.crealm.clone();
try {
cname.setRealm(crealm);
} catch (RealmException e) {
}
key = (EncryptionKey) kdcRep.encKDCRepPart.key.clone(); key = (EncryptionKey) kdcRep.encKDCRepPart.key.clone();
authtime = (KerberosTime) kdcRep.encKDCRepPart.authtime.clone(); authtime = (KerberosTime) kdcRep.encKDCRepPart.authtime.clone();
if (kdcRep.encKDCRepPart.starttime != null) { if (kdcRep.encKDCRepPart.starttime != null) {
@ -202,9 +180,6 @@ public class Credentials {
} }
public PrincipalName getServicePrincipal() throws RealmException { public PrincipalName getServicePrincipal() throws RealmException {
if (sname.getRealm() == null) {
sname.setRealm(srealm);
}
return sname; return sname;
} }

View File

@ -120,6 +120,6 @@ public abstract class CredentialsCache {
public abstract void save() throws IOException, KrbException; public abstract void save() throws IOException, KrbException;
public abstract Credentials[] getCredsList(); public abstract Credentials[] getCredsList();
public abstract Credentials getDefaultCreds(); public abstract Credentials getDefaultCreds();
public abstract Credentials getCreds(PrincipalName sname, Realm srealm) ; public abstract Credentials getCreds(PrincipalName sname);
public abstract Credentials getCreds(LoginOptions options, PrincipalName sname, Realm srealm) ; public abstract Credentials getCreds(LoginOptions options, PrincipalName sname);
} }

View File

@ -59,7 +59,6 @@ public class FileCredentialsCache extends CredentialsCache
public int version; public int version;
public Tag tag; // optional public Tag tag; // optional
public PrincipalName primaryPrincipal; public PrincipalName primaryPrincipal;
public Realm primaryRealm;
private Vector<Credentials> credentialsList; private Vector<Credentials> credentialsList;
private static String dir; private static String dir;
private static boolean DEBUG = Krb5.DEBUG; private static boolean DEBUG = Krb5.DEBUG;
@ -79,7 +78,6 @@ public class FileCredentialsCache extends CredentialsCache
} }
if (principal != null) { if (principal != null) {
fcc.primaryPrincipal = principal; fcc.primaryPrincipal = principal;
fcc.primaryRealm = principal.getRealm();
} }
fcc.load(cacheName); fcc.load(cacheName);
return fcc; return fcc;
@ -153,7 +151,6 @@ public class FileCredentialsCache extends CredentialsCache
synchronized void init(PrincipalName principal, String name) synchronized void init(PrincipalName principal, String name)
throws IOException, KrbException { throws IOException, KrbException {
primaryPrincipal = principal; primaryPrincipal = principal;
primaryRealm = principal.getRealm();
CCacheOutputStream cos = CCacheOutputStream cos =
new CCacheOutputStream(new FileOutputStream(name)); new CCacheOutputStream(new FileOutputStream(name));
version = KRB5_FCC_FVNO_3; version = KRB5_FCC_FVNO_3;
@ -183,7 +180,6 @@ public class FileCredentialsCache extends CredentialsCache
} }
} else } else
primaryPrincipal = p; primaryPrincipal = p;
primaryRealm = primaryPrincipal.getRealm();
credentialsList = new Vector<Credentials> (); credentialsList = new Vector<Credentials> ();
while (cis.available() > 0) { while (cis.available() > 0) {
Credentials cred = cis.readCred(version); Credentials cred = cis.readCred(version);
@ -291,18 +287,16 @@ public class FileCredentialsCache extends CredentialsCache
} }
public Credentials getCreds(LoginOptions options, public Credentials getCreds(LoginOptions options, PrincipalName sname) {
PrincipalName sname, Realm srealm) {
if (options == null) { if (options == null) {
return getCreds(sname, srealm); return getCreds(sname);
} else { } else {
Credentials[] list = getCredsList(); Credentials[] list = getCredsList();
if (list == null) { if (list == null) {
return null; return null;
} else { } else {
for (int i = 0; i < list.length; i++) { for (int i = 0; i < list.length; i++) {
if (sname.match(list[i].sname) && if (sname.match(list[i].sname)) {
(srealm.toString().equals(list[i].srealm.toString()))) {
if (list[i].flags.match(options)) { if (list[i].flags.match(options)) {
return list[i]; return list[i];
} }
@ -317,16 +311,14 @@ public class FileCredentialsCache extends CredentialsCache
/** /**
* Gets a credentials for a specified service. * Gets a credentials for a specified service.
* @param sname service principal name. * @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(); Credentials[] list = getCredsList();
if (list == null) { if (list == null) {
return null; return null;
} else { } else {
for (int i = 0; i < list.length; i++) { for (int i = 0; i < list.length; i++) {
if (sname.match(list[i].sname) && if (sname.match(list[i].sname)) {
(srealm.toString().equals(list[i].srealm.toString()))) {
return list[i]; return list[i];
} }
} }
@ -343,7 +335,7 @@ public class FileCredentialsCache extends CredentialsCache
if (list[i].sname.toString().startsWith("krbtgt")) { if (list[i].sname.toString().startsWith("krbtgt")) {
String[] nameStrings = list[i].sname.getNameStrings(); String[] nameStrings = list[i].sname.getNameStrings();
// find the TGT for the current realm krbtgt/realm@realm // 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]; return list[i];
} }
} }

View File

@ -64,7 +64,7 @@ public abstract class MemoryCredentialsCache extends CredentialsCache {
public abstract Credentials[] getCredsList(); public abstract Credentials[] getCredsList();
public abstract Credentials getCreds(PrincipalName sname, Realm srealm) ; public abstract Credentials getCreds(PrincipalName sname) ;
public abstract PrincipalName getPrimaryPrincipal(); public abstract PrincipalName getPrimaryPrincipal();

View File

@ -83,8 +83,7 @@ public class KeyTabInputStream extends KrbDataInputStream implements KeyTabConst
} }
int nameType = read(4); int nameType = read(4);
index -= 4; index -= 4;
PrincipalName service = new PrincipalName(nameParts, nameType); PrincipalName service = new PrincipalName(nameType, nameParts, realm);
service.setRealm(realm);
KerberosTime timeStamp = readTimeStamp(); KerberosTime timeStamp = readTimeStamp();
int keyVersion = read() & 0xff; int keyVersion = read() & 0xff;

View File

@ -163,7 +163,7 @@ public final class KerberosClientKeyExchangeImpl
EncryptedData encPart = t.encPart; EncryptedData encPart = t.encPart;
PrincipalName ticketSname = t.sname; PrincipalName ticketSname = t.sname;
Realm ticketRealm = t.realm; Realm ticketRealm = t.sname.getRealm();
String serverPrincipal = serverKeys[0].getPrincipal().getName(); String serverPrincipal = serverKeys[0].getPrincipal().getName();
@ -175,8 +175,7 @@ public final class KerberosClientKeyExchangeImpl
*/ */
// Check that ticket Sname matches serverPrincipal // Check that ticket Sname matches serverPrincipal
String ticketPrinc = ticketSname.toString().concat("@" + String ticketPrinc = ticketSname.toString();
ticketRealm.toString());
if (!ticketPrinc.equals(serverPrincipal)) { if (!ticketPrinc.equals(serverPrincipal)) {
if (debug != null && Debug.isOn("handshake")) if (debug != null && Debug.isOn("handshake"))
System.out.println("Service principal in Ticket does not" System.out.println("Service principal in Ticket does not"
@ -224,7 +223,6 @@ public final class KerberosClientKeyExchangeImpl
if (debug != null && Debug.isOn("handshake")) { if (debug != null && Debug.isOn("handshake")) {
System.out.println("server principal: " + serverPrincipal); System.out.println("server principal: " + serverPrincipal);
System.out.println("realm: " + encTicketPart.crealm.toString());
System.out.println("cname: " + encTicketPart.cname.toString()); System.out.println("cname: " + encTicketPart.cname.toString());
} }
} catch (IOException e) { } catch (IOException e) {

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -55,7 +55,7 @@ class LinuxUserDefinedFileAttributeView
name = USER_NAMESPACE + name; name = USER_NAMESPACE + name;
byte[] bytes = name.getBytes(); byte[] bytes = name.getBytes();
if (bytes.length > XATTR_NAME_MAX) { if (bytes.length > XATTR_NAME_MAX) {
throw new FileSystemException(file.getPathForExecptionMessage(), throw new FileSystemException(file.getPathForExceptionMessage(),
null, "'" + name + "' is too big"); null, "'" + name + "' is too big");
} }
return bytes; return bytes;
@ -116,7 +116,7 @@ class LinuxUserDefinedFileAttributeView
buffer = NativeBuffers.getNativeBuffer(size); buffer = NativeBuffers.getNativeBuffer(size);
continue; continue;
} }
throw new FileSystemException(file.getPathForExecptionMessage(), throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Unable to get list of extended attributes: " + null, "Unable to get list of extended attributes: " +
x.getMessage()); x.getMessage());
} }
@ -138,7 +138,7 @@ class LinuxUserDefinedFileAttributeView
// fgetxattr returns size if called with size==0 // fgetxattr returns size if called with size==0
return fgetxattr(fd, nameAsBytes(file,name), 0L, 0); return fgetxattr(fd, nameAsBytes(file,name), 0L, 0);
} catch (UnixException x) { } catch (UnixException x) {
throw new FileSystemException(file.getPathForExecptionMessage(), throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Unable to get size of extended attribute '" + name + null, "Unable to get size of extended attribute '" + name +
"': " + x.getMessage()); "': " + x.getMessage());
} finally { } finally {
@ -191,7 +191,7 @@ class LinuxUserDefinedFileAttributeView
} catch (UnixException x) { } catch (UnixException x) {
String msg = (x.errno() == ERANGE) ? String msg = (x.errno() == ERANGE) ?
"Insufficient space in buffer" : x.getMessage(); "Insufficient space in buffer" : x.getMessage();
throw new FileSystemException(file.getPathForExecptionMessage(), throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Error reading extended attribute '" + name + "': " + msg); null, "Error reading extended attribute '" + name + "': " + msg);
} finally { } finally {
close(fd); close(fd);
@ -243,7 +243,7 @@ class LinuxUserDefinedFileAttributeView
src.position(pos + rem); src.position(pos + rem);
return rem; return rem;
} catch (UnixException x) { } catch (UnixException x) {
throw new FileSystemException(file.getPathForExecptionMessage(), throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Error writing extended attribute '" + name + "': " + null, "Error writing extended attribute '" + name + "': " +
x.getMessage()); x.getMessage());
} finally { } finally {
@ -264,7 +264,7 @@ class LinuxUserDefinedFileAttributeView
try { try {
fremovexattr(fd, nameAsBytes(file,name)); fremovexattr(fd, nameAsBytes(file,name));
} catch (UnixException x) { } catch (UnixException x) {
throw new FileSystemException(file.getPathForExecptionMessage(), throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Unable to delete extended attribute '" + name + "': " + x.getMessage()); null, "Unable to delete extended attribute '" + name + "': " + x.getMessage());
} finally { } finally {
close(fd); close(fd);

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -246,7 +246,7 @@ class LinuxWatchService
return x.asIOException(dir); return x.asIOException(dir);
} }
if (!attrs.isDirectory()) { if (!attrs.isDirectory()) {
return new NotDirectoryException(dir.getPathForExecptionMessage()); return new NotDirectoryException(dir.getPathForExceptionMessage());
} }
// register with inotify (replaces existing mask if already registered) // register with inotify (replaces existing mask if already registered)

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -324,7 +324,7 @@ class SolarisAclFileAttributeView
return decode(address, n); return decode(address, n);
} catch (UnixException x) { } catch (UnixException x) {
if ((x.errno() == ENOSYS) || !isAclsEnabled(fd)) { 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)"); null, x.getMessage() + " (file system does not support NFSv4 ACLs)");
} }
x.rethrowAsIOException(file); x.rethrowAsIOException(file);
@ -355,7 +355,7 @@ class SolarisAclFileAttributeView
facl(fd, ACE_SETACL, n, address); facl(fd, ACE_SETACL, n, address);
} catch (UnixException x) { } catch (UnixException x) {
if ((x.errno() == ENOSYS) || !isAclsEnabled(fd)) { 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)"); null, x.getMessage() + " (file system does not support NFSv4 ACLs)");
} }
if (x.errno() == EINVAL && (n < 3)) if (x.errno() == EINVAL && (n < 3))

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -49,7 +49,7 @@ class SolarisUserDefinedFileAttributeView
if (bytes.length <= 1 || if (bytes.length <= 1 ||
(bytes.length == 2 && bytes[1] == '.')) (bytes.length == 2 && bytes[1] == '.'))
{ {
throw new FileSystemException(file.getPathForExecptionMessage(), throw new FileSystemException(file.getPathForExceptionMessage(),
null, "'" + name + "' is not a valid name"); null, "'" + name + "' is not a valid name");
} }
} }
@ -96,7 +96,7 @@ class SolarisUserDefinedFileAttributeView
} }
return Collections.unmodifiableList(list); return Collections.unmodifiableList(list);
} catch (UnixException x) { } catch (UnixException x) {
throw new FileSystemException(file.getPathForExecptionMessage(), throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Unable to get list of extended attributes: " + null, "Unable to get list of extended attributes: " +
x.getMessage()); x.getMessage());
} }
@ -126,7 +126,7 @@ class SolarisUserDefinedFileAttributeView
close(afd); close(afd);
} }
} catch (UnixException x) { } catch (UnixException x) {
throw new FileSystemException(file.getPathForExecptionMessage(), throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Unable to get size of extended attribute '" + name + null, "Unable to get size of extended attribute '" + name +
"': " + x.getMessage()); "': " + x.getMessage());
} }
@ -165,7 +165,7 @@ class SolarisUserDefinedFileAttributeView
fc.close(); fc.close();
} }
} catch (UnixException x) { } catch (UnixException x) {
throw new FileSystemException(file.getPathForExecptionMessage(), throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Unable to read extended attribute '" + name + null, "Unable to read extended attribute '" + name +
"': " + x.getMessage()); "': " + x.getMessage());
} }
@ -201,7 +201,7 @@ class SolarisUserDefinedFileAttributeView
fc.close(); fc.close();
} }
} catch (UnixException x) { } catch (UnixException x) {
throw new FileSystemException(file.getPathForExecptionMessage(), throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Unable to write extended attribute '" + name + null, "Unable to write extended attribute '" + name +
"': " + x.getMessage()); "': " + x.getMessage());
} }
@ -224,7 +224,7 @@ class SolarisUserDefinedFileAttributeView
close(dfd); close(dfd);
} }
} catch (UnixException x) { } catch (UnixException x) {
throw new FileSystemException(file.getPathForExecptionMessage(), throw new FileSystemException(file.getPathForExceptionMessage(),
null, "Unable to delete extended attribute '" + name + null, "Unable to delete extended attribute '" + name +
"': " + x.getMessage()); "': " + x.getMessage());
} finally { } finally {

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -288,7 +288,7 @@ class SolarisWatchService
return x.asIOException(dir); return x.asIOException(dir);
} }
if (!attrs.isDirectory()) { if (!attrs.isDirectory()) {
return new NotDirectoryException(dir.getPathForExecptionMessage()); return new NotDirectoryException(dir.getPathForExceptionMessage());
} }
// return existing watch key after updating events if already // return existing watch key after updating events if already

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -383,8 +383,8 @@ class UnixCopyFile {
} catch (UnixException x) { } catch (UnixException x) {
if (x.errno() == EXDEV) { if (x.errno() == EXDEV) {
throw new AtomicMoveNotSupportedException( throw new AtomicMoveNotSupportedException(
source.getPathForExecptionMessage(), source.getPathForExceptionMessage(),
target.getPathForExecptionMessage(), target.getPathForExceptionMessage(),
x.errorString()); x.errorString());
} }
x.rethrowAsIOException(source, target); x.rethrowAsIOException(source, target);
@ -420,7 +420,7 @@ class UnixCopyFile {
return; // nothing to do as files are identical return; // nothing to do as files are identical
if (!flags.replaceExisting) { if (!flags.replaceExisting) {
throw new FileAlreadyExistsException( throw new FileAlreadyExistsException(
target.getPathForExecptionMessage()); target.getPathForExceptionMessage());
} }
// attempt to delete target // attempt to delete target
@ -436,7 +436,7 @@ class UnixCopyFile {
(x.errno() == EEXIST || x.errno() == ENOTEMPTY)) (x.errno() == EEXIST || x.errno() == ENOTEMPTY))
{ {
throw new DirectoryNotEmptyException( throw new DirectoryNotEmptyException(
target.getPathForExecptionMessage()); target.getPathForExceptionMessage());
} }
x.rethrowAsIOException(target); x.rethrowAsIOException(target);
} }
@ -489,7 +489,7 @@ class UnixCopyFile {
(x.errno() == EEXIST || x.errno() == ENOTEMPTY)) (x.errno() == EEXIST || x.errno() == ENOTEMPTY))
{ {
throw new DirectoryNotEmptyException( throw new DirectoryNotEmptyException(
source.getPathForExecptionMessage()); source.getPathForExceptionMessage());
} }
x.rethrowAsIOException(source); x.rethrowAsIOException(source);
} }
@ -542,7 +542,7 @@ class UnixCopyFile {
return; // nothing to do as files are identical return; // nothing to do as files are identical
if (!flags.replaceExisting) if (!flags.replaceExisting)
throw new FileAlreadyExistsException( throw new FileAlreadyExistsException(
target.getPathForExecptionMessage()); target.getPathForExceptionMessage());
try { try {
if (targetAttrs.isDirectory()) { if (targetAttrs.isDirectory()) {
rmdir(target); rmdir(target);
@ -555,7 +555,7 @@ class UnixCopyFile {
(x.errno() == EEXIST || x.errno() == ENOTEMPTY)) (x.errno() == EEXIST || x.errno() == ENOTEMPTY))
{ {
throw new DirectoryNotEmptyException( throw new DirectoryNotEmptyException(
target.getPathForExecptionMessage()); target.getPathForExceptionMessage());
} }
x.rethrowAsIOException(target); x.rethrowAsIOException(target);
} }

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -97,8 +97,8 @@ class UnixException extends Exception {
} }
void rethrowAsIOException(UnixPath file, UnixPath other) throws IOException { void rethrowAsIOException(UnixPath file, UnixPath other) throws IOException {
String a = (file == null) ? null : file.getPathForExecptionMessage(); String a = (file == null) ? null : file.getPathForExceptionMessage();
String b = (other == null) ? null : other.getPathForExecptionMessage(); String b = (other == null) ? null : other.getPathForExceptionMessage();
IOException x = translateToIOException(a, b); IOException x = translateToIOException(a, b);
throw x; throw x;
} }
@ -108,6 +108,6 @@ class UnixException extends Exception {
} }
IOException asIOException(UnixPath file) { IOException asIOException(UnixPath file) {
return translateToIOException(file.getPathForExecptionMessage(), null); return translateToIOException(file.getPathForExceptionMessage(), null);
} }
} }

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -238,7 +238,7 @@ public abstract class UnixFileSystemProvider
// DirectoryNotEmptyException if not empty // DirectoryNotEmptyException if not empty
if (attrs != null && attrs.isDirectory() && if (attrs != null && attrs.isDirectory() &&
(x.errno() == EEXIST || x.errno() == ENOTEMPTY)) (x.errno() == EEXIST || x.errno() == ENOTEMPTY))
throw new DirectoryNotEmptyException(file.getPathForExecptionMessage()); throw new DirectoryNotEmptyException(file.getPathForExceptionMessage());
x.rethrowAsIOException(file); x.rethrowAsIOException(file);
return false; return false;
@ -401,7 +401,7 @@ public abstract class UnixFileSystemProvider
return new UnixDirectoryStream(dir, ptr, filter); return new UnixDirectoryStream(dir, ptr, filter);
} catch (UnixException x) { } catch (UnixException x) {
if (x.errno() == ENOTDIR) if (x.errno() == ENOTDIR)
throw new NotDirectoryException(dir.getPathForExecptionMessage()); throw new NotDirectoryException(dir.getPathForExceptionMessage());
x.rethrowAsIOException(dir); x.rethrowAsIOException(dir);
} }
} }
@ -421,7 +421,7 @@ public abstract class UnixFileSystemProvider
if (dfd2 != -1) if (dfd2 != -1)
UnixNativeDispatcher.close(dfd2); UnixNativeDispatcher.close(dfd2);
if (x.errno() == UnixConstants.ENOTDIR) if (x.errno() == UnixConstants.ENOTDIR)
throw new NotDirectoryException(dir.getPathForExecptionMessage()); throw new NotDirectoryException(dir.getPathForExceptionMessage());
x.rethrowAsIOException(dir); x.rethrowAsIOException(dir);
} }
return new UnixSecureDirectoryStream(dir, dp, dfd2, filter); return new UnixSecureDirectoryStream(dir, dp, dfd2, filter);
@ -490,7 +490,7 @@ public abstract class UnixFileSystemProvider
return new UnixPath(link.getFileSystem(), target); return new UnixPath(link.getFileSystem(), target);
} catch (UnixException x) { } catch (UnixException x) {
if (x.errno() == UnixConstants.EINVAL) if (x.errno() == UnixConstants.EINVAL)
throw new NotLinkException(link.getPathForExecptionMessage()); throw new NotLinkException(link.getPathForExceptionMessage());
x.rethrowAsIOException(link); x.rethrowAsIOException(link);
return null; // keep compiler happy return null; // keep compiler happy
} }

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -179,7 +179,7 @@ class UnixPath
} }
// use this message when throwing exceptions // use this message when throwing exceptions
String getPathForExecptionMessage() { String getPathForExceptionMessage() {
return toString(); return toString();
} }
@ -780,7 +780,7 @@ class UnixPath
x.setError(ELOOP); x.setError(ELOOP);
if (x.errno() == 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.getMessage() + " or unable to access attributes of symbolic link");
x.rethrowAsIOException(this); x.rethrowAsIOException(this);

View File

@ -196,7 +196,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
struct addrinfo *next struct addrinfo *next
= (struct addrinfo*) malloc(sizeof(struct addrinfo)); = (struct addrinfo*) malloc(sizeof(struct addrinfo));
if (!next) { if (!next) {
JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed");
ret = NULL; ret = NULL;
goto cleanupAndReturn; goto cleanupAndReturn;
} }
@ -465,7 +465,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
struct addrinfo *next struct addrinfo *next
= (struct addrinfo*) malloc(sizeof(struct addrinfo)); = (struct addrinfo*) malloc(sizeof(struct addrinfo));
if (!next) { if (!next) {
JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed");
ret = NULL; ret = NULL;
goto cleanupAndReturn; goto cleanupAndReturn;
} }

View File

@ -267,7 +267,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
struct addrinfo *next struct addrinfo *next
= (struct addrinfo*) malloc(sizeof(struct addrinfo)); = (struct addrinfo*) malloc(sizeof(struct addrinfo));
if (!next) { if (!next) {
JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed");
ret = NULL; ret = NULL;
goto cleanupAndReturn; goto cleanupAndReturn;
} }

View File

@ -804,7 +804,7 @@ static netif *enumInterfaces(JNIEnv *env) {
do{ \ do{ \
_pointer = (_type)malloc( _size ); \ _pointer = (_type)malloc( _size ); \
if (_pointer == NULL) { \ if (_pointer == NULL) { \
JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); \ JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed"); \
return ifs; /* return untouched list */ \ return ifs; /* return untouched list */ \
} \ } \
} while(0) } while(0)

View File

@ -485,7 +485,7 @@ Java_java_net_PlainDatagramSocketImpl_send(JNIEnv *env, jobject this,
fullPacket = (char *)malloc(packetBufferLen); fullPacket = (char *)malloc(packetBufferLen);
if (!fullPacket) { if (!fullPacket) {
JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); JNU_ThrowOutOfMemoryError(env, "Send buffer native heap allocation failed");
return; return;
} else { } else {
mallocedPacket = JNI_TRUE; mallocedPacket = JNI_TRUE;
@ -714,7 +714,7 @@ Java_java_net_PlainDatagramSocketImpl_peekData(JNIEnv *env, jobject this,
fullPacket = (char *)malloc(packetBufferLen); fullPacket = (char *)malloc(packetBufferLen);
if (!fullPacket) { if (!fullPacket) {
JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); JNU_ThrowOutOfMemoryError(env, "Peek buffer native heap allocation failed");
return -1; return -1;
} else { } else {
mallocedPacket = JNI_TRUE; mallocedPacket = JNI_TRUE;
@ -874,7 +874,7 @@ Java_java_net_PlainDatagramSocketImpl_receive0(JNIEnv *env, jobject this,
fullPacket = (char *)malloc(packetBufferLen); fullPacket = (char *)malloc(packetBufferLen);
if (!fullPacket) { if (!fullPacket) {
JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); JNU_ThrowOutOfMemoryError(env, "Receive buffer native heap allocation failed");
return; return;
} else { } else {
mallocedPacket = JNI_TRUE; mallocedPacket = JNI_TRUE;

View File

@ -206,9 +206,7 @@ public class Kinit {
System.out.println(">>> Kinit realm name is " + realm); System.out.println(">>> Kinit realm name is " + realm);
} }
PrincipalName sname = new PrincipalName("krbtgt" + "/" + realm, PrincipalName sname = PrincipalName.tgsService(realm, realm);
PrincipalName.KRB_NT_SRV_INST);
sname.setRealm(realm);
builder.setTarget(sname); builder.setTarget(sname);
if (DEBUG) { if (DEBUG) {

View File

@ -146,15 +146,6 @@ class KinitOptions {
"Principal name: " + p + "Principal name: " + p +
e.getMessage()); 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) { } else if (this.password == null) {
// Have already processed a Principal, this must be a password // Have already processed a Principal, this must be a password
password = args[i].toCharArray(); password = args[i].toCharArray();
@ -175,16 +166,6 @@ class KinitOptions {
} }
PrincipalName getDefaultPrincipal() { 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 // get default principal name from the cachename if it is
// available. // available.
@ -204,10 +185,6 @@ class KinitOptions {
} }
PrincipalName p = cis.readPrincipal(version); PrincipalName p = cis.readPrincipal(version);
cis.close(); cis.close();
String temp = p.getRealmString();
if (temp == null) {
p.setRealm(realm);
}
if (DEBUG) { if (DEBUG) {
System.out.println(">>>KinitOptions principal name from "+ System.out.println(">>>KinitOptions principal name from "+
"the cache is :" + p); "the cache is :" + p);
@ -230,19 +207,15 @@ class KinitOptions {
System.out.println(">>>KinitOptions default username is :" System.out.println(">>>KinitOptions default username is :"
+ username); + username);
} }
if (realm != null) { try {
try { PrincipalName p = new PrincipalName(username);
PrincipalName p = new PrincipalName(username); return p;
if (p.getRealm() == null) } catch (RealmException e) {
p.setRealm(realm); // ignore exception , return null
return p; if (DEBUG) {
} catch (RealmException e) { System.out.println ("Exception in getting principal " +
// ignore exception , return null "name " + e.getMessage());
if (DEBUG) { e.printStackTrace();
System.out.println ("Exception in getting principal " +
"name " + e.getMessage());
e.printStackTrace();
}
} }
} }
return null; return null;

View File

@ -273,9 +273,6 @@ public class Ktab {
PrincipalName pname = null; PrincipalName pname = null;
try { try {
pname = new PrincipalName(principal); pname = new PrincipalName(principal);
if (pname.getRealm() == null) {
pname.setRealm(Config.getInstance().getDefaultRealm());
}
} catch (KrbException e) { } catch (KrbException e) {
System.err.println("Failed to add " + principal + System.err.println("Failed to add " + principal +
" to keytab."); " to keytab.");
@ -382,9 +379,6 @@ public class Ktab {
PrincipalName pname = null; PrincipalName pname = null;
try { try {
pname = new PrincipalName(principal); pname = new PrincipalName(principal);
if (pname.getRealm() == null) {
pname.setRealm(Config.getInstance().getDefaultRealm());
}
if (!forced) { if (!forced) {
String answer; String answer;
BufferedReader cis = BufferedReader cis =

View File

@ -265,7 +265,7 @@ JNIEXPORT jint JNICALL Java_java_net_DualStackPlainDatagramSocketImpl_socketRece
} }
fullPacket = (char *)malloc(packetBufferLen); fullPacket = (char *)malloc(packetBufferLen);
if (!fullPacket) { if (!fullPacket) {
JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed");
return -1; return -1;
} }
} else { } else {
@ -427,7 +427,7 @@ JNIEXPORT void JNICALL Java_java_net_DualStackPlainDatagramSocketImpl_socketSend
} }
fullPacket = (char *)malloc(length); fullPacket = (char *)malloc(length);
if (!fullPacket) { if (!fullPacket) {
JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed");
return; return;
} }
} else { } else {

View File

@ -197,7 +197,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
struct addrinfo *next struct addrinfo *next
= (struct addrinfo*) malloc(sizeof(struct addrinfo)); = (struct addrinfo*) malloc(sizeof(struct addrinfo));
if (!next) { if (!next) {
JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed");
ret = NULL; ret = NULL;
goto cleanupAndReturn; goto cleanupAndReturn;
} }

View File

@ -270,7 +270,7 @@ int enumInterfaces(JNIEnv *env, netif **netifPP)
} }
} }
if (curr == NULL) { if (curr == NULL) {
JNU_ThrowOutOfMemoryError(env, "heap allocation failure"); JNU_ThrowOutOfMemoryError(env, "Native heap allocation failure");
free_netif(netifP); free_netif(netifP);
free(tableP); free(tableP);
return -1; return -1;
@ -370,7 +370,7 @@ int enumAddresses_win(JNIEnv *env, netif *netifP, netaddr **netaddrPP)
netaddr *curr = (netaddr *)malloc(sizeof(netaddr)); netaddr *curr = (netaddr *)malloc(sizeof(netaddr));
if (curr == NULL) { if (curr == NULL) {
JNU_ThrowOutOfMemoryError(env, "heap allocation failure"); JNU_ThrowOutOfMemoryError(env, "Native heap allocation failure");
free_netaddr(netaddrP); free_netaddr(netaddrP);
free(tableP); free(tableP);
return -1; return -1;

View File

@ -243,7 +243,7 @@ jboolean exceedSizeLimit(JNIEnv *env, jint fd, jint addr, jint size)
addrList = curr; addrList = curr;
} }
LeaveCriticalSection(&sizeCheckLock); LeaveCriticalSection(&sizeCheckLock);
JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed");
return JNI_TRUE; return JNI_TRUE;
} }
curr->addr = htonl((*addrp)->S_un.S_addr); curr->addr = htonl((*addrp)->S_un.S_addr);
@ -740,7 +740,7 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_send(JNIEnv *env, jobject this,
*/ */
fullPacket = (char *)malloc(packetBufferLen); fullPacket = (char *)malloc(packetBufferLen);
if (!fullPacket) { if (!fullPacket) {
JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); JNU_ThrowOutOfMemoryError(env, "Send buf native heap allocation failed");
return; return;
} }
} else { } else {
@ -1003,7 +1003,7 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_peekData(JNIEnv *env, jobject thi
*/ */
fullPacket = (char *)malloc(packetBufferLen); fullPacket = (char *)malloc(packetBufferLen);
if (!fullPacket) { if (!fullPacket) {
JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed");
return -1; return -1;
} }
} else { } else {
@ -1287,7 +1287,7 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_receive0(JNIEnv *env, jobject thi
*/ */
fullPacket = (char *)malloc(packetBufferLen); fullPacket = (char *)malloc(packetBufferLen);
if (!fullPacket) { if (!fullPacket) {
JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); JNU_ThrowOutOfMemoryError(env, "Receive buf native heap allocation failed");
return; return;
} }
} else { } else {

View File

@ -67,7 +67,6 @@ jmethodID encryptionKeyConstructor = 0;
jmethodID ticketFlagsConstructor = 0; jmethodID ticketFlagsConstructor = 0;
jmethodID kerberosTimeConstructor = 0; jmethodID kerberosTimeConstructor = 0;
jmethodID krbcredsConstructor = 0; jmethodID krbcredsConstructor = 0;
jmethodID setRealmMethod = 0;
/* /*
* Function prototypes for internal routines * Function prototypes for internal routines
@ -279,7 +278,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(
} }
principalNameConstructor = (*env)->GetMethodID(env, principalNameClass, principalNameConstructor = (*env)->GetMethodID(env, principalNameClass,
"<init>", "([Ljava/lang/String;)V"); "<init>", "([Ljava/lang/String;Ljava/lang/String;)V");
if (principalNameConstructor == 0) { if (principalNameConstructor == 0) {
printf("LSA: Couldn't find PrincipalName constructor\n"); printf("LSA: Couldn't find PrincipalName constructor\n");
return JNI_ERR; return JNI_ERR;
@ -318,14 +317,6 @@ JNIEXPORT jint JNICALL JNI_OnLoad(
printf("LSA: Found KerberosTime constructor\n"); 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) { if (native_debug) {
printf("LSA: Finished OnLoad processing\n"); printf("LSA: Finished OnLoad processing\n");
} }
@ -952,13 +943,12 @@ jobject BuildPrincipal(JNIEnv *env, PKERB_EXTERNAL_NAME principalName,
// Do I have to worry about storage reclamation here? // Do I have to worry about storage reclamation here?
} }
principal = (*env)->NewObject(env, principalNameClass,
principalNameConstructor, stringArray);
// now set the realm in the principal // now set the realm in the principal
realmLen = (ULONG)wcslen((PWCHAR)realm); realmLen = (ULONG)wcslen((PWCHAR)realm);
realmStr = (*env)->NewString(env, (PWCHAR)realm, (USHORT)realmLen); 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 // free local resources
LocalFree(realm); LocalFree(realm);

View File

@ -122,9 +122,6 @@
# jdk_lang # jdk_lang
# 7123972
java/lang/annotation/loaderLeak/Main.java generic-all
# 6944188 # 6944188
java/lang/management/ThreadMXBean/ThreadStateTest.java generic-all java/lang/management/ThreadMXBean/ThreadStateTest.java generic-all
@ -161,9 +158,6 @@ java/lang/Math/WorstCaseTests.java generic-all
# 6988950 # 6988950
demo/jvmti/compiledMethodLoad/CompiledMethodLoadTest.java generic-all 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 # 7162111
demo/jvmti/mtrace/TraceJFrame.java macosx-all demo/jvmti/mtrace/TraceJFrame.java macosx-all
javax/script/CauseExceptionTest.java macosx-all javax/script/CauseExceptionTest.java macosx-all
@ -268,21 +262,11 @@ java/nio/channels/Selector/OutOfBand.java macosx-all
# jdk_rmi # jdk_rmi
# 7140992
java/rmi/server/Unreferenced/finiteGCLatency/FiniteGCLatency.java generic-all
# 6948101
java/rmi/transport/pinLastArguments/PinLastArguments.java generic-all
# 7146541 # 7146541
java/rmi/transport/rapidExportUnexport/RapidExportUnexport.java linux-all java/rmi/transport/rapidExportUnexport/RapidExportUnexport.java linux-all
# 7132247 # 7132247
java/rmi/registry/readTest/readTest.sh windows-all java/rmi/registry/readTest/readTest.sh windows-all
# 7142596
java/rmi/transport/pinClientSocketFactory/PinClientSocketFactory.java generic-all
############################################################################ ############################################################################
# jdk_security # jdk_security

View File

@ -9,4 +9,4 @@ keys=2d dnd i18n
othervm.dirs=java/rmi sun/rmi javax/management othervm.dirs=java/rmi sun/rmi javax/management
# Tests that cannot run concurrently # 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

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -28,50 +28,111 @@
* LoginContext * LoginContext
* @author Brad Wetmore * @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 * We force the leak to become a problem by eating up most JVM free memory.
* size heap we can (above). In current runs on a server and client * In current runs on a server and client machine, it took roughly 50-150
* machine, it took roughly 220-240 iterations to have the memory leak * iterations to have the memory leak or time-out shut down other operations.
* shut down other operations. It complained about "Unable to verify * It complained about "JCE cannot authenticate the provider SunJCE" or timed
* the SunJCE provider." * out.
*/ */
import javax.crypto.*; import javax.crypto.*;
import javax.crypto.spec.*; import javax.crypto.spec.*;
import java.util.*;
import java.util.concurrent.*;
public class TestProviderLeak { 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 { private static void dumpMemoryStats(String s) throws Exception {
Runtime rt = Runtime.getRuntime(); Runtime rt = Runtime.getRuntime();
System.out.println(s + ":\t" + System.out.println(s + ":\t"
rt.freeMemory() + " bytes free"); + rt.freeMemory() + " bytes free");
} }
public static void main(String [] args) throws Exception { 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"); SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1", "SunJCE");
PBEKeySpec pbeKS = new PBEKeySpec( final PBEKeySpec pbeKS = new PBEKeySpec(
"passPhrase".toCharArray(), new byte [] { 0 }, 5, 512); "passPhrase".toCharArray(), new byte [] { 0 }, 5, 512);
for (int i = 0; i <= 1000; i++) {
try { ExecutorService executor = Executors.newSingleThreadExecutor();
skf.generateSecret(pbeKS); 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) { if ((i % 20) == 0) {
// Calling gc() isn't dependable, but doesn't hurt. // Calling gc() isn't dependable, but doesn't hurt.
// Gives better output in leak cases. // Gives better output in leak cases.
System.gc(); System.gc();
dumpMemoryStats("Iteration " + i); dumpMemoryStats("Iteration " + i);
} }
} catch (Exception e) {
dumpMemoryStats("\nException seen at iteration " + i); Future<SecretKey> future = executor.submit(task);
throw e;
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();
} }
} }
} }

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -25,26 +25,21 @@
* @test * @test
* @bug 6676075 * @bug 6676075
* @summary RegistryContext (com.sun.jndi.url.rmi.rmiURLContext) coding problem * @summary RegistryContext (com.sun.jndi.url.rmi.rmiURLContext) coding problem
* @library ../../../../../../java/rmi/testlibrary
* @build TestLibrary
* @run main ContextWithNullProperties
*/ */
import java.rmi.RemoteException; import com.sun.jndi.rmi.registry.RegistryContext;
import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry;
import com.sun.jndi.rmi.registry.*;
public class ContextWithNullProperties { public class ContextWithNullProperties {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
Registry registry = TestLibrary.createRegistryOnUnusedPort();
// Create registry on port 1099 if one is not already running. int registryPort = TestLibrary.getRegistryPort(registry);
try {
LocateRegistry.createRegistry(1099);
} catch (RemoteException e) {
}
System.out.println("Connecting to the default Registry..."); System.out.println("Connecting to the default Registry...");
// Connect to the default Registry. // Connect to the default Registry.
// Pass null as the JNDI environment properties (see final argument) // Pass null as the JNDI environment properties (see final argument)
RegistryContext ctx = new RegistryContext(null, -1, null); RegistryContext ctx = new RegistryContext(null, registryPort, null);
} }
} }

View File

@ -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 * @test
* @bug 4278121 * @bug 4278121
* @summary Ensure that calling unbind() on an unbound name returns * @summary Ensure that calling unbind() on an unbound name returns
* successfully. * 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 class UnbindIdempotent {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
Registry registry = TestLibrary.createRegistryOnUnusedPort();
// Create registry on port 1099 if one is not already running. int registryPort = TestLibrary.getRegistryPort(registry);
try { InitialContext ictx = new InitialContext();
java.rmi.registry.LocateRegistry.createRegistry(1099);
} catch (java.rmi.RemoteException e) {
}
Context ictx = new InitialContext();
Context rctx; Context rctx;
try { try {
rctx = (Context)ictx.lookup("rmi://localhost:1099"); rctx = (Context)ictx.lookup("rmi://localhost:" + Integer.toString(registryPort));
} catch (NamingException e) { } catch (NamingException e) {
// Unable to set up for test. // Unable to set up for test.
return; return;

View File

@ -57,9 +57,17 @@ public class Main {
System.gc(); System.gc();
System.gc(); System.gc();
loader = null; loader = null;
System.gc();
System.gc(); // Might require multiple calls to System.gc() for weak-references
if (c.get() != null) throw new AssertionError(); // 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;
}
}
} }
} }

View File

@ -243,10 +243,6 @@ public class TestHttpCookie {
test("set-cookie2: Customer = \"WILE_E_COYOTE\"; Version = \"1\"; Path = \"/acme\"") test("set-cookie2: Customer = \"WILE_E_COYOTE\"; Version = \"1\"; Path = \"/acme\"")
.n("Customer").v("WILE_E_COYOTE").ver(1).p("/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 // a 'full' cookie
test("set-cookie2: Customer=\"WILE_E_COYOTE\"" + test("set-cookie2: Customer=\"WILE_E_COYOTE\"" +
";Version=\"1\"" + ";Version=\"1\"" +

View File

@ -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);
}
}
}

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -25,10 +25,13 @@
* @bug 4387038 * @bug 4387038
* @summary Ensure that java.rmi.Naming.lookup functions properly for names * @summary Ensure that java.rmi.Naming.lookup functions properly for names
* containing embedded ':' characters. * containing embedded ':' characters.
*
* @library ../testlibrary
* @build TestLibrary
* @run main LookupNameWithColon
*/ */
import java.rmi.Naming; import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry; import java.rmi.registry.Registry;
public class LookupNameWithColon { public class LookupNameWithColon {
@ -38,15 +41,12 @@ public class LookupNameWithColon {
"multiple:colons:in:name" "multiple:colons:in:name"
}; };
Registry reg; Registry reg = TestLibrary.createRegistryOnUnusedPort();
try { int port = TestLibrary.getRegistryPort(reg);
reg = LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
} catch (Exception ex) {
reg = LocateRegistry.getRegistry();
}
for (int i = 0; i < names.length; i++) { for (int i = 0; i < names.length; i++) {
reg.rebind(names[i], reg); reg.rebind(names[i], reg);
Naming.lookup("rmi://localhost/" + names[i]); Naming.lookup("rmi://localhost:" + port + "/" + names[i]);
} }
} }
} }

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -39,9 +39,6 @@ import java.rmi.*;
import java.rmi.registry.*; import java.rmi.registry.*;
public class RmiIsNoScheme implements Remote, Serializable { public class RmiIsNoScheme implements Remote, Serializable {
private static final int REGISTRY_PORT = 2002;
private RmiIsNoScheme() {} private RmiIsNoScheme() {}
public static void main(String[] args) { public static void main(String[] args) {
@ -49,10 +46,11 @@ public class RmiIsNoScheme implements Remote, Serializable {
System.err.println("\nRegression test for bug 4626311\n"); System.err.println("\nRegression test for bug 4626311\n");
try { try {
LocateRegistry.createRegistry(REGISTRY_PORT); Registry registry = TestLibrary.createRegistryOnUnusedPort();
Naming.rebind("//:" + REGISTRY_PORT + "/RmiIsNoScheme", int registryPort = TestLibrary.getRegistryPort(registry);
Naming.rebind("//:" + registryPort + "/RmiIsNoScheme",
new RmiIsNoScheme()); new RmiIsNoScheme());
String name = Naming.list("//:" + REGISTRY_PORT)[0]; String name = Naming.list("//:" + registryPort)[0];
System.err.println("name = " + name); System.err.println("name = " + name);
if (name.startsWith("rmi:", 0) == false) { if (name.startsWith("rmi:", 0) == false) {
System.err.println("TEST PASSED: rmi scheme not present"); System.err.println("TEST PASSED: rmi scheme not present");

View File

@ -1,37 +1,37 @@
/* /*
* Copyright (c) 2005, 2006, 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. * published by the Free Software Foundation.
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * 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 * version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code). * accompanied this code).
* *
* You should have received a copy of the GNU General Public License version * 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, * 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
* *
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 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 * or visit www.oracle.com if you need additional information or have any
* questions. * questions.
*/ */
/* /*
* @test * @test
* @bug 5083594 * @bug 5083594
* @summary Ensure that Naming.java correctly parses host names with '_' in * @summary Ensure that Naming.java correctly parses host names with '_' in
* them. * them.
* @author Vinod Johnson * @author Vinod Johnson
* *
* @library ../testlibrary * @library ../testlibrary
* @build TestLibrary * @build TestLibrary
* @build UnderscoreHost UnderscoreHost_Stub * @build UnderscoreHost UnderscoreHost_Stub
* @run main/othervm UnderscoreHost * @run main/othervm UnderscoreHost
*/ */
import java.io.IOException; import java.io.IOException;
@ -77,11 +77,12 @@ public class UnderscoreHost extends UnicastRemoteObject implements Remote {
try { try {
HostVerifyingSocketFactory hvf = new HostVerifyingSocketFactory(); HostVerifyingSocketFactory hvf = new HostVerifyingSocketFactory();
RMISocketFactory.setSocketFactory(hvf); RMISocketFactory.setSocketFactory(hvf);
Registry r = LocateRegistry.createRegistry(Registry.REGISTRY_PORT); Registry r = TestLibrary.createRegistryOnUnusedPort();
int port = TestLibrary.getRegistryPort(r);
t = new UnderscoreHost(); t = new UnderscoreHost();
r.rebind(NAME, t); r.rebind(NAME, t);
Naming.lookup("rmi://" + HOSTNAME + Naming.lookup("rmi://" + HOSTNAME +
":" + Registry.REGISTRY_PORT + "/" + NAME); ":" + port + "/" + NAME);
/* /*
* This test is coded to pass whether java.net.URI obeys * This test is coded to pass whether java.net.URI obeys
* RFC 2396 or RFC 3986 (see 5085902, 6394131, etc.). * RFC 2396 or RFC 3986 (see 5085902, 6394131, etc.).

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -45,7 +45,9 @@ import java.util.Vector;
/** /**
* Ensure that all legal forms of Naming URLs operate with the * 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 public class LegalRegistryNames extends UnicastRemoteObject
implements Legal implements Legal

View File

@ -29,11 +29,12 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group // Needed to create an activation group
permission java.lang.RuntimePermission "setFactory"; permission java.lang.RuntimePermission "setFactory";

View File

@ -21,11 +21,12 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// required for test to create an ActivationGroup // required for test to create an ActivationGroup
permission java.lang.RuntimePermission "setFactory"; permission java.lang.RuntimePermission "setFactory";

View File

@ -32,11 +32,12 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// required for test to create an ActivationGroup // required for test to create an ActivationGroup
permission java.lang.RuntimePermission "setFactory"; permission java.lang.RuntimePermission "setFactory";

View File

@ -21,17 +21,18 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group // Needed to create an activation group
permission java.lang.RuntimePermission "setFactory"; permission java.lang.RuntimePermission "setFactory";
// allow exporting of remote objects on an arbitrary port. // 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 // allow exporting object with non-public remote interface
permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe"; permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe";

View File

@ -21,11 +21,12 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group // Needed to create an activation group
permission java.lang.RuntimePermission "setFactory"; permission java.lang.RuntimePermission "setFactory";

View File

@ -31,11 +31,12 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "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. // allow exporting of remote objects on an arbitrary port.
permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; permission java.net.SocketPermission "*:1024-", "connect,accept,listen";

View File

@ -30,11 +30,12 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group // Needed to create an activation group
permission java.lang.RuntimePermission "setFactory"; permission java.lang.RuntimePermission "setFactory";

View File

@ -17,11 +17,12 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "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. // allow exporting of remote objects on an arbitrary port.
permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; permission java.net.SocketPermission "*:1024-", "connect,accept,listen";

View File

@ -21,11 +21,12 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group // Needed to create an activation group
permission java.lang.RuntimePermission "setFactory"; permission java.lang.RuntimePermission "setFactory";

View File

@ -21,17 +21,18 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group // Needed to create an activation group
permission java.lang.RuntimePermission "setFactory"; permission java.lang.RuntimePermission "setFactory";
// allow exporting of remote objects on an arbitrary port. // 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 // allow exporting object with non-public remote interface
permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe"; permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe";

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -58,7 +58,7 @@ public class LookupActivationSystem implements Remote, Serializable {
System.err.println("look up activation system"); System.err.println("look up activation system");
Registry rmidRegistry = Registry rmidRegistry =
LocateRegistry.getRegistry(ActivationSystem.SYSTEM_PORT); LocateRegistry.getRegistry(rmid.getPort());
ActivationSystem system = (ActivationSystem) ActivationSystem system = (ActivationSystem)
rmidRegistry.lookup(NAME); rmidRegistry.lookup(NAME);

View File

@ -21,17 +21,18 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group // Needed to create an activation group
permission java.lang.RuntimePermission "setFactory"; permission java.lang.RuntimePermission "setFactory";
// allow exporting of remote objects on an arbitrary port. // 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 // allow exporting of non-public remote interface
permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe"; permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe";

View File

@ -21,11 +21,12 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group // Needed to create an activation group
permission java.lang.RuntimePermission "setFactory"; permission java.lang.RuntimePermission "setFactory";

View File

@ -21,11 +21,12 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group // Needed to create an activation group
permission java.lang.RuntimePermission "setFactory"; permission java.lang.RuntimePermission "setFactory";

View File

@ -21,11 +21,12 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "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 // Used in remote impl of Activator.inactive; by the method
// "restartThread.dispose()"when it calls thread.interrupt() // "restartThread.dispose()"when it calls thread.interrupt()

View File

@ -21,11 +21,12 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "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 // Used in remote impl of Activator.inactive; by the method
// "restartThread.dispose()"when it calls thread.interrupt() // "restartThread.dispose()"when it calls thread.interrupt()

View File

@ -21,11 +21,12 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "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. // allow exporting of remote objects on an arbitrary port.
permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; permission java.net.SocketPermission "*:1024-", "connect,accept,listen";

View File

@ -21,11 +21,12 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// Needed to create an activation group // Needed to create an activation group
permission java.lang.RuntimePermission "setFactory"; permission java.lang.RuntimePermission "setFactory";

View File

@ -21,11 +21,12 @@ grant {
permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.policy", "read";
permission java.util.PropertyPermission "java.security.manager", "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.classes", "read";
permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "test.src", "read";
permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "java.rmi.activation.port", "write";
// required for test to create an ActivationGroup // required for test to create an ActivationGroup
permission java.lang.RuntimePermission "setFactory"; permission java.lang.RuntimePermission "setFactory";

Some files were not shown because too many files have changed in this diff Show More