summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2014-06-05 12:03:16 -0400
committerGreg Hudson <ghudson@mit.edu>2014-06-10 23:54:41 -0400
commit02de9935648c307098fb69da26f74424da8dde64 (patch)
treee0c7c0ccbba3f914986d474b0e2edfe157cd6729 /src/lib
parent4799121941cfd846f9d3d7a905ac4c84342ff306 (diff)
downloadkrb5-02de9935648c307098fb69da26f74424da8dde64.tar.gz
krb5-02de9935648c307098fb69da26f74424da8dde64.tar.xz
krb5-02de9935648c307098fb69da26f74424da8dde64.zip
Simplify ticket retrieval from AP-REQs
After krb5_rd_req_decoded or krb5_rd_req_decoded_anyflag, the ticket (with enc_part2 if we could decrypt it) is accessible via request->ticket; there is no need to copy it. Stop using the ticket parameter of those functions. Where we need to save the ticket beyond the lifetime of the krb5_ap_req, steal the pointer before freeing the request.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/gssapi/krb5/accept_sec_context.c7
-rw-r--r--src/lib/krb5/krb/rd_req.c7
2 files changed, 9 insertions, 5 deletions
diff --git a/src/lib/gssapi/krb5/accept_sec_context.c b/src/lib/gssapi/krb5/accept_sec_context.c
index af7f0dcd5..b8086509e 100644
--- a/src/lib/gssapi/krb5/accept_sec_context.c
+++ b/src/lib/gssapi/krb5/accept_sec_context.c
@@ -607,6 +607,7 @@ kg_accept_krb5(minor_status, context_handle,
major_status = GSS_S_FAILURE;
goto done;
}
+ ticket = request->ticket;
/* decode the message */
@@ -644,7 +645,7 @@ kg_accept_krb5(minor_status, context_handle,
}
code = krb5_rd_req_decoded(context, &auth_context, request, accprinc,
- cred->keytab, &ap_req_options, &ticket);
+ cred->keytab, &ap_req_options, NULL);
krb5_free_principal(context, accprinc);
if (code) {
@@ -968,8 +969,6 @@ kg_accept_krb5(minor_status, context_handle,
ctx->gss_flags |= GSS_C_DELEG_FLAG;
}
- krb5_free_ticket(context, ticket); /* Done with ticket */
-
{
krb5_int32 seq_temp;
krb5_auth_con_getremoteseqnumber(context, auth_context, &seq_temp);
@@ -1234,7 +1233,7 @@ fail:
(void) krb5_us_timeofday(context, &krb_error_data.stime,
&krb_error_data.susec);
- krb_error_data.server = request->ticket->server;
+ krb_error_data.server = ticket->server;
code = krb5_mk_error(context, &krb_error_data, &scratch);
if (code)
goto done;
diff --git a/src/lib/krb5/krb/rd_req.c b/src/lib/krb5/krb/rd_req.c
index 5ad77c106..c0fc97932 100644
--- a/src/lib/krb5/krb/rd_req.c
+++ b/src/lib/krb5/krb/rd_req.c
@@ -85,7 +85,12 @@ krb5_rd_req(krb5_context context, krb5_auth_context *auth_context,
#endif /* LEAN_CLIENT */
retval = krb5_rd_req_decoded(context, auth_context, request, server,
- keytab, ap_req_options, ticket);
+ keytab, ap_req_options, NULL);
+ if (!retval && ticket != NULL) {
+ /* Steal the ticket pointer for the caller. */
+ *ticket = request->ticket;
+ request->ticket = NULL;
+ }
#ifndef LEAN_CLIENT
if (new_keytab != NULL)