in kerby-kerb/kerb-gssapi/src/main/java/org/apache/kerby/kerberos/kerb/gss/impl/GssUtil.java [258:319]
public static KerberosTicket convertKrbTicketToKerberosTicket(KrbTicket krbTicket, String clientName)
throws GSSException {
byte[] asn1Encoding;
try {
asn1Encoding = krbTicket.getTicket().encode();
} catch (IOException e) {
throw new GSSException(GSSException.FAILURE, -1, e.getMessage());
}
byte[] sessionKey = krbTicket.getSessionKey().getKeyData();
int keyType = krbTicket.getSessionKey().getKeyType().getValue();
EncKdcRepPart encKdcRepPart = krbTicket.getEncKdcRepPart();
KerberosPrincipal client = new KerberosPrincipal(clientName);
PrincipalName serverPrinc = krbTicket.getTicket().getSname();
String serverName = serverPrinc.getName() + "@" + krbTicket.getTicket().getRealm();
KerberosPrincipal server = new KerberosPrincipal(serverName, serverPrinc.getNameType().getValue());
TicketFlags ticketFlags = encKdcRepPart.getFlags();
boolean[] flags = ticketFlagsToBooleans(ticketFlags);
Date authTime = new Date(encKdcRepPart.getAuthTime().getTime());
Date startTime = null;
if (encKdcRepPart.getStartTime() != null) {
startTime = new Date(encKdcRepPart.getStartTime().getTime());
}
Date endTime = new Date(encKdcRepPart.getEndTime().getTime());
Date renewTill = new Date(encKdcRepPart.getRenewTill().getTime());
InetAddress[] clientAddresses = null;
if (encKdcRepPart.getCaddr() != null) {
List<HostAddress> hostAddresses = encKdcRepPart.getCaddr().getElements();
if (hostAddresses != null) {
int i = 0;
clientAddresses = new InetAddress[hostAddresses.size()];
for (HostAddress hostAddr : hostAddresses) {
try {
InetAddress iAddr = InetAddress.getByAddress(hostAddr.getAddress());
clientAddresses[i++] = iAddr;
} catch (UnknownHostException e) {
throw new GSSException(GSSException.FAILURE, -1, "Bad client address");
}
}
}
}
KerberosTicket ticket = new KerberosTicket(
asn1Encoding,
client,
server,
sessionKey,
keyType,
flags,
authTime,
startTime,
endTime,
renewTill,
clientAddresses
);
return ticket;
}