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