1   /*
   2    * Copyright (c) 1996,1997, by Sun Microsystems, Inc.
   3    * All rights reserved.
   4    */
   5   
   6 | #pragma ident        "@(#)g_unseal.c        1.14        04/09/08 SMI"
   6 | #pragma ident        "@(#)g_unseal.c        1.13        98/01/22 SMI"
   7   
   8   /*
   9    *  glue routine gss_unseal
  10    */
  11   
  12   #include <mechglueP.h>
  13   
  14   OM_uint32
  15   gss_unseal(minor_status,
  16                   context_handle,
  17                   input_message_buffer,
  18                   output_message_buffer,
  19                   conf_state,
  20                   qop_state)
  21   
  22   OM_uint32 *                minor_status;
  23   gss_ctx_id_t                context_handle;
  24   gss_buffer_t                input_message_buffer;
  25   gss_buffer_t                output_message_buffer;
  26   int *                        conf_state;
  27   int *                        qop_state;
  28   
  29   {
  30   /* EXPORT DELETE START */
  31           OM_uint32                status;
  32           gss_union_ctx_id_t        ctx;
  33           gss_mechanism                mech;
  34   
  35 |         g_initialize();
  35 |         if (minor_status == NULL)
  36 +                 return (GSS_S_CALL_INACCESSIBLE_WRITE);
  37 +         *minor_status = 0;
  38   
  39           if (context_handle == GSS_C_NO_CONTEXT)
  38 |                 return GSS_C_NO_CONTEXT;
  40 |                 return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT);
  41   
  42 +         if (GSS_EMPTY_BUFFER(input_message_buffer))
  43 +                 return (GSS_S_CALL_INACCESSIBLE_READ);
  44 + 
  45 +         if (output_message_buffer == NULL)
  46 +                 return (GSS_S_CALL_INACCESSIBLE_WRITE);
  47 + 
  48 +         output_message_buffer->length = 0;
  49 +         output_message_buffer->value = NULL;
  50 + 
  51           /*
  52            * select the approprate underlying mechanism routine and
  53            * call it.
  54            */
  55   
  56           ctx = (gss_union_ctx_id_t) context_handle;
  57           mech = __gss_get_mechanism(ctx->mech_type);
  58   
  59           if (mech) {
  60                   if (mech->gss_unseal)
  61                           status = mech->gss_unseal(
  62                                                   mech->context,
  63                                                   minor_status,
  64                                                   ctx->internal_ctx_id,
  65                                                   input_message_buffer,
  66                                                   output_message_buffer,
  67                                                   conf_state,
  68                                                   qop_state);
  69                   else
  59 |                         status = GSS_S_BAD_BINDINGS;
  70 |                         status = GSS_S_UNAVAILABLE;
  71   
  72                   return (status);
  73           }
  74   
  75   /* EXPORT DELETE END */
  76   
  66 |         return (GSS_S_NO_CONTEXT);
  77 |         return (GSS_S_BAD_MECH);
  78   }
  79   
  80   OM_uint32
  81   gss_unwrap(minor_status,
  82                   context_handle,
  83                   input_message_buffer,
  84                   output_message_buffer,
  85                   conf_state,
  86                   qop_state)
  87   
  88   OM_uint32 *                minor_status;
  78 | gss_ctx_id_t                context_handle;
  79 | gss_buffer_t                input_message_buffer;
  89 | const gss_ctx_id_t        context_handle;
  90 | const gss_buffer_t        input_message_buffer;
  91   gss_buffer_t                output_message_buffer;
  92   int *                        conf_state;
  93   gss_qop_t *                qop_state;
  94   
  95   {
  85 |         return (gss_unseal(minor_status, context_handle,
  86 |                                 input_message_buffer, output_message_buffer,
  87 |                                 conf_state, (int *) qop_state));
  96 |         return (gss_unseal(minor_status, (gss_ctx_id_t)context_handle,
  97 |                         (gss_buffer_t)input_message_buffer,
  98 |                         output_message_buffer, conf_state, (int *) qop_state));
  99   }

 ----Unchanged portion omitted----