FileDocCategorySizeDatePackage
KerberosPrincipal.javaAPI DocJava SE 5 API9171Fri Aug 26 14:57:48 BST 2005javax.security.auth.kerberos

KerberosPrincipal

public final class KerberosPrincipal extends Object implements Principal, Serializable
This class encapsulates a Kerberos principal.
author
Mayank Upadhyay
version
1.18, 02/03/04
since
1.4

Fields Summary
private static final long
serialVersionUID
public static final int
KRB_NT_UNKNOWN
unknown name type.
public static final int
KRB_NT_PRINCIPAL
user principal name type.
public static final int
KRB_NT_SRV_INST
service and other unique instance (krbtgt) name type.
public static final int
KRB_NT_SRV_HST
service with host name as instance (telnet, rcommands) name type.
public static final int
KRB_NT_SRV_XHST
service with host as remaining components name type.
public static final int
KRB_NT_UID
unique ID name type.
private transient String
fullName
private transient String
realm
private transient int
nameType
private static final char
NAME_REALM_SEPARATOR
Constructors Summary
public KerberosPrincipal(String name)
Constructs a KerberosPrincipal from the provided string input. The name type for this principal defaults to {@link #KRB_NT_PRINCIPAL KRB_NT_PRINCIPAL} This string is assumed to contain a name in the format that is specified in Section 2.1.1. (Kerberos Principal Name Form) of RFC 1964 (for example, duke@FOO.COM, where duke represents a principal, and FOO.COM represents a realm).

If the input name does not contain a realm, the default realm is used. The default realm can be specified either in a Kerberos configuration file or via the java.security.krb5.realm system property. For more information, Kerberos Requirements

param
name the principal name
throws
IllegalArgumentException if name is improperly formatted, if name is null, or if name does not contain the realm to use and the default realm is not specified in either a Kerberos configuration file or via the java.security.krb5.realm system property.


                                                                                                                                                                    
    /*
     * TBD:  Research what encoding would be most appropriate to use
     *       when converting the String to bytes. And document that.
     */
       

	PrincipalName krb5Principal = null;

	try {
	    // Appends the default realm if it is missing
	    krb5Principal = new PrincipalName(name, KRB_NT_PRINCIPAL);
	} catch (KrbException e) {
	    throw new IllegalArgumentException(e.getMessage());
	}
	nameType = KRB_NT_PRINCIPAL;  // default name type
	fullName = krb5Principal.toString();
	realm = krb5Principal.getRealmString();
    
public KerberosPrincipal(String name, int nameType)
Constructs a KerberosPrincipal from the provided string and name type input. The string is assumed to contain a name in the format that is specified in Section 2.1 (Mandatory Name Forms) of RFC 1964. Valid name types are specified in Section 7.2 (Principal Names) of RFC 1510. The input name must be consistent with the provided name type. (for example, duke@FOO.COM, is a valid input string for the name type, KRB_NT_PRINCIPAL where duke represents a principal, and FOO.COM represents a realm).

If the input name does not contain a realm, the default realm is used. The default realm can be specified either in a Kerberos configuration file or via the java.security.krb5.realm system property. For more information, see Kerberos Requirements.

param
name the principal name
param
nameType the name type of the principal
throws
IllegalArgumentException if name is improperly formatted, if name is null, if the nameType is not supported, or if name does not contain the realm to use and the default realm is not specified in either a Kerberos configuration file or via the java.security.krb5.realm system property.


	PrincipalName krb5Principal = null;

	try {
	    // Appends the default realm if it is missing
	    krb5Principal  = new PrincipalName(name,nameType);
	} catch (KrbException e) {
	    throw new IllegalArgumentException(e.getMessage());
	}
	 
	this.nameType = nameType;
	fullName = krb5Principal.toString();
	realm = krb5Principal.getRealmString();
    
Methods Summary
public booleanequals(java.lang.Object other)
Compares the specified Object with this Principal for equality. Returns true if the given object is also a KerberosPrincipal and the two KerberosPrincipal instances are equivalent. More formally two KerberosPrincipal instances are equal if the values returned by getName() are equal and the values returned by getNameType() are equal.

param
other the Object to compare to
return
true if the Object passed in represents the same principal as this one, false otherwise.


	if (other == this)
	    return true;

	if (! (other instanceof KerberosPrincipal)) {
	    return false;
	} else {
	    String myFullName = getName();
	    String otherFullName = ((KerberosPrincipal) other).getName();
	    if (nameType == ((KerberosPrincipal)other).nameType && 
		myFullName.equals(otherFullName)) {
		 return true;
	    }
	} 
	return false;
    
public java.lang.StringgetName()
The returned string corresponds to the single-string representation of a Kerberos Principal name as specified in Section 2.1 of RFC 1964.

return
the principal name.

	return fullName;
    
public intgetNameType()
Returns the name type of the KerberosPrincipal. Valid name types are specified in Section 7.2 of RFC1510.

return
the name type.

	return nameType;
    
public java.lang.StringgetRealm()
Returns the realm component of this Kerberos principal.

return
the realm component of this Kerberos principal.

	return realm;
    
public inthashCode()
Returns a hashcode for this principal. The hash code is defined to be the result of the following calculation:

hashCode = getName().hashCode();

return
a hashCode() for the KerberosPrincipal

	return getName().hashCode();
    
private synchronized voidreadObject(java.io.ObjectInputStream ois)
Reads this object from a stream (i.e., deserializes it)

	byte[] asn1EncPrincipal = (byte [])ois.readObject();
	byte[] encRealm = (byte [])ois.readObject();
	try {
	   PrincipalName krb5Principal = new PrincipalName(new 
						DerValue(asn1EncPrincipal));
	   realm = (new Realm(new DerValue(encRealm))).toString();
	   fullName = krb5Principal.toString() + NAME_REALM_SEPARATOR +
			 realm.toString(); 
	   nameType = krb5Principal.getNameType();
	} catch (Exception e) {
	    IOException ioe = new IOException(e.getMessage());
	    ioe.initCause(e);
	    throw ioe; 
	}
    
public java.lang.StringtoString()

	return getName();
    
private synchronized voidwriteObject(java.io.ObjectOutputStream oos)
Save the KerberosPrincipal object to a stream

serialData
this KerberosPrincipal is serialized by writing out the PrincipalName and the realm in their DER-encoded form as specified in Section 5.2 of RFC1510.


	PrincipalName krb5Principal = null;
	try {
	    krb5Principal  = new PrincipalName(fullName,nameType);
	    oos.writeObject(krb5Principal.asn1Encode());
	    oos.writeObject(krb5Principal.getRealm().asn1Encode());
	} catch (Exception e) {
	    IOException ioe = new IOException(e.getMessage());
	    ioe.initCause(e);
	    throw ioe; 
	}