Skip to main content
  • Home
  • login
  • Browse the archive

    swh mirror partner logo
swh logo
SoftwareHeritage
Software
Heritage
Mirror
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

  • 5e72c1e
  • /
  • gssapiP_generic.h
Raw File
Permalinks

To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
Select below a type of object currently browsed in order to display its associated SWHID and permalink.

  • content
  • directory
content badge Iframe embedding
swh:1:cnt:96dd605460d996f41a893bda9cef804fec045fb0
directory badge Iframe embedding
swh:1:dir:5e72c1e8aa6ff1a78f663595149a418e94804fca
gssapiP_generic.h
/* -*- mode: c; indent-tabs-mode: nil -*- */
/*
 * Copyright 1993 by OpenVision Technologies, Inc.
 *
 * Permission to use, copy, modify, distribute, and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appears in all copies and
 * that both that copyright notice and this permission notice appear in
 * supporting documentation, and that the name of OpenVision not be used
 * in advertising or publicity pertaining to distribution of the software
 * without specific, written prior permission. OpenVision makes no
 * representations about the suitability of this software for any
 * purpose.  It is provided "as is" without express or implied warranty.
 *
 * OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 * EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
 * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
 * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */

#ifndef _GSSAPIP_GENERIC_H_
#define _GSSAPIP_GENERIC_H_

/*
 * $Id$
 */

#if defined(_WIN32)
#include "k5-int.h"
#else
#include "autoconf.h"
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#endif

#include "k5-thread.h"

#include "gssapi_generic.h"
#include "gssapi_ext.h"
#include <gssapi/gssapi_alloc.h>
#include "gssapi_err_generic.h"
#include <errno.h>

#include "k5-platform.h"
#include "k5-buf.h"
#include "k5-input.h"

/** helper macros **/

#define g_OID_equal(o1, o2)                                             \
        (((o1)->length == (o2)->length) &&                              \
        (memcmp((o1)->elements, (o2)->elements, (o1)->length) == 0))

/** malloc wrappers; these may actually do something later */

#define xmalloc(n) malloc(n)
#define xrealloc(p,n) realloc(p,n)
#ifdef xfree
#undef xfree
#endif
#define xfree(p) free(p)

/** helper functions **/

/* hide names from applications, especially glib applications */
#define g_make_string_buffer    gssint_g_make_string_buffer
#define g_token_size            gssint_g_token_size
#define g_make_token_header     gssint_g_make_token_header
#define g_get_token_header      gssint_g_get_token_header
#define g_verify_token_header   gssint_g_verify_token_header
#define g_display_major_status  gssint_g_display_major_status
#define g_display_com_err_status gssint_g_display_com_err_status
#define g_seqstate_init         gssint_g_seqstate_init
#define g_seqstate_check        gssint_g_seqstate_check
#define g_seqstate_free         gssint_g_seqstate_free
#define g_seqstate_size         gssint_g_seqstate_size
#define g_seqstate_externalize  gssint_g_seqstate_externalize
#define g_seqstate_internalize  gssint_g_seqstate_internalize
#define g_canonicalize_host     gssint_g_canonicalize_host

typedef struct g_seqnum_state_st *g_seqnum_state;

int g_make_string_buffer (const char *str, gss_buffer_t buffer);

unsigned int g_token_size (const gss_OID_desc * mech, unsigned int body_size);

void g_make_token_header (struct k5buf *buf, const gss_OID_desc *mech,
                          size_t body_size, int tok_type);

int g_get_token_header (struct k5input *in, gss_OID oid_out,
                        size_t *token_len_out);

int g_verify_token_header(struct k5input *in, gss_const_OID expected_mech);

OM_uint32 g_display_major_status (OM_uint32 *minor_status,
                                  OM_uint32 status_value,
                                  OM_uint32 *message_context,
                                  gss_buffer_t status_string);

OM_uint32 g_display_com_err_status (OM_uint32 *minor_status,
                                    OM_uint32 status_value,
                                    gss_buffer_t status_string);

long g_seqstate_init(g_seqnum_state *state_out, uint64_t seqnum,
                     int do_replay, int do_sequence, int wide);
OM_uint32 g_seqstate_check(g_seqnum_state state, uint64_t seqnum);
void g_seqstate_free(g_seqnum_state state);
void g_seqstate_size(g_seqnum_state state, size_t *sizep);
long g_seqstate_externalize(g_seqnum_state state, unsigned char **buf,
                            size_t *lenremain);
long g_seqstate_internalize(g_seqnum_state *state_out, unsigned char **buf,
                            size_t *lenremain);

/** declarations of internal name mechanism functions **/

OM_uint32
generic_gss_release_buffer(
    OM_uint32 *,        /* minor_status */
    gss_buffer_t);      /* buffer */

OM_uint32
generic_gss_release_oid_set(
    OM_uint32 *,        /* minor_status */
    gss_OID_set *);     /* set */

OM_uint32
generic_gss_release_oid(
    OM_uint32 *,        /* minor_status */
    gss_OID *);         /* set */

OM_uint32
generic_gss_copy_oid(
    OM_uint32 *,                /* minor_status */
    const gss_OID_desc * const, /* oid */
    gss_OID *);                 /* new_oid */

OM_uint32
generic_gss_create_empty_oid_set(
    OM_uint32 *,        /* minor_status */
    gss_OID_set *);     /* oid_set */

OM_uint32
generic_gss_add_oid_set_member(
    OM_uint32 *,                /* minor_status */
    const gss_OID_desc * const, /* member_oid */
    gss_OID_set *);             /* oid_set */

OM_uint32
generic_gss_test_oid_set_member(
    OM_uint32 *,                /* minor_status */
    const gss_OID_desc * const, /* member */
    gss_OID_set,                /* set */
    int *);                     /* present */

OM_uint32
generic_gss_oid_to_str(
    OM_uint32 *,                /* minor_status */
    const gss_OID_desc * const, /* oid */
    gss_buffer_t);              /* oid_str */

OM_uint32
generic_gss_str_to_oid(
    OM_uint32 *,        /* minor_status */
    gss_buffer_t,       /* oid_str */
    gss_OID *);         /* oid */

OM_uint32
generic_gss_oid_compose(
    OM_uint32 *,        /* minor_status */
    const char *,       /* prefix */
    size_t,             /* prefix_len */
    int,                /* suffix */
    gss_OID_desc *);    /* oid */

OM_uint32
generic_gss_oid_decompose(
    OM_uint32 *,        /* minor_status */
    const char *,       /*prefix */
    size_t,             /* prefix_len */
    gss_OID_desc *,     /* oid */
    int *);             /* suffix */

int gssint_mecherrmap_init(void);
void gssint_mecherrmap_destroy(void);
OM_uint32 gssint_mecherrmap_map(OM_uint32 minor, const gss_OID_desc *oid);
int gssint_mecherrmap_get(OM_uint32 minor, gss_OID mech_oid,
                          OM_uint32 *mech_minor);
OM_uint32 gssint_mecherrmap_map_errcode(OM_uint32 errcode);

/*
 * Transfer contents of a k5buf to a gss_buffer and invalidate the source
 * On unix, this is a simple pointer copy
 * On windows, memory is reallocated and copied.
 */
static inline OM_uint32
k5buf_to_gss(OM_uint32 *minor,
             struct k5buf *input_k5buf,
             gss_buffer_t output_buffer)
{
    OM_uint32 status = GSS_S_COMPLETE;

    if (k5_buf_status(input_k5buf) != 0) {
        *minor = ENOMEM;
        return GSS_S_FAILURE;
    }
    output_buffer->length = input_k5buf->len;
#if defined(_WIN32) || defined(DEBUG_GSSALLOC)
    if (output_buffer->length > 0) {
        output_buffer->value = gssalloc_malloc(output_buffer->length);
        if (output_buffer->value) {
            memcpy(output_buffer->value, input_k5buf->data,
                   output_buffer->length);
        } else {
            status = GSS_S_FAILURE;
            *minor = ENOMEM;
        }
    } else {
        output_buffer->value = NULL;
    }
    k5_buf_free(input_k5buf);
#else
    output_buffer->value = input_k5buf->data;
    memset(input_k5buf, 0, sizeof(*input_k5buf));
#endif
    return status;
}

OM_uint32 generic_gss_create_empty_buffer_set
(OM_uint32 * /*minor_status*/,
            gss_buffer_set_t * /*buffer_set*/);

OM_uint32 generic_gss_add_buffer_set_member
(OM_uint32 * /*minor_status*/,
            const gss_buffer_t /*member_buffer*/,
            gss_buffer_set_t * /*buffer_set*/);

OM_uint32 generic_gss_release_buffer_set
(OM_uint32 * /*minor_status*/,
            gss_buffer_set_t * /*buffer_set*/);

OM_uint32 generic_gss_copy_oid_set
(OM_uint32 *, /* minor_status */
            const gss_OID_set_desc * const /*oidset*/,
            gss_OID_set * /*new_oidset*/);

extern gss_OID_set gss_ma_known_attrs;

OM_uint32 generic_gss_display_mech_attr(
      OM_uint32         *minor_status,
      gss_const_OID      mech_attr,
      gss_buffer_t       name,
      gss_buffer_t       short_desc,
      gss_buffer_t       long_desc);

#endif /* _GSSAPIP_GENERIC_H_ */

ENEA — Copyright (C), ENEA. License: GNU AGPLv3+.
Legal notes  ::  JavaScript license information ::  Web API

back to top