src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosTicket.java
author chegar
Thu, 17 Oct 2019 20:54:25 +0100
branchdatagramsocketimpl-branch
changeset 58679 9c3209ff7550
parent 58678 9cf78a70fa4f
parent 58611 53ddf218eddd
permissions -rw-r--r--
datagramsocketimpl-branch: merge with default
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     1
/*
57487
643978a35f6e 8227437: S4U2proxy cannot continue because server's TGT cannot be found
mbalao
parents: 47216
diff changeset
     2
 * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
90ce3da70b43 Initial load
duke
parents:
diff changeset
     4
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
90ce3da70b43 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 488
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 488
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    10
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
90ce3da70b43 Initial load
duke
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
90ce3da70b43 Initial load
duke
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
90ce3da70b43 Initial load
duke
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
90ce3da70b43 Initial load
duke
parents:
diff changeset
    15
 * accompanied this code).
90ce3da70b43 Initial load
duke
parents:
diff changeset
    16
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
90ce3da70b43 Initial load
duke
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    20
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 488
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 488
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 488
diff changeset
    23
 * questions.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    24
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    25
90ce3da70b43 Initial load
duke
parents:
diff changeset
    26
package javax.security.auth.kerberos;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    27
90ce3da70b43 Initial load
duke
parents:
diff changeset
    28
import java.io.*;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    29
import java.util.Date;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    30
import java.util.Arrays;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    31
import java.net.InetAddress;
58611
53ddf218eddd 8220302: Better Kerberos ccache handling
weijun
parents: 57487
diff changeset
    32
import java.util.Objects;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    33
import javax.crypto.SecretKey;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    34
import javax.security.auth.Refreshable;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    35
import javax.security.auth.Destroyable;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    36
import javax.security.auth.RefreshFailedException;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    37
import javax.security.auth.DestroyFailedException;
58611
53ddf218eddd 8220302: Better Kerberos ccache handling
weijun
parents: 57487
diff changeset
    38
34687
d302ed125dc9 8144995: Move sun.misc.HexDumpEncoder to sun.security.util
chegar
parents: 28059
diff changeset
    39
import sun.security.util.HexDumpEncoder;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    40
90ce3da70b43 Initial load
duke
parents:
diff changeset
    41
/**
90ce3da70b43 Initial load
duke
parents:
diff changeset
    42
 * This class encapsulates a Kerberos ticket and associated
90ce3da70b43 Initial load
duke
parents:
diff changeset
    43
 * information as viewed from the client's point of view. It captures all
90ce3da70b43 Initial load
duke
parents:
diff changeset
    44
 * information that the Key Distribution Center (KDC) sends to the client
90ce3da70b43 Initial load
duke
parents:
diff changeset
    45
 * in the reply message KDC-REP defined in the Kerberos Protocol
90ce3da70b43 Initial load
duke
parents:
diff changeset
    46
 * Specification (<a href=http://www.ietf.org/rfc/rfc4120.txt>RFC 4120</a>).
90ce3da70b43 Initial load
duke
parents:
diff changeset
    47
 * <p>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    48
 * All Kerberos JAAS login modules that authenticate a user to a KDC should
90ce3da70b43 Initial load
duke
parents:
diff changeset
    49
 * use this class. Where available, the login module might even read this
90ce3da70b43 Initial load
duke
parents:
diff changeset
    50
 * information from a ticket cache in the operating system instead of
90ce3da70b43 Initial load
duke
parents:
diff changeset
    51
 * directly communicating with the KDC. During the commit phase of the JAAS
90ce3da70b43 Initial load
duke
parents:
diff changeset
    52
 * authentication process, the JAAS login module should instantiate this
90ce3da70b43 Initial load
duke
parents:
diff changeset
    53
 * class and store the instance in the private credential set of a
90ce3da70b43 Initial load
duke
parents:
diff changeset
    54
 * {@link javax.security.auth.Subject Subject}.<p>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    55
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    56
 * It might be necessary for the application to be granted a
90ce3da70b43 Initial load
duke
parents:
diff changeset
    57
 * {@link javax.security.auth.PrivateCredentialPermission
27771
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
    58
 * PrivateCredentialPermission} if it needs to access a {@code KerberosTicket}
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
    59
 * instance from a {@code Subject}. This permission is not needed when the
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    60
 * application depends on the default JGSS Kerberos mechanism to access the
27771
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
    61
 * {@code KerberosTicket}. In that case, however, the application will need an
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    62
 * appropriate
90ce3da70b43 Initial load
duke
parents:
diff changeset
    63
 * {@link javax.security.auth.kerberos.ServicePermission ServicePermission}.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    64
 * <p>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    65
 * Note that this class is applicable to both ticket granting tickets and
90ce3da70b43 Initial load
duke
parents:
diff changeset
    66
 * other regular service tickets. A ticket granting ticket is just a
90ce3da70b43 Initial load
duke
parents:
diff changeset
    67
 * special case of a more generalized service ticket.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    68
 *
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
    69
 * @implNote The JAAS login module in the JDK reference implementation destroys
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
    70
 * all tickets after logout.
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
    71
 *
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    72
 * @see javax.security.auth.Subject
90ce3da70b43 Initial load
duke
parents:
diff changeset
    73
 * @see javax.security.auth.PrivateCredentialPermission
90ce3da70b43 Initial load
duke
parents:
diff changeset
    74
 * @see javax.security.auth.login.LoginContext
90ce3da70b43 Initial load
duke
parents:
diff changeset
    75
 * @see org.ietf.jgss.GSSCredential
90ce3da70b43 Initial load
duke
parents:
diff changeset
    76
 * @see org.ietf.jgss.GSSManager
90ce3da70b43 Initial load
duke
parents:
diff changeset
    77
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    78
 * @author Mayank Upadhyay
90ce3da70b43 Initial load
duke
parents:
diff changeset
    79
 * @since 1.4
90ce3da70b43 Initial load
duke
parents:
diff changeset
    80
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    81
public class KerberosTicket implements Destroyable, Refreshable,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    82
         java.io.Serializable {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    83
90ce3da70b43 Initial load
duke
parents:
diff changeset
    84
    private static final long serialVersionUID = 7395334370157380539L;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    85
90ce3da70b43 Initial load
duke
parents:
diff changeset
    86
    // XXX Make these flag indices public
90ce3da70b43 Initial load
duke
parents:
diff changeset
    87
    private static final int FORWARDABLE_TICKET_FLAG = 1;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    88
    private static final int FORWARDED_TICKET_FLAG   = 2;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    89
    private static final int PROXIABLE_TICKET_FLAG   = 3;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    90
    private static final int PROXY_TICKET_FLAG       = 4;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    91
    private static final int POSTDATED_TICKET_FLAG   = 6;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    92
    private static final int RENEWABLE_TICKET_FLAG   = 8;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    93
    private static final int INITIAL_TICKET_FLAG     = 9;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    94
90ce3da70b43 Initial load
duke
parents:
diff changeset
    95
    private static final int NUM_FLAGS = 32;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    96
90ce3da70b43 Initial load
duke
parents:
diff changeset
    97
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
    98
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    99
     * ASN.1 DER Encoding of the Ticket as defined in the
90ce3da70b43 Initial load
duke
parents:
diff changeset
   100
     * Kerberos Protocol Specification RFC4120.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   101
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   102
     * @serial
90ce3da70b43 Initial load
duke
parents:
diff changeset
   103
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   104
90ce3da70b43 Initial load
duke
parents:
diff changeset
   105
    private byte[] asn1Encoding;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   106
90ce3da70b43 Initial load
duke
parents:
diff changeset
   107
    /**
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 5506
diff changeset
   108
     *{@code KeyImpl} is serialized by writing out the ASN1 Encoded bytes
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   109
     * of the encryption key. The ASN1 encoding is defined in RFC4120 and as
90ce3da70b43 Initial load
duke
parents:
diff changeset
   110
     * follows:
90ce3da70b43 Initial load
duke
parents:
diff changeset
   111
     * <pre>
90ce3da70b43 Initial load
duke
parents:
diff changeset
   112
     * EncryptionKey   ::= SEQUENCE {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   113
     *          keytype    [0] Int32 -- actually encryption type --,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   114
     *          keyvalue   [1] OCTET STRING
90ce3da70b43 Initial load
duke
parents:
diff changeset
   115
     * }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   116
     * </pre>
90ce3da70b43 Initial load
duke
parents:
diff changeset
   117
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   118
     * @serial
90ce3da70b43 Initial load
duke
parents:
diff changeset
   119
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   120
90ce3da70b43 Initial load
duke
parents:
diff changeset
   121
    private KeyImpl sessionKey;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   122
90ce3da70b43 Initial load
duke
parents:
diff changeset
   123
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   124
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   125
     * Ticket Flags as defined in the Kerberos Protocol Specification RFC4120.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   126
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   127
     * @serial
90ce3da70b43 Initial load
duke
parents:
diff changeset
   128
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   129
90ce3da70b43 Initial load
duke
parents:
diff changeset
   130
    private boolean[] flags;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   131
90ce3da70b43 Initial load
duke
parents:
diff changeset
   132
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   133
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   134
     * Time of initial authentication
90ce3da70b43 Initial load
duke
parents:
diff changeset
   135
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   136
     * @serial
90ce3da70b43 Initial load
duke
parents:
diff changeset
   137
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   138
90ce3da70b43 Initial load
duke
parents:
diff changeset
   139
    private Date authTime;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   140
90ce3da70b43 Initial load
duke
parents:
diff changeset
   141
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   142
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   143
     * Time after which the ticket is valid.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   144
     * @serial
90ce3da70b43 Initial load
duke
parents:
diff changeset
   145
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   146
    private Date startTime;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   147
90ce3da70b43 Initial load
duke
parents:
diff changeset
   148
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   149
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   150
     * Time after which the ticket will not be honored. (its expiration time).
90ce3da70b43 Initial load
duke
parents:
diff changeset
   151
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   152
     * @serial
90ce3da70b43 Initial load
duke
parents:
diff changeset
   153
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   154
90ce3da70b43 Initial load
duke
parents:
diff changeset
   155
    private Date endTime;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   156
90ce3da70b43 Initial load
duke
parents:
diff changeset
   157
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   158
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   159
     * For renewable Tickets it indicates the maximum endtime that may be
90ce3da70b43 Initial load
duke
parents:
diff changeset
   160
     * included in a renewal. It can be thought of as the absolute expiration
90ce3da70b43 Initial load
duke
parents:
diff changeset
   161
     * time for the ticket, including all renewals. This field may be null
90ce3da70b43 Initial load
duke
parents:
diff changeset
   162
     * for tickets that are not renewable.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   163
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   164
     * @serial
90ce3da70b43 Initial load
duke
parents:
diff changeset
   165
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   166
90ce3da70b43 Initial load
duke
parents:
diff changeset
   167
    private Date renewTill;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   168
90ce3da70b43 Initial load
duke
parents:
diff changeset
   169
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   170
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   171
     * Client that owns the service ticket
90ce3da70b43 Initial load
duke
parents:
diff changeset
   172
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   173
     * @serial
90ce3da70b43 Initial load
duke
parents:
diff changeset
   174
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   175
90ce3da70b43 Initial load
duke
parents:
diff changeset
   176
    private KerberosPrincipal client;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   177
90ce3da70b43 Initial load
duke
parents:
diff changeset
   178
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   179
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   180
     * The service for which the ticket was issued.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   181
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   182
     * @serial
90ce3da70b43 Initial load
duke
parents:
diff changeset
   183
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   184
90ce3da70b43 Initial load
duke
parents:
diff changeset
   185
    private KerberosPrincipal server;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   186
90ce3da70b43 Initial load
duke
parents:
diff changeset
   187
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   188
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   189
     * The addresses from where the ticket may be used by the client.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   190
     * This field may be null when the ticket is usable from any address.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   191
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   192
     * @serial
90ce3da70b43 Initial load
duke
parents:
diff changeset
   193
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   194
58611
53ddf218eddd 8220302: Better Kerberos ccache handling
weijun
parents: 57487
diff changeset
   195
    private InetAddress[] clientAddresses;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   196
58611
53ddf218eddd 8220302: Better Kerberos ccache handling
weijun
parents: 57487
diff changeset
   197
    /**
53ddf218eddd 8220302: Better Kerberos ccache handling
weijun
parents: 57487
diff changeset
   198
     * Evidence ticket if proxy_impersonator. This field can be accessed
53ddf218eddd 8220302: Better Kerberos ccache handling
weijun
parents: 57487
diff changeset
   199
     * by KerberosSecrets. It's serialized.
53ddf218eddd 8220302: Better Kerberos ccache handling
weijun
parents: 57487
diff changeset
   200
     */
53ddf218eddd 8220302: Better Kerberos ccache handling
weijun
parents: 57487
diff changeset
   201
    KerberosTicket proxy = null;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   202
90ce3da70b43 Initial load
duke
parents:
diff changeset
   203
    private transient boolean destroyed = false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   204
57487
643978a35f6e 8227437: S4U2proxy cannot continue because server's TGT cannot be found
mbalao
parents: 47216
diff changeset
   205
    transient KerberosPrincipal clientAlias = null;
643978a35f6e 8227437: S4U2proxy cannot continue because server's TGT cannot be found
mbalao
parents: 47216
diff changeset
   206
643978a35f6e 8227437: S4U2proxy cannot continue because server's TGT cannot be found
mbalao
parents: 47216
diff changeset
   207
    transient KerberosPrincipal serverAlias = null;
643978a35f6e 8227437: S4U2proxy cannot continue because server's TGT cannot be found
mbalao
parents: 47216
diff changeset
   208
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   209
    /**
27771
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
   210
     * Constructs a {@code KerberosTicket} using credentials information that a
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   211
     * client either receives from a KDC or reads from a cache.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   212
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   213
     * @param asn1Encoding the ASN.1 encoding of the ticket as defined by
90ce3da70b43 Initial load
duke
parents:
diff changeset
   214
     * the Kerberos protocol specification.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   215
     * @param client the client that owns this service
90ce3da70b43 Initial load
duke
parents:
diff changeset
   216
     * ticket
90ce3da70b43 Initial load
duke
parents:
diff changeset
   217
     * @param server the service that this ticket is for
90ce3da70b43 Initial load
duke
parents:
diff changeset
   218
     * @param sessionKey the raw bytes for the session key that must be
90ce3da70b43 Initial load
duke
parents:
diff changeset
   219
     * used to encrypt the authenticator that will be sent to the server
90ce3da70b43 Initial load
duke
parents:
diff changeset
   220
     * @param keyType the key type for the session key as defined by the
90ce3da70b43 Initial load
duke
parents:
diff changeset
   221
     * Kerberos protocol specification.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   222
     * @param flags the ticket flags. Each element in this array indicates
90ce3da70b43 Initial load
duke
parents:
diff changeset
   223
     * the value for the corresponding bit in the ASN.1 BitString that
90ce3da70b43 Initial load
duke
parents:
diff changeset
   224
     * represents the ticket flags. If the number of elements in this array
90ce3da70b43 Initial load
duke
parents:
diff changeset
   225
     * is less than the number of flags used by the Kerberos protocol,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   226
     * then the missing flags will be filled in with false.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   227
     * @param authTime the time of initial authentication for the client
90ce3da70b43 Initial load
duke
parents:
diff changeset
   228
     * @param startTime the time after which the ticket will be valid. This
90ce3da70b43 Initial load
duke
parents:
diff changeset
   229
     * may be null in which case the value of authTime is treated as the
90ce3da70b43 Initial load
duke
parents:
diff changeset
   230
     * startTime.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   231
     * @param endTime the time after which the ticket will no longer be
90ce3da70b43 Initial load
duke
parents:
diff changeset
   232
     * valid
90ce3da70b43 Initial load
duke
parents:
diff changeset
   233
     * @param renewTill an absolute expiration time for the ticket,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   234
     * including all renewal that might be possible. This field may be null
90ce3da70b43 Initial load
duke
parents:
diff changeset
   235
     * for tickets that are not renewable.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   236
     * @param clientAddresses the addresses from where the ticket may be
90ce3da70b43 Initial load
duke
parents:
diff changeset
   237
     * used by the client. This field may be null when the ticket is usable
90ce3da70b43 Initial load
duke
parents:
diff changeset
   238
     * from any address.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   239
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   240
    public KerberosTicket(byte[] asn1Encoding,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   241
                         KerberosPrincipal client,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   242
                         KerberosPrincipal server,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   243
                         byte[] sessionKey,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   244
                         int keyType,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   245
                         boolean[] flags,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   246
                         Date authTime,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   247
                         Date startTime,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   248
                         Date endTime,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   249
                         Date renewTill,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   250
                         InetAddress[] clientAddresses) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   251
90ce3da70b43 Initial load
duke
parents:
diff changeset
   252
        init(asn1Encoding, client, server, sessionKey, keyType, flags,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   253
            authTime, startTime, endTime, renewTill, clientAddresses);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   254
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   255
90ce3da70b43 Initial load
duke
parents:
diff changeset
   256
    private void init(byte[] asn1Encoding,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   257
                         KerberosPrincipal client,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   258
                         KerberosPrincipal server,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   259
                         byte[] sessionKey,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   260
                         int keyType,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   261
                         boolean[] flags,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   262
                         Date authTime,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   263
                         Date startTime,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   264
                         Date endTime,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   265
                         Date renewTill,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   266
                         InetAddress[] clientAddresses) {
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   267
        if (sessionKey == null) {
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   268
            throw new IllegalArgumentException("Session key for ticket"
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   269
                    + " cannot be null");
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   270
        }
488
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   271
        init(asn1Encoding, client, server,
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   272
             new KeyImpl(sessionKey, keyType), flags, authTime,
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   273
             startTime, endTime, renewTill, clientAddresses);
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   274
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   275
488
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   276
    private void init(byte[] asn1Encoding,
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   277
                         KerberosPrincipal client,
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   278
                         KerberosPrincipal server,
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   279
                         KeyImpl sessionKey,
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   280
                         boolean[] flags,
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   281
                         Date authTime,
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   282
                         Date startTime,
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   283
                         Date endTime,
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   284
                         Date renewTill,
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   285
                         InetAddress[] clientAddresses) {
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   286
        if (asn1Encoding == null) {
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   287
            throw new IllegalArgumentException("ASN.1 encoding of ticket"
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   288
                    + " cannot be null");
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   289
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   290
        this.asn1Encoding = asn1Encoding.clone();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   291
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   292
        if (client == null) {
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   293
            throw new IllegalArgumentException("Client name in ticket"
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   294
                    + " cannot be null");
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   295
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   296
        this.client = client;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   297
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   298
        if (server == null) {
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   299
            throw new IllegalArgumentException("Server name in ticket"
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   300
                    + " cannot be null");
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   301
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   302
        this.server = server;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   303
488
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   304
        // Caller needs to make sure `sessionKey` will not be null
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   305
        this.sessionKey = sessionKey;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   306
90ce3da70b43 Initial load
duke
parents:
diff changeset
   307
        if (flags != null) {
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   308
           if (flags.length >= NUM_FLAGS) {
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   309
               this.flags = flags.clone();
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   310
           } else {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   311
                this.flags = new boolean[NUM_FLAGS];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   312
                // Fill in whatever we have
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   313
                for (int i = 0; i < flags.length; i++) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   314
                    this.flags[i] = flags[i];
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   315
                }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   316
           }
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   317
        } else {
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   318
            this.flags = new boolean[NUM_FLAGS];
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   319
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   320
47005
dbfaf076da58 8186576: KerberosTicket does not properly handle renewable tickets at the end of their lifetime
weijun
parents: 41586
diff changeset
   321
        if (this.flags[RENEWABLE_TICKET_FLAG] && renewTill != null) {
488
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   322
           this.renewTill = new Date(renewTill.getTime());
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   323
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   324
488
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   325
        if (authTime != null) {
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   326
            this.authTime = new Date(authTime.getTime());
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   327
        }
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   328
        if (startTime != null) {
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   329
            this.startTime = new Date(startTime.getTime());
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   330
        } else {
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   331
            this.startTime = this.authTime;
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   332
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   333
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   334
        if (endTime == null) {
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   335
            throw new IllegalArgumentException("End time for ticket validity"
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   336
                    + " cannot be null");
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   337
        }
488
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   338
        this.endTime = new Date(endTime.getTime());
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   339
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   340
        if (clientAddresses != null) {
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   341
            this.clientAddresses = clientAddresses.clone();
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   342
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   343
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   344
90ce3da70b43 Initial load
duke
parents:
diff changeset
   345
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   346
     * Returns the client principal associated with this ticket.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   347
     *
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   348
     * @return the client principal, or {@code null} if destroyed.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   349
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   350
    public final KerberosPrincipal getClient() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   351
        return client;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   352
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   353
90ce3da70b43 Initial load
duke
parents:
diff changeset
   354
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   355
     * Returns the service principal associated with this ticket.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   356
     *
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   357
     * @return the service principal, or {@code null} if destroyed.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   358
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   359
    public final KerberosPrincipal getServer() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   360
        return server;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   361
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   362
90ce3da70b43 Initial load
duke
parents:
diff changeset
   363
    /**
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   364
     * Returns the session key associated with this ticket. The return value
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   365
     * is always a {@link EncryptionKey} object.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   366
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   367
     * @return the session key.
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   368
     * @throws IllegalStateException if this ticket is destroyed
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   369
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   370
    public final SecretKey getSessionKey() {
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   371
        if (destroyed) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   372
            throw new IllegalStateException("This ticket is no longer valid");
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   373
        }
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   374
        return new EncryptionKey(
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   375
                sessionKey.getEncoded(), sessionKey.getKeyType());
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   376
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   377
90ce3da70b43 Initial load
duke
parents:
diff changeset
   378
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   379
     * Returns the key type of the session key associated with this
90ce3da70b43 Initial load
duke
parents:
diff changeset
   380
     * ticket as defined by the Kerberos Protocol Specification.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   381
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   382
     * @return the key type of the session key associated with this
90ce3da70b43 Initial load
duke
parents:
diff changeset
   383
     * ticket.
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   384
     * @throws IllegalStateException if this ticket is destroyed
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   385
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   386
     * @see #getSessionKey()
90ce3da70b43 Initial load
duke
parents:
diff changeset
   387
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   388
    public final int getSessionKeyType() {
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   389
        if (destroyed) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   390
            throw new IllegalStateException("This ticket is no longer valid");
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   391
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   392
        return sessionKey.getKeyType();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   393
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   394
90ce3da70b43 Initial load
duke
parents:
diff changeset
   395
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   396
     * Determines if this ticket is forwardable.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   397
     *
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   398
     * @return true if this ticket is forwardable, or false if not forwardable
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   399
     * or destroyed.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   400
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   401
    public final boolean isForwardable() {
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   402
        return flags == null? false: flags[FORWARDABLE_TICKET_FLAG];
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   403
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   404
90ce3da70b43 Initial load
duke
parents:
diff changeset
   405
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   406
     * Determines if this ticket had been forwarded or was issued based on
90ce3da70b43 Initial load
duke
parents:
diff changeset
   407
     * authentication involving a forwarded ticket-granting ticket.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   408
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   409
     * @return true if this ticket had been forwarded or was issued based on
90ce3da70b43 Initial load
duke
parents:
diff changeset
   410
     * authentication involving a forwarded ticket-granting ticket,
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   411
     * or false otherwise or destroyed.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   412
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   413
    public final boolean isForwarded() {
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   414
        return flags == null? false: flags[FORWARDED_TICKET_FLAG];
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   415
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   416
90ce3da70b43 Initial load
duke
parents:
diff changeset
   417
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   418
     * Determines if this ticket is proxiable.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   419
     *
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   420
     * @return true if this ticket is proxiable, or false if not proxiable
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   421
     * or destroyed.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   422
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   423
    public final boolean isProxiable() {
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   424
        return flags == null? false: flags[PROXIABLE_TICKET_FLAG];
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   425
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   426
90ce3da70b43 Initial load
duke
parents:
diff changeset
   427
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   428
     * Determines is this ticket is a proxy-ticket.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   429
     *
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   430
     * @return true if this ticket is a proxy-ticket, or false if not
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   431
     * a proxy-ticket or destroyed.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   432
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   433
    public final boolean isProxy() {
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   434
        return flags == null? false: flags[PROXY_TICKET_FLAG];
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   435
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   436
90ce3da70b43 Initial load
duke
parents:
diff changeset
   437
90ce3da70b43 Initial load
duke
parents:
diff changeset
   438
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   439
     * Determines is this ticket is post-dated.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   440
     *
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   441
     * @return true if this ticket is post-dated, or false if not post-dated
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   442
     * or destroyed.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   443
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   444
    public final boolean isPostdated() {
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   445
        return flags == null? false: flags[POSTDATED_TICKET_FLAG];
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   446
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   447
90ce3da70b43 Initial load
duke
parents:
diff changeset
   448
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   449
     * Determines is this ticket is renewable. If so, the {@link #refresh()
90ce3da70b43 Initial load
duke
parents:
diff changeset
   450
     * refresh} method can be called, assuming the validity period for
90ce3da70b43 Initial load
duke
parents:
diff changeset
   451
     * renewing is not already over.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   452
     *
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   453
     * @return true if this ticket is renewable, or false if not renewable
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   454
     * or destroyed.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   455
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   456
    public final boolean isRenewable() {
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   457
        return flags == null? false: flags[RENEWABLE_TICKET_FLAG];
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   458
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   459
90ce3da70b43 Initial load
duke
parents:
diff changeset
   460
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   461
     * Determines if this ticket was issued using the Kerberos AS-Exchange
90ce3da70b43 Initial load
duke
parents:
diff changeset
   462
     * protocol, and not issued based on some ticket-granting ticket.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   463
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   464
     * @return true if this ticket was issued using the Kerberos AS-Exchange
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   465
     * protocol, or false if not issued this way or destroyed.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   466
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   467
    public final boolean isInitial() {
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   468
        return flags == null? false: flags[INITIAL_TICKET_FLAG];
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   469
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   470
90ce3da70b43 Initial load
duke
parents:
diff changeset
   471
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   472
     * Returns the flags associated with this ticket. Each element in the
90ce3da70b43 Initial load
duke
parents:
diff changeset
   473
     * returned array indicates the value for the corresponding bit in the
90ce3da70b43 Initial load
duke
parents:
diff changeset
   474
     * ASN.1 BitString that represents the ticket flags.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   475
     *
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   476
     * @return the flags associated with this ticket, or {@code null}
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   477
     * if destroyed.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   478
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   479
    public final boolean[]  getFlags() {
51
6fe31bc95bbc 6600143: Remove another 450 unnecessary casts
martin
parents: 2
diff changeset
   480
        return (flags == null? null: flags.clone());
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   481
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   482
90ce3da70b43 Initial load
duke
parents:
diff changeset
   483
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   484
     * Returns the time that the client was authenticated.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   485
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   486
     * @return the time that the client was authenticated
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   487
     *         or {@code null} if the field is not set or
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   488
     *         this ticket is destroyed.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   489
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   490
    public final java.util.Date getAuthTime() {
488
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   491
        return (authTime == null) ? null : (Date)authTime.clone();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   492
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   493
90ce3da70b43 Initial load
duke
parents:
diff changeset
   494
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   495
     * Returns the start time for this ticket's validity period.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   496
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   497
     * @return the start time for this ticket's validity period
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   498
     *         or {@code null} if the field is not set or
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   499
     *         this ticket is destroyed.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   500
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   501
    public final java.util.Date getStartTime() {
488
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   502
        return (startTime == null) ? null : (Date)startTime.clone();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   503
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   504
90ce3da70b43 Initial load
duke
parents:
diff changeset
   505
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   506
     * Returns the expiration time for this ticket's validity period.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   507
     *
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   508
     * @return the expiration time for this ticket's validity period,
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   509
     * or {@code null} if destroyed.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   510
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   511
    public final java.util.Date getEndTime() {
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   512
        return (endTime == null) ? null : (Date) endTime.clone();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   513
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   514
90ce3da70b43 Initial load
duke
parents:
diff changeset
   515
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   516
     * Returns the latest expiration time for this ticket, including all
90ce3da70b43 Initial load
duke
parents:
diff changeset
   517
     * renewals. This will return a null value for non-renewable tickets.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   518
     *
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   519
     * @return the latest expiration time for this ticket, or {@code null}
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   520
     * if destroyed.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   521
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   522
    public final java.util.Date getRenewTill() {
488
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   523
        return (renewTill == null) ? null: (Date)renewTill.clone();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   524
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   525
90ce3da70b43 Initial load
duke
parents:
diff changeset
   526
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   527
     * Returns a list of addresses from where the ticket can be used.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   528
     *
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   529
     * @return the list of addresses, or {@code null} if the field was not
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   530
     * provided or this ticket is destroyed.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   531
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   532
    public final java.net.InetAddress[] getClientAddresses() {
51
6fe31bc95bbc 6600143: Remove another 450 unnecessary casts
martin
parents: 2
diff changeset
   533
        return (clientAddresses == null) ? null: clientAddresses.clone();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   534
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   535
90ce3da70b43 Initial load
duke
parents:
diff changeset
   536
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   537
     * Returns an ASN.1 encoding of the entire ticket.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   538
     *
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   539
     * @return an ASN.1 encoding of the entire ticket. A new byte
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   540
     * array is returned each time this method is called.
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   541
     * @throws IllegalStateException if this ticket is destroyed
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   542
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   543
    public final byte[] getEncoded() {
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   544
        if (destroyed) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   545
            throw new IllegalStateException("This ticket is no longer valid");
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   546
        }
51
6fe31bc95bbc 6600143: Remove another 450 unnecessary casts
martin
parents: 2
diff changeset
   547
        return asn1Encoding.clone();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   548
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   549
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   550
    /**
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   551
     * Determines if this ticket is still current.
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   552
     *
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   553
     * @return true if this ticket is still current, or false if not current
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   554
     * or destroyed.
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   555
     */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   556
    public boolean isCurrent() {
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   557
        return endTime == null? false: (System.currentTimeMillis() <= endTime.getTime());
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   558
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   559
90ce3da70b43 Initial load
duke
parents:
diff changeset
   560
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   561
     * Extends the validity period of this ticket. The ticket will contain
90ce3da70b43 Initial load
duke
parents:
diff changeset
   562
     * a new session key if the refresh operation succeeds. The refresh
90ce3da70b43 Initial load
duke
parents:
diff changeset
   563
     * operation will fail if the ticket is not renewable or the latest
90ce3da70b43 Initial load
duke
parents:
diff changeset
   564
     * allowable renew time has passed. Any other error returned by the
90ce3da70b43 Initial load
duke
parents:
diff changeset
   565
     * KDC will also cause this method to fail.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   566
     *
28059
e576535359cc 8067377: My hobby: caning, then then canning, the the can-can
martin
parents: 27771
diff changeset
   567
     * Note: This method is not synchronized with the accessor
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   568
     * methods of this object. Hence callers need to be aware of multiple
90ce3da70b43 Initial load
duke
parents:
diff changeset
   569
     * threads that might access this and try to renew it at the same
90ce3da70b43 Initial load
duke
parents:
diff changeset
   570
     * time.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   571
     *
35999
b6bf26e04451 8147772: Update KerberosTicket to describe behavior if it has been destroyed and fix NullPointerExceptions
weijun
parents: 34687
diff changeset
   572
     * @throws IllegalStateException if this ticket is destroyed
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   573
     * @throws RefreshFailedException if the ticket is not renewable, or
90ce3da70b43 Initial load
duke
parents:
diff changeset
   574
     * the latest allowable renew time has passed, or the KDC returns some
90ce3da70b43 Initial load
duke
parents:
diff changeset
   575
     * error.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   576
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   577
     * @see #isRenewable()
90ce3da70b43 Initial load
duke
parents:
diff changeset
   578
     * @see #getRenewTill()
90ce3da70b43 Initial load
duke
parents:
diff changeset
   579
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   580
    public void refresh() throws RefreshFailedException {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   581
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   582
        if (destroyed) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   583
            throw new RefreshFailedException("A destroyed ticket "
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   584
                    + "cannot be renewd.");
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   585
        }
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   586
        if (!isRenewable()) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   587
            throw new RefreshFailedException("This ticket is not renewable");
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   588
        }
47005
dbfaf076da58 8186576: KerberosTicket does not properly handle renewable tickets at the end of their lifetime
weijun
parents: 41586
diff changeset
   589
dbfaf076da58 8186576: KerberosTicket does not properly handle renewable tickets at the end of their lifetime
weijun
parents: 41586
diff changeset
   590
        if (getRenewTill() == null) {
dbfaf076da58 8186576: KerberosTicket does not properly handle renewable tickets at the end of their lifetime
weijun
parents: 41586
diff changeset
   591
            // Renewable ticket without renew-till. Illegal and ignored.
dbfaf076da58 8186576: KerberosTicket does not properly handle renewable tickets at the end of their lifetime
weijun
parents: 41586
diff changeset
   592
            return;
dbfaf076da58 8186576: KerberosTicket does not properly handle renewable tickets at the end of their lifetime
weijun
parents: 41586
diff changeset
   593
        }
dbfaf076da58 8186576: KerberosTicket does not properly handle renewable tickets at the end of their lifetime
weijun
parents: 41586
diff changeset
   594
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   595
        if (System.currentTimeMillis() > getRenewTill().getTime()) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   596
            throw new RefreshFailedException("This ticket is past "
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   597
                                           + "its last renewal time.");
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   598
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   599
        Throwable e = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   600
        sun.security.krb5.Credentials krb5Creds = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   601
90ce3da70b43 Initial load
duke
parents:
diff changeset
   602
        try {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   603
            krb5Creds = new sun.security.krb5.Credentials(asn1Encoding,
27771
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
   604
                                                    client.getName(),
57487
643978a35f6e 8227437: S4U2proxy cannot continue because server's TGT cannot be found
mbalao
parents: 47216
diff changeset
   605
                                                    (clientAlias != null ?
643978a35f6e 8227437: S4U2proxy cannot continue because server's TGT cannot be found
mbalao
parents: 47216
diff changeset
   606
                                                            clientAlias.getName() : null),
27771
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
   607
                                                    server.getName(),
57487
643978a35f6e 8227437: S4U2proxy cannot continue because server's TGT cannot be found
mbalao
parents: 47216
diff changeset
   608
                                                    (serverAlias != null ?
643978a35f6e 8227437: S4U2proxy cannot continue because server's TGT cannot be found
mbalao
parents: 47216
diff changeset
   609
                                                            serverAlias.getName() : null),
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   610
                                                    sessionKey.getEncoded(),
90ce3da70b43 Initial load
duke
parents:
diff changeset
   611
                                                    sessionKey.getKeyType(),
90ce3da70b43 Initial load
duke
parents:
diff changeset
   612
                                                    flags,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   613
                                                    authTime,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   614
                                                    startTime,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   615
                                                    endTime,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   616
                                                    renewTill,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   617
                                                    clientAddresses);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   618
            krb5Creds = krb5Creds.renew();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   619
        } catch (sun.security.krb5.KrbException krbException) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   620
            e = krbException;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   621
        } catch (java.io.IOException ioException) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   622
            e = ioException;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   623
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   624
90ce3da70b43 Initial load
duke
parents:
diff changeset
   625
        if (e != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   626
            RefreshFailedException rfException
90ce3da70b43 Initial load
duke
parents:
diff changeset
   627
                = new RefreshFailedException("Failed to renew Kerberos Ticket "
90ce3da70b43 Initial load
duke
parents:
diff changeset
   628
                                             + "for client " + client
90ce3da70b43 Initial load
duke
parents:
diff changeset
   629
                                             + " and server " + server
90ce3da70b43 Initial load
duke
parents:
diff changeset
   630
                                             + " - " + e.getMessage());
90ce3da70b43 Initial load
duke
parents:
diff changeset
   631
            rfException.initCause(e);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   632
            throw rfException;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   633
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   634
90ce3da70b43 Initial load
duke
parents:
diff changeset
   635
        /*
90ce3da70b43 Initial load
duke
parents:
diff changeset
   636
         * In case multiple threads try to refresh it at the same time.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   637
         */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   638
        synchronized (this) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   639
            try {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   640
                this.destroy();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   641
            } catch (DestroyFailedException dfException) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   642
                // Squelch it since we don't care about the old ticket.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   643
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   644
            init(krb5Creds.getEncoded(),
90ce3da70b43 Initial load
duke
parents:
diff changeset
   645
                 new KerberosPrincipal(krb5Creds.getClient().getName()),
90ce3da70b43 Initial load
duke
parents:
diff changeset
   646
                 new KerberosPrincipal(krb5Creds.getServer().getName(),
90ce3da70b43 Initial load
duke
parents:
diff changeset
   647
                                        KerberosPrincipal.KRB_NT_SRV_INST),
90ce3da70b43 Initial load
duke
parents:
diff changeset
   648
                 krb5Creds.getSessionKey().getBytes(),
90ce3da70b43 Initial load
duke
parents:
diff changeset
   649
                 krb5Creds.getSessionKey().getEType(),
90ce3da70b43 Initial load
duke
parents:
diff changeset
   650
                 krb5Creds.getFlags(),
90ce3da70b43 Initial load
duke
parents:
diff changeset
   651
                 krb5Creds.getAuthTime(),
90ce3da70b43 Initial load
duke
parents:
diff changeset
   652
                 krb5Creds.getStartTime(),
90ce3da70b43 Initial load
duke
parents:
diff changeset
   653
                 krb5Creds.getEndTime(),
90ce3da70b43 Initial load
duke
parents:
diff changeset
   654
                 krb5Creds.getRenewTill(),
90ce3da70b43 Initial load
duke
parents:
diff changeset
   655
                 krb5Creds.getClientAddresses());
90ce3da70b43 Initial load
duke
parents:
diff changeset
   656
            destroyed = false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   657
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   658
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   659
90ce3da70b43 Initial load
duke
parents:
diff changeset
   660
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   661
     * Destroys the ticket and destroys any sensitive information stored in
90ce3da70b43 Initial load
duke
parents:
diff changeset
   662
     * it.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   663
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   664
    public void destroy() throws DestroyFailedException {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   665
        if (!destroyed) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   666
            Arrays.fill(asn1Encoding, (byte) 0);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   667
            client = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   668
            server = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   669
            sessionKey.destroy();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   670
            flags = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   671
            authTime = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   672
            startTime = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   673
            endTime = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   674
            renewTill = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   675
            clientAddresses = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   676
            destroyed = true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   677
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   678
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   679
90ce3da70b43 Initial load
duke
parents:
diff changeset
   680
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   681
     * Determines if this ticket has been destroyed.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   682
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   683
    public boolean isDestroyed() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   684
        return destroyed;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   685
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   686
27771
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
   687
    /**
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
   688
     * Returns an informative textual representation of this {@code KerberosTicket}.
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
   689
     *
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
   690
     * @return an informative textual representation of this {@code KerberosTicket}.
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
   691
     */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   692
    public String toString() {
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   693
        if (destroyed) {
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   694
            return "Destroyed KerberosTicket";
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   695
        }
24969
afa6934dd8e8 8041679: Replace uses of StringBuffer with StringBuilder within core library classes
psandoz
parents: 18830
diff changeset
   696
        StringBuilder caddrString = new StringBuilder();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   697
        if (clientAddresses != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   698
            for (int i = 0; i < clientAddresses.length; i++) {
24969
afa6934dd8e8 8041679: Replace uses of StringBuffer with StringBuilder within core library classes
psandoz
parents: 18830
diff changeset
   699
                caddrString.append("clientAddresses[" + i + "] = " +
afa6934dd8e8 8041679: Replace uses of StringBuffer with StringBuilder within core library classes
psandoz
parents: 18830
diff changeset
   700
                        clientAddresses[i].toString());
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   701
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   702
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   703
        return ("Ticket (hex) = " + "\n" +
90ce3da70b43 Initial load
duke
parents:
diff changeset
   704
                 (new HexDumpEncoder()).encodeBuffer(asn1Encoding) + "\n" +
90ce3da70b43 Initial load
duke
parents:
diff changeset
   705
                "Client Principal = " + client.toString() + "\n" +
90ce3da70b43 Initial load
duke
parents:
diff changeset
   706
                "Server Principal = " + server.toString() + "\n" +
90ce3da70b43 Initial load
duke
parents:
diff changeset
   707
                "Session Key = " + sessionKey.toString() + "\n" +
90ce3da70b43 Initial load
duke
parents:
diff changeset
   708
                "Forwardable Ticket " + flags[FORWARDABLE_TICKET_FLAG] + "\n" +
90ce3da70b43 Initial load
duke
parents:
diff changeset
   709
                "Forwarded Ticket " + flags[FORWARDED_TICKET_FLAG] + "\n" +
90ce3da70b43 Initial load
duke
parents:
diff changeset
   710
                "Proxiable Ticket " + flags[PROXIABLE_TICKET_FLAG] + "\n" +
90ce3da70b43 Initial load
duke
parents:
diff changeset
   711
                "Proxy Ticket " + flags[PROXY_TICKET_FLAG] + "\n" +
90ce3da70b43 Initial load
duke
parents:
diff changeset
   712
                "Postdated Ticket " + flags[POSTDATED_TICKET_FLAG] + "\n" +
90ce3da70b43 Initial load
duke
parents:
diff changeset
   713
                "Renewable Ticket " + flags[RENEWABLE_TICKET_FLAG] + "\n" +
41586
d6f36cdf633c 8167647: Copy-and-paste bug in javax.security.auth.kerberos.KerberosTicket.toString()
weijun
parents: 35999
diff changeset
   714
                "Initial Ticket " + flags[INITIAL_TICKET_FLAG] + "\n" +
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   715
                "Auth Time = " + String.valueOf(authTime) + "\n" +
90ce3da70b43 Initial load
duke
parents:
diff changeset
   716
                "Start Time = " + String.valueOf(startTime) + "\n" +
90ce3da70b43 Initial load
duke
parents:
diff changeset
   717
                "End Time = " + endTime.toString() + "\n" +
90ce3da70b43 Initial load
duke
parents:
diff changeset
   718
                "Renew Till = " + String.valueOf(renewTill) + "\n" +
90ce3da70b43 Initial load
duke
parents:
diff changeset
   719
                "Client Addresses " +
24969
afa6934dd8e8 8041679: Replace uses of StringBuffer with StringBuilder within core library classes
psandoz
parents: 18830
diff changeset
   720
                (clientAddresses == null ? " Null " : caddrString.toString() +
58611
53ddf218eddd 8220302: Better Kerberos ccache handling
weijun
parents: 57487
diff changeset
   721
                (proxy == null ? "" : "\nwith a proxy ticket") +
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   722
                "\n"));
90ce3da70b43 Initial load
duke
parents:
diff changeset
   723
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   724
90ce3da70b43 Initial load
duke
parents:
diff changeset
   725
    /**
27771
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
   726
     * Returns a hash code for this {@code KerberosTicket}.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   727
     *
27771
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
   728
     * @return a hash code for this {@code KerberosTicket}.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   729
     * @since 1.6
90ce3da70b43 Initial load
duke
parents:
diff changeset
   730
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   731
    public int hashCode() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   732
        int result = 17;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   733
        if (isDestroyed()) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   734
            return result;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   735
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   736
        result = result * 37 + Arrays.hashCode(getEncoded());
90ce3da70b43 Initial load
duke
parents:
diff changeset
   737
        result = result * 37 + endTime.hashCode();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   738
        result = result * 37 + client.hashCode();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   739
        result = result * 37 + server.hashCode();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   740
        result = result * 37 + sessionKey.hashCode();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   741
90ce3da70b43 Initial load
duke
parents:
diff changeset
   742
        // authTime may be null
90ce3da70b43 Initial load
duke
parents:
diff changeset
   743
        if (authTime != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   744
            result = result * 37 + authTime.hashCode();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   745
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   746
90ce3da70b43 Initial load
duke
parents:
diff changeset
   747
        // startTime may be null
90ce3da70b43 Initial load
duke
parents:
diff changeset
   748
        if (startTime != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   749
            result = result * 37 + startTime.hashCode();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   750
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   751
90ce3da70b43 Initial load
duke
parents:
diff changeset
   752
        // renewTill may be null
90ce3da70b43 Initial load
duke
parents:
diff changeset
   753
        if (renewTill != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   754
            result = result * 37 + renewTill.hashCode();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   755
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   756
90ce3da70b43 Initial load
duke
parents:
diff changeset
   757
        // clientAddress may be null, the array's hashCode is 0
90ce3da70b43 Initial load
duke
parents:
diff changeset
   758
        result = result * 37 + Arrays.hashCode(clientAddresses);
58611
53ddf218eddd 8220302: Better Kerberos ccache handling
weijun
parents: 57487
diff changeset
   759
53ddf218eddd 8220302: Better Kerberos ccache handling
weijun
parents: 57487
diff changeset
   760
        if (proxy != null) {
53ddf218eddd 8220302: Better Kerberos ccache handling
weijun
parents: 57487
diff changeset
   761
            result = result * 37 + proxy.hashCode();
53ddf218eddd 8220302: Better Kerberos ccache handling
weijun
parents: 57487
diff changeset
   762
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   763
        return result * 37 + Arrays.hashCode(flags);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   764
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   765
90ce3da70b43 Initial load
duke
parents:
diff changeset
   766
    /**
27771
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
   767
     * Compares the specified object with this {@code KerberosTicket} for equality.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   768
     * Returns true if the given object is also a
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 5506
diff changeset
   769
     * {@code KerberosTicket} and the two
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 5506
diff changeset
   770
     * {@code KerberosTicket} instances are equivalent.
27771
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
   771
     * A destroyed {@code KerberosTicket} object is only equal to itself.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   772
     *
27771
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
   773
     * @param other the object to compare to
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
   774
     * @return true if the specified object is equal to this {@code KerberosTicket},
360714d431ab 8061253: Spec cleanup for some security-related classes
weijun
parents: 25859
diff changeset
   775
     * false otherwise.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   776
     * @since 1.6
90ce3da70b43 Initial load
duke
parents:
diff changeset
   777
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   778
    public boolean equals(Object other) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   779
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   780
        if (other == this) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   781
            return true;
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   782
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   783
90ce3da70b43 Initial load
duke
parents:
diff changeset
   784
        if (! (other instanceof KerberosTicket)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   785
            return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   786
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   787
90ce3da70b43 Initial load
duke
parents:
diff changeset
   788
        KerberosTicket otherTicket = ((KerberosTicket) other);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   789
        if (isDestroyed() || otherTicket.isDestroyed()) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   790
            return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   791
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   792
90ce3da70b43 Initial load
duke
parents:
diff changeset
   793
        if (!Arrays.equals(getEncoded(), otherTicket.getEncoded()) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
   794
                !endTime.equals(otherTicket.getEndTime()) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
   795
                !server.equals(otherTicket.getServer()) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
   796
                !client.equals(otherTicket.getClient()) ||
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   797
                !sessionKey.equals(otherTicket.sessionKey) ||
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   798
                !Arrays.equals(clientAddresses, otherTicket.getClientAddresses()) ||
90ce3da70b43 Initial load
duke
parents:
diff changeset
   799
                !Arrays.equals(flags, otherTicket.getFlags())) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   800
            return false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   801
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   802
90ce3da70b43 Initial load
duke
parents:
diff changeset
   803
        // authTime may be null
90ce3da70b43 Initial load
duke
parents:
diff changeset
   804
        if (authTime == null) {
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   805
            if (otherTicket.getAuthTime() != null) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   806
                return false;
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   807
            }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   808
        } else {
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   809
            if (!authTime.equals(otherTicket.getAuthTime())) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   810
                return false;
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   811
            }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   812
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   813
90ce3da70b43 Initial load
duke
parents:
diff changeset
   814
        // startTime may be null
90ce3da70b43 Initial load
duke
parents:
diff changeset
   815
        if (startTime == null) {
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   816
            if (otherTicket.getStartTime() != null) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   817
                return false;
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   818
            }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   819
        } else {
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   820
            if (!startTime.equals(otherTicket.getStartTime())) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   821
                return false;
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   822
            }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   823
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   824
90ce3da70b43 Initial load
duke
parents:
diff changeset
   825
        if (renewTill == null) {
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   826
            if (otherTicket.getRenewTill() != null) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   827
                return false;
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   828
            }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   829
        } else {
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   830
            if (!renewTill.equals(otherTicket.getRenewTill())) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   831
                return false;
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   832
            }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   833
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   834
58611
53ddf218eddd 8220302: Better Kerberos ccache handling
weijun
parents: 57487
diff changeset
   835
        if (!Objects.equals(proxy, otherTicket.proxy)) {
53ddf218eddd 8220302: Better Kerberos ccache handling
weijun
parents: 57487
diff changeset
   836
            return false;
53ddf218eddd 8220302: Better Kerberos ccache handling
weijun
parents: 57487
diff changeset
   837
        }
53ddf218eddd 8220302: Better Kerberos ccache handling
weijun
parents: 57487
diff changeset
   838
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   839
        return true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   840
    }
488
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   841
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   842
    private void readObject(ObjectInputStream s)
25661
929c829a8400 8043071: Expose session key and KRB_CRED through extended GSS-API
weijun
parents: 24969
diff changeset
   843
            throws IOException, ClassNotFoundException {
488
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   844
        s.defaultReadObject();
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   845
        if (sessionKey == null) {
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   846
           throw new InvalidObjectException("Session key cannot be null");
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   847
        }
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   848
        try {
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   849
            init(asn1Encoding, client, server, sessionKey,
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   850
                 flags, authTime, startTime, endTime,
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   851
                 renewTill, clientAddresses);
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   852
        } catch (IllegalArgumentException iae) {
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   853
            throw (InvalidObjectException)
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   854
                new InvalidObjectException(iae.getMessage()).initCause(iae);
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   855
        }
5e84e13e8892 6659990: KerberosTicket.getEndTime does not copy date (findbugs)
valeriep
parents: 51
diff changeset
   856
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   857
}