1 /* 2 * Copyright (c) 1996,1997, by Sun Microsystems, Inc. 3 * All rights reserved. 4 */ 5 6 | #pragma ident "@(#)g_sign.c 1.15 04/09/08 SMI" 6 | #pragma ident "@(#)g_sign.c 1.14 98/04/23 SMI" 7 8 /* 9 * glue routine gss_sign 10 */ 11 12 #include <mechglueP.h> 13 14 OM_uint32 15 gss_sign(minor_status, 16 context_handle, 17 qop_req, 18 message_buffer, 19 msg_token) 20 21 OM_uint32 * minor_status; 22 gss_ctx_id_t context_handle; 23 int qop_req; 24 gss_buffer_t message_buffer; 25 gss_buffer_t msg_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 + *minor_status = 0; 35 36 + if (context_handle == GSS_C_NO_CONTEXT) 37 + return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT); 38 + 39 + if (message_buffer == NULL) 40 + return (GSS_S_CALL_INACCESSIBLE_READ); 41 + 42 + if (msg_token == NULL) 43 + return (GSS_S_CALL_INACCESSIBLE_WRITE); 44 + 45 + msg_token->value = NULL; 46 + msg_token->length = 0; 47 /* 48 * select the approprate underlying mechanism routine and 49 * call it. 50 */ 51 52 ctx = (gss_union_ctx_id_t) context_handle; 53 mech = __gss_get_mechanism(ctx->mech_type); 54 55 if (mech) { 56 if (mech->gss_sign) 57 status = mech->gss_sign( 58 mech->context, 59 minor_status, 60 ctx->internal_ctx_id, 61 qop_req, 62 message_buffer, 63 msg_token); 64 else 52 | status = GSS_S_BAD_BINDINGS; 65 | status = GSS_S_UNAVAILABLE; 66 67 return (status); 68 } 69 57 | return (GSS_S_NO_CONTEXT); 70 | return (GSS_S_BAD_MECH); 71 } ----Unchanged portion omitted----