#ifndef _GSSAPI_EXT_H
#define _GSSAPI_EXT_H
#include <gssapi/gssapi.h>
#ifdef _KERNEL
#include <sys/systm.h>
#else
#include <strings.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
#define g_OID_equal(o1, o2) \
(((o1)->length == (o2)->length) && \
(memcmp((o1)->elements, (o2)->elements, (int)(o1)->length) == 0))
#define g_OID_copy(o1, o2) \
bcopy((o2)->elements, (o1)->elements, (o2)->length);\
(o1)->length = (o2)->length;
#define GSS_EMPTY_BUFFER(buf) ((buf) == NULL ||\
(buf)->value == NULL || (buf)->length == 0)
#ifndef _KERNEL
#define MAX_QOP_NUM_PAIRS 128
#define MAX_QOPS_PER_MECH 128
typedef struct _qop_num {
char *qop;
OM_uint32 num;
char *mech;
} qop_num;
OM_uint32
__gss_qop_to_num(
char *qop,
char *mech,
OM_uint32 *num
);
OM_uint32
__gss_num_to_qop(
char *mech,
OM_uint32 num,
char **qop
);
OM_uint32
__gss_get_mech_info(
char *mech,
char **qops
);
OM_uint32
__gss_mech_qops(
char *mech,
qop_num *mech_qops,
int *numqops
);
OM_uint32
__gss_mech_to_oid(
const char *mech,
gss_OID *oid
);
const char *
__gss_oid_to_mech(
const gss_OID oid
);
OM_uint32
__gss_get_mechanisms(
char *mechArray[],
int arrayLen
);
OM_uint32
__gss_get_mech_type(
gss_OID oid,
const gss_buffer_t token
);
OM_uint32
__gss_userok(
OM_uint32 *,
const gss_name_t,
const char *,
int *);
OM_uint32
gsscred_expname_to_unix_cred(
const gss_buffer_t,
uid_t *,
gid_t *,
gid_t *[],
int *);
OM_uint32
gsscred_name_to_unix_cred(
const gss_name_t,
const gss_OID,
uid_t *,
gid_t *,
gid_t *[],
int *);
OM_uint32
gss_get_group_info(
const uid_t,
gid_t *,
gid_t *[],
int *);
OM_uint32
gss_acquire_cred_with_password(
OM_uint32 * minor_status,
const gss_name_t desired_name,
const gss_buffer_t password,
OM_uint32 time_req,
const gss_OID_set desired_mechs,
int cred_usage,
gss_cred_id_t *output_cred_handle,
gss_OID_set * actual_mechs,
OM_uint32 * time_rec);
OM_uint32
gss_add_cred_with_password(
OM_uint32 *minor_status,
const gss_cred_id_t input_cred_handle,
const gss_name_t desired_name,
const gss_OID desired_mech,
const gss_buffer_t password,
gss_cred_usage_t cred_usage,
OM_uint32 initiator_time_req,
OM_uint32 acceptor_time_req,
gss_cred_id_t *output_cred_handle,
gss_OID_set *actual_mechs,
OM_uint32 *initiator_time_rec,
OM_uint32 *acceptor_time_rec);
extern const gss_OID GSS_C_INQ_SSPI_SESSION_KEY;
extern const gss_OID_desc * const gss_mech_krb5;
#else
OM_uint32
kgsscred_expname_to_unix_cred(
const gss_buffer_t expName,
uid_t *uidOut,
gid_t *gidOut,
gid_t *gids[],
int *gidsLen,
uid_t uid);
OM_uint32
kgsscred_name_to_unix_cred(
const gss_name_t intName,
const gss_OID mechType,
uid_t *uidOut,
gid_t *gidOut,
gid_t *gids[],
int *gidsLen,
uid_t uid);
OM_uint32
kgss_get_group_info(
const uid_t puid,
gid_t *gidOut,
gid_t *gids[],
int *gidsLen,
uid_t uid);
#endif
typedef struct gss_buffer_set_desc_struct {
size_t count;
gss_buffer_desc *elements;
} gss_buffer_set_desc, *gss_buffer_set_t;
#define GSS_C_NO_BUFFER_SET ((gss_buffer_set_t)0)
OM_uint32 gss_create_empty_buffer_set
(OM_uint32 *,
gss_buffer_set_t *);
OM_uint32 gss_add_buffer_set_member
(OM_uint32 *,
const gss_buffer_t,
gss_buffer_set_t *);
OM_uint32 gss_release_buffer_set
(OM_uint32 *,
gss_buffer_set_t *);
OM_uint32 gss_inquire_sec_context_by_oid
(OM_uint32 *,
const gss_ctx_id_t,
const gss_OID,
gss_buffer_set_t *);
#ifdef __cplusplus
}
#endif
#endif