[PATCH] Add missing KDC "status" on some fail conditions
Samuel Cabrero
scabrero at suse.de
Tue Jul 11 13:48:01 EDT 2017
The process_tgs_req function requires the status string to be set
for all fail conditions before jump to "cleanup" label, otherwise
it will cause an assertion failure.
Signed-off-by: Samuel Cabrero <scabrero at suse.de>
---
src/kdc/do_tgs_req.c | 24 ++++++++++++++++++------
1 file changed, 18 insertions(+), 6 deletions(-)
diff --git a/src/kdc/do_tgs_req.c b/src/kdc/do_tgs_req.c
index 547a41441..d13160c00 100644
--- a/src/kdc/do_tgs_req.c
+++ b/src/kdc/do_tgs_req.c
@@ -253,8 +253,10 @@ process_tgs_req(struct server_handle *handle, krb5_data *pkt,
errcode = search_sprinc(kdc_active_realm, request, s_flags, &server,
&status);
- if (errcode != 0)
+ if (errcode != 0) {
+ status = "SEARCH_SPRINC";
goto cleanup;
+ }
sprinc = server->princ;
/* If we got a cross-realm TGS which is not the requested server, we are
@@ -304,8 +306,10 @@ process_tgs_req(struct server_handle *handle, krb5_data *pkt,
au_state->s4u2self_user = NULL;
}
- if (errcode)
+ if (errcode) {
+ status = "PROCESS_S4U2SELF";
goto cleanup;
+ }
if (s4u_x509_user != NULL) {
setflag(c_flags, KRB5_KDB_FLAG_PROTOCOL_TRANSITION);
if (is_referral) {
@@ -320,8 +324,10 @@ process_tgs_req(struct server_handle *handle, krb5_data *pkt,
/* Deal with user-to-user and constrained delegation */
errcode = decrypt_2ndtkt(kdc_active_realm, request, c_flags,
&stkt_server, &status);
- if (errcode)
+ if (errcode) {
+ status = "DECRYPT_2NDTKT";
goto cleanup;
+ }
if (isflagset(request->kdc_options, KDC_OPT_CNAME_IN_ADDL_TKT)) {
/* Do constrained delegation protocol and authorization checks */
@@ -345,8 +351,10 @@ process_tgs_req(struct server_handle *handle, krb5_data *pkt,
goto cleanup;
}
kau_s4u2proxy(kdc_context, errcode ? FALSE : TRUE, au_state);
- if (errcode)
+ if (errcode) {
+ status = "KAU_S4U2PROXY";
goto cleanup;
+ }
setflag(c_flags, KRB5_KDB_FLAG_CONSTRAINED_DELEGATION);
@@ -365,8 +373,10 @@ process_tgs_req(struct server_handle *handle, krb5_data *pkt,
errcode = gen_session_key(kdc_active_realm, request, server, &session_key,
&status);
- if (errcode)
+ if (errcode) {
+ status = "GEN_SESSION_KEY";
goto cleanup;
+ }
/*
* subject_tkt will refer to the evidence ticket (for constrained
@@ -745,8 +755,10 @@ process_tgs_req(struct server_handle *handle, krb5_data *pkt,
au_state->status = status;
}
kau_s4u2self(kdc_context, errcode ? FALSE : TRUE, au_state);
- if (errcode)
+ if (errcode) {
+ status = "KAU_S4U2SELF";
goto cleanup;
+ }
}
reply.client = enc_tkt_reply.client;
--
2.13.2
More information about the krbdev
mailing list