1 /* 2 * Copyright (c) 1996,1997, by Sun Microsystems, Inc. 3 * All rights reserved. 4 */ 5 6 | #pragma ident "@(#)g_delete_sec_context.c 1.12 04/09/08 SMI" 6 | #pragma ident "@(#)g_delete_sec_context.c 1.11 97/11/09 SMI" 7 8 /* 9 * glue routine for gss_delete_sec_context 10 */ 11 12 #include <mechglueP.h> 13 #include <stdio.h> 14 #ifdef HAVE_STDLIB_H 15 #include <stdlib.h> 16 #endif 17 18 OM_uint32 19 gss_delete_sec_context(minor_status, 20 context_handle, 21 output_token) 22 23 OM_uint32 * minor_status; 24 gss_ctx_id_t * context_handle; 25 gss_buffer_t output_token; 26 27 { 28 OM_uint32 status; 29 gss_union_ctx_id_t ctx; 30 gss_mechanism mech; 31 32 | gss_initialize(); 32 | if (minor_status == NULL) 33 + return (GSS_S_CALL_INACCESSIBLE_WRITE); 34 35 - 35 /* if the context_handle is Null, return NO_CONTEXT error */ 36 if (context_handle == NULL || *context_handle == GSS_C_NO_CONTEXT) 37 | return (GSS_S_NO_CONTEXT); 37 | return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT); 38 39 /* 40 * select the approprate underlying mechanism routine and 41 * call it. 42 */ 43 44 ctx = (gss_union_ctx_id_t) *context_handle; 45 mech = __gss_get_mechanism(ctx->mech_type); 46 47 if (mech) { 48 49 if (mech->gss_delete_sec_context) 50 status = mech->gss_delete_sec_context(mech->context, 51 minor_status, 52 &ctx->internal_ctx_id, 53 output_token); 54 else 55 | status = GSS_S_BAD_BINDINGS; 55 | status = GSS_S_UNAVAILABLE; 56 58 - 57 /* now free up the space for the union context structure */ 58 free(ctx->mech_type->elements); 59 free(ctx->mech_type); 60 free(*context_handle); 61 *context_handle = NULL; 62 63 return (status); 64 } 65 67 | return (GSS_S_NO_CONTEXT); 66 | return (GSS_S_BAD_MECH); 67 } ----Unchanged portion omitted----