sun.security.mule.jgss
Class GSSNameImpl

java.lang.Object
  extended by sun.security.mule.jgss.GSSNameImpl
All Implemented Interfaces:
GSSName

public class GSSNameImpl
extends Object
implements GSSName

This is the implementation class for GSSName. Conceptually the GSSName is a container with mechanism specific name elements. Each name element is a representation of how that particular mechanism would canonicalize this principal. Generally a GSSName is created by an application when it supplies a sequence of bytes and a nametype that helps each mechanism decide how to interpret those bytes. It is not necessary to create name elements for each available mechanism at the time the application creates the GSSName. This implementation does this lazily, as and when name elements for mechanisms are required to be handed out. (Generally, other GSS classes like GSSContext and GSSCredential request specific elements depending on the mechanisms that they are dealing with.) Assume that getting a mechanism to parse the applciation specified bytes is an expensive call. When a GSSName is canonicalized wrt some mechanism, it is supposed to discard all elements of other mechanisms and retain only the element for this mechanism. In GSS terminology this is called a Mechanism Name or MN. This implementation tries to retain the application provided bytes and name type just in case the MN is asked to produce an element for a mechanism that is different. When a GSSName is to be exported, the name element for the desired mechanism is converted to a byte representation and written out. It might happen that a name element for that mechanism cannot be obtained. This happens when the mechanism is just not supported in this GSS-API or when the mechanism is supported but bytes corresponding to the nametypes that it understands are not available in this GSSName. This class is safe for sharing. Each retrieval of a name element from getElement() might potentially add a new element to the hashmap of elements, but getElement() is synchronized.

Since:
1.4
Author:
Mayank Upadhyay

Field Summary
 
Fields inherited from interface org.ietf.jgss.GSSName
NT_ANONYMOUS, NT_EXPORT_NAME, NT_HOSTBASED_SERVICE, NT_MACHINE_UID_NAME, NT_STRING_UID_NAME, NT_USER_NAME
 
Constructor Summary
GSSNameImpl(GSSManagerImpl gssManager, GSSNameSpi mechElement)
           
GSSNameImpl(GSSManagerImpl gssManager, Object appName, Oid appNameType)
           
GSSNameImpl(GSSManagerImpl gssManager, Object appName, Oid appNameType, Oid mech)
           
 
Method Summary
 GSSName canonicalize(Oid mech)
           
 boolean equals(GSSName other)
          This method may return false negatives.
 boolean equals(Object another)
           
 byte[] export()
          Returns a flat name representation for this object.
 GSSNameSpi getElement(Oid mechOid)
           
 Oid getStringNameType()
           
 int hashCode()
          Returns a hashcode value for this GSSName.
 boolean isAnonymous()
           
 boolean isMN()
           
 String toString()
           
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

GSSNameImpl

public GSSNameImpl(GSSManagerImpl gssManager,
                   GSSNameSpi mechElement)

GSSNameImpl

public GSSNameImpl(GSSManagerImpl gssManager,
                   Object appName,
                   Oid appNameType)
            throws GSSException
Throws:
GSSException

GSSNameImpl

public GSSNameImpl(GSSManagerImpl gssManager,
                   Object appName,
                   Oid appNameType,
                   Oid mech)
            throws GSSException
Throws:
GSSException
Method Detail

canonicalize

public GSSName canonicalize(Oid mech)
                     throws GSSException
Specified by:
canonicalize in interface GSSName
Throws:
GSSException

equals

public boolean equals(GSSName other)
               throws GSSException
This method may return false negatives. But if it says two names are equals, then there is some mechanism that authenticates them as the same principal.

Specified by:
equals in interface GSSName
Throws:
GSSException

hashCode

public int hashCode()
Returns a hashcode value for this GSSName.

Specified by:
hashCode in interface GSSName
Overrides:
hashCode in class Object
Returns:
a hashCode value

equals

public boolean equals(Object another)
Specified by:
equals in interface GSSName
Overrides:
equals in class Object

export

public byte[] export()
              throws GSSException
Returns a flat name representation for this object. The name format is defined in RFC 2743:
 Length           Name          Description
 2               TOK_ID          Token Identifier
                                 For exported name objects, this
                                 must be hex 04 01.
 2               MECH_OID_LEN    Length of the Mechanism OID
 MECH_OID_LEN    MECH_OID        Mechanism OID, in DER
 4               NAME_LEN        Length of name
 NAME_LEN        NAME            Exported name; format defined in
                                 applicable mechanism draft.
 
Note that it is not required to canonicalize a name before calling export(). i.e., the name need not be an MN. If it is not an MN, an implementation defined algorithm can be used for choosing the mechanism which should export this name.

Specified by:
export in interface GSSName
Returns:
the flat name representation for this object
Throws:
GSSException - with major codes NAME_NOT_MN, BAD_NAME, BAD_NAME, FAILURE.

toString

public String toString()
Specified by:
toString in interface GSSName
Overrides:
toString in class Object

getStringNameType

public Oid getStringNameType()
                      throws GSSException
Specified by:
getStringNameType in interface GSSName
Throws:
GSSException

isAnonymous

public boolean isAnonymous()
Specified by:
isAnonymous in interface GSSName

isMN

public boolean isMN()
Specified by:
isMN in interface GSSName

getElement

public GSSNameSpi getElement(Oid mechOid)
                      throws GSSException
Throws:
GSSException


Copyright © 2013. All Rights Reserved.