Path: blob/main/crypto/krb5/src/lib/gssapi/generic/gssapiP_generic.h
39563 views
/* -*- mode: c; indent-tabs-mode: nil -*- */1/*2* Copyright 1993 by OpenVision Technologies, Inc.3*4* Permission to use, copy, modify, distribute, and sell this software5* and its documentation for any purpose is hereby granted without fee,6* provided that the above copyright notice appears in all copies and7* that both that copyright notice and this permission notice appear in8* supporting documentation, and that the name of OpenVision not be used9* in advertising or publicity pertaining to distribution of the software10* without specific, written prior permission. OpenVision makes no11* representations about the suitability of this software for any12* purpose. It is provided "as is" without express or implied warranty.13*14* OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,15* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO16* EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR17* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF18* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR19* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR20* PERFORMANCE OF THIS SOFTWARE.21*/2223#ifndef _GSSAPIP_GENERIC_H_24#define _GSSAPIP_GENERIC_H_2526/*27* $Id$28*/2930#if defined(_WIN32)31#include "k5-int.h"32#else33#include "autoconf.h"34#ifdef HAVE_STDLIB_H35#include <stdlib.h>36#endif37#endif3839#include "k5-thread.h"4041#include "gssapi_generic.h"42#include "gssapi_ext.h"43#include <gssapi/gssapi_alloc.h>44#include "gssapi_err_generic.h"45#include <errno.h>4647#include "k5-platform.h"48#include "k5-buf.h"49#include "k5-input.h"5051/** helper macros **/5253#define g_OID_equal(o1, o2) \54(((o1)->length == (o2)->length) && \55(memcmp((o1)->elements, (o2)->elements, (o1)->length) == 0))5657/** malloc wrappers; these may actually do something later */5859#define xmalloc(n) malloc(n)60#define xrealloc(p,n) realloc(p,n)61#ifdef xfree62#undef xfree63#endif64#define xfree(p) free(p)6566/** helper functions **/6768/* hide names from applications, especially glib applications */69#define g_make_string_buffer gssint_g_make_string_buffer70#define g_token_size gssint_g_token_size71#define g_make_token_header gssint_g_make_token_header72#define g_get_token_header gssint_g_get_token_header73#define g_verify_token_header gssint_g_verify_token_header74#define g_display_major_status gssint_g_display_major_status75#define g_display_com_err_status gssint_g_display_com_err_status76#define g_seqstate_init gssint_g_seqstate_init77#define g_seqstate_check gssint_g_seqstate_check78#define g_seqstate_free gssint_g_seqstate_free79#define g_seqstate_size gssint_g_seqstate_size80#define g_seqstate_externalize gssint_g_seqstate_externalize81#define g_seqstate_internalize gssint_g_seqstate_internalize82#define g_canonicalize_host gssint_g_canonicalize_host8384typedef struct g_seqnum_state_st *g_seqnum_state;8586int g_make_string_buffer (const char *str, gss_buffer_t buffer);8788unsigned int g_token_size (const gss_OID_desc * mech, unsigned int body_size);8990void g_make_token_header (struct k5buf *buf, const gss_OID_desc *mech,91size_t body_size, int tok_type);9293int g_get_token_header (struct k5input *in, gss_OID oid_out,94size_t *token_len_out);9596int g_verify_token_header(struct k5input *in, gss_const_OID expected_mech);9798OM_uint32 g_display_major_status (OM_uint32 *minor_status,99OM_uint32 status_value,100OM_uint32 *message_context,101gss_buffer_t status_string);102103OM_uint32 g_display_com_err_status (OM_uint32 *minor_status,104OM_uint32 status_value,105gss_buffer_t status_string);106107long g_seqstate_init(g_seqnum_state *state_out, uint64_t seqnum,108int do_replay, int do_sequence, int wide);109OM_uint32 g_seqstate_check(g_seqnum_state state, uint64_t seqnum);110void g_seqstate_free(g_seqnum_state state);111void g_seqstate_size(g_seqnum_state state, size_t *sizep);112long g_seqstate_externalize(g_seqnum_state state, unsigned char **buf,113size_t *lenremain);114long g_seqstate_internalize(g_seqnum_state *state_out, unsigned char **buf,115size_t *lenremain);116117/** declarations of internal name mechanism functions **/118119OM_uint32120generic_gss_release_buffer(121OM_uint32 *, /* minor_status */122gss_buffer_t); /* buffer */123124OM_uint32125generic_gss_release_oid_set(126OM_uint32 *, /* minor_status */127gss_OID_set *); /* set */128129OM_uint32130generic_gss_release_oid(131OM_uint32 *, /* minor_status */132gss_OID *); /* set */133134OM_uint32135generic_gss_copy_oid(136OM_uint32 *, /* minor_status */137const gss_OID_desc * const, /* oid */138gss_OID *); /* new_oid */139140OM_uint32141generic_gss_create_empty_oid_set(142OM_uint32 *, /* minor_status */143gss_OID_set *); /* oid_set */144145OM_uint32146generic_gss_add_oid_set_member(147OM_uint32 *, /* minor_status */148const gss_OID_desc * const, /* member_oid */149gss_OID_set *); /* oid_set */150151OM_uint32152generic_gss_test_oid_set_member(153OM_uint32 *, /* minor_status */154const gss_OID_desc * const, /* member */155gss_OID_set, /* set */156int *); /* present */157158OM_uint32159generic_gss_oid_to_str(160OM_uint32 *, /* minor_status */161const gss_OID_desc * const, /* oid */162gss_buffer_t); /* oid_str */163164OM_uint32165generic_gss_str_to_oid(166OM_uint32 *, /* minor_status */167gss_buffer_t, /* oid_str */168gss_OID *); /* oid */169170OM_uint32171generic_gss_oid_compose(172OM_uint32 *, /* minor_status */173const char *, /* prefix */174size_t, /* prefix_len */175int, /* suffix */176gss_OID_desc *); /* oid */177178OM_uint32179generic_gss_oid_decompose(180OM_uint32 *, /* minor_status */181const char *, /*prefix */182size_t, /* prefix_len */183gss_OID_desc *, /* oid */184int *); /* suffix */185186int gssint_mecherrmap_init(void);187void gssint_mecherrmap_destroy(void);188OM_uint32 gssint_mecherrmap_map(OM_uint32 minor, const gss_OID_desc *oid);189int gssint_mecherrmap_get(OM_uint32 minor, gss_OID mech_oid,190OM_uint32 *mech_minor);191OM_uint32 gssint_mecherrmap_map_errcode(OM_uint32 errcode);192193/*194* Transfer contents of a k5buf to a gss_buffer and invalidate the source195* On unix, this is a simple pointer copy196* On windows, memory is reallocated and copied.197*/198static inline OM_uint32199k5buf_to_gss(OM_uint32 *minor,200struct k5buf *input_k5buf,201gss_buffer_t output_buffer)202{203OM_uint32 status = GSS_S_COMPLETE;204205if (k5_buf_status(input_k5buf) != 0) {206*minor = ENOMEM;207return GSS_S_FAILURE;208}209output_buffer->length = input_k5buf->len;210#if defined(_WIN32) || defined(DEBUG_GSSALLOC)211if (output_buffer->length > 0) {212output_buffer->value = gssalloc_malloc(output_buffer->length);213if (output_buffer->value) {214memcpy(output_buffer->value, input_k5buf->data,215output_buffer->length);216} else {217status = GSS_S_FAILURE;218*minor = ENOMEM;219}220} else {221output_buffer->value = NULL;222}223k5_buf_free(input_k5buf);224#else225output_buffer->value = input_k5buf->data;226memset(input_k5buf, 0, sizeof(*input_k5buf));227#endif228return status;229}230231OM_uint32 generic_gss_create_empty_buffer_set232(OM_uint32 * /*minor_status*/,233gss_buffer_set_t * /*buffer_set*/);234235OM_uint32 generic_gss_add_buffer_set_member236(OM_uint32 * /*minor_status*/,237const gss_buffer_t /*member_buffer*/,238gss_buffer_set_t * /*buffer_set*/);239240OM_uint32 generic_gss_release_buffer_set241(OM_uint32 * /*minor_status*/,242gss_buffer_set_t * /*buffer_set*/);243244OM_uint32 generic_gss_copy_oid_set245(OM_uint32 *, /* minor_status */246const gss_OID_set_desc * const /*oidset*/,247gss_OID_set * /*new_oidset*/);248249extern gss_OID_set gss_ma_known_attrs;250251OM_uint32 generic_gss_display_mech_attr(252OM_uint32 *minor_status,253gss_const_OID mech_attr,254gss_buffer_t name,255gss_buffer_t short_desc,256gss_buffer_t long_desc);257258#endif /* _GSSAPIP_GENERIC_H_ */259260261