krb5_enc_tkt_part enc_tkt_reply;
int newtransited = 0;
krb5_error_code retval = 0;
- krb5_keyblock encrypting_key;
+ krb5_keyblock server_keyblock, *encrypting_key;
krb5_timestamp kdc_time, authtime = 0;
krb5_keyblock session_key;
krb5_keyblock *reply_key = NULL;
memset(&reply_encpart, 0, sizeof(reply_encpart));
memset(&ticket_reply, 0, sizeof(ticket_reply));
memset(&enc_tkt_reply, 0, sizeof(enc_tkt_reply));
- memset(&encrypting_key, 0, sizeof(encrypting_key));
+ memset(&server_keyblock, 0, sizeof(server_keyblock));
session_key.contents = NULL;
retval = decode_krb5_tgs_req(pkt, &request);
}
if (isflagset(request->kdc_options, KDC_OPT_ENC_TKT_IN_SKEY)) {
krb5_enc_tkt_part *t2enc = request->second_ticket[st_idx]->enc_part2;
- encrypting_key = *(t2enc->session);
+ encrypting_key = t2enc->session;
} else {
/*
* Find the server key
* (it may be encrypted in the database)
*/
if ((errcode = krb5_dbe_decrypt_key_data(kdc_context, NULL,
- server_key, &encrypting_key,
+ server_key, &server_keyblock,
NULL))) {
status = "DECRYPT_SERVER_KEY";
goto cleanup;
}
+ encrypting_key = &server_keyblock;
}
if (isflagset(c_flags, KRB5_KDB_FLAG_CONSTRAINED_DELEGATION)) {
header_server, local_tgt,
subkey != NULL ? subkey :
header_ticket->enc_part2->session,
- &encrypting_key, /* U2U or server key */
+ encrypting_key, /* U2U or server key */
header_key,
pkt,
request,
ticket_kvno = server_key->key_data_kvno;
}
- errcode = krb5_encrypt_tkt_part(kdc_context, &encrypting_key,
+ errcode = krb5_encrypt_tkt_part(kdc_context, encrypting_key,
&ticket_reply);
if (errcode)
goto cleanup;
cleanup:
if (status == NULL)
status = "UNKNOWN_REASON";
- if (!isflagset(request->kdc_options, KDC_OPT_ENC_TKT_IN_SKEY))
- krb5_free_keyblock_contents(kdc_context, &encrypting_key);
+ krb5_free_keyblock_contents(kdc_context, &server_keyblock);
if (reply_key)
krb5_free_keyblock(kdc_context, reply_key);
if (errcode)