From: Simo Sorce Date: Mon, 26 Oct 2020 18:47:19 +0000 (-0400) Subject: Fix gss_acquire_cred_from() IAKERB handling X-Git-Tag: krb5-1.19-beta1~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=938b535145a9cc312e42f99782af75067cfec588;p=thirdparty%2Fkrb5.git Fix gss_acquire_cred_from() IAKERB handling Add a separate IAKERB entry point for gss_acquire_cred_from() and correctly pass down the iakerb flag to acquire_cred_context(), so that we don't attempt to acquire initial credentials directly. [ghudson@mit.edu: rebased earlier in sequence; rewrote commit message] ticket: 8961 (new) --- diff --git a/src/lib/gssapi/krb5/acquire_cred.c b/src/lib/gssapi/krb5/acquire_cred.c index c85d4fd5d6..519abae436 100644 --- a/src/lib/gssapi/krb5/acquire_cred.c +++ b/src/lib/gssapi/krb5/acquire_cred.c @@ -1168,16 +1168,13 @@ gss_krb5int_import_cred(OM_uint32 *minor_status, return code; } -OM_uint32 KRB5_CALLCONV -krb5_gss_acquire_cred_from(OM_uint32 *minor_status, - const gss_name_t desired_name, - OM_uint32 time_req, - const gss_OID_set desired_mechs, - gss_cred_usage_t cred_usage, - gss_const_key_value_set_t cred_store, - gss_cred_id_t *output_cred_handle, - gss_OID_set *actual_mechs, - OM_uint32 *time_rec) +static OM_uint32 +acquire_cred_from(OM_uint32 *minor_status, const gss_name_t desired_name, + OM_uint32 time_req, const gss_OID_set desired_mechs, + gss_cred_usage_t cred_usage, + gss_const_key_value_set_t cred_store, krb5_boolean iakerb, + gss_cred_id_t *output_cred_handle, + gss_OID_set *actual_mechs, OM_uint32 *time_rec) { krb5_context context = NULL; krb5_error_code code = 0; @@ -1246,7 +1243,7 @@ krb5_gss_acquire_cred_from(OM_uint32 *minor_status, ret = acquire_cred_context(context, minor_status, desired_name, NULL, time_req, cred_usage, ccache, client_keytab, - keytab, rcname, 0, output_cred_handle, + keytab, rcname, iakerb, output_cred_handle, time_rec); out: @@ -1259,3 +1256,37 @@ out: krb5_free_context(context); return ret; } + +OM_uint32 KRB5_CALLCONV +krb5_gss_acquire_cred_from(OM_uint32 *minor_status, + const gss_name_t desired_name, + OM_uint32 time_req, + const gss_OID_set desired_mechs, + gss_cred_usage_t cred_usage, + gss_const_key_value_set_t cred_store, + gss_cred_id_t *output_cred_handle, + gss_OID_set *actual_mechs, + OM_uint32 *time_rec) +{ + return acquire_cred_from(minor_status, desired_name, time_req, + desired_mechs, cred_usage, cred_store, + FALSE, output_cred_handle, actual_mechs, + time_rec); +} + +OM_uint32 KRB5_CALLCONV +iakerb_gss_acquire_cred_from(OM_uint32 *minor_status, + const gss_name_t desired_name, + OM_uint32 time_req, + const gss_OID_set desired_mechs, + gss_cred_usage_t cred_usage, + gss_const_key_value_set_t cred_store, + gss_cred_id_t *output_cred_handle, + gss_OID_set *actual_mechs, + OM_uint32 *time_rec) +{ + return acquire_cred_from(minor_status, desired_name, time_req, + desired_mechs, cred_usage, cred_store, + TRUE, output_cred_handle, actual_mechs, + time_rec); +} diff --git a/src/lib/gssapi/krb5/gssapiP_krb5.h b/src/lib/gssapi/krb5/gssapiP_krb5.h index 53d077a0f5..f21a7de12d 100644 --- a/src/lib/gssapi/krb5/gssapiP_krb5.h +++ b/src/lib/gssapi/krb5/gssapiP_krb5.h @@ -549,6 +549,17 @@ iakerb_gss_acquire_cred_with_password( gss_OID_set *actual_mechs, OM_uint32 *time_rec); +OM_uint32 KRB5_CALLCONV +iakerb_gss_acquire_cred_from(OM_uint32 *minor_status, + const gss_name_t desired_name, + OM_uint32 time_req, + const gss_OID_set desired_mechs, + gss_cred_usage_t cred_usage, + gss_const_key_value_set_t cred_store, + gss_cred_id_t *output_cred_handle, + gss_OID_set *actual_mechs, + OM_uint32 *time_rec); + OM_uint32 KRB5_CALLCONV krb5_gss_release_cred (OM_uint32*, /* minor_status */ gss_cred_id_t* /* cred_handle */ diff --git a/src/lib/gssapi/krb5/gssapi_krb5.c b/src/lib/gssapi/krb5/gssapi_krb5.c index a96d7ceaeb..46aa9b7a57 100644 --- a/src/lib/gssapi/krb5/gssapi_krb5.c +++ b/src/lib/gssapi/krb5/gssapi_krb5.c @@ -996,7 +996,7 @@ static struct gss_config iakerb_mechanism = { krb5_gss_inquire_saslname_for_mech, krb5_gss_inquire_mech_for_saslname, krb5_gss_inquire_attrs_for_mech, - krb5_gss_acquire_cred_from, + iakerb_gss_acquire_cred_from, krb5_gss_store_cred_into, iakerb_gss_acquire_cred_with_password, krb5_gss_export_cred,