diff --git a/lib/gssapi/mech/context.h b/lib/gssapi/mech/context.h index e1ce9ea76..ee2cebefd 100644 --- a/lib/gssapi/mech/context.h +++ b/lib/gssapi/mech/context.h @@ -24,9 +24,12 @@ * SUCH DAMAGE. * * $FreeBSD: src/lib/libgssapi/context.h,v 1.1 2005/12/29 14:40:20 dfr Exp $ + * $Id$ */ +#include + struct _gss_context { - struct _gss_mech_switch *gc_mech; + gssapi_mech_interface gc_mech; gss_ctx_id_t gc_ctx; }; diff --git a/lib/gssapi/mech/cred.h b/lib/gssapi/mech/cred.h index 55deca179..d8d1e618e 100644 --- a/lib/gssapi/mech/cred.h +++ b/lib/gssapi/mech/cred.h @@ -24,13 +24,14 @@ * SUCH DAMAGE. * * $FreeBSD: src/lib/libgssapi/cred.h,v 1.1 2005/12/29 14:40:20 dfr Exp $ + * $Id$ */ #include struct _gss_mechanism_cred { SLIST_ENTRY(_gss_mechanism_cred) gmc_link; - struct _gss_mech_switch *gmc_mech; /* mechanism ops for MC */ + gssapi_mech_interface gmc_mech; /* mechanism ops for MC */ gss_OID gmc_mech_oid; /* mechanism oid for MC */ gss_cred_id_t gmc_cred; /* underlying MC */ }; diff --git a/lib/gssapi/mech/gss_accept_sec_context.c b/lib/gssapi/mech/gss_accept_sec_context.c index d70efe901..66790a6bb 100644 --- a/lib/gssapi/mech/gss_accept_sec_context.c +++ b/lib/gssapi/mech/gss_accept_sec_context.c @@ -26,14 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_accept_sec_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include - -#include "mech_switch.h" -#include "context.h" -#include "cred.h" -#include "name.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_accept_sec_context(OM_uint32 *minor_status, gss_ctx_id_t *context_handle, @@ -48,7 +42,7 @@ OM_uint32 gss_accept_sec_context(OM_uint32 *minor_status, gss_cred_id_t *delegated_cred_handle) { OM_uint32 major_status; - struct _gss_mech_switch *m; + gssapi_mech_interface m; struct _gss_context *ctx = (struct _gss_context *) *context_handle; struct _gss_cred *cred = (struct _gss_cred *) acceptor_cred_handle; struct _gss_mechanism_cred *mc; @@ -133,7 +127,7 @@ OM_uint32 gss_accept_sec_context(OM_uint32 *minor_status, return (GSS_S_DEFECTIVE_TOKEN); } memset(ctx, 0, sizeof(struct _gss_context)); - m = ctx->gc_mech = _gss_find_mech_switch(&mech_oid); + m = ctx->gc_mech = __gss_get_mechanism(&mech_oid); if (!m) { free(ctx); return (GSS_S_BAD_MECH); @@ -191,28 +185,28 @@ OM_uint32 gss_accept_sec_context(OM_uint32 *minor_status, m->gm_release_cred(minor_status, &delegated_mc); *ret_flags &= ~GSS_C_DELEG_FLAG; } else { - struct _gss_cred *cred; - struct _gss_mechanism_cred *mc; + struct _gss_cred *dcred; + struct _gss_mechanism_cred *dmc; - cred = malloc(sizeof(struct _gss_cred)); - if (!cred) { + dcred = malloc(sizeof(struct _gss_cred)); + if (!dcred) { *minor_status = ENOMEM; return (GSS_S_FAILURE); } - mc = malloc(sizeof(struct _gss_mechanism_cred)); - if (!mc) { - free(cred); + dmc = malloc(sizeof(struct _gss_mechanism_cred)); + if (!dmc) { + free(dcred); *minor_status = ENOMEM; return (GSS_S_FAILURE); } m->gm_inquire_cred(minor_status, delegated_mc, - 0, 0, &cred->gc_usage, 0); - mc->gmc_mech = m; - mc->gmc_mech_oid = &m->gm_mech_oid; - mc->gmc_cred = delegated_mc; - SLIST_INSERT_HEAD(&cred->gc_mc, mc, gmc_link); + 0, 0, &dcred->gc_usage, 0); + dmc->gmc_mech = m; + dmc->gmc_mech_oid = &m->gm_mech_oid; + dmc->gmc_cred = delegated_mc; + SLIST_INSERT_HEAD(&cred->gc_mc, dmc, gmc_link); - *delegated_cred_handle = (gss_cred_id_t) cred; + *delegated_cred_handle = (gss_cred_id_t) dcred; } } diff --git a/lib/gssapi/mech/gss_acquire_cred.c b/lib/gssapi/mech/gss_acquire_cred.c index f94a45dea..c639164ce 100644 --- a/lib/gssapi/mech/gss_acquire_cred.c +++ b/lib/gssapi/mech/gss_acquire_cred.c @@ -26,13 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_acquire_cred.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include - -#include "mech_switch.h" -#include "name.h" -#include "cred.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_acquire_cred(OM_uint32 *minor_status, @@ -48,11 +43,10 @@ gss_acquire_cred(OM_uint32 *minor_status, gss_OID_set mechs = desired_mechs; gss_OID_set_desc set; struct _gss_name *name = (struct _gss_name *) desired_name; - struct _gss_mech_switch *m; + gssapi_mech_interface m; struct _gss_cred *cred; struct _gss_mechanism_cred *mc; - struct _gss_mechanism_name *mn; - OM_uint32 min_time, time; + OM_uint32 min_time, cred_time; int i; /* @@ -98,7 +92,9 @@ gss_acquire_cred(OM_uint32 *minor_status, set.count = 1; min_time = GSS_C_INDEFINITE; for (i = 0; i < mechs->count; i++) { - m = _gss_find_mech_switch(&mechs->elements[i]); + struct _gss_mechanism_name *mn = NULL; + + m = __gss_get_mechanism(&mechs->elements[i]); if (!m) continue; @@ -123,13 +119,13 @@ gss_acquire_cred(OM_uint32 *minor_status, (desired_name != GSS_C_NO_NAME ? mn->gmn_name : GSS_C_NO_NAME), time_req, &set, cred_usage, - &mc->gmc_cred, NULL, &time); + &mc->gmc_cred, NULL, &cred_time); if (major_status) { free(mc); continue; } - if (time < min_time) - min_time = time; + if (cred_time < min_time) + min_time = cred_time; if (actual_mechs) { major_status = gss_add_oid_set_member(minor_status, diff --git a/lib/gssapi/mech/gss_add_cred.c b/lib/gssapi/mech/gss_add_cred.c index fcdb8a0fe..9eb9a097a 100644 --- a/lib/gssapi/mech/gss_add_cred.c +++ b/lib/gssapi/mech/gss_add_cred.c @@ -26,18 +26,14 @@ * $FreeBSD: src/lib/libgssapi/gss_add_cred.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include - -#include "mech_switch.h" -#include "cred.h" -#include "name.h" +#include "mech_locl.h" +RCSID("$Id$"); static struct _gss_mechanism_cred * _gss_copy_cred(struct _gss_mechanism_cred *mc) { struct _gss_mechanism_cred *new_mc; - struct _gss_mech_switch *m = mc->gmc_mech; + gssapi_mech_interface m = mc->gmc_mech; OM_uint32 major_status, minor_status; gss_name_t name; gss_cred_id_t cred; @@ -85,15 +81,12 @@ gss_add_cred(OM_uint32 *minor_status, OM_uint32 *acceptor_time_rec) { OM_uint32 major_status; - struct _gss_mech_switch *m; - gss_OID_set_desc set; - struct _gss_name *name = (struct _gss_name *) desired_name; + gssapi_mech_interface m; struct _gss_cred *cred = (struct _gss_cred *) input_cred_handle; struct _gss_cred *new_cred; struct _gss_mechanism_cred *mc, *target_mc, *copy_mc; struct _gss_mechanism_name *mn; - OM_uint32 min_time, time, junk; - int i; + OM_uint32 junk; *output_cred_handle = 0; *minor_status = 0; @@ -115,7 +108,7 @@ gss_add_cred(OM_uint32 *minor_status, target_mc = 0; if (cred) { SLIST_FOREACH(mc, &cred->gc_mc, gmc_link) { - if (_gss_oid_equal(mc->gmc_mech, desired_mech)) { + if (gss_oid_equal(mc->gmc_mech_oid, desired_mech)) { target_mc = mc; } copy_mc = _gss_copy_cred(mc); @@ -142,7 +135,7 @@ gss_add_cred(OM_uint32 *minor_status, mn = 0; } - m = _gss_find_mech_switch(desired_mech); + m = __gss_get_mechanism(desired_mech); mc = malloc(sizeof(struct _gss_mechanism_cred)); if (!mc) { diff --git a/lib/gssapi/mech/gss_add_oid_set_member.c b/lib/gssapi/mech/gss_add_oid_set_member.c index be149dc60..111df8055 100644 --- a/lib/gssapi/mech/gss_add_oid_set_member.c +++ b/lib/gssapi/mech/gss_add_oid_set_member.c @@ -26,9 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_add_oid_set_member.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_add_oid_set_member(OM_uint32 *minor_status, diff --git a/lib/gssapi/mech/gss_canonicalize_name.c b/lib/gssapi/mech/gss_canonicalize_name.c index 366cc3c44..06f7bebdf 100644 --- a/lib/gssapi/mech/gss_canonicalize_name.c +++ b/lib/gssapi/mech/gss_canonicalize_name.c @@ -26,12 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_canonicalize_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include - -#include "mech_switch.h" -#include "name.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_canonicalize_name(OM_uint32 *minor_status, @@ -42,7 +38,7 @@ gss_canonicalize_name(OM_uint32 *minor_status, OM_uint32 major_status; struct _gss_name *name = (struct _gss_name *) input_name; struct _gss_mechanism_name *mn; - struct _gss_mech_switch *m = _gss_find_mech_switch(mech_type); + gssapi_mech_interface m = __gss_get_mechanism(mech_type); gss_name_t new_canonical_name; *minor_status = 0; diff --git a/lib/gssapi/mech/gss_compare_name.c b/lib/gssapi/mech/gss_compare_name.c index c687f5b4d..9637d274b 100644 --- a/lib/gssapi/mech/gss_compare_name.c +++ b/lib/gssapi/mech/gss_compare_name.c @@ -26,10 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_compare_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include - -#include "mech_switch.h" -#include "name.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_compare_name(OM_uint32 *minor_status, @@ -47,7 +45,7 @@ gss_compare_name(OM_uint32 *minor_status, */ if (name1->gn_value.value && name2->gn_value.value) { *name_equal = 1; - if (!_gss_oid_equal(name1->gn_type, name2->gn_type)) { + if (!gss_oid_equal(&name1->gn_type, &name2->gn_type)) { *name_equal = 0; } else if (name1->gn_value.length != name2->gn_value.length || memcmp(name1->gn_value.value, name1->gn_value.value, diff --git a/lib/gssapi/mech/gss_context_time.c b/lib/gssapi/mech/gss_context_time.c index 2256c4c42..ffa2083f9 100644 --- a/lib/gssapi/mech/gss_context_time.c +++ b/lib/gssapi/mech/gss_context_time.c @@ -26,10 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_context_time.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include - -#include "mech_switch.h" -#include "context.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_context_time(OM_uint32 *minor_status, @@ -37,7 +35,7 @@ gss_context_time(OM_uint32 *minor_status, OM_uint32 *time_rec) { struct _gss_context *ctx = (struct _gss_context *) context_handle; - struct _gss_mech_switch *m = ctx->gc_mech; + gssapi_mech_interface m = ctx->gc_mech; return (m->gm_context_time(minor_status, ctx->gc_ctx, time_rec)); } diff --git a/lib/gssapi/mech/gss_create_empty_oid_set.c b/lib/gssapi/mech/gss_create_empty_oid_set.c index 89825971e..5af1d8098 100644 --- a/lib/gssapi/mech/gss_create_empty_oid_set.c +++ b/lib/gssapi/mech/gss_create_empty_oid_set.c @@ -26,9 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_create_empty_oid_set.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_create_empty_oid_set(OM_uint32 *minor_status, diff --git a/lib/gssapi/mech/gss_delete_sec_context.c b/lib/gssapi/mech/gss_delete_sec_context.c index 9831ec122..f32ccb41e 100644 --- a/lib/gssapi/mech/gss_delete_sec_context.c +++ b/lib/gssapi/mech/gss_delete_sec_context.c @@ -26,12 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_delete_sec_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include - -#include "mech_switch.h" -#include "context.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_delete_sec_context(OM_uint32 *minor_status, diff --git a/lib/gssapi/mech/gss_display_name.c b/lib/gssapi/mech/gss_display_name.c index 37002bf6c..7330135e4 100644 --- a/lib/gssapi/mech/gss_display_name.c +++ b/lib/gssapi/mech/gss_display_name.c @@ -26,12 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_display_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include - -#include "mech_switch.h" -#include "name.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_display_name(OM_uint32 *minor_status, diff --git a/lib/gssapi/mech/gss_display_status.c b/lib/gssapi/mech/gss_display_status.c index e324b4953..0e8b35d69 100644 --- a/lib/gssapi/mech/gss_display_status.c +++ b/lib/gssapi/mech/gss_display_status.c @@ -26,10 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_display_status.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include - -#include "mech_switch.h" +#include "mech_locl.h" +RCSID("$Id$"); struct _gss_status_desc { OM_uint32 gs_status; @@ -37,28 +35,28 @@ struct _gss_status_desc { }; static struct _gss_status_desc _gss_status_descs[] = { - GSS_S_BAD_MECH, "An unsupported mechanism was requested", - GSS_S_BAD_NAME, "An invalid name was supplied", - GSS_S_BAD_NAMETYPE, "A supplied name was of an unsupported type", - GSS_S_BAD_BINDINGS, "Incorrect channel bindings were supplied", - GSS_S_BAD_STATUS, "An invalid status code was supplied", - GSS_S_BAD_MIC, "A token had an invalid MIC", - GSS_S_NO_CRED, "No credentials were supplied, or the " - "credentials were unavailable or inaccessible", - GSS_S_NO_CONTEXT, "No context has been established", - GSS_S_DEFECTIVE_TOKEN, "A token was invalid", - GSS_S_DEFECTIVE_CREDENTIAL, "A credential was invalid", - GSS_S_CREDENTIALS_EXPIRED, "The referenced credentials have expired", - GSS_S_CONTEXT_EXPIRED, "The context has expired", - GSS_S_FAILURE, "Miscellaneous failure", - GSS_S_BAD_QOP, "The quality-of-protection requested could " - "not be provided", - GSS_S_UNAUTHORIZED, "The operation is forbidden by local security " - "policy", - GSS_S_UNAVAILABLE, "The operation or option is unavailable", - GSS_S_DUPLICATE_ELEMENT, "The requested credential element already " - "exists", - GSS_S_NAME_NOT_MN, "The provided name was not a mechanism name" + { GSS_S_BAD_MECH, "An unsupported mechanism was requested"}, + { GSS_S_BAD_NAME, "An invalid name was supplied"}, + { GSS_S_BAD_NAMETYPE, "A supplied name was of an unsupported type"}, + { GSS_S_BAD_BINDINGS, "Incorrect channel bindings were supplied"}, + { GSS_S_BAD_STATUS, "An invalid status code was supplied"}, + { GSS_S_BAD_MIC, "A token had an invalid MIC"}, + { GSS_S_NO_CRED, "No credentials were supplied, or the " + "credentials were unavailable or inaccessible"}, + { GSS_S_NO_CONTEXT, "No context has been established"}, + { GSS_S_DEFECTIVE_TOKEN,"A token was invalid"}, + { GSS_S_DEFECTIVE_CREDENTIAL, "A credential was invalid"}, + { GSS_S_CREDENTIALS_EXPIRED, "The referenced credentials have expired"}, + { GSS_S_CONTEXT_EXPIRED, "The context has expired"}, + { GSS_S_FAILURE, "Miscellaneous failure"}, + { GSS_S_BAD_QOP, "The quality-of-protection requested could " + "not be provided"}, + { GSS_S_UNAUTHORIZED, "The operation is forbidden by local security " + "policy"}, + { GSS_S_UNAVAILABLE, "The operation or option is unavailable"}, + { GSS_S_DUPLICATE_ELEMENT, "The requested credential element already " + "exists"}, + { GSS_S_NAME_NOT_MN, "The provided name was not a mechanism name"} }; #define _gss_status_desc_count \ sizeof(_gss_status_descs) / sizeof(_gss_status_descs[0]) @@ -73,7 +71,6 @@ gss_display_status(OM_uint32 *minor_status, gss_buffer_t status_string) { OM_uint32 major_status; - struct _gss_mech_switch *m; int i; const char *message; @@ -93,11 +90,10 @@ gss_display_status(OM_uint32 *minor_status, * Fall through to attempt to get some underlying * implementation to describe the value. */ - case GSS_C_MECH_CODE: - SLIST_FOREACH(m, &_gss_mechs, gm_link) { - if (mech_type && - !_gss_oid_equal(&m->gm_mech_oid, mech_type)) - continue; + case GSS_C_MECH_CODE: { + gssapi_mech_interface m; + m = __gss_get_mechanism(mech_type); + if (m) { major_status = m->gm_display_status(minor_status, status_value, status_type, mech_type, message_content, status_string); @@ -105,6 +101,7 @@ gss_display_status(OM_uint32 *minor_status, return (GSS_S_COMPLETE); } } + } return (GSS_S_BAD_STATUS); } diff --git a/lib/gssapi/mech/gss_duplicate_name.c b/lib/gssapi/mech/gss_duplicate_name.c index e1050ce9b..0346616be 100644 --- a/lib/gssapi/mech/gss_duplicate_name.c +++ b/lib/gssapi/mech/gss_duplicate_name.c @@ -26,11 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_duplicate_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include - -#include "mech_switch.h" -#include "name.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_duplicate_name(OM_uint32 *minor_status, const gss_name_t src_name, diff --git a/lib/gssapi/mech/gss_export_name.c b/lib/gssapi/mech/gss_export_name.c index bbf6af24a..0f22f529f 100644 --- a/lib/gssapi/mech/gss_export_name.c +++ b/lib/gssapi/mech/gss_export_name.c @@ -26,10 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_export_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include - -#include "mech_switch.h" -#include "name.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_export_name(OM_uint32 *minor_status, diff --git a/lib/gssapi/mech/gss_export_sec_context.c b/lib/gssapi/mech/gss_export_sec_context.c index 25776de10..a327c1068 100644 --- a/lib/gssapi/mech/gss_export_sec_context.c +++ b/lib/gssapi/mech/gss_export_sec_context.c @@ -26,12 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_export_sec_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include - -#include "mech_switch.h" -#include "context.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_export_sec_context(OM_uint32 *minor_status, @@ -40,7 +36,7 @@ gss_export_sec_context(OM_uint32 *minor_status, { OM_uint32 major_status; struct _gss_context *ctx = (struct _gss_context *) *context_handle; - struct _gss_mech_switch *m = ctx->gc_mech; + gssapi_mech_interface m = ctx->gc_mech; gss_buffer_desc buf; major_status = m->gm_export_sec_context(minor_status, diff --git a/lib/gssapi/mech/gss_get_mic.c b/lib/gssapi/mech/gss_get_mic.c index 36d87c597..6d0c218ea 100644 --- a/lib/gssapi/mech/gss_get_mic.c +++ b/lib/gssapi/mech/gss_get_mic.c @@ -26,10 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_get_mic.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include - -#include "mech_switch.h" -#include "context.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_get_mic(OM_uint32 *minor_status, @@ -39,7 +37,7 @@ gss_get_mic(OM_uint32 *minor_status, gss_buffer_t message_token) { struct _gss_context *ctx = (struct _gss_context *) context_handle; - struct _gss_mech_switch *m = ctx->gc_mech; + gssapi_mech_interface m = ctx->gc_mech; return (m->gm_get_mic(minor_status, ctx->gc_ctx, qop_req, message_buffer, message_token)); diff --git a/lib/gssapi/mech/gss_import_name.c b/lib/gssapi/mech/gss_import_name.c index 54dd29073..7609b5df0 100644 --- a/lib/gssapi/mech/gss_import_name.c +++ b/lib/gssapi/mech/gss_import_name.c @@ -26,13 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_import_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include - -#include "mech_switch.h" -#include "utils.h" -#include "name.h" +#include "mech_locl.h" +RCSID("$Id$"); static OM_uint32 _gss_import_export_name(OM_uint32 *minor_status, @@ -44,9 +39,8 @@ _gss_import_export_name(OM_uint32 *minor_status, size_t len = input_name_buffer->length; size_t t; gss_OID_desc mech_oid; - struct _gss_mech_switch *m; + gssapi_mech_interface m; struct _gss_name *name; - struct _gss_mechanism_name *mn; gss_name_t new_canonical_name; *minor_status = 0; @@ -116,7 +110,7 @@ _gss_import_export_name(OM_uint32 *minor_status, if (len != t) return (GSS_S_BAD_NAME); - m = _gss_find_mech_switch(&mech_oid); + m = __gss_get_mechanism(&mech_oid); if (!m) return (GSS_S_BAD_MECH); @@ -168,7 +162,7 @@ gss_import_name(OM_uint32 *minor_status, * the mechanism and then import it as an MN. See RFC 2743 * section 3.2 for a description of the format. */ - if (_gss_oid_equal(name_type, GSS_C_NT_EXPORT_NAME)) { + if (gss_oid_equal(name_type, GSS_C_NT_EXPORT_NAME)) { return _gss_import_export_name(minor_status, input_name_buffer, output_name); } @@ -178,13 +172,13 @@ gss_import_name(OM_uint32 *minor_status, * should figure out the list of supported name types using * gss_inquire_names_for_mech. */ - if (!_gss_oid_equal(name_type, GSS_C_NT_USER_NAME) - && !_gss_oid_equal(name_type, GSS_C_NT_MACHINE_UID_NAME) - && !_gss_oid_equal(name_type, GSS_C_NT_STRING_UID_NAME) - && !_gss_oid_equal(name_type, GSS_C_NT_HOSTBASED_SERVICE_X) - && !_gss_oid_equal(name_type, GSS_C_NT_HOSTBASED_SERVICE) - && !_gss_oid_equal(name_type, GSS_C_NT_ANONYMOUS) - && !_gss_oid_equal(name_type, GSS_KRB5_NT_PRINCIPAL_NAME)) { + if (!gss_oid_equal(name_type, GSS_C_NT_USER_NAME) + && !gss_oid_equal(name_type, GSS_C_NT_MACHINE_UID_NAME) + && !gss_oid_equal(name_type, GSS_C_NT_STRING_UID_NAME) + && !gss_oid_equal(name_type, GSS_C_NT_HOSTBASED_SERVICE_X) + && !gss_oid_equal(name_type, GSS_C_NT_HOSTBASED_SERVICE) + && !gss_oid_equal(name_type, GSS_C_NT_ANONYMOUS) + && !gss_oid_equal(name_type, GSS_KRB5_NT_PRINCIPAL_NAME)) { *minor_status = 0; *output_name = 0; return (GSS_S_BAD_NAMETYPE); diff --git a/lib/gssapi/mech/gss_import_sec_context.c b/lib/gssapi/mech/gss_import_sec_context.c index 5c3317107..3910b0ec0 100644 --- a/lib/gssapi/mech/gss_import_sec_context.c +++ b/lib/gssapi/mech/gss_import_sec_context.c @@ -26,12 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_import_sec_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include - -#include "mech_switch.h" -#include "context.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_import_sec_context(OM_uint32 *minor_status, @@ -39,7 +35,7 @@ gss_import_sec_context(OM_uint32 *minor_status, gss_ctx_id_t *context_handle) { OM_uint32 major_status; - struct _gss_mech_switch *m; + gssapi_mech_interface m; struct _gss_context *ctx; gss_OID_desc mech_oid; gss_buffer_desc buf; @@ -64,7 +60,7 @@ gss_import_sec_context(OM_uint32 *minor_status, buf.length = len - 2 - mech_oid.length; buf.value = p + 2 + mech_oid.length; - m = _gss_find_mech_switch(&mech_oid); + m = __gss_get_mechanism(&mech_oid); if (!m) return (GSS_S_DEFECTIVE_TOKEN); diff --git a/lib/gssapi/mech/gss_indicate_mechs.c b/lib/gssapi/mech/gss_indicate_mechs.c index 92b7f4c6b..2ab69a051 100644 --- a/lib/gssapi/mech/gss_indicate_mechs.c +++ b/lib/gssapi/mech/gss_indicate_mechs.c @@ -26,9 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_indicate_mechs.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include - -#include "mech_switch.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_indicate_mechs(OM_uint32 *minor_status, @@ -46,7 +45,7 @@ gss_indicate_mechs(OM_uint32 *minor_status, return (major_status); SLIST_FOREACH(m, &_gss_mechs, gm_link) { - major_status = m->gm_indicate_mechs(minor_status, &set); + major_status = m->gm_mech.gm_indicate_mechs(minor_status, &set); if (major_status) continue; for (i = 0; i < set->count; i++) diff --git a/lib/gssapi/mech/gss_init_sec_context.c b/lib/gssapi/mech/gss_init_sec_context.c index 019788bf4..79750142d 100644 --- a/lib/gssapi/mech/gss_init_sec_context.c +++ b/lib/gssapi/mech/gss_init_sec_context.c @@ -26,21 +26,15 @@ * $FreeBSD: src/lib/libgssapi/gss_init_sec_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include - -#include "mech_switch.h" -#include "name.h" -#include "cred.h" -#include "context.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_init_sec_context(OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_name_t target_name, - const gss_OID mech_type, + const gss_OID input_mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, @@ -51,7 +45,7 @@ gss_init_sec_context(OM_uint32 * minor_status, OM_uint32 * time_rec) { OM_uint32 major_status; - struct _gss_mech_switch *m; + gssapi_mech_interface m; struct _gss_name *name = (struct _gss_name *) target_name; struct _gss_mechanism_name *mn; struct _gss_context *ctx = (struct _gss_context *) *context_handle; @@ -59,6 +53,7 @@ gss_init_sec_context(OM_uint32 * minor_status, struct _gss_mechanism_cred *mc; gss_cred_id_t cred_handle; int allocated_ctx; + gss_OID mech_type = input_mech_type; *minor_status = 0; @@ -68,13 +63,16 @@ gss_init_sec_context(OM_uint32 * minor_status, * sure we use the same mechanism switch as before. */ if (!ctx) { + if (mech_type == NULL) + mech_type = GSS_KRB5_MECHANISM; + ctx = malloc(sizeof(struct _gss_context)); if (!ctx) { *minor_status = ENOMEM; return (GSS_S_FAILURE); } memset(ctx, 0, sizeof(struct _gss_context)); - m = ctx->gc_mech = _gss_find_mech_switch(mech_type); + m = ctx->gc_mech = __gss_get_mechanism(mech_type); if (!m) { free(ctx); return (GSS_S_BAD_MECH); @@ -82,6 +80,7 @@ gss_init_sec_context(OM_uint32 * minor_status, allocated_ctx = 1; } else { m = ctx->gc_mech; + mech_type = &ctx->gc_mech->gm_mech_oid; allocated_ctx = 0; } @@ -96,7 +95,7 @@ gss_init_sec_context(OM_uint32 * minor_status, cred_handle = GSS_C_NO_CREDENTIAL; if (cred) { SLIST_FOREACH(mc, &cred->gc_mc, gmc_link) { - if (_gss_oid_equal(mech_type, mc->gmc_mech_oid)) { + if (gss_oid_equal(mech_type, mc->gmc_mech_oid)) { cred_handle = mc->gmc_cred; break; } diff --git a/lib/gssapi/mech/gss_inquire_context.c b/lib/gssapi/mech/gss_inquire_context.c index 9cc033c83..01cd42f78 100644 --- a/lib/gssapi/mech/gss_inquire_context.c +++ b/lib/gssapi/mech/gss_inquire_context.c @@ -26,11 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_inquire_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include - -#include "mech_switch.h" -#include "context.h" -#include "name.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_inquire_context(OM_uint32 *minor_status, @@ -45,7 +42,7 @@ gss_inquire_context(OM_uint32 *minor_status, { OM_uint32 major_status; struct _gss_context *ctx = (struct _gss_context *) context_handle; - struct _gss_mech_switch *m = ctx->gc_mech; + gssapi_mech_interface m = ctx->gc_mech; struct _gss_name *name; gss_name_t src_mn, targ_mn; diff --git a/lib/gssapi/mech/gss_inquire_cred.c b/lib/gssapi/mech/gss_inquire_cred.c index 4e63198d4..041c141f8 100644 --- a/lib/gssapi/mech/gss_inquire_cred.c +++ b/lib/gssapi/mech/gss_inquire_cred.c @@ -26,13 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_inquire_cred.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include - -#include "mech_switch.h" -#include "name.h" -#include "cred.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_inquire_cred(OM_uint32 *minor_status, @@ -45,7 +40,6 @@ gss_inquire_cred(OM_uint32 *minor_status, OM_uint32 major_status; struct _gss_mech_switch *m; struct _gss_cred *cred = (struct _gss_cred *) cred_handle; - struct _gss_mechanism_cred *mc; struct _gss_name *name; struct _gss_mechanism_name *mn; OM_uint32 min_lifetime; @@ -81,6 +75,8 @@ gss_inquire_cred(OM_uint32 *minor_status, min_lifetime = GSS_C_INDEFINITE; if (cred) { + struct _gss_mechanism_cred *mc; + SLIST_FOREACH(mc, &cred->gc_mc, gmc_link) { gss_name_t mc_name; OM_uint32 mc_lifetime; @@ -118,7 +114,7 @@ gss_inquire_cred(OM_uint32 *minor_status, gss_name_t mc_name; OM_uint32 mc_lifetime; - major_status = m->gm_inquire_cred(minor_status, + major_status = m->gm_mech.gm_inquire_cred(minor_status, GSS_C_NO_CREDENTIAL, &mc_name, &mc_lifetime, cred_usage, NULL); if (major_status) @@ -128,16 +124,16 @@ gss_inquire_cred(OM_uint32 *minor_status, mn = malloc( sizeof(struct _gss_mechanism_name)); if (!mn) { - mc->gmc_mech->gm_release_name( + m->gm_mech.gm_release_name( minor_status, &mc_name); continue; } - mn->gmn_mech = mc->gmc_mech; - mn->gmn_mech_oid = mc->gmc_mech_oid; + mn->gmn_mech = &m->gm_mech; + mn->gmn_mech_oid = &m->gm_mech_oid; mn->gmn_name = mc_name; SLIST_INSERT_HEAD(&name->gn_mn, mn, gmn_link); } else if (mc_name) { - mc->gmc_mech->gm_release_name(minor_status, + m->gm_mech.gm_release_name(minor_status, &mc_name); } diff --git a/lib/gssapi/mech/gss_inquire_cred_by_mech.c b/lib/gssapi/mech/gss_inquire_cred_by_mech.c index 264e785d9..bde37f9e8 100644 --- a/lib/gssapi/mech/gss_inquire_cred_by_mech.c +++ b/lib/gssapi/mech/gss_inquire_cred_by_mech.c @@ -26,11 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_inquire_cred_by_mech.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include - -#include "mech_switch.h" -#include "cred.h" -#include "name.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_inquire_cred_by_mech(OM_uint32 *minor_status, @@ -42,7 +39,7 @@ gss_inquire_cred_by_mech(OM_uint32 *minor_status, gss_cred_usage_t *cred_usage) { OM_uint32 major_status; - struct _gss_mech_switch *m; + gssapi_mech_interface m; struct _gss_mechanism_cred *mcp; gss_cred_id_t mc; gss_name_t mn; @@ -50,7 +47,7 @@ gss_inquire_cred_by_mech(OM_uint32 *minor_status, *minor_status = 0; - m = _gss_find_mech_switch(mech_type); + m = __gss_get_mechanism(mech_type); if (!m) return (GSS_S_NO_CRED); diff --git a/lib/gssapi/mech/gss_inquire_mechs_for_name.c b/lib/gssapi/mech/gss_inquire_mechs_for_name.c index a103fdcd5..3d0e79ae8 100644 --- a/lib/gssapi/mech/gss_inquire_mechs_for_name.c +++ b/lib/gssapi/mech/gss_inquire_mechs_for_name.c @@ -26,10 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_inquire_mechs_for_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include - -#include "mech_switch.h" -#include "name.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_inquire_mechs_for_name(OM_uint32 *minor_status, diff --git a/lib/gssapi/mech/gss_inquire_names_for_mech.c b/lib/gssapi/mech/gss_inquire_names_for_mech.c index d83d0c5f8..b00fe44f4 100644 --- a/lib/gssapi/mech/gss_inquire_names_for_mech.c +++ b/lib/gssapi/mech/gss_inquire_names_for_mech.c @@ -26,9 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_inquire_names_for_mech.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include - -#include "mech_switch.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_inquire_names_for_mech(OM_uint32 *minor_status, @@ -36,7 +35,7 @@ gss_inquire_names_for_mech(OM_uint32 *minor_status, gss_OID_set *name_types) { OM_uint32 major_status; - struct _gss_mech_switch *m = _gss_find_mech_switch(mechanism); + gssapi_mech_interface m = __gss_get_mechanism(mechanism); *minor_status = 0; if (!m) diff --git a/lib/gssapi/mech/gss_krb5.c b/lib/gssapi/mech/gss_krb5.c index 8ec93796b..c0bf70dcf 100644 --- a/lib/gssapi/mech/gss_krb5.c +++ b/lib/gssapi/mech/gss_krb5.c @@ -26,18 +26,72 @@ * $FreeBSD: src/lib/libgssapi/gss_krb5.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include +#include "mech_locl.h" +RCSID("$Id$"); -#include "mech_switch.h" -#include "context.h" -#include "cred.h" +#include + +OM_uint32 +gss_krb5_copy_ccache(OM_uint32 *minor_status, + gss_cred_id_t cred, + krb5_ccache out) +{ + krb5_context context; + OM_uint32 ret; + krb5_error_code kret; + gss_buffer_set_t data_set = GSS_C_NO_BUFFER_SET; + const char *prefix; + + ret = gss_inquire_cred_by_oid(minor_status, + cred, + GSS_KRB5_COPY_CCACHE_X, + &data_set); + if (ret) { + return ret; + } + + if (data_set == GSS_C_NO_BUFFER_SET || + data_set->count != 2) { + gss_release_buffer_set(minor_status, &data_set); + *minor_status = EINVAL; + return GSS_S_FAILURE; + } + + prefix = (const char *)data_set->elements[0].value; + + kret = krb5_init_context(&context); + if (out->ops == NULL) { + *minor_status = ENOENT; + gss_release_buffer_set(minor_status, &data_set); + return GSS_S_FAILURE; + } + + out->ops = krb5_cc_get_prefix_ops(context, prefix); + krb5_free_context(context); + if (out->ops == NULL) { + *minor_status = ENOENT; + gss_release_buffer_set(minor_status, &data_set); + return GSS_S_FAILURE; + } + + out->data.data = data_set->elements[1].value; + out->data.length = data_set->elements[1].length; + data_set->elements[1].value = NULL; + data_set->elements[1].length = 0; + + data_set->count--; + + gss_release_buffer_set(minor_status, &data_set); + + return ret; +} + +#if 0 OM_uint32 gsskrb5_register_acceptor_identity(const char *identity) { - struct _gss_mech_switch *m; + gssapi_mech_interface m; _gss_load_mech(); SLIST_FOREACH(m, &_gss_mechs, gm_link) { @@ -55,7 +109,7 @@ gss_krb5_copy_ccache(OM_uint32 *minor_status, { struct _gss_mechanism_cred *mcp; struct _gss_cred *cred = (struct _gss_cred *) cred_handle; - struct _gss_mech_switch *m; + gssapi_mech_interface m; *minor_status = 0; @@ -74,7 +128,7 @@ gss_krb5_compat_des3_mic(OM_uint32 *minor_status, gss_ctx_id_t context_handle, int flag) { struct _gss_context *ctx = (struct _gss_context *) context_handle; - struct _gss_mech_switch *m = ctx->gc_mech; + gssapi_mech_interface m = ctx->gc_mech; *minor_status = 0; @@ -84,4 +138,5 @@ gss_krb5_compat_des3_mic(OM_uint32 *minor_status, return (GSS_S_FAILURE); } +#endif diff --git a/lib/gssapi/mech/gss_mech_switch.c b/lib/gssapi/mech/gss_mech_switch.c index 4b1aca2d4..1a1ea4009 100644 --- a/lib/gssapi/mech/gss_mech_switch.c +++ b/lib/gssapi/mech/gss_mech_switch.c @@ -26,22 +26,14 @@ * $FreeBSD: src/lib/libgssapi/gss_mech_switch.c,v 1.2 2006/02/04 09:40:21 dfr Exp $ */ -#include -#include -#include -#include -#include -#include - -#include "mech_switch.h" -#include "utils.h" +#include "mech_locl.h" +RCSID("$Id$"); #ifndef _PATH_GSS_MECH #define _PATH_GSS_MECH "/etc/gss/mech" #endif -struct _gss_mech_switch_list _gss_mechs = - SLIST_HEAD_INITIALIZER(&_gss_mechs); +struct _gss_mech_switch_list _gss_mechs = { NULL } ; gss_OID_set _gss_mech_oids; /* @@ -155,8 +147,8 @@ _gss_string_to_oid(const char* s, gss_OID oid) #define SYM(name) \ do { \ - m->gm_ ## name = dlsym(so, "gss_" #name); \ - if (!m->gm_ ## name) { \ + m->gm_mech.gm_ ## name = dlsym(so, "gss_" #name); \ + if (!m->gm_mech.gm_ ## name) { \ fprintf(stderr, "can't find symbol gss_" #name "\n"); \ goto bad; \ } \ @@ -164,13 +156,29 @@ do { \ #define OPTSYM(name) \ do { \ - m->gm_ ## name = dlsym(so, "gss_" #name); \ + m->gm_mech.gm_ ## name = dlsym(so, "gss_" #name); \ } while (0) -#define OPTSYM2(symname, ourname) \ -do { \ - m->ourname = dlsym(so, #symname); \ -} while (0) +/* + * + */ +static int +add_builtin(gssapi_mech_interface mech) +{ + struct _gss_mech_switch *m; + OM_uint32 minor_status; + + m = malloc(sizeof(*m)); + if (m == NULL) + return 1; + m->gm_so = NULL; + m->gm_mech = *mech; + gss_add_oid_set_member(&minor_status, + &m->gm_mech.gm_mech_oid, &_gss_mech_oids); + + SLIST_INSERT_HEAD(&_gss_mechs, m, gm_link); + return 0; +} /* * Load the mechanisms file (/etc/gss/mech). @@ -184,8 +192,6 @@ _gss_load_mech(void) char *p; char *name, *oid, *lib, *kobj; struct _gss_mech_switch *m; - int count; - char **pp; void *so; if (SLIST_FIRST(&_gss_mechs)) @@ -196,13 +202,15 @@ _gss_load_mech(void) if (major_status) return; + add_builtin(__gss_krb5_initialize()); + add_builtin(__gss_spnego_initialize()); + fp = fopen(_PATH_GSS_MECH, "r"); if (!fp) { - perror(_PATH_GSS_MECH); +/* perror(_PATH_GSS_MECH); */ return; } - count = 0; while (fgets(buf, sizeof(buf), fp)) { if (*buf == '#') continue; @@ -219,23 +227,23 @@ _gss_load_mech(void) so = dlopen(lib, RTLD_LOCAL); if (!so) { - fprintf(stderr, "dlopen: %s\n", dlerror()); +/* fprintf(stderr, "dlopen: %s\n", dlerror()); */ continue; } - m = malloc(sizeof(struct _gss_mech_switch)); + m = malloc(sizeof(*m)); if (!m) break; m->gm_so = so; - if (_gss_string_to_oid(oid, &m->gm_mech_oid)) { + if (_gss_string_to_oid(oid, &m->gm_mech.gm_mech_oid)) { free(m); continue; } major_status = gss_add_oid_set_member(&minor_status, - &m->gm_mech_oid, &_gss_mech_oids); + &m->gm_mech.gm_mech_oid, &_gss_mech_oids); if (major_status) { - free(m->gm_mech_oid.elements); + free(m->gm_mech.gm_mech_oid.elements); free(m); continue; } @@ -269,17 +277,14 @@ _gss_load_mech(void) SYM(inquire_mechs_for_name); SYM(canonicalize_name); SYM(duplicate_name); - OPTSYM2(gsskrb5_register_acceptor_identity, - gm_krb5_register_acceptor_identity); - OPTSYM(krb5_copy_ccache); - OPTSYM(krb5_compat_des3_mic); + OPTSYM(inquire_cred_by_oid); + OPTSYM(inquire_sec_context_by_oid); SLIST_INSERT_HEAD(&_gss_mechs, m, gm_link); - count++; continue; bad: - free(m->gm_mech_oid.elements); + free(m->gm_mech.gm_mech_oid.elements); free(m); dlclose(so); continue; @@ -287,15 +292,15 @@ _gss_load_mech(void) fclose(fp); } -struct _gss_mech_switch * -_gss_find_mech_switch(gss_OID mech) +gssapi_mech_interface +__gss_get_mechanism(gss_OID mech) { - struct _gss_mech_switch *m; + struct _gss_mech_switch *m; _gss_load_mech(); SLIST_FOREACH(m, &_gss_mechs, gm_link) { - if (_gss_oid_equal(&m->gm_mech_oid, mech)) - return m; + if (gss_oid_equal(&m->gm_mech.gm_mech_oid, mech)) + return &m->gm_mech; } - return (0); + return NULL; } diff --git a/lib/gssapi/mech/gss_names.c b/lib/gssapi/mech/gss_names.c index 49593901e..5c03b8695 100644 --- a/lib/gssapi/mech/gss_names.c +++ b/lib/gssapi/mech/gss_names.c @@ -26,165 +26,18 @@ * $FreeBSD: src/lib/libgssapi/gss_names.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include - -#include "mech_switch.h" -#include "name.h" - -/* - * The implementation must reserve static storage for a - * gss_OID_desc object containing the value - * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" - * "\x01\x02\x01\x01"}, - * corresponding to an object-identifier value of - * {iso(1) member-body(2) United States(840) mit(113554) - * infosys(1) gssapi(2) generic(1) user_name(1)}. The constant - * GSS_C_NT_USER_NAME should be initialized to point - * to that gss_OID_desc. - */ -static gss_OID_desc GSS_C_NT_USER_NAME_storage = - {10, (void *)"\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x01"}; -gss_OID GSS_C_NT_USER_NAME = &GSS_C_NT_USER_NAME_storage; - -/* - * The implementation must reserve static storage for a - * gss_OID_desc object containing the value - * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" - * "\x01\x02\x01\x02"}, - * corresponding to an object-identifier value of - * {iso(1) member-body(2) United States(840) mit(113554) - * infosys(1) gssapi(2) generic(1) machine_uid_name(2)}. - * The constant GSS_C_NT_MACHINE_UID_NAME should be - * initialized to point to that gss_OID_desc. - */ -static gss_OID_desc GSS_C_NT_MACHINE_UID_NAME_storage = - {10, (void *)"\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x02"}; -gss_OID GSS_C_NT_MACHINE_UID_NAME = &GSS_C_NT_MACHINE_UID_NAME_storage; - -/* - * The implementation must reserve static storage for a - * gss_OID_desc object containing the value - * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" - * "\x01\x02\x01\x03"}, - * corresponding to an object-identifier value of - * {iso(1) member-body(2) United States(840) mit(113554) - * infosys(1) gssapi(2) generic(1) string_uid_name(3)}. - * The constant GSS_C_NT_STRING_UID_NAME should be - * initialized to point to that gss_OID_desc. - */ -static gss_OID_desc GSS_C_NT_STRING_UID_NAME_storage = - {10, (void *)"\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x03"}; -gss_OID GSS_C_NT_STRING_UID_NAME = &GSS_C_NT_STRING_UID_NAME_storage; - -/* - * The implementation must reserve static storage for a - * gss_OID_desc object containing the value - * {6, (void *)"\x2b\x06\x01\x05\x06\x02"}, - * corresponding to an object-identifier value of - * {iso(1) org(3) dod(6) internet(1) security(5) - * nametypes(6) gss-host-based-services(2)). The constant - * GSS_C_NT_HOSTBASED_SERVICE_X should be initialized to point - * to that gss_OID_desc. This is a deprecated OID value, and - * implementations wishing to support hostbased-service names - * should instead use the GSS_C_NT_HOSTBASED_SERVICE OID, - * defined below, to identify such names; - * GSS_C_NT_HOSTBASED_SERVICE_X should be accepted a synonym - * for GSS_C_NT_HOSTBASED_SERVICE when presented as an input - * parameter, but should not be emitted by GSS-API - * implementations - */ -static gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_X_storage = - {6, (void *)"\x2b\x06\x01\x05\x06\x02"}; -gss_OID GSS_C_NT_HOSTBASED_SERVICE_X = &GSS_C_NT_HOSTBASED_SERVICE_X_storage; - -/* - * The implementation must reserve static storage for a - * gss_OID_desc object containing the value - * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" - * "\x01\x02\x01\x04"}, corresponding to an - * object-identifier value of {iso(1) member-body(2) - * Unites States(840) mit(113554) infosys(1) gssapi(2) - * generic(1) service_name(4)}. The constant - * GSS_C_NT_HOSTBASED_SERVICE should be initialized - * to point to that gss_OID_desc. - */ -static gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_storage = - {10, (void *)"\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x04"}; -gss_OID GSS_C_NT_HOSTBASED_SERVICE = &GSS_C_NT_HOSTBASED_SERVICE_storage; - -/* - * The implementation must reserve static storage for a - * gss_OID_desc object containing the value - * {6, (void *)"\x2b\x06\01\x05\x06\x03"}, - * corresponding to an object identifier value of - * {1(iso), 3(org), 6(dod), 1(internet), 5(security), - * 6(nametypes), 3(gss-anonymous-name)}. The constant - * and GSS_C_NT_ANONYMOUS should be initialized to point - * to that gss_OID_desc. - */ -static gss_OID_desc GSS_C_NT_ANONYMOUS_storage = - {6, (void *)"\x2b\x06\01\x05\x06\x03"}; -gss_OID GSS_C_NT_ANONYMOUS = &GSS_C_NT_ANONYMOUS_storage; - -/* - * The implementation must reserve static storage for a - * gss_OID_desc object containing the value - * {6, (void *)"\x2b\x06\x01\x05\x06\x04"}, - * corresponding to an object-identifier value of - * {1(iso), 3(org), 6(dod), 1(internet), 5(security), - * 6(nametypes), 4(gss-api-exported-name)}. The constant - * GSS_C_NT_EXPORT_NAME should be initialized to point - * to that gss_OID_desc. - */ -static gss_OID_desc GSS_C_NT_EXPORT_NAME_storage = - {6, (void *)"\x2b\x06\x01\x05\x06\x04"}; -gss_OID GSS_C_NT_EXPORT_NAME = &GSS_C_NT_EXPORT_NAME_storage; - -/* - * This name form shall be represented by the Object Identifier {iso(1) - * member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) - * krb5(2) krb5_name(1)}. The recommended symbolic name for this type - * is "GSS_KRB5_NT_PRINCIPAL_NAME". - */ -static gss_OID_desc GSS_KRB5_NT_PRINCIPAL_NAME_storage = - {10, (void *)"\x2a\x86\x48\x86\xf7\x12\x01\x02\x02\x01"}; -gss_OID GSS_KRB5_NT_PRINCIPAL_NAME = &GSS_KRB5_NT_PRINCIPAL_NAME_storage; - -/* - * This name form shall be represented by the Object Identifier {iso(1) - * member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) - * generic(1) user_name(1)}. The recommended symbolic name for this - * type is "GSS_KRB5_NT_USER_NAME". - */ -gss_OID GSS_KRB5_NT_USER_NAME = &GSS_C_NT_USER_NAME_storage; - -/* - * This name form shall be represented by the Object Identifier {iso(1) - * member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) - * generic(1) machine_uid_name(2)}. The recommended symbolic name for - * this type is "GSS_KRB5_NT_MACHINE_UID_NAME". - */ -gss_OID GSS_KRB5_NT_MACHINE_UID_NAME = &GSS_C_NT_MACHINE_UID_NAME_storage; - -/* - * This name form shall be represented by the Object Identifier {iso(1) - * member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) - * generic(1) string_uid_name(3)}. The recommended symbolic name for - * this type is "GSS_KRB5_NT_STRING_UID_NAME". - */ -gss_OID GSS_KRB5_NT_STRING_UID_NAME = &GSS_C_NT_STRING_UID_NAME_storage; +#include "mech_locl.h" +RCSID("$Id$"); struct _gss_mechanism_name * _gss_find_mn(struct _gss_name *name, gss_OID mech) { OM_uint32 major_status, minor_status; - struct _gss_mech_switch *m; + gssapi_mech_interface m; struct _gss_mechanism_name *mn; SLIST_FOREACH(mn, &name->gn_mn, gmn_link) { - if (_gss_oid_equal(mech, mn->gmn_mech_oid)) + if (gss_oid_equal(mech, mn->gmn_mech_oid)) break; } @@ -196,7 +49,7 @@ _gss_find_mn(struct _gss_name *name, gss_OID mech) if (!name->gn_value.value) return (0); - m = _gss_find_mech_switch(mech); + m = __gss_get_mechanism(mech); if (!m) return (0); @@ -225,9 +78,8 @@ _gss_find_mn(struct _gss_name *name, gss_OID mech) * Make a name from an MN. */ struct _gss_name * -_gss_make_name(struct _gss_mech_switch *m, gss_name_t new_mn) +_gss_make_name(gssapi_mech_interface m, gss_name_t new_mn) { - OM_uint32 minor_status; struct _gss_name *name; struct _gss_mechanism_name *mn; diff --git a/lib/gssapi/mech/gss_process_context_token.c b/lib/gssapi/mech/gss_process_context_token.c index dc0df4ec9..a86f6fe0f 100644 --- a/lib/gssapi/mech/gss_process_context_token.c +++ b/lib/gssapi/mech/gss_process_context_token.c @@ -26,10 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_process_context_token.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include - -#include "mech_switch.h" -#include "context.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_process_context_token(OM_uint32 *minor_status, @@ -37,7 +35,7 @@ gss_process_context_token(OM_uint32 *minor_status, const gss_buffer_t token_buffer) { struct _gss_context *ctx = (struct _gss_context *) context_handle; - struct _gss_mech_switch *m = ctx->gc_mech; + gssapi_mech_interface m = ctx->gc_mech; return (m->gm_process_context_token(minor_status, ctx->gc_ctx, token_buffer)); diff --git a/lib/gssapi/mech/gss_release_buffer.c b/lib/gssapi/mech/gss_release_buffer.c index 35421dc57..efe394ad5 100644 --- a/lib/gssapi/mech/gss_release_buffer.c +++ b/lib/gssapi/mech/gss_release_buffer.c @@ -26,7 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_release_buffer.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_release_buffer(OM_uint32 *minor_status, diff --git a/lib/gssapi/mech/gss_release_cred.c b/lib/gssapi/mech/gss_release_cred.c index aa7579507..57f3c862e 100644 --- a/lib/gssapi/mech/gss_release_cred.c +++ b/lib/gssapi/mech/gss_release_cred.c @@ -26,12 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_release_cred.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include - -#include "mech_switch.h" -#include "cred.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_release_cred(OM_uint32 *minor_status, gss_cred_id_t *cred_handle) diff --git a/lib/gssapi/mech/gss_release_name.c b/lib/gssapi/mech/gss_release_name.c index 4b60ab629..ef4bbffd5 100644 --- a/lib/gssapi/mech/gss_release_name.c +++ b/lib/gssapi/mech/gss_release_name.c @@ -26,19 +26,14 @@ * $FreeBSD: src/lib/libgssapi/gss_release_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include - -#include "mech_switch.h" -#include "name.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_release_name(OM_uint32 *minor_status, gss_name_t *input_name) { struct _gss_name *name = (struct _gss_name *) *input_name; - struct _gss_mech_switch *m; *minor_status = 0; if (name) { diff --git a/lib/gssapi/mech/gss_release_oid_set.c b/lib/gssapi/mech/gss_release_oid_set.c index 06bff5cc1..117670bbf 100644 --- a/lib/gssapi/mech/gss_release_oid_set.c +++ b/lib/gssapi/mech/gss_release_oid_set.c @@ -26,9 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_release_oid_set.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_release_oid_set(OM_uint32 *minor_status, diff --git a/lib/gssapi/mech/gss_seal.c b/lib/gssapi/mech/gss_seal.c index 961bba0e5..f1e2445a6 100644 --- a/lib/gssapi/mech/gss_seal.c +++ b/lib/gssapi/mech/gss_seal.c @@ -26,7 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_seal.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_seal(OM_uint32 *minor_status, diff --git a/lib/gssapi/mech/gss_sign.c b/lib/gssapi/mech/gss_sign.c index cee7ddcf9..fe9248992 100644 --- a/lib/gssapi/mech/gss_sign.c +++ b/lib/gssapi/mech/gss_sign.c @@ -26,7 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_sign.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_sign(OM_uint32 *minor_status, diff --git a/lib/gssapi/mech/gss_test_oid_set_member.c b/lib/gssapi/mech/gss_test_oid_set_member.c index 46562c10a..8a01f64a6 100644 --- a/lib/gssapi/mech/gss_test_oid_set_member.c +++ b/lib/gssapi/mech/gss_test_oid_set_member.c @@ -26,17 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_test_oid_set_member.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include - -static int -_gss_oid_equal(const gss_OID oid1, const gss_OID oid2) -{ - if (oid1->length != oid2->length) - return (0); - if (memcmp(oid1->elements, oid2->elements, oid1->length)) - return (0); - return (1); -} +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_test_oid_set_member(OM_uint32 *minor_status, @@ -48,7 +39,7 @@ gss_test_oid_set_member(OM_uint32 *minor_status, *present = 0; for (i = 0; i < set->count; i++) - if (_gss_oid_equal(member, &set->elements[i])) + if (gss_oid_equal(member, &set->elements[i])) *present = 1; *minor_status = 0; diff --git a/lib/gssapi/mech/gss_unseal.c b/lib/gssapi/mech/gss_unseal.c index fe2787de9..73e2d5310 100644 --- a/lib/gssapi/mech/gss_unseal.c +++ b/lib/gssapi/mech/gss_unseal.c @@ -26,7 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_unseal.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_unseal(OM_uint32 *minor_status, @@ -39,5 +40,5 @@ gss_unseal(OM_uint32 *minor_status, return (gss_unwrap(minor_status, context_handle, input_message_buffer, - output_message_buffer, conf_state, qop_state)); + output_message_buffer, conf_state, (gss_qop_t *)qop_state)); } diff --git a/lib/gssapi/mech/gss_unwrap.c b/lib/gssapi/mech/gss_unwrap.c index 17f3bc8ea..d7e3d018b 100644 --- a/lib/gssapi/mech/gss_unwrap.c +++ b/lib/gssapi/mech/gss_unwrap.c @@ -26,10 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_unwrap.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include - -#include "mech_switch.h" -#include "context.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_unwrap(OM_uint32 *minor_status, @@ -40,7 +38,7 @@ gss_unwrap(OM_uint32 *minor_status, gss_qop_t *qop_state) { struct _gss_context *ctx = (struct _gss_context *) context_handle; - struct _gss_mech_switch *m = ctx->gc_mech; + gssapi_mech_interface m = ctx->gc_mech; return (m->gm_unwrap(minor_status, ctx->gc_ctx, input_message_buffer, output_message_buffer, diff --git a/lib/gssapi/mech/gss_utils.c b/lib/gssapi/mech/gss_utils.c index 11c836ae4..96d420193 100644 --- a/lib/gssapi/mech/gss_utils.c +++ b/lib/gssapi/mech/gss_utils.c @@ -26,21 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_utils.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include -#include -#include - -#include "utils.h" - -int -_gss_oid_equal(const gss_OID oid1, const gss_OID oid2) -{ - if (oid1->length != oid2->length) - return (0); - if (memcmp(oid1->elements, oid2->elements, oid1->length)) - return (0); - return (1); -} +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 _gss_copy_oid(OM_uint32 *minor_status, diff --git a/lib/gssapi/mech/gss_verify.c b/lib/gssapi/mech/gss_verify.c index 5fc35c583..cf2731e1b 100644 --- a/lib/gssapi/mech/gss_verify.c +++ b/lib/gssapi/mech/gss_verify.c @@ -26,7 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_verify.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_verify(OM_uint32 *minor_status, @@ -37,5 +38,6 @@ gss_verify(OM_uint32 *minor_status, { return (gss_verify_mic(minor_status, - context_handle, message_buffer, token_buffer, qop_state)); + context_handle, message_buffer, token_buffer, + (gss_qop_t *)qop_state)); } diff --git a/lib/gssapi/mech/gss_verify_mic.c b/lib/gssapi/mech/gss_verify_mic.c index e583f527e..2bfa7d8da 100644 --- a/lib/gssapi/mech/gss_verify_mic.c +++ b/lib/gssapi/mech/gss_verify_mic.c @@ -26,10 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_verify_mic.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include - -#include "mech_switch.h" -#include "context.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_verify_mic(OM_uint32 *minor_status, @@ -39,7 +37,7 @@ gss_verify_mic(OM_uint32 *minor_status, gss_qop_t *qop_state) { struct _gss_context *ctx = (struct _gss_context *) context_handle; - struct _gss_mech_switch *m = ctx->gc_mech; + gssapi_mech_interface m = ctx->gc_mech; return (m->gm_verify_mic(minor_status, ctx->gc_ctx, message_buffer, token_buffer, qop_state)); diff --git a/lib/gssapi/mech/gss_wrap.c b/lib/gssapi/mech/gss_wrap.c index 9bbf03d1a..625ab70d9 100644 --- a/lib/gssapi/mech/gss_wrap.c +++ b/lib/gssapi/mech/gss_wrap.c @@ -26,10 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_wrap.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include - -#include "mech_switch.h" -#include "context.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_wrap(OM_uint32 *minor_status, @@ -41,7 +39,7 @@ gss_wrap(OM_uint32 *minor_status, gss_buffer_t output_message_buffer) { struct _gss_context *ctx = (struct _gss_context *) context_handle; - struct _gss_mech_switch *m = ctx->gc_mech; + gssapi_mech_interface m = ctx->gc_mech; return (m->gm_wrap(minor_status, ctx->gc_ctx, conf_req_flag, qop_req, input_message_buffer, diff --git a/lib/gssapi/mech/gss_wrap_size_limit.c b/lib/gssapi/mech/gss_wrap_size_limit.c index 690e2dc40..7b791f50b 100644 --- a/lib/gssapi/mech/gss_wrap_size_limit.c +++ b/lib/gssapi/mech/gss_wrap_size_limit.c @@ -26,10 +26,8 @@ * $FreeBSD: src/lib/libgssapi/gss_wrap_size_limit.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ */ -#include - -#include "mech_switch.h" -#include "context.h" +#include "mech_locl.h" +RCSID("$Id$"); OM_uint32 gss_wrap_size_limit(OM_uint32 *minor_status, @@ -40,7 +38,7 @@ gss_wrap_size_limit(OM_uint32 *minor_status, OM_uint32 *max_input_size) { struct _gss_context *ctx = (struct _gss_context *) context_handle; - struct _gss_mech_switch *m = ctx->gc_mech; + gssapi_mech_interface m = ctx->gc_mech; return (m->gm_wrap_size_limit(minor_status, ctx->gc_ctx, conf_req_flag, qop_req, req_output_size, max_input_size)); diff --git a/lib/gssapi/mech/mech_switch.h b/lib/gssapi/mech/mech_switch.h index f1f0ca006..fbacd0f0f 100644 --- a/lib/gssapi/mech/mech_switch.h +++ b/lib/gssapi/mech/mech_switch.h @@ -24,304 +24,20 @@ * SUCH DAMAGE. * * $FreeBSD: src/lib/libgssapi/mech_switch.h,v 1.1 2005/12/29 14:40:20 dfr Exp $ + * $Id$ */ #include - -typedef OM_uint32 _gss_acquire_cred_t - (OM_uint32 *, /* minor_status */ - const gss_name_t, /* desired_name */ - OM_uint32, /* time_req */ - const gss_OID_set, /* desired_mechs */ - gss_cred_usage_t, /* cred_usage */ - gss_cred_id_t *, /* output_cred_handle */ - gss_OID_set *, /* actual_mechs */ - OM_uint32 * /* time_rec */ - ); - -typedef OM_uint32 _gss_release_cred_t - (OM_uint32 *, /* minor_status */ - gss_cred_id_t * /* cred_handle */ - ); - -typedef OM_uint32 _gss_init_sec_context_t - (OM_uint32 *, /* minor_status */ - const gss_cred_id_t, /* initiator_cred_handle */ - gss_ctx_id_t *, /* context_handle */ - const gss_name_t, /* target_name */ - const gss_OID, /* mech_type */ - OM_uint32, /* req_flags */ - OM_uint32, /* time_req */ - const gss_channel_bindings_t, - /* input_chan_bindings */ - const gss_buffer_t, /* input_token */ - gss_OID *, /* actual_mech_type */ - gss_buffer_t, /* output_token */ - OM_uint32 *, /* ret_flags */ - OM_uint32 * /* time_rec */ - ); - -typedef OM_uint32 _gss_accept_sec_context_t - (OM_uint32 *, /* minor_status */ - gss_ctx_id_t *, /* context_handle */ - const gss_cred_id_t, /* acceptor_cred_handle */ - const gss_buffer_t, /* input_token_buffer */ - const gss_channel_bindings_t, - /* input_chan_bindings */ - gss_name_t *, /* src_name */ - gss_OID *, /* mech_type */ - gss_buffer_t, /* output_token */ - OM_uint32 *, /* ret_flags */ - OM_uint32 *, /* time_rec */ - gss_cred_id_t * /* delegated_cred_handle */ - ); - -typedef OM_uint32 _gss_process_context_token_t - (OM_uint32 *, /* minor_status */ - const gss_ctx_id_t, /* context_handle */ - const gss_buffer_t /* token_buffer */ - ); - -typedef OM_uint32 _gss_delete_sec_context_t - (OM_uint32 *, /* minor_status */ - gss_ctx_id_t *, /* context_handle */ - gss_buffer_t /* output_token */ - ); - -typedef OM_uint32 _gss_context_time_t - (OM_uint32 *, /* minor_status */ - const gss_ctx_id_t, /* context_handle */ - OM_uint32 * /* time_rec */ - ); - -typedef OM_uint32 _gss_get_mic_t - (OM_uint32 *, /* minor_status */ - const gss_ctx_id_t, /* context_handle */ - gss_qop_t, /* qop_req */ - const gss_buffer_t, /* message_buffer */ - gss_buffer_t /* message_token */ - ); - -typedef OM_uint32 _gss_verify_mic_t - (OM_uint32 *, /* minor_status */ - const gss_ctx_id_t, /* context_handle */ - const gss_buffer_t, /* message_buffer */ - const gss_buffer_t, /* token_buffer */ - gss_qop_t * /* qop_state */ - ); - -typedef OM_uint32 _gss_wrap_t - (OM_uint32 *, /* minor_status */ - const gss_ctx_id_t, /* context_handle */ - int, /* conf_req_flag */ - gss_qop_t, /* qop_req */ - const gss_buffer_t, /* input_message_buffer */ - int *, /* conf_state */ - gss_buffer_t /* output_message_buffer */ - ); - -typedef OM_uint32 _gss_unwrap_t - (OM_uint32 *, /* minor_status */ - const gss_ctx_id_t, /* context_handle */ - const gss_buffer_t, /* input_message_buffer */ - gss_buffer_t, /* output_message_buffer */ - int *, /* conf_state */ - gss_qop_t * /* qop_state */ - ); - -typedef OM_uint32 _gss_display_status_t - (OM_uint32 *, /* minor_status */ - OM_uint32, /* status_value */ - int, /* status_type */ - const gss_OID, /* mech_type */ - OM_uint32 *, /* message_context */ - gss_buffer_t /* status_string */ - ); - -typedef OM_uint32 _gss_indicate_mechs_t - (OM_uint32 *, /* minor_status */ - gss_OID_set * /* mech_set */ - ); - -typedef OM_uint32 _gss_compare_name_t - (OM_uint32 *, /* minor_status */ - const gss_name_t, /* name1 */ - const gss_name_t, /* name2 */ - int * /* name_equal */ - ); - -typedef OM_uint32 _gss_display_name_t - (OM_uint32 *, /* minor_status */ - const gss_name_t, /* input_name */ - gss_buffer_t, /* output_name_buffer */ - gss_OID * /* output_name_type */ - ); - -typedef OM_uint32 _gss_import_name_t - (OM_uint32 *, /* minor_status */ - const gss_buffer_t, /* input_name_buffer */ - const gss_OID, /* input_name_type */ - gss_name_t * /* output_name */ - ); - -typedef OM_uint32 _gss_export_name_t - (OM_uint32 *, /* minor_status */ - const gss_name_t, /* input_name */ - gss_buffer_t /* exported_name */ - ); - -typedef OM_uint32 _gss_release_name_t - (OM_uint32 *, /* minor_status */ - gss_name_t * /* input_name */ - ); - -typedef OM_uint32 _gss_inquire_cred_t - (OM_uint32 *, /* minor_status */ - const gss_cred_id_t, /* cred_handle */ - gss_name_t *, /* name */ - OM_uint32 *, /* lifetime */ - gss_cred_usage_t *, /* cred_usage */ - gss_OID_set * /* mechanisms */ - ); - -typedef OM_uint32 _gss_inquire_context_t - (OM_uint32 *, /* minor_status */ - const gss_ctx_id_t, /* context_handle */ - gss_name_t *, /* src_name */ - gss_name_t *, /* targ_name */ - OM_uint32 *, /* lifetime_rec */ - gss_OID *, /* mech_type */ - OM_uint32 *, /* ctx_flags */ - int *, /* locally_initiated */ - int * /* open */ - ); - -typedef OM_uint32 _gss_wrap_size_limit_t - (OM_uint32 *, /* minor_status */ - const gss_ctx_id_t, /* context_handle */ - int, /* conf_req_flag */ - gss_qop_t, /* qop_req */ - OM_uint32, /* req_output_size */ - OM_uint32 * /* max_input_size */ - ); - -typedef OM_uint32 _gss_add_cred_t ( - OM_uint32 *, /* minor_status */ - const gss_cred_id_t, /* input_cred_handle */ - const gss_name_t, /* desired_name */ - const gss_OID, /* desired_mech */ - 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 */ - ); - -typedef OM_uint32 _gss_inquire_cred_by_mech_t ( - OM_uint32 *, /* minor_status */ - const gss_cred_id_t, /* cred_handle */ - const gss_OID, /* mech_type */ - gss_name_t *, /* name */ - OM_uint32 *, /* initiator_lifetime */ - OM_uint32 *, /* acceptor_lifetime */ - gss_cred_usage_t * /* cred_usage */ - ); - -typedef OM_uint32 _gss_export_sec_context_t ( - OM_uint32 *, /* minor_status */ - gss_ctx_id_t *, /* context_handle */ - gss_buffer_t /* interprocess_token */ - ); - -typedef OM_uint32 _gss_import_sec_context_t ( - OM_uint32 *, /* minor_status */ - const gss_buffer_t, /* interprocess_token */ - gss_ctx_id_t * /* context_handle */ - ); - -typedef OM_uint32 _gss_inquire_names_for_mech_t ( - OM_uint32 *, /* minor_status */ - const gss_OID, /* mechanism */ - gss_OID_set * /* name_types */ - ); - -typedef OM_uint32 _gss_inquire_mechs_for_name_t ( - OM_uint32 *, /* minor_status */ - const gss_name_t, /* input_name */ - gss_OID_set * /* mech_types */ - ); - -typedef OM_uint32 _gss_canonicalize_name_t ( - OM_uint32 *, /* minor_status */ - const gss_name_t, /* input_name */ - const gss_OID, /* mech_type */ - gss_name_t * /* output_name */ - ); - -typedef OM_uint32 _gss_duplicate_name_t ( - OM_uint32 *, /* minor_status */ - const gss_name_t, /* src_name */ - gss_name_t * /* dest_name */ - ); - -typedef OM_uint32 _gsskrb5_register_acceptor_identity ( - const char * /* identity */ - ); - -typedef OM_uint32 _gss_krb5_copy_ccache ( - OM_uint32 *, /* minor_status */ - gss_cred_id_t, /* cred_handle */ - struct krb5_ccache_data * /* out */ - ); - -typedef OM_uint32 _gss_krb5_compat_des3_mic ( - OM_uint32 *, /* minor_status */ - gss_ctx_id_t, /* context_handle */ - int /* flag */ - ); +#include struct _gss_mech_switch { SLIST_ENTRY(_gss_mech_switch) gm_link; gss_OID_desc gm_mech_oid; void *gm_so; - _gss_acquire_cred_t *gm_acquire_cred; - _gss_release_cred_t *gm_release_cred; - _gss_init_sec_context_t *gm_init_sec_context; - _gss_accept_sec_context_t *gm_accept_sec_context; - _gss_process_context_token_t *gm_process_context_token; - _gss_delete_sec_context_t *gm_delete_sec_context; - _gss_context_time_t *gm_context_time; - _gss_get_mic_t *gm_get_mic; - _gss_verify_mic_t *gm_verify_mic; - _gss_wrap_t *gm_wrap; - _gss_unwrap_t *gm_unwrap; - _gss_display_status_t *gm_display_status; - _gss_indicate_mechs_t *gm_indicate_mechs; - _gss_compare_name_t *gm_compare_name; - _gss_display_name_t *gm_display_name; - _gss_import_name_t *gm_import_name; - _gss_export_name_t *gm_export_name; - _gss_release_name_t *gm_release_name; - _gss_inquire_cred_t *gm_inquire_cred; - _gss_inquire_context_t *gm_inquire_context; - _gss_wrap_size_limit_t *gm_wrap_size_limit; - _gss_add_cred_t *gm_add_cred; - _gss_inquire_cred_by_mech_t *gm_inquire_cred_by_mech; - _gss_export_sec_context_t *gm_export_sec_context; - _gss_import_sec_context_t *gm_import_sec_context; - _gss_inquire_names_for_mech_t *gm_inquire_names_for_mech; - _gss_inquire_mechs_for_name_t *gm_inquire_mechs_for_name; - _gss_canonicalize_name_t *gm_canonicalize_name; - _gss_duplicate_name_t *gm_duplicate_name; - _gsskrb5_register_acceptor_identity *gm_krb5_register_acceptor_identity; - _gss_krb5_copy_ccache *gm_krb5_copy_ccache; - _gss_krb5_compat_des3_mic *gm_krb5_compat_des3_mic; + gssapi_mech_interface_desc gm_mech; }; SLIST_HEAD(_gss_mech_switch_list, _gss_mech_switch); extern struct _gss_mech_switch_list _gss_mechs; extern gss_OID_set _gss_mech_oids; -extern void _gss_load_mech(void); -extern struct _gss_mech_switch *_gss_find_mech_switch(gss_OID); +void _gss_load_mech(void); diff --git a/lib/gssapi/mech/name.h b/lib/gssapi/mech/name.h index d93e40253..643c9066c 100644 --- a/lib/gssapi/mech/name.h +++ b/lib/gssapi/mech/name.h @@ -24,13 +24,14 @@ * SUCH DAMAGE. * * $FreeBSD: src/lib/libgssapi/name.h,v 1.1 2005/12/29 14:40:20 dfr Exp $ + * $Id$ */ #include struct _gss_mechanism_name { SLIST_ENTRY(_gss_mechanism_name) gmn_link; - struct _gss_mech_switch *gmn_mech; /* mechanism ops for MN */ + gssapi_mech_interface gmn_mech; /* mechanism ops for MN */ gss_OID gmn_mech_oid; /* mechanism oid for MN */ gss_name_t gmn_name; /* underlying MN */ }; @@ -45,4 +46,4 @@ struct _gss_name { extern struct _gss_mechanism_name * _gss_find_mn(struct _gss_name *name, gss_OID mech); struct _gss_name * - _gss_make_name(struct _gss_mech_switch *m, gss_name_t new_mn); + _gss_make_name(gssapi_mech_interface m, gss_name_t new_mn); diff --git a/lib/gssapi/mech/utils.h b/lib/gssapi/mech/utils.h index eaa00dad3..2f1d9063e 100644 --- a/lib/gssapi/mech/utils.h +++ b/lib/gssapi/mech/utils.h @@ -24,9 +24,9 @@ * SUCH DAMAGE. * * $FreeBSD: src/lib/libgssapi/utils.h,v 1.1 2005/12/29 14:40:20 dfr Exp $ + * $Id$ */ -extern int _gss_oid_equal(const gss_OID, const gss_OID); extern OM_uint32 _gss_copy_oid(OM_uint32 *, const gss_OID, gss_OID); extern OM_uint32 _gss_copy_buffer(OM_uint32 *minor_status, const gss_buffer_t from_buf, gss_buffer_t to_buf);