From 4cefc5db286f6764e7ff8535e3c5e3e98733355d Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Fri, 15 Nov 2013 10:33:52 -0500 Subject: Fix continuations in context establishment calls Properly support continuations, including returning the rigth error code and exporting partial contexts. Fixes multistep authentications in particular for the initialization case which always uses continuations. Resolves: https://fedorahosted.org/gss-proxy/ticket/108 --- proxy/src/client/gpm_init_sec_context.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'proxy/src/client') diff --git a/proxy/src/client/gpm_init_sec_context.c b/proxy/src/client/gpm_init_sec_context.c index b6ce34f..f6dfe53 100644 --- a/proxy/src/client/gpm_init_sec_context.c +++ b/proxy/src/client/gpm_init_sec_context.c @@ -104,13 +104,6 @@ OM_uint32 gpm_init_sec_context(OM_uint32 *minor_status, } } - if (res->status.major_status) { - gpm_save_status(&res->status); - ret_maj = res->status.major_status; - ret_min = res->status.minor_status; - goto done; - } - if (res->context_handle) { ctx = res->context_handle; /* we are stealing the delegated creds on success, so we do not want @@ -118,12 +111,18 @@ OM_uint32 gpm_init_sec_context(OM_uint32 *minor_status, res->context_handle = NULL; } - ret = gp_conv_gssx_to_buffer_alloc(res->output_token, &outbuf); - if (ret) { - gpm_save_internal_status(ret, strerror(ret)); - goto done; + if (res->output_token) { + ret = gp_conv_gssx_to_buffer_alloc(res->output_token, &outbuf); + if (ret) { + gpm_save_internal_status(ret, strerror(ret)); + goto done; + } } + ret_maj = res->status.major_status; + ret_min = res->status.minor_status; + gpm_save_status(&res->status); + done: if (ret != 0) { ret_min = ret; -- cgit