public static KerberosTicket convertKrbTicketToKerberosTicket()

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;
    }