113498266Sopenharmony_ci/***************************************************************************
213498266Sopenharmony_ci *                                  _   _ ____  _
313498266Sopenharmony_ci *  Project                     ___| | | |  _ \| |
413498266Sopenharmony_ci *                             / __| | | | |_) | |
513498266Sopenharmony_ci *                            | (__| |_| |  _ <| |___
613498266Sopenharmony_ci *                             \___|\___/|_| \_\_____|
713498266Sopenharmony_ci *
813498266Sopenharmony_ci * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
913498266Sopenharmony_ci *
1013498266Sopenharmony_ci * This software is licensed as described in the file COPYING, which
1113498266Sopenharmony_ci * you should have received as part of this distribution. The terms
1213498266Sopenharmony_ci * are also available at https://curl.se/docs/copyright.html.
1313498266Sopenharmony_ci *
1413498266Sopenharmony_ci * You may opt to use, copy, modify, merge, publish, distribute and/or sell
1513498266Sopenharmony_ci * copies of the Software, and permit persons to whom the Software is
1613498266Sopenharmony_ci * furnished to do so, under the terms of the COPYING file.
1713498266Sopenharmony_ci *
1813498266Sopenharmony_ci * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
1913498266Sopenharmony_ci * KIND, either express or implied.
2013498266Sopenharmony_ci *
2113498266Sopenharmony_ci * SPDX-License-Identifier: curl
2213498266Sopenharmony_ci *
2313498266Sopenharmony_ci ***************************************************************************/
2413498266Sopenharmony_ci
2513498266Sopenharmony_ci/* Only provides the bare minimum to link with libcurl */
2613498266Sopenharmony_ci
2713498266Sopenharmony_ci#include <stdio.h>
2813498266Sopenharmony_ci#include <stdlib.h>
2913498266Sopenharmony_ci#include <string.h>
3013498266Sopenharmony_ci
3113498266Sopenharmony_ci#include "stub_gssapi.h"
3213498266Sopenharmony_ci
3313498266Sopenharmony_ci/* !checksrc! disable SNPRINTF all */
3413498266Sopenharmony_ci
3513498266Sopenharmony_ci#define MAX_CREDS_LENGTH 250
3613498266Sopenharmony_ci#define APPROX_TOKEN_LEN 250
3713498266Sopenharmony_ci
3813498266Sopenharmony_cienum min_err_code {
3913498266Sopenharmony_ci    GSS_OK = 0,
4013498266Sopenharmony_ci    GSS_NO_MEMORY,
4113498266Sopenharmony_ci    GSS_INVALID_ARGS,
4213498266Sopenharmony_ci    GSS_INVALID_CREDS,
4313498266Sopenharmony_ci    GSS_INVALID_CTX,
4413498266Sopenharmony_ci    GSS_SERVER_ERR,
4513498266Sopenharmony_ci    GSS_NO_MECH,
4613498266Sopenharmony_ci    GSS_LAST
4713498266Sopenharmony_ci};
4813498266Sopenharmony_ci
4913498266Sopenharmony_cistatic const char *min_err_table[] = {
5013498266Sopenharmony_ci  "stub-gss: no error",
5113498266Sopenharmony_ci  "stub-gss: no memory",
5213498266Sopenharmony_ci  "stub-gss: invalid arguments",
5313498266Sopenharmony_ci  "stub-gss: invalid credentials",
5413498266Sopenharmony_ci  "stub-gss: invalid context",
5513498266Sopenharmony_ci  "stub-gss: server returned error",
5613498266Sopenharmony_ci  "stub-gss: cannot find a mechanism",
5713498266Sopenharmony_ci  NULL
5813498266Sopenharmony_ci};
5913498266Sopenharmony_ci
6013498266Sopenharmony_cistruct gss_ctx_id_t_desc_struct {
6113498266Sopenharmony_ci  enum { NONE, KRB5, NTLM1, NTLM3 } sent;
6213498266Sopenharmony_ci  int have_krb5;
6313498266Sopenharmony_ci  int have_ntlm;
6413498266Sopenharmony_ci  OM_uint32 flags;
6513498266Sopenharmony_ci  char creds[MAX_CREDS_LENGTH];
6613498266Sopenharmony_ci};
6713498266Sopenharmony_ci
6813498266Sopenharmony_ci/* simple implementation of strndup(), which isn't portable */
6913498266Sopenharmony_cistatic char *my_strndup(const char *ptr, size_t len)
7013498266Sopenharmony_ci{
7113498266Sopenharmony_ci  char *copy = malloc(len + 1);
7213498266Sopenharmony_ci  if(!copy)
7313498266Sopenharmony_ci    return NULL;
7413498266Sopenharmony_ci  memcpy(copy, ptr, len);
7513498266Sopenharmony_ci  copy[len] = '\0';
7613498266Sopenharmony_ci  return copy;
7713498266Sopenharmony_ci}
7813498266Sopenharmony_ci
7913498266Sopenharmony_ciOM_uint32 gss_init_sec_context(OM_uint32 *min,
8013498266Sopenharmony_ci            gss_const_cred_id_t initiator_cred_handle,
8113498266Sopenharmony_ci            gss_ctx_id_t *context_handle,
8213498266Sopenharmony_ci            gss_const_name_t target_name,
8313498266Sopenharmony_ci            const gss_OID mech_type,
8413498266Sopenharmony_ci            OM_uint32 req_flags,
8513498266Sopenharmony_ci            OM_uint32 time_req,
8613498266Sopenharmony_ci            const gss_channel_bindings_t input_chan_bindings,
8713498266Sopenharmony_ci            const gss_buffer_t input_token,
8813498266Sopenharmony_ci            gss_OID *actual_mech_type,
8913498266Sopenharmony_ci            gss_buffer_t output_token,
9013498266Sopenharmony_ci            OM_uint32 *ret_flags,
9113498266Sopenharmony_ci            OM_uint32 *time_rec)
9213498266Sopenharmony_ci{
9313498266Sopenharmony_ci  /* The token will be encoded in base64 */
9413498266Sopenharmony_ci  size_t length = APPROX_TOKEN_LEN * 3 / 4;
9513498266Sopenharmony_ci  size_t used = 0;
9613498266Sopenharmony_ci  char *token = NULL;
9713498266Sopenharmony_ci  const char *creds = NULL;
9813498266Sopenharmony_ci  gss_ctx_id_t ctx = NULL;
9913498266Sopenharmony_ci
10013498266Sopenharmony_ci  (void)initiator_cred_handle;
10113498266Sopenharmony_ci  (void)mech_type;
10213498266Sopenharmony_ci  (void)time_req;
10313498266Sopenharmony_ci  (void)input_chan_bindings;
10413498266Sopenharmony_ci  (void)actual_mech_type;
10513498266Sopenharmony_ci
10613498266Sopenharmony_ci  if(!min)
10713498266Sopenharmony_ci    return GSS_S_FAILURE;
10813498266Sopenharmony_ci
10913498266Sopenharmony_ci  *min = 0;
11013498266Sopenharmony_ci
11113498266Sopenharmony_ci  if(!context_handle || !target_name || !output_token) {
11213498266Sopenharmony_ci    *min = GSS_INVALID_ARGS;
11313498266Sopenharmony_ci    return GSS_S_FAILURE;
11413498266Sopenharmony_ci  }
11513498266Sopenharmony_ci
11613498266Sopenharmony_ci  creds = getenv("CURL_STUB_GSS_CREDS");
11713498266Sopenharmony_ci  if(!creds || strlen(creds) >= MAX_CREDS_LENGTH) {
11813498266Sopenharmony_ci    *min = GSS_INVALID_CREDS;
11913498266Sopenharmony_ci    return GSS_S_FAILURE;
12013498266Sopenharmony_ci  }
12113498266Sopenharmony_ci
12213498266Sopenharmony_ci  ctx = *context_handle;
12313498266Sopenharmony_ci  if(ctx && strcmp(ctx->creds, creds)) {
12413498266Sopenharmony_ci    *min = GSS_INVALID_CREDS;
12513498266Sopenharmony_ci    return GSS_S_FAILURE;
12613498266Sopenharmony_ci  }
12713498266Sopenharmony_ci
12813498266Sopenharmony_ci  output_token->length = 0;
12913498266Sopenharmony_ci  output_token->value = NULL;
13013498266Sopenharmony_ci
13113498266Sopenharmony_ci  if(input_token && input_token->length) {
13213498266Sopenharmony_ci    if(!ctx) {
13313498266Sopenharmony_ci      *min = GSS_INVALID_CTX;
13413498266Sopenharmony_ci      return GSS_S_FAILURE;
13513498266Sopenharmony_ci    }
13613498266Sopenharmony_ci
13713498266Sopenharmony_ci    /* Server response, either D (RA==) or C (Qw==) */
13813498266Sopenharmony_ci    if(((char *) input_token->value)[0] == 'D') {
13913498266Sopenharmony_ci      /* Done */
14013498266Sopenharmony_ci      switch(ctx->sent) {
14113498266Sopenharmony_ci      case KRB5:
14213498266Sopenharmony_ci      case NTLM3:
14313498266Sopenharmony_ci        if(ret_flags)
14413498266Sopenharmony_ci          *ret_flags = ctx->flags;
14513498266Sopenharmony_ci        if(time_rec)
14613498266Sopenharmony_ci          *time_rec = GSS_C_INDEFINITE;
14713498266Sopenharmony_ci        return GSS_S_COMPLETE;
14813498266Sopenharmony_ci      default:
14913498266Sopenharmony_ci        *min = GSS_SERVER_ERR;
15013498266Sopenharmony_ci        return GSS_S_FAILURE;
15113498266Sopenharmony_ci      }
15213498266Sopenharmony_ci    }
15313498266Sopenharmony_ci
15413498266Sopenharmony_ci    if(((char *) input_token->value)[0] != 'C') {
15513498266Sopenharmony_ci      /* We only support Done or Continue */
15613498266Sopenharmony_ci      *min = GSS_SERVER_ERR;
15713498266Sopenharmony_ci      return GSS_S_FAILURE;
15813498266Sopenharmony_ci    }
15913498266Sopenharmony_ci
16013498266Sopenharmony_ci    /* Continue */
16113498266Sopenharmony_ci    switch(ctx->sent) {
16213498266Sopenharmony_ci    case KRB5:
16313498266Sopenharmony_ci      /* We sent KRB5 and it failed, let's try NTLM */
16413498266Sopenharmony_ci      if(ctx->have_ntlm) {
16513498266Sopenharmony_ci        ctx->sent = NTLM1;
16613498266Sopenharmony_ci        break;
16713498266Sopenharmony_ci      }
16813498266Sopenharmony_ci      else {
16913498266Sopenharmony_ci        *min = GSS_SERVER_ERR;
17013498266Sopenharmony_ci        return GSS_S_FAILURE;
17113498266Sopenharmony_ci      }
17213498266Sopenharmony_ci    case NTLM1:
17313498266Sopenharmony_ci      ctx->sent = NTLM3;
17413498266Sopenharmony_ci      break;
17513498266Sopenharmony_ci    default:
17613498266Sopenharmony_ci      *min = GSS_SERVER_ERR;
17713498266Sopenharmony_ci      return GSS_S_FAILURE;
17813498266Sopenharmony_ci    }
17913498266Sopenharmony_ci  }
18013498266Sopenharmony_ci  else {
18113498266Sopenharmony_ci    if(ctx) {
18213498266Sopenharmony_ci      *min = GSS_INVALID_CTX;
18313498266Sopenharmony_ci      return GSS_S_FAILURE;
18413498266Sopenharmony_ci    }
18513498266Sopenharmony_ci
18613498266Sopenharmony_ci    ctx = (gss_ctx_id_t) calloc(1, sizeof(*ctx));
18713498266Sopenharmony_ci    if(!ctx) {
18813498266Sopenharmony_ci      *min = GSS_NO_MEMORY;
18913498266Sopenharmony_ci      return GSS_S_FAILURE;
19013498266Sopenharmony_ci    }
19113498266Sopenharmony_ci
19213498266Sopenharmony_ci    if(strstr(creds, "KRB5"))
19313498266Sopenharmony_ci      ctx->have_krb5 = 1;
19413498266Sopenharmony_ci
19513498266Sopenharmony_ci    if(strstr(creds, "NTLM"))
19613498266Sopenharmony_ci      ctx->have_ntlm = 1;
19713498266Sopenharmony_ci
19813498266Sopenharmony_ci    if(ctx->have_krb5)
19913498266Sopenharmony_ci      ctx->sent = KRB5;
20013498266Sopenharmony_ci    else if(ctx->have_ntlm)
20113498266Sopenharmony_ci      ctx->sent = NTLM1;
20213498266Sopenharmony_ci    else {
20313498266Sopenharmony_ci      free(ctx);
20413498266Sopenharmony_ci      *min = GSS_NO_MECH;
20513498266Sopenharmony_ci      return GSS_S_FAILURE;
20613498266Sopenharmony_ci    }
20713498266Sopenharmony_ci
20813498266Sopenharmony_ci    strcpy(ctx->creds, creds);
20913498266Sopenharmony_ci    ctx->flags = req_flags;
21013498266Sopenharmony_ci  }
21113498266Sopenharmony_ci
21213498266Sopenharmony_ci  token = malloc(length);
21313498266Sopenharmony_ci  if(!token) {
21413498266Sopenharmony_ci    free(ctx);
21513498266Sopenharmony_ci    *min = GSS_NO_MEMORY;
21613498266Sopenharmony_ci    return GSS_S_FAILURE;
21713498266Sopenharmony_ci  }
21813498266Sopenharmony_ci
21913498266Sopenharmony_ci  /* Token format: creds:target:type:padding */
22013498266Sopenharmony_ci  /* Note: this is using the *real* snprintf() and not the curl provided
22113498266Sopenharmony_ci     one */
22213498266Sopenharmony_ci  used = (size_t) snprintf(token, length, "%s:%s:%d:", creds,
22313498266Sopenharmony_ci                           (char *) target_name, ctx->sent);
22413498266Sopenharmony_ci
22513498266Sopenharmony_ci  if(used >= length) {
22613498266Sopenharmony_ci    free(token);
22713498266Sopenharmony_ci    free(ctx);
22813498266Sopenharmony_ci    *min = GSS_NO_MEMORY;
22913498266Sopenharmony_ci    return GSS_S_FAILURE;
23013498266Sopenharmony_ci  }
23113498266Sopenharmony_ci
23213498266Sopenharmony_ci  /* Overwrite null terminator */
23313498266Sopenharmony_ci  memset(token + used, 'A', length - used);
23413498266Sopenharmony_ci
23513498266Sopenharmony_ci  *context_handle = ctx;
23613498266Sopenharmony_ci
23713498266Sopenharmony_ci  output_token->value = token;
23813498266Sopenharmony_ci  output_token->length = length;
23913498266Sopenharmony_ci
24013498266Sopenharmony_ci  return GSS_S_CONTINUE_NEEDED;
24113498266Sopenharmony_ci}
24213498266Sopenharmony_ci
24313498266Sopenharmony_ciOM_uint32 gss_delete_sec_context(OM_uint32 *min,
24413498266Sopenharmony_ci                                 gss_ctx_id_t *context_handle,
24513498266Sopenharmony_ci                                 gss_buffer_t output_token)
24613498266Sopenharmony_ci{
24713498266Sopenharmony_ci  (void)output_token;
24813498266Sopenharmony_ci
24913498266Sopenharmony_ci  if(!min)
25013498266Sopenharmony_ci    return GSS_S_FAILURE;
25113498266Sopenharmony_ci
25213498266Sopenharmony_ci  if(!context_handle) {
25313498266Sopenharmony_ci    *min = GSS_INVALID_CTX;
25413498266Sopenharmony_ci    return GSS_S_FAILURE;
25513498266Sopenharmony_ci  }
25613498266Sopenharmony_ci
25713498266Sopenharmony_ci  free(*context_handle);
25813498266Sopenharmony_ci  *context_handle = NULL;
25913498266Sopenharmony_ci  *min = 0;
26013498266Sopenharmony_ci
26113498266Sopenharmony_ci  return GSS_S_COMPLETE;
26213498266Sopenharmony_ci}
26313498266Sopenharmony_ci
26413498266Sopenharmony_ciOM_uint32 gss_release_buffer(OM_uint32 *min,
26513498266Sopenharmony_ci                             gss_buffer_t buffer)
26613498266Sopenharmony_ci{
26713498266Sopenharmony_ci  if(min)
26813498266Sopenharmony_ci    *min = 0;
26913498266Sopenharmony_ci
27013498266Sopenharmony_ci  if(buffer && buffer->length) {
27113498266Sopenharmony_ci    free(buffer->value);
27213498266Sopenharmony_ci    buffer->length = 0;
27313498266Sopenharmony_ci  }
27413498266Sopenharmony_ci
27513498266Sopenharmony_ci  return GSS_S_COMPLETE;
27613498266Sopenharmony_ci}
27713498266Sopenharmony_ci
27813498266Sopenharmony_ciOM_uint32 gss_import_name(OM_uint32 *min,
27913498266Sopenharmony_ci                          const gss_buffer_t input_name_buffer,
28013498266Sopenharmony_ci                          const gss_OID input_name_type,
28113498266Sopenharmony_ci                          gss_name_t *output_name)
28213498266Sopenharmony_ci{
28313498266Sopenharmony_ci  char *name = NULL;
28413498266Sopenharmony_ci  (void)input_name_type;
28513498266Sopenharmony_ci
28613498266Sopenharmony_ci  if(!min)
28713498266Sopenharmony_ci    return GSS_S_FAILURE;
28813498266Sopenharmony_ci
28913498266Sopenharmony_ci  if(!input_name_buffer || !output_name) {
29013498266Sopenharmony_ci    *min = GSS_INVALID_ARGS;
29113498266Sopenharmony_ci    return GSS_S_FAILURE;
29213498266Sopenharmony_ci  }
29313498266Sopenharmony_ci
29413498266Sopenharmony_ci  name = my_strndup(input_name_buffer->value, input_name_buffer->length);
29513498266Sopenharmony_ci  if(!name) {
29613498266Sopenharmony_ci    *min = GSS_NO_MEMORY;
29713498266Sopenharmony_ci    return GSS_S_FAILURE;
29813498266Sopenharmony_ci  }
29913498266Sopenharmony_ci
30013498266Sopenharmony_ci  *output_name = (gss_name_t) name;
30113498266Sopenharmony_ci  *min = 0;
30213498266Sopenharmony_ci
30313498266Sopenharmony_ci  return GSS_S_COMPLETE;
30413498266Sopenharmony_ci}
30513498266Sopenharmony_ci
30613498266Sopenharmony_ciOM_uint32 gss_release_name(OM_uint32 *min,
30713498266Sopenharmony_ci                           gss_name_t *input_name)
30813498266Sopenharmony_ci{
30913498266Sopenharmony_ci  if(min)
31013498266Sopenharmony_ci    *min = 0;
31113498266Sopenharmony_ci
31213498266Sopenharmony_ci  if(input_name)
31313498266Sopenharmony_ci    free(*input_name);
31413498266Sopenharmony_ci
31513498266Sopenharmony_ci  return GSS_S_COMPLETE;
31613498266Sopenharmony_ci}
31713498266Sopenharmony_ci
31813498266Sopenharmony_ciOM_uint32 gss_display_status(OM_uint32 *min,
31913498266Sopenharmony_ci                             OM_uint32 status_value,
32013498266Sopenharmony_ci                             int status_type,
32113498266Sopenharmony_ci                             const gss_OID mech_type,
32213498266Sopenharmony_ci                             OM_uint32 *message_context,
32313498266Sopenharmony_ci                             gss_buffer_t status_string)
32413498266Sopenharmony_ci{
32513498266Sopenharmony_ci  const char maj_str[] = "Stub GSS error";
32613498266Sopenharmony_ci  (void)mech_type;
32713498266Sopenharmony_ci  if(min)
32813498266Sopenharmony_ci    *min = 0;
32913498266Sopenharmony_ci
33013498266Sopenharmony_ci  if(message_context)
33113498266Sopenharmony_ci    *message_context = 0;
33213498266Sopenharmony_ci
33313498266Sopenharmony_ci  if(status_string) {
33413498266Sopenharmony_ci    status_string->value = NULL;
33513498266Sopenharmony_ci    status_string->length = 0;
33613498266Sopenharmony_ci
33713498266Sopenharmony_ci    if(status_value >= GSS_LAST)
33813498266Sopenharmony_ci      return GSS_S_FAILURE;
33913498266Sopenharmony_ci
34013498266Sopenharmony_ci    switch(status_type) {
34113498266Sopenharmony_ci      case GSS_C_GSS_CODE:
34213498266Sopenharmony_ci        status_string->value = strdup(maj_str);
34313498266Sopenharmony_ci        break;
34413498266Sopenharmony_ci      case GSS_C_MECH_CODE:
34513498266Sopenharmony_ci        status_string->value = strdup(min_err_table[status_value]);
34613498266Sopenharmony_ci        break;
34713498266Sopenharmony_ci      default:
34813498266Sopenharmony_ci        return GSS_S_FAILURE;
34913498266Sopenharmony_ci    }
35013498266Sopenharmony_ci
35113498266Sopenharmony_ci    if(status_string->value)
35213498266Sopenharmony_ci      status_string->length = strlen(status_string->value);
35313498266Sopenharmony_ci    else
35413498266Sopenharmony_ci      return GSS_S_FAILURE;
35513498266Sopenharmony_ci  }
35613498266Sopenharmony_ci
35713498266Sopenharmony_ci  return GSS_S_COMPLETE;
35813498266Sopenharmony_ci}
35913498266Sopenharmony_ci
36013498266Sopenharmony_ci/* Stubs returning error */
36113498266Sopenharmony_ci
36213498266Sopenharmony_ciOM_uint32 gss_display_name(OM_uint32 *min,
36313498266Sopenharmony_ci                           gss_const_name_t input_name,
36413498266Sopenharmony_ci                           gss_buffer_t output_name_buffer,
36513498266Sopenharmony_ci                           gss_OID *output_name_type)
36613498266Sopenharmony_ci{
36713498266Sopenharmony_ci  (void)min;
36813498266Sopenharmony_ci  (void)input_name;
36913498266Sopenharmony_ci  (void)output_name_buffer;
37013498266Sopenharmony_ci  (void)output_name_type;
37113498266Sopenharmony_ci  return GSS_S_FAILURE;
37213498266Sopenharmony_ci}
37313498266Sopenharmony_ci
37413498266Sopenharmony_ciOM_uint32 gss_inquire_context(OM_uint32 *min,
37513498266Sopenharmony_ci                              gss_const_ctx_id_t context_handle,
37613498266Sopenharmony_ci                              gss_name_t *src_name,
37713498266Sopenharmony_ci                              gss_name_t *targ_name,
37813498266Sopenharmony_ci                              OM_uint32 *lifetime_rec,
37913498266Sopenharmony_ci                              gss_OID *mech_type,
38013498266Sopenharmony_ci                              OM_uint32 *ctx_flags,
38113498266Sopenharmony_ci                              int *locally_initiated,
38213498266Sopenharmony_ci                              int *open_context)
38313498266Sopenharmony_ci{
38413498266Sopenharmony_ci  (void)min;
38513498266Sopenharmony_ci  (void)context_handle;
38613498266Sopenharmony_ci  (void)src_name;
38713498266Sopenharmony_ci  (void)targ_name;
38813498266Sopenharmony_ci  (void)lifetime_rec;
38913498266Sopenharmony_ci  (void)mech_type;
39013498266Sopenharmony_ci  (void)ctx_flags;
39113498266Sopenharmony_ci  (void)locally_initiated;
39213498266Sopenharmony_ci  (void)open_context;
39313498266Sopenharmony_ci  return GSS_S_FAILURE;
39413498266Sopenharmony_ci}
39513498266Sopenharmony_ci
39613498266Sopenharmony_ciOM_uint32 gss_wrap(OM_uint32 *min,
39713498266Sopenharmony_ci                   gss_const_ctx_id_t context_handle,
39813498266Sopenharmony_ci                   int conf_req_flag,
39913498266Sopenharmony_ci                   gss_qop_t qop_req,
40013498266Sopenharmony_ci                   const gss_buffer_t input_message_buffer,
40113498266Sopenharmony_ci                   int *conf_state,
40213498266Sopenharmony_ci                   gss_buffer_t output_message_buffer)
40313498266Sopenharmony_ci{
40413498266Sopenharmony_ci  (void)min;
40513498266Sopenharmony_ci  (void)context_handle;
40613498266Sopenharmony_ci  (void)conf_req_flag;
40713498266Sopenharmony_ci  (void)qop_req;
40813498266Sopenharmony_ci  (void)input_message_buffer;
40913498266Sopenharmony_ci  (void)conf_state;
41013498266Sopenharmony_ci  (void)output_message_buffer;
41113498266Sopenharmony_ci  return GSS_S_FAILURE;
41213498266Sopenharmony_ci}
41313498266Sopenharmony_ci
41413498266Sopenharmony_ciOM_uint32 gss_unwrap(OM_uint32 *min,
41513498266Sopenharmony_ci                     gss_const_ctx_id_t context_handle,
41613498266Sopenharmony_ci                     const gss_buffer_t input_message_buffer,
41713498266Sopenharmony_ci                     gss_buffer_t output_message_buffer,
41813498266Sopenharmony_ci                     int *conf_state,
41913498266Sopenharmony_ci                     gss_qop_t *qop_state)
42013498266Sopenharmony_ci{
42113498266Sopenharmony_ci  (void)min;
42213498266Sopenharmony_ci  (void)context_handle;
42313498266Sopenharmony_ci  (void)input_message_buffer;
42413498266Sopenharmony_ci  (void)output_message_buffer;
42513498266Sopenharmony_ci  (void)conf_state;
42613498266Sopenharmony_ci  (void)qop_state;
42713498266Sopenharmony_ci  return GSS_S_FAILURE;
42813498266Sopenharmony_ci}
42913498266Sopenharmony_ci
43013498266Sopenharmony_ciOM_uint32 gss_seal(OM_uint32 *min,
43113498266Sopenharmony_ci                   gss_ctx_id_t context_handle,
43213498266Sopenharmony_ci                   int conf_req_flag,
43313498266Sopenharmony_ci                   int qop_req,
43413498266Sopenharmony_ci                   gss_buffer_t input_message_buffer,
43513498266Sopenharmony_ci                   int *conf_state,
43613498266Sopenharmony_ci                   gss_buffer_t output_message_buffer)
43713498266Sopenharmony_ci{
43813498266Sopenharmony_ci  (void)min;
43913498266Sopenharmony_ci  (void)context_handle;
44013498266Sopenharmony_ci  (void)conf_req_flag;
44113498266Sopenharmony_ci  (void)qop_req;
44213498266Sopenharmony_ci  (void)input_message_buffer;
44313498266Sopenharmony_ci  (void)conf_state;
44413498266Sopenharmony_ci  (void)output_message_buffer;
44513498266Sopenharmony_ci  return GSS_S_FAILURE;
44613498266Sopenharmony_ci}
44713498266Sopenharmony_ci
44813498266Sopenharmony_ciOM_uint32 gss_unseal(OM_uint32 *min,
44913498266Sopenharmony_ci                     gss_ctx_id_t context_handle,
45013498266Sopenharmony_ci                     gss_buffer_t input_message_buffer,
45113498266Sopenharmony_ci                     gss_buffer_t output_message_buffer,
45213498266Sopenharmony_ci                     int *conf_state,
45313498266Sopenharmony_ci                     int *qop_state)
45413498266Sopenharmony_ci{
45513498266Sopenharmony_ci  (void)min;
45613498266Sopenharmony_ci  (void)context_handle;
45713498266Sopenharmony_ci  (void)input_message_buffer;
45813498266Sopenharmony_ci  (void)output_message_buffer;
45913498266Sopenharmony_ci  (void)conf_state;
46013498266Sopenharmony_ci  (void)qop_state;
46113498266Sopenharmony_ci  return GSS_S_FAILURE;
46213498266Sopenharmony_ci}
463