#ifndef _GSS_MECHGLUEP_H
#define _GSS_MECHGLUEP_H
#include "autoconf.h"
#include "mechglue.h"
#include "gssapiP_generic.h"
#define g_OID_copy(o1, o2) \
do { \
memcpy((o1)->elements, (o2)->elements, (o2)->length); \
(o1)->length = (o2)->length; \
} while (0)
#define GSS_EMPTY_BUFFER(buf) ((buf) == NULL ||\
(buf)->value == NULL || (buf)->length == 0)
typedef struct gss_ctx_id_struct {
struct gss_ctx_id_struct *loopback;
gss_OID mech_type;
gss_ctx_id_t internal_ctx_id;
} gss_union_ctx_id_desc, *gss_union_ctx_id_t;
typedef struct gss_name_struct {
struct gss_name_struct *loopback;
gss_OID name_type;
gss_buffer_t external_name;
gss_OID mech_type;
gss_name_t mech_name;
} gss_union_name_desc, *gss_union_name_t;
typedef struct gss_mech_spec_name_t {
gss_OID name_type;
gss_OID mech;
struct gss_mech_spec_name_t *next, *prev;
} gss_mech_spec_name_desc, *gss_mech_spec_name;
typedef struct gss_union_cred_auxinfo {
gss_buffer_desc name;
gss_OID name_type;
OM_uint32 creation_time;
OM_uint32 time_rec;
int cred_usage;
} gss_union_cred_auxinfo;
typedef struct gss_cred_id_struct {
struct gss_cred_id_struct *loopback;
int count;
gss_OID mechs_array;
gss_cred_id_t *cred_array;
gss_union_cred_auxinfo auxinfo;
} gss_union_cred_desc, *gss_union_cred_t;
#define GSSINT_CHK_LOOP(p) (!((p) != NULL && (p)->loopback == (p)))
typedef struct gss_config {
OM_uint32 priority;
char * mechNameStr;
gss_OID_desc mech_type;
void * context;
OM_uint32 (*gss_acquire_cred)
(
void*,
OM_uint32*,
gss_name_t,
OM_uint32,
gss_OID_set,
int,
gss_cred_id_t*,
gss_OID_set*,
OM_uint32*
);
OM_uint32 (*gss_release_cred)
(
void*,
OM_uint32*,
gss_cred_id_t*
);
OM_uint32 (*gss_init_sec_context)
(
void*,
OM_uint32*,
gss_cred_id_t,
gss_ctx_id_t*,
gss_name_t,
gss_OID,
OM_uint32,
OM_uint32,
gss_channel_bindings_t,
gss_buffer_t,
gss_OID*,
gss_buffer_t,
OM_uint32*,
OM_uint32*
);
OM_uint32 (*gss_accept_sec_context)
(
void*,
OM_uint32*,
gss_ctx_id_t*,
gss_cred_id_t,
gss_buffer_t,
gss_channel_bindings_t,
gss_name_t*,
gss_OID*,
gss_buffer_t,
OM_uint32*,
OM_uint32*,
gss_cred_id_t*
);
OM_uint32 (*gss_process_context_token)
(
void*,
OM_uint32*,
gss_ctx_id_t,
gss_buffer_t
);
OM_uint32 (*gss_delete_sec_context)
(
void*,
OM_uint32*,
gss_ctx_id_t*,
gss_buffer_t
);
OM_uint32 (*gss_context_time)
(
void*,
OM_uint32*,
gss_ctx_id_t,
OM_uint32*
);
OM_uint32 (*gss_sign)
(
void*,
OM_uint32*,
gss_ctx_id_t,
int,
gss_buffer_t,
gss_buffer_t
);
OM_uint32 (*gss_verify)
(
void*,
OM_uint32*,
gss_ctx_id_t,
gss_buffer_t,
gss_buffer_t,
int*
);
OM_uint32 (*gss_seal)
(
void*,
OM_uint32*,
gss_ctx_id_t,
int,
int,
gss_buffer_t,
int*,
gss_buffer_t
);
OM_uint32 (*gss_unseal)
(
void*,
OM_uint32*,
gss_ctx_id_t,
gss_buffer_t,
gss_buffer_t,
int*,
int*
);
OM_uint32 (*gss_display_status)
(
void*,
OM_uint32*,
OM_uint32,
int,
gss_OID,
OM_uint32*,
gss_buffer_t
);
OM_uint32 (*gss_indicate_mechs)
(
void*,
OM_uint32*,
gss_OID_set*
);
OM_uint32 (*gss_compare_name)
(
void*,
OM_uint32*,
gss_name_t,
gss_name_t,
int*
);
OM_uint32 (*gss_display_name)
(
void*,
OM_uint32*,
gss_name_t,
gss_buffer_t,
gss_OID*
);
OM_uint32 (*gss_import_name)
(
void*,
OM_uint32*,
gss_buffer_t,
gss_OID,
gss_name_t*
);
OM_uint32 (*gss_release_name)
(
void*,
OM_uint32*,
gss_name_t*
);
OM_uint32 (*gss_inquire_cred)
(
void*,
OM_uint32 *,
gss_cred_id_t,
gss_name_t *,
OM_uint32 *,
int *,
gss_OID_set *
);
OM_uint32 (*gss_add_cred)
(
void*,
OM_uint32 *,
gss_cred_id_t,
gss_name_t,
gss_OID,
gss_cred_usage_t,
OM_uint32,
OM_uint32,
gss_cred_id_t *,
gss_OID_set *,
OM_uint32 *,
OM_uint32 *
);
OM_uint32 (*gss_export_sec_context)
(
void*,
OM_uint32 *,
gss_ctx_id_t *,
gss_buffer_t
);
OM_uint32 (*gss_import_sec_context)
(
void *,
OM_uint32 *,
gss_buffer_t,
gss_ctx_id_t *
);
OM_uint32 (*gss_inquire_cred_by_mech)
(
void *,
OM_uint32 *,
gss_cred_id_t,
gss_OID,
gss_name_t *,
OM_uint32 *,
OM_uint32 *,
gss_cred_usage_t *
);
OM_uint32 (*gss_inquire_names_for_mech)
(
void *,
OM_uint32 *,
gss_OID,
gss_OID_set *
);
OM_uint32 (*gss_inquire_context)
(
void *,
OM_uint32 *,
gss_ctx_id_t,
gss_name_t *,
gss_name_t *,
OM_uint32 *,
gss_OID *,
OM_uint32 *,
int *,
int *
);
OM_uint32 (*gss_internal_release_oid)
(
void *,
OM_uint32 *,
gss_OID *
);
OM_uint32 (*gss_wrap_size_limit)
(
void *,
OM_uint32 *,
gss_ctx_id_t,
int,
gss_qop_t,
OM_uint32,
OM_uint32 *
);
OM_uint32 (*gss_export_name)
(
void *,
OM_uint32 *,
const gss_name_t,
gss_buffer_t
);
OM_uint32 (*gss_store_cred)
(
void *,
OM_uint32 *,
const gss_cred_id_t,
gss_cred_usage_t,
const gss_OID,
OM_uint32,
OM_uint32,
gss_OID_set *,
gss_cred_usage_t *
);
} *gss_mechanism;
typedef struct gss_mech_config {
char *kmodName;
char *uLibName;
char *mechNameStr;
char *optionStr;
void *dl_handle;
gss_OID mech_type;
gss_mechanism mech;
struct gss_mech_config *next;
} *gss_mech_info;
int gssint_mechglue_init(void);
void gssint_mechglue_fini(void);
gss_mechanism gssint_get_mechanism (gss_OID);
OM_uint32 gssint_get_mech_type (gss_OID, gss_buffer_t);
char *gssint_get_kmodName(const gss_OID);
char *gssint_get_modOptions(const gss_OID);
OM_uint32 gssint_import_internal_name (OM_uint32 *, gss_OID, gss_union_name_t,
gss_name_t *);
OM_uint32 gssint_export_internal_name(OM_uint32 *, const gss_OID,
const gss_name_t, gss_buffer_t);
OM_uint32 gssint_display_internal_name (OM_uint32 *, gss_OID, gss_name_t,
gss_buffer_t, gss_OID *);
OM_uint32 gssint_release_internal_name (OM_uint32 *, gss_OID, gss_name_t *);
OM_uint32 gssint_convert_name_to_union_name
(OM_uint32 *,
gss_mechanism,
gss_name_t,
gss_name_t *
);
gss_cred_id_t gssint_get_mechanism_cred
(gss_union_cred_t,
gss_OID
);
OM_uint32 gssint_create_copy_buffer(
const gss_buffer_t,
gss_buffer_t *,
int
);
OM_uint32 gssint_copy_oid_set(
OM_uint32 *,
const gss_OID_set_desc *,
gss_OID_set *
);
gss_OID gss_find_mechanism_from_name_type (gss_OID);
OM_uint32 gss_add_mech_name_type
(OM_uint32 *,
gss_OID,
gss_OID
);
OM_uint32
gssint_mech_to_oid(
const char *mech,
gss_OID *oid
);
const char *
gssint_oid_to_mech(
const gss_OID oid
);
OM_uint32
gssint_get_mechanisms(
char *mechArray[],
int arrayLen
);
OM_uint32
gss_store_cred(
OM_uint32 *,
const gss_cred_id_t,
gss_cred_usage_t,
const gss_OID,
OM_uint32,
OM_uint32,
gss_OID_set *,
gss_cred_usage_t *
);
int
gssint_get_der_length(
unsigned char **,
unsigned int,
unsigned int *
);
unsigned int
gssint_der_length_size(unsigned int );
int
gssint_put_der_length(
unsigned int,
unsigned char **,
unsigned int
);
#endif