Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/java.security.jgss/share/classes/sun/security/krb5/KrbTgsRep.java
41159 views
1
/*
2
* Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
/*
27
*
28
* (C) Copyright IBM Corp. 1999 All Rights Reserved.
29
* Copyright 1997 The Open Group Research Institute. All rights reserved.
30
*/
31
32
package sun.security.krb5;
33
34
import sun.security.krb5.internal.*;
35
import sun.security.krb5.internal.crypto.KeyUsage;
36
import sun.security.util.*;
37
import java.io.IOException;
38
39
/**
40
* This class encapsulates a TGS-REP that is sent from the KDC to the
41
* Kerberos client.
42
*/
43
public class KrbTgsRep extends KrbKdcRep {
44
private TGSRep rep;
45
private Credentials creds;
46
private Ticket secondTicket;
47
48
KrbTgsRep(byte[] ibuf, KrbTgsReq tgsReq)
49
throws KrbException, IOException {
50
DerValue ref = new DerValue(ibuf);
51
TGSReq req = tgsReq.getMessage();
52
TGSRep rep = null;
53
try {
54
rep = new TGSRep(ref);
55
} catch (Asn1Exception e) {
56
rep = null;
57
KRBError err = new KRBError(ref);
58
String errStr = err.getErrorString();
59
String eText = null; // pick up text sent by the server (if any)
60
if (errStr != null && errStr.length() > 0) {
61
if (errStr.charAt(errStr.length() - 1) == 0)
62
eText = errStr.substring(0, errStr.length() - 1);
63
else
64
eText = errStr;
65
}
66
KrbException ke;
67
if (eText == null) {
68
// no text sent from server
69
ke = new KrbException(err.getErrorCode());
70
} else {
71
// override default text with server text
72
ke = new KrbException(err.getErrorCode(), eText);
73
}
74
ke.initCause(e);
75
throw ke;
76
}
77
byte[] enc_tgs_rep_bytes = rep.encPart.decrypt(tgsReq.tgsReqKey,
78
tgsReq.usedSubkey() ? KeyUsage.KU_ENC_TGS_REP_PART_SUBKEY :
79
KeyUsage.KU_ENC_TGS_REP_PART_SESSKEY);
80
81
byte[] enc_tgs_rep_part = rep.encPart.reset(enc_tgs_rep_bytes);
82
ref = new DerValue(enc_tgs_rep_part);
83
EncTGSRepPart enc_part = new EncTGSRepPart(ref);
84
rep.encKDCRepPart = enc_part;
85
86
check(false, req, rep, tgsReq.tgsReqKey);
87
88
PrincipalName serverAlias = tgsReq.getServerAlias();
89
if (serverAlias != null) {
90
PrincipalName repSname = enc_part.sname;
91
if (serverAlias.equals(repSname) ||
92
isReferralSname(repSname)) {
93
serverAlias = null;
94
}
95
}
96
97
PrincipalName clientAlias = null;
98
if (rep.cname.equals(req.reqBody.cname)) {
99
// Only propagate the client alias if it is not an
100
// impersonation ticket (S4U2Self or S4U2Proxy).
101
clientAlias = tgsReq.getClientAlias();
102
}
103
104
this.creds = new Credentials(rep.ticket,
105
rep.cname,
106
clientAlias,
107
enc_part.sname,
108
serverAlias,
109
enc_part.key,
110
enc_part.flags,
111
enc_part.authtime,
112
enc_part.starttime,
113
enc_part.endtime,
114
enc_part.renewTill,
115
enc_part.caddr
116
);
117
this.rep = rep;
118
this.secondTicket = tgsReq.getSecondTicket();
119
}
120
121
/**
122
* Return the credentials that were contained in this KRB-TGS-REP.
123
*/
124
public Credentials getCreds() {
125
return creds;
126
}
127
128
sun.security.krb5.internal.ccache.Credentials setCredentials() {
129
return new sun.security.krb5.internal.ccache.Credentials(rep, secondTicket);
130
}
131
132
private static boolean isReferralSname(PrincipalName sname) {
133
if (sname != null) {
134
String[] snameStrings = sname.getNameStrings();
135
if (snameStrings.length == 2 &&
136
snameStrings[0].equals(
137
PrincipalName.TGS_DEFAULT_SRV_NAME)) {
138
return true;
139
}
140
}
141
return false;
142
}
143
}
144
145