summaryrefslogtreecommitdiffstats
path: root/proxy/src/client
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2013-11-15 10:33:52 -0500
committerSimo Sorce <simo@redhat.com>2013-11-16 17:28:51 -0500
commit4cefc5db286f6764e7ff8535e3c5e3e98733355d (patch)
treebbc4786adfc99d92839da5c771685809df5373fb /proxy/src/client
parent16f8bf04b9f254914379d2cefe504a7511e75371 (diff)
downloadgss-proxy-4cefc5db286f6764e7ff8535e3c5e3e98733355d.tar.gz
gss-proxy-4cefc5db286f6764e7ff8535e3c5e3e98733355d.tar.xz
gss-proxy-4cefc5db286f6764e7ff8535e3c5e3e98733355d.zip
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
Diffstat (limited to 'proxy/src/client')
-rw-r--r--proxy/src/client/gpm_init_sec_context.c21
1 files changed, 10 insertions, 11 deletions
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;