From ba22a47a93a737dbefad8c766bdd1e2f0b0f539c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Mon, 18 Dec 2006 13:04:07 +0000 Subject: [PATCH] add _gss_ntlm_allocate_ctx git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19401 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/gssapi/ntlm/accept_sec_context.c | 58 +++++++++++++++++----------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/lib/gssapi/ntlm/accept_sec_context.c b/lib/gssapi/ntlm/accept_sec_context.c index 97c309e7f..c62c6086b 100644 --- a/lib/gssapi/ntlm/accept_sec_context.c +++ b/lib/gssapi/ntlm/accept_sec_context.c @@ -242,6 +242,38 @@ out: return ret; } +OM_uint32 +_gss_ntlm_allocate_ctx(OM_uint32 *minor_status, ntlm_ctx *ctx) +{ + krb5_error_code ret; + + *ctx = calloc(1, sizeof(**ctx)); + + ret = krb5_init_context(&(*ctx)->context); + if (ret) { + gss_ctx_id_t context = (gss_ctx_id_t)*ctx; + _gss_ntlm_delete_sec_context(minor_status, &context, NULL); + *minor_status = ret; + return GSS_S_FAILURE; + } + + ret = get_ccache((*ctx)->context, &(*ctx)->id); + if (ret) { + gss_ctx_id_t context = (gss_ctx_id_t)*ctx; + _gss_ntlm_delete_sec_context(minor_status, &context, NULL); + *minor_status = ret; + return GSS_S_FAILURE; + } + + ret = krb5_ntlm_alloc((*ctx)->context, &(*ctx)->ntlm); + if (ret) { + gss_ctx_id_t context = (gss_ctx_id_t)*ctx; + _gss_ntlm_delete_sec_context(minor_status, &context, NULL); + *minor_status = ret; + return GSS_S_FAILURE; + } + return GSS_S_COMPLETE; +} /* * @@ -292,30 +324,10 @@ _gss_ntlm_accept_sec_context struct ntlm_type1 type1; OM_uint32 major_status; - ctx = calloc(1, sizeof(*ctx)); - + major_status = _gss_ntlm_allocate_ctx(minor_status, &ctx); + if (major_status) + return major_status; *context_handle = (gss_ctx_id_t)ctx; - - ret = krb5_init_context(&ctx->context); - if (ret) { - _gss_ntlm_delete_sec_context(minor_status, context_handle, NULL); - *minor_status = ret; - return GSS_S_FAILURE; - } - - ret = get_ccache(ctx->context, &ctx->id); - if (ret) { - _gss_ntlm_delete_sec_context(minor_status, context_handle, NULL); - *minor_status = ret; - return GSS_S_FAILURE; - } - - ret = krb5_ntlm_alloc(ctx->context, &ctx->ntlm); - if (ret) { - _gss_ntlm_delete_sec_context(minor_status, context_handle, NULL); - *minor_status = ret; - return GSS_S_FAILURE; - } data.data = input_token_buffer->value; data.length = input_token_buffer->length;