Udiff g_exp_sec_context.c
--- /net/etna.eng/build7/semery/mit2/webrev/usr/src/lib/libgss/g_exp_sec_context.c- Wed Sep 8 17:00:22 2004
+++ g_exp_sec_context.c Wed Sep 8 13:42:02 2004
@@ -1,11 +1,11 @@
/*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#pragma ident "@(#)g_exp_sec_context.c 1.15 04/09/08 SMI"
+#pragma ident "@(#)g_exp_sec_context.c 1.14 04/02/23 SMI"
/*
* glue routine for gss_export_sec_context
*/
@@ -26,21 +26,26 @@
gss_ctx_id_t *context_handle;
gss_buffer_t interprocess_token;
{
OM_uint32 status;
- size_t length;
+ OM_uint32 length;
gss_union_ctx_id_t ctx;
gss_mechanism mech;
gss_buffer_desc token;
char *buf;
- gss_initialize();
+ if (minor_status == NULL)
+ return (GSS_S_CALL_INACCESSIBLE_WRITE);
+ *minor_status = 0;
if (context_handle == NULL || *context_handle == GSS_C_NO_CONTEXT)
- return (GSS_S_NO_CONTEXT);
+ return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT);
+ if (interprocess_token == NULL)
+ return (GSS_S_CALL_INACCESSIBLE_READ);
+
/*
* select the approprate underlying mechanism routine and
* call it.
*/
@@ -47,11 +52,11 @@
ctx = (gss_union_ctx_id_t)*context_handle;
mech = __gss_get_mechanism(ctx->mech_type);
if (!mech)
return (GSS_S_BAD_MECH);
if (!mech->gss_export_sec_context)
- return (GSS_S_BAD_BINDINGS);
+ return (GSS_S_UNAVAILABLE);
status = mech->gss_export_sec_context(mech->context, minor_status,
&ctx->internal_ctx_id, &token);
if (status != GSS_S_COMPLETE)
return (status);
@@ -59,11 +64,10 @@
length = token.length + 4 + ctx->mech_type->length;
interprocess_token->length = length;
interprocess_token->value = malloc(length);
if (interprocess_token->value == 0) {
(void) gss_release_buffer(minor_status, &token);
- *minor_status = ENOMEM;
return (GSS_S_FAILURE);
}
buf = interprocess_token->value;
length = ctx->mech_type->length;
buf[3] = (unsigned char) (length & 0xFF);