jdk/src/share/classes/sun/security/krb5/internal/Ticket.java
changeset 13247 74902cfeb9c6
parent 5506 202f599c92aa
equal deleted inserted replaced
13246:a54c4f70775c 13247:74902cfeb9c6
    58  * http://www.ietf.org/rfc/rfc4120.txt</a>.
    58  * http://www.ietf.org/rfc/rfc4120.txt</a>.
    59  */
    59  */
    60 
    60 
    61 public class Ticket implements Cloneable {
    61 public class Ticket implements Cloneable {
    62     public int tkt_vno;
    62     public int tkt_vno;
    63     public Realm realm;
       
    64     public PrincipalName sname;
    63     public PrincipalName sname;
    65     public EncryptedData encPart;
    64     public EncryptedData encPart;
    66 
    65 
    67     private Ticket() {
    66     private Ticket() {
    68     }
    67     }
    69 
    68 
    70     public Object clone() {
    69     public Object clone() {
    71         Ticket new_ticket = new Ticket();
    70         Ticket new_ticket = new Ticket();
    72         new_ticket.realm = (Realm)realm.clone();
       
    73         new_ticket.sname = (PrincipalName)sname.clone();
    71         new_ticket.sname = (PrincipalName)sname.clone();
    74         new_ticket.encPart = (EncryptedData)encPart.clone();
    72         new_ticket.encPart = (EncryptedData)encPart.clone();
    75         new_ticket.tkt_vno = tkt_vno;
    73         new_ticket.tkt_vno = tkt_vno;
    76         return new_ticket;
    74         return new_ticket;
    77     }
    75     }
    78 
    76 
    79     public Ticket(
    77     public Ticket(
    80                   Realm new_realm,
       
    81                   PrincipalName new_sname,
    78                   PrincipalName new_sname,
    82                   EncryptedData new_encPart
    79                   EncryptedData new_encPart
    83                       ) {
    80                       ) {
    84         tkt_vno = Krb5.TICKET_VNO;
    81         tkt_vno = Krb5.TICKET_VNO;
    85         realm = new_realm;
       
    86         sname = new_sname;
    82         sname = new_sname;
    87         encPart = new_encPart;
    83         encPart = new_encPart;
    88     }
    84     }
    89 
    85 
    90     public Ticket(byte[] data) throws Asn1Exception,
    86     public Ticket(byte[] data) throws Asn1Exception,
   121         if ((subDer.getTag() & (byte)0x1F) != (byte)0x00)
   117         if ((subDer.getTag() & (byte)0x1F) != (byte)0x00)
   122             throw new Asn1Exception(Krb5.ASN1_BAD_ID);
   118             throw new Asn1Exception(Krb5.ASN1_BAD_ID);
   123         tkt_vno = subDer.getData().getBigInteger().intValue();
   119         tkt_vno = subDer.getData().getBigInteger().intValue();
   124         if (tkt_vno != Krb5.TICKET_VNO)
   120         if (tkt_vno != Krb5.TICKET_VNO)
   125             throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION);
   121             throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION);
   126         realm = Realm.parse(der.getData(), (byte)0x01, false);
   122         Realm srealm = Realm.parse(der.getData(), (byte)0x01, false);
   127         sname = PrincipalName.parse(der.getData(), (byte)0x02, false);
   123         sname = PrincipalName.parse(der.getData(), (byte)0x02, false, srealm);
   128         encPart = EncryptedData.parse(der.getData(), (byte)0x03, false);
   124         encPart = EncryptedData.parse(der.getData(), (byte)0x03, false);
   129         if (der.getData().available() > 0)
   125         if (der.getData().available() > 0)
   130             throw new Asn1Exception(Krb5.ASN1_BAD_ID);
   126             throw new Asn1Exception(Krb5.ASN1_BAD_ID);
   131     }
   127     }
   132 
   128 
   140         DerOutputStream bytes = new DerOutputStream();
   136         DerOutputStream bytes = new DerOutputStream();
   141         DerOutputStream temp = new DerOutputStream();
   137         DerOutputStream temp = new DerOutputStream();
   142         DerValue der[] = new DerValue[4];
   138         DerValue der[] = new DerValue[4];
   143         temp.putInteger(BigInteger.valueOf(tkt_vno));
   139         temp.putInteger(BigInteger.valueOf(tkt_vno));
   144         bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), temp);
   140         bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), temp);
   145         bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), realm.asn1Encode());
   141         bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), sname.getRealm().asn1Encode());
   146         bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), sname.asn1Encode());
   142         bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), sname.asn1Encode());
   147         bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), encPart.asn1Encode());
   143         bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), encPart.asn1Encode());
   148         temp = new DerOutputStream();
   144         temp = new DerOutputStream();
   149         temp.write(DerValue.tag_Sequence, bytes);
   145         temp.write(DerValue.tag_Sequence, bytes);
   150         DerOutputStream ticket = new DerOutputStream();
   146         DerOutputStream ticket = new DerOutputStream();