From 01e1d3e968839ef2374e2b782bcd64de9bfd97e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Fri, 20 Oct 2006 18:58:22 +0000 Subject: [PATCH] Implement GSS_KRB5_SEND_TO_KDC_X. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@18684 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/gssapi/krb5/set_sec_context_option.c | 26 +++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) 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; }