diff --git a/lib/gssapi/krb5/set_sec_context_option.c b/lib/gssapi/krb5/set_sec_context_option.c index ab78436ef..aac5215b1 100644 --- a/lib/gssapi/krb5/set_sec_context_option.c +++ b/lib/gssapi/krb5/set_sec_context_option.c @@ -107,7 +107,7 @@ _gsskrb5_set_sec_context_option } else { str = malloc(value->length + 1); if (str) { - minor_status = 0; + *minor_status = 0; return GSS_S_UNAVAILABLE; } memcpy(str, value->value, value->length); @@ -117,8 +117,28 @@ _gsskrb5_set_sec_context_option _gsskrb5_register_acceptor_identity(str); free(str); - minor_status = 0; - return GSS_S_FAILURE; + *minor_status = 0; + return GSS_S_COMPLETE; + + } else if (gss_oid_equal(desired_object, GSS_KRB5_SEND_TO_KDC_X)) { + + if (value == NULL || value->length == 0) { + krb5_set_send_to_kdc_func(_gsskrb5_context, NULL, NULL); + } else { + struct gsskrb5_send_to_kdc c; + + if (value->length != sizeof(c)) { + *minor_status = EINVAL; + return GSS_S_FAILURE; + } + memcpy(&c, value->value, sizeof(c)); + krb5_set_send_to_kdc_func(_gsskrb5_context, + (krb5_send_to_kdc_func)c.func, + c.ptr); + } + + *minor_status = 0; + return GSS_S_COMPLETE; }