1   /*
   2    * Copyright (c) 1996,1997, by Sun Microsystems, Inc.
   3    * All rights reserved.
   4    */
   5   
   6 | #pragma ident        "@(#)g_verify.c        1.14        04/09/08 SMI"
   6 | #pragma ident        "@(#)g_verify.c        1.13        98/04/23 SMI"
   7   
   8   /*
   9    *  glue routine for gss_verify
  10    */
  11   
  12   #include <mechglueP.h>
  13   
  14   OM_uint32
  15   gss_verify(minor_status,
  16                   context_handle,
  17                   message_buffer,
  18                   token_buffer,
  19                   qop_state)
  20   
  21   OM_uint32 *                minor_status;
  22   gss_ctx_id_t                context_handle;
  23   gss_buffer_t                message_buffer;
  24   gss_buffer_t                token_buffer;
  25   int *                        qop_state;
  26   {
  27           OM_uint32                status;
  28           gss_union_ctx_id_t        ctx;
  29           gss_mechanism                mech;
  30   
  31 + 
  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)
  32 |                 return GSS_S_NO_CONTEXT;
  37 |                 return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT);
  38   
  39 +         if ((message_buffer == NULL) || GSS_EMPTY_BUFFER(token_buffer))
  40 +                 return (GSS_S_CALL_INACCESSIBLE_READ);
  41 + 
  42           /*
  43            * select the approprate underlying mechanism routine and
  44            * call it.
  45            */
  46   
  47           ctx = (gss_union_ctx_id_t) context_handle;
  48           mech = __gss_get_mechanism(ctx->mech_type);
  49   
  50           if (mech) {
  51                   if (mech->gss_verify)
  52                           status = mech->gss_verify(
  53                                                   mech->context,
  54                                                   minor_status,
  55                                                   ctx->internal_ctx_id,
  56                                                   message_buffer,
  57                                                   token_buffer,
  58                                                   qop_state);
  59                   else
  52 |                         status = GSS_S_BAD_BINDINGS;
  60 |                         status = GSS_S_UNAVAILABLE;
  61   
  62                   return (status);
  63           }
  64   
  57 |     return (GSS_S_NO_CONTEXT);
  65 |     return (GSS_S_BAD_MECH);
  66   }

 ----Unchanged portion omitted----