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);