Bug fixes, cleanup, compiler warnings, restructure code.

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@17700 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2006-06-28 09:00:26 +00:00
parent 534d628c29
commit d3f8f8e122
47 changed files with 308 additions and 785 deletions

View File

@@ -24,9 +24,12 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* $FreeBSD: src/lib/libgssapi/context.h,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/context.h,v 1.1 2005/12/29 14:40:20 dfr Exp $
* $Id$
*/ */
#include <gssapi_mech.h>
struct _gss_context { struct _gss_context {
struct _gss_mech_switch *gc_mech; gssapi_mech_interface gc_mech;
gss_ctx_id_t gc_ctx; gss_ctx_id_t gc_ctx;
}; };

View File

@@ -24,13 +24,14 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* $FreeBSD: src/lib/libgssapi/cred.h,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/cred.h,v 1.1 2005/12/29 14:40:20 dfr Exp $
* $Id$
*/ */
#include <sys/queue.h> #include <sys/queue.h>
struct _gss_mechanism_cred { struct _gss_mechanism_cred {
SLIST_ENTRY(_gss_mechanism_cred) gmc_link; 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_OID gmc_mech_oid; /* mechanism oid for MC */
gss_cred_id_t gmc_cred; /* underlying MC */ gss_cred_id_t gmc_cred; /* underlying MC */
}; };

View File

@@ -26,14 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_accept_sec_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_accept_sec_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
#include "mech_switch.h"
#include "context.h"
#include "cred.h"
#include "name.h"
OM_uint32 gss_accept_sec_context(OM_uint32 *minor_status, OM_uint32 gss_accept_sec_context(OM_uint32 *minor_status,
gss_ctx_id_t *context_handle, 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) gss_cred_id_t *delegated_cred_handle)
{ {
OM_uint32 major_status; OM_uint32 major_status;
struct _gss_mech_switch *m; gssapi_mech_interface m;
struct _gss_context *ctx = (struct _gss_context *) *context_handle; struct _gss_context *ctx = (struct _gss_context *) *context_handle;
struct _gss_cred *cred = (struct _gss_cred *) acceptor_cred_handle; struct _gss_cred *cred = (struct _gss_cred *) acceptor_cred_handle;
struct _gss_mechanism_cred *mc; struct _gss_mechanism_cred *mc;
@@ -133,7 +127,7 @@ OM_uint32 gss_accept_sec_context(OM_uint32 *minor_status,
return (GSS_S_DEFECTIVE_TOKEN); return (GSS_S_DEFECTIVE_TOKEN);
} }
memset(ctx, 0, sizeof(struct _gss_context)); 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) { if (!m) {
free(ctx); free(ctx);
return (GSS_S_BAD_MECH); 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); m->gm_release_cred(minor_status, &delegated_mc);
*ret_flags &= ~GSS_C_DELEG_FLAG; *ret_flags &= ~GSS_C_DELEG_FLAG;
} else { } else {
struct _gss_cred *cred; struct _gss_cred *dcred;
struct _gss_mechanism_cred *mc; struct _gss_mechanism_cred *dmc;
cred = malloc(sizeof(struct _gss_cred)); dcred = malloc(sizeof(struct _gss_cred));
if (!cred) { if (!dcred) {
*minor_status = ENOMEM; *minor_status = ENOMEM;
return (GSS_S_FAILURE); return (GSS_S_FAILURE);
} }
mc = malloc(sizeof(struct _gss_mechanism_cred)); dmc = malloc(sizeof(struct _gss_mechanism_cred));
if (!mc) { if (!dmc) {
free(cred); free(dcred);
*minor_status = ENOMEM; *minor_status = ENOMEM;
return (GSS_S_FAILURE); return (GSS_S_FAILURE);
} }
m->gm_inquire_cred(minor_status, delegated_mc, m->gm_inquire_cred(minor_status, delegated_mc,
0, 0, &cred->gc_usage, 0); 0, 0, &dcred->gc_usage, 0);
mc->gmc_mech = m; dmc->gmc_mech = m;
mc->gmc_mech_oid = &m->gm_mech_oid; dmc->gmc_mech_oid = &m->gm_mech_oid;
mc->gmc_cred = delegated_mc; dmc->gmc_cred = delegated_mc;
SLIST_INSERT_HEAD(&cred->gc_mc, mc, gmc_link); 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;
} }
} }

View File

@@ -26,13 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_acquire_cred.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_acquire_cred.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
#include "mech_switch.h"
#include "name.h"
#include "cred.h"
OM_uint32 OM_uint32
gss_acquire_cred(OM_uint32 *minor_status, 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 mechs = desired_mechs;
gss_OID_set_desc set; gss_OID_set_desc set;
struct _gss_name *name = (struct _gss_name *) desired_name; struct _gss_name *name = (struct _gss_name *) desired_name;
struct _gss_mech_switch *m; gssapi_mech_interface m;
struct _gss_cred *cred; struct _gss_cred *cred;
struct _gss_mechanism_cred *mc; struct _gss_mechanism_cred *mc;
struct _gss_mechanism_name *mn; OM_uint32 min_time, cred_time;
OM_uint32 min_time, time;
int i; int i;
/* /*
@@ -98,7 +92,9 @@ gss_acquire_cred(OM_uint32 *minor_status,
set.count = 1; set.count = 1;
min_time = GSS_C_INDEFINITE; min_time = GSS_C_INDEFINITE;
for (i = 0; i < mechs->count; i++) { 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) if (!m)
continue; continue;
@@ -123,13 +119,13 @@ gss_acquire_cred(OM_uint32 *minor_status,
(desired_name != GSS_C_NO_NAME (desired_name != GSS_C_NO_NAME
? mn->gmn_name : GSS_C_NO_NAME), ? mn->gmn_name : GSS_C_NO_NAME),
time_req, &set, cred_usage, time_req, &set, cred_usage,
&mc->gmc_cred, NULL, &time); &mc->gmc_cred, NULL, &cred_time);
if (major_status) { if (major_status) {
free(mc); free(mc);
continue; continue;
} }
if (time < min_time) if (cred_time < min_time)
min_time = time; min_time = cred_time;
if (actual_mechs) { if (actual_mechs) {
major_status = gss_add_oid_set_member(minor_status, major_status = gss_add_oid_set_member(minor_status,

View File

@@ -26,18 +26,14 @@
* $FreeBSD: src/lib/libgssapi/gss_add_cred.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_add_cred.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <errno.h> RCSID("$Id$");
#include "mech_switch.h"
#include "cred.h"
#include "name.h"
static struct _gss_mechanism_cred * static struct _gss_mechanism_cred *
_gss_copy_cred(struct _gss_mechanism_cred *mc) _gss_copy_cred(struct _gss_mechanism_cred *mc)
{ {
struct _gss_mechanism_cred *new_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; OM_uint32 major_status, minor_status;
gss_name_t name; gss_name_t name;
gss_cred_id_t cred; gss_cred_id_t cred;
@@ -85,15 +81,12 @@ gss_add_cred(OM_uint32 *minor_status,
OM_uint32 *acceptor_time_rec) OM_uint32 *acceptor_time_rec)
{ {
OM_uint32 major_status; OM_uint32 major_status;
struct _gss_mech_switch *m; gssapi_mech_interface m;
gss_OID_set_desc set;
struct _gss_name *name = (struct _gss_name *) desired_name;
struct _gss_cred *cred = (struct _gss_cred *) input_cred_handle; struct _gss_cred *cred = (struct _gss_cred *) input_cred_handle;
struct _gss_cred *new_cred; struct _gss_cred *new_cred;
struct _gss_mechanism_cred *mc, *target_mc, *copy_mc; struct _gss_mechanism_cred *mc, *target_mc, *copy_mc;
struct _gss_mechanism_name *mn; struct _gss_mechanism_name *mn;
OM_uint32 min_time, time, junk; OM_uint32 junk;
int i;
*output_cred_handle = 0; *output_cred_handle = 0;
*minor_status = 0; *minor_status = 0;
@@ -115,7 +108,7 @@ gss_add_cred(OM_uint32 *minor_status,
target_mc = 0; target_mc = 0;
if (cred) { if (cred) {
SLIST_FOREACH(mc, &cred->gc_mc, gmc_link) { 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; target_mc = mc;
} }
copy_mc = _gss_copy_cred(mc); copy_mc = _gss_copy_cred(mc);
@@ -142,7 +135,7 @@ gss_add_cred(OM_uint32 *minor_status,
mn = 0; mn = 0;
} }
m = _gss_find_mech_switch(desired_mech); m = __gss_get_mechanism(desired_mech);
mc = malloc(sizeof(struct _gss_mechanism_cred)); mc = malloc(sizeof(struct _gss_mechanism_cred));
if (!mc) { if (!mc) {

View File

@@ -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 $ * $FreeBSD: src/lib/libgssapi/gss_add_oid_set_member.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
OM_uint32 OM_uint32
gss_add_oid_set_member(OM_uint32 *minor_status, gss_add_oid_set_member(OM_uint32 *minor_status,

View File

@@ -26,12 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_canonicalize_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_canonicalize_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
#include "mech_switch.h"
#include "name.h"
OM_uint32 OM_uint32
gss_canonicalize_name(OM_uint32 *minor_status, gss_canonicalize_name(OM_uint32 *minor_status,
@@ -42,7 +38,7 @@ gss_canonicalize_name(OM_uint32 *minor_status,
OM_uint32 major_status; OM_uint32 major_status;
struct _gss_name *name = (struct _gss_name *) input_name; struct _gss_name *name = (struct _gss_name *) input_name;
struct _gss_mechanism_name *mn; 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; gss_name_t new_canonical_name;
*minor_status = 0; *minor_status = 0;

View File

@@ -26,10 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_compare_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_compare_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
#include "mech_switch.h"
#include "name.h"
OM_uint32 OM_uint32
gss_compare_name(OM_uint32 *minor_status, 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) { if (name1->gn_value.value && name2->gn_value.value) {
*name_equal = 1; *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; *name_equal = 0;
} else if (name1->gn_value.length != name2->gn_value.length || } else if (name1->gn_value.length != name2->gn_value.length ||
memcmp(name1->gn_value.value, name1->gn_value.value, memcmp(name1->gn_value.value, name1->gn_value.value,

View File

@@ -26,10 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_context_time.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_context_time.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
#include "mech_switch.h"
#include "context.h"
OM_uint32 OM_uint32
gss_context_time(OM_uint32 *minor_status, gss_context_time(OM_uint32 *minor_status,
@@ -37,7 +35,7 @@ gss_context_time(OM_uint32 *minor_status,
OM_uint32 *time_rec) OM_uint32 *time_rec)
{ {
struct _gss_context *ctx = (struct _gss_context *) context_handle; 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)); return (m->gm_context_time(minor_status, ctx->gc_ctx, time_rec));
} }

View File

@@ -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 $ * $FreeBSD: src/lib/libgssapi/gss_create_empty_oid_set.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
OM_uint32 OM_uint32
gss_create_empty_oid_set(OM_uint32 *minor_status, gss_create_empty_oid_set(OM_uint32 *minor_status,

View File

@@ -26,12 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_delete_sec_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_delete_sec_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
#include "mech_switch.h"
#include "context.h"
OM_uint32 OM_uint32
gss_delete_sec_context(OM_uint32 *minor_status, gss_delete_sec_context(OM_uint32 *minor_status,

View File

@@ -26,12 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_display_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_display_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
#include "mech_switch.h"
#include "name.h"
OM_uint32 OM_uint32
gss_display_name(OM_uint32 *minor_status, gss_display_name(OM_uint32 *minor_status,

View File

@@ -26,10 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_display_status.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_display_status.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <string.h> RCSID("$Id$");
#include "mech_switch.h"
struct _gss_status_desc { struct _gss_status_desc {
OM_uint32 gs_status; OM_uint32 gs_status;
@@ -37,28 +35,28 @@ struct _gss_status_desc {
}; };
static struct _gss_status_desc _gss_status_descs[] = { static struct _gss_status_desc _gss_status_descs[] = {
GSS_S_BAD_MECH, "An unsupported mechanism was requested", { GSS_S_BAD_MECH, "An unsupported mechanism was requested"},
GSS_S_BAD_NAME, "An invalid name was supplied", { GSS_S_BAD_NAME, "An invalid name was supplied"},
GSS_S_BAD_NAMETYPE, "A supplied name was of an unsupported type", { GSS_S_BAD_NAMETYPE, "A supplied name was of an unsupported type"},
GSS_S_BAD_BINDINGS, "Incorrect channel bindings were supplied", { GSS_S_BAD_BINDINGS, "Incorrect channel bindings were supplied"},
GSS_S_BAD_STATUS, "An invalid status code was supplied", { GSS_S_BAD_STATUS, "An invalid status code was supplied"},
GSS_S_BAD_MIC, "A token had an invalid MIC", { GSS_S_BAD_MIC, "A token had an invalid MIC"},
GSS_S_NO_CRED, "No credentials were supplied, or the " { GSS_S_NO_CRED, "No credentials were supplied, or the "
"credentials were unavailable or inaccessible", "credentials were unavailable or inaccessible"},
GSS_S_NO_CONTEXT, "No context has been established", { GSS_S_NO_CONTEXT, "No context has been established"},
GSS_S_DEFECTIVE_TOKEN, "A token was invalid", { GSS_S_DEFECTIVE_TOKEN,"A token was invalid"},
GSS_S_DEFECTIVE_CREDENTIAL, "A credential was invalid", { GSS_S_DEFECTIVE_CREDENTIAL, "A credential was invalid"},
GSS_S_CREDENTIALS_EXPIRED, "The referenced credentials have expired", { GSS_S_CREDENTIALS_EXPIRED, "The referenced credentials have expired"},
GSS_S_CONTEXT_EXPIRED, "The context has expired", { GSS_S_CONTEXT_EXPIRED, "The context has expired"},
GSS_S_FAILURE, "Miscellaneous failure", { GSS_S_FAILURE, "Miscellaneous failure"},
GSS_S_BAD_QOP, "The quality-of-protection requested could " { GSS_S_BAD_QOP, "The quality-of-protection requested could "
"not be provided", "not be provided"},
GSS_S_UNAUTHORIZED, "The operation is forbidden by local security " { GSS_S_UNAUTHORIZED, "The operation is forbidden by local security "
"policy", "policy"},
GSS_S_UNAVAILABLE, "The operation or option is unavailable", { GSS_S_UNAVAILABLE, "The operation or option is unavailable"},
GSS_S_DUPLICATE_ELEMENT, "The requested credential element already " { GSS_S_DUPLICATE_ELEMENT, "The requested credential element already "
"exists", "exists"},
GSS_S_NAME_NOT_MN, "The provided name was not a mechanism name" { GSS_S_NAME_NOT_MN, "The provided name was not a mechanism name"}
}; };
#define _gss_status_desc_count \ #define _gss_status_desc_count \
sizeof(_gss_status_descs) / sizeof(_gss_status_descs[0]) 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) gss_buffer_t status_string)
{ {
OM_uint32 major_status; OM_uint32 major_status;
struct _gss_mech_switch *m;
int i; int i;
const char *message; const char *message;
@@ -93,11 +90,10 @@ gss_display_status(OM_uint32 *minor_status,
* Fall through to attempt to get some underlying * Fall through to attempt to get some underlying
* implementation to describe the value. * implementation to describe the value.
*/ */
case GSS_C_MECH_CODE: case GSS_C_MECH_CODE: {
SLIST_FOREACH(m, &_gss_mechs, gm_link) { gssapi_mech_interface m;
if (mech_type && m = __gss_get_mechanism(mech_type);
!_gss_oid_equal(&m->gm_mech_oid, mech_type)) if (m) {
continue;
major_status = m->gm_display_status(minor_status, major_status = m->gm_display_status(minor_status,
status_value, status_type, mech_type, status_value, status_type, mech_type,
message_content, status_string); message_content, status_string);
@@ -105,6 +101,7 @@ gss_display_status(OM_uint32 *minor_status,
return (GSS_S_COMPLETE); return (GSS_S_COMPLETE);
} }
} }
}
return (GSS_S_BAD_STATUS); return (GSS_S_BAD_STATUS);
} }

View File

@@ -26,11 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_duplicate_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_duplicate_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <errno.h> RCSID("$Id$");
#include "mech_switch.h"
#include "name.h"
OM_uint32 gss_duplicate_name(OM_uint32 *minor_status, OM_uint32 gss_duplicate_name(OM_uint32 *minor_status,
const gss_name_t src_name, const gss_name_t src_name,

View File

@@ -26,10 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_export_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_export_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
#include "mech_switch.h"
#include "name.h"
OM_uint32 OM_uint32
gss_export_name(OM_uint32 *minor_status, gss_export_name(OM_uint32 *minor_status,

View File

@@ -26,12 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_export_sec_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_export_sec_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
#include "mech_switch.h"
#include "context.h"
OM_uint32 OM_uint32
gss_export_sec_context(OM_uint32 *minor_status, gss_export_sec_context(OM_uint32 *minor_status,
@@ -40,7 +36,7 @@ gss_export_sec_context(OM_uint32 *minor_status,
{ {
OM_uint32 major_status; OM_uint32 major_status;
struct _gss_context *ctx = (struct _gss_context *) *context_handle; 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; gss_buffer_desc buf;
major_status = m->gm_export_sec_context(minor_status, major_status = m->gm_export_sec_context(minor_status,

View File

@@ -26,10 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_get_mic.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_get_mic.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
#include "mech_switch.h"
#include "context.h"
OM_uint32 OM_uint32
gss_get_mic(OM_uint32 *minor_status, gss_get_mic(OM_uint32 *minor_status,
@@ -39,7 +37,7 @@ gss_get_mic(OM_uint32 *minor_status,
gss_buffer_t message_token) gss_buffer_t message_token)
{ {
struct _gss_context *ctx = (struct _gss_context *) context_handle; 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, return (m->gm_get_mic(minor_status, ctx->gc_ctx, qop_req,
message_buffer, message_token)); message_buffer, message_token));

View File

@@ -26,13 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_import_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_import_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
#include "mech_switch.h"
#include "utils.h"
#include "name.h"
static OM_uint32 static OM_uint32
_gss_import_export_name(OM_uint32 *minor_status, _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 len = input_name_buffer->length;
size_t t; size_t t;
gss_OID_desc mech_oid; gss_OID_desc mech_oid;
struct _gss_mech_switch *m; gssapi_mech_interface m;
struct _gss_name *name; struct _gss_name *name;
struct _gss_mechanism_name *mn;
gss_name_t new_canonical_name; gss_name_t new_canonical_name;
*minor_status = 0; *minor_status = 0;
@@ -116,7 +110,7 @@ _gss_import_export_name(OM_uint32 *minor_status,
if (len != t) if (len != t)
return (GSS_S_BAD_NAME); return (GSS_S_BAD_NAME);
m = _gss_find_mech_switch(&mech_oid); m = __gss_get_mechanism(&mech_oid);
if (!m) if (!m)
return (GSS_S_BAD_MECH); 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 * the mechanism and then import it as an MN. See RFC 2743
* section 3.2 for a description of the format. * 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, return _gss_import_export_name(minor_status,
input_name_buffer, output_name); 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 * should figure out the list of supported name types using
* gss_inquire_names_for_mech. * gss_inquire_names_for_mech.
*/ */
if (!_gss_oid_equal(name_type, GSS_C_NT_USER_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_MACHINE_UID_NAME)
&& !_gss_oid_equal(name_type, GSS_C_NT_STRING_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_X)
&& !_gss_oid_equal(name_type, GSS_C_NT_HOSTBASED_SERVICE) && !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_C_NT_ANONYMOUS)
&& !_gss_oid_equal(name_type, GSS_KRB5_NT_PRINCIPAL_NAME)) { && !gss_oid_equal(name_type, GSS_KRB5_NT_PRINCIPAL_NAME)) {
*minor_status = 0; *minor_status = 0;
*output_name = 0; *output_name = 0;
return (GSS_S_BAD_NAMETYPE); return (GSS_S_BAD_NAMETYPE);

View File

@@ -26,12 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_import_sec_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_import_sec_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
#include "mech_switch.h"
#include "context.h"
OM_uint32 OM_uint32
gss_import_sec_context(OM_uint32 *minor_status, 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) gss_ctx_id_t *context_handle)
{ {
OM_uint32 major_status; OM_uint32 major_status;
struct _gss_mech_switch *m; gssapi_mech_interface m;
struct _gss_context *ctx; struct _gss_context *ctx;
gss_OID_desc mech_oid; gss_OID_desc mech_oid;
gss_buffer_desc buf; gss_buffer_desc buf;
@@ -64,7 +60,7 @@ gss_import_sec_context(OM_uint32 *minor_status,
buf.length = len - 2 - mech_oid.length; buf.length = len - 2 - mech_oid.length;
buf.value = p + 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) if (!m)
return (GSS_S_DEFECTIVE_TOKEN); return (GSS_S_DEFECTIVE_TOKEN);

View File

@@ -26,9 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_indicate_mechs.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_indicate_mechs.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
#include "mech_switch.h"
OM_uint32 OM_uint32
gss_indicate_mechs(OM_uint32 *minor_status, gss_indicate_mechs(OM_uint32 *minor_status,
@@ -46,7 +45,7 @@ gss_indicate_mechs(OM_uint32 *minor_status,
return (major_status); return (major_status);
SLIST_FOREACH(m, &_gss_mechs, gm_link) { 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) if (major_status)
continue; continue;
for (i = 0; i < set->count; i++) for (i = 0; i < set->count; i++)

View File

@@ -26,21 +26,15 @@
* $FreeBSD: src/lib/libgssapi/gss_init_sec_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_init_sec_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
#include "mech_switch.h"
#include "name.h"
#include "cred.h"
#include "context.h"
OM_uint32 OM_uint32
gss_init_sec_context(OM_uint32 * minor_status, gss_init_sec_context(OM_uint32 * minor_status,
const gss_cred_id_t initiator_cred_handle, const gss_cred_id_t initiator_cred_handle,
gss_ctx_id_t * context_handle, gss_ctx_id_t * context_handle,
const gss_name_t target_name, const gss_name_t target_name,
const gss_OID mech_type, const gss_OID input_mech_type,
OM_uint32 req_flags, OM_uint32 req_flags,
OM_uint32 time_req, OM_uint32 time_req,
const gss_channel_bindings_t input_chan_bindings, 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 * time_rec)
{ {
OM_uint32 major_status; OM_uint32 major_status;
struct _gss_mech_switch *m; gssapi_mech_interface m;
struct _gss_name *name = (struct _gss_name *) target_name; struct _gss_name *name = (struct _gss_name *) target_name;
struct _gss_mechanism_name *mn; struct _gss_mechanism_name *mn;
struct _gss_context *ctx = (struct _gss_context *) *context_handle; 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; struct _gss_mechanism_cred *mc;
gss_cred_id_t cred_handle; gss_cred_id_t cred_handle;
int allocated_ctx; int allocated_ctx;
gss_OID mech_type = input_mech_type;
*minor_status = 0; *minor_status = 0;
@@ -68,13 +63,16 @@ gss_init_sec_context(OM_uint32 * minor_status,
* sure we use the same mechanism switch as before. * sure we use the same mechanism switch as before.
*/ */
if (!ctx) { if (!ctx) {
if (mech_type == NULL)
mech_type = GSS_KRB5_MECHANISM;
ctx = malloc(sizeof(struct _gss_context)); ctx = malloc(sizeof(struct _gss_context));
if (!ctx) { if (!ctx) {
*minor_status = ENOMEM; *minor_status = ENOMEM;
return (GSS_S_FAILURE); return (GSS_S_FAILURE);
} }
memset(ctx, 0, sizeof(struct _gss_context)); 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) { if (!m) {
free(ctx); free(ctx);
return (GSS_S_BAD_MECH); return (GSS_S_BAD_MECH);
@@ -82,6 +80,7 @@ gss_init_sec_context(OM_uint32 * minor_status,
allocated_ctx = 1; allocated_ctx = 1;
} else { } else {
m = ctx->gc_mech; m = ctx->gc_mech;
mech_type = &ctx->gc_mech->gm_mech_oid;
allocated_ctx = 0; allocated_ctx = 0;
} }
@@ -96,7 +95,7 @@ gss_init_sec_context(OM_uint32 * minor_status,
cred_handle = GSS_C_NO_CREDENTIAL; cred_handle = GSS_C_NO_CREDENTIAL;
if (cred) { if (cred) {
SLIST_FOREACH(mc, &cred->gc_mc, gmc_link) { 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; cred_handle = mc->gmc_cred;
break; break;
} }

View File

@@ -26,11 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_inquire_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_inquire_context.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
#include "mech_switch.h"
#include "context.h"
#include "name.h"
OM_uint32 OM_uint32
gss_inquire_context(OM_uint32 *minor_status, gss_inquire_context(OM_uint32 *minor_status,
@@ -45,7 +42,7 @@ gss_inquire_context(OM_uint32 *minor_status,
{ {
OM_uint32 major_status; OM_uint32 major_status;
struct _gss_context *ctx = (struct _gss_context *) context_handle; 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; struct _gss_name *name;
gss_name_t src_mn, targ_mn; gss_name_t src_mn, targ_mn;

View File

@@ -26,13 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_inquire_cred.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_inquire_cred.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
#include "mech_switch.h"
#include "name.h"
#include "cred.h"
OM_uint32 OM_uint32
gss_inquire_cred(OM_uint32 *minor_status, gss_inquire_cred(OM_uint32 *minor_status,
@@ -45,7 +40,6 @@ gss_inquire_cred(OM_uint32 *minor_status,
OM_uint32 major_status; OM_uint32 major_status;
struct _gss_mech_switch *m; struct _gss_mech_switch *m;
struct _gss_cred *cred = (struct _gss_cred *) cred_handle; struct _gss_cred *cred = (struct _gss_cred *) cred_handle;
struct _gss_mechanism_cred *mc;
struct _gss_name *name; struct _gss_name *name;
struct _gss_mechanism_name *mn; struct _gss_mechanism_name *mn;
OM_uint32 min_lifetime; OM_uint32 min_lifetime;
@@ -81,6 +75,8 @@ gss_inquire_cred(OM_uint32 *minor_status,
min_lifetime = GSS_C_INDEFINITE; min_lifetime = GSS_C_INDEFINITE;
if (cred) { if (cred) {
struct _gss_mechanism_cred *mc;
SLIST_FOREACH(mc, &cred->gc_mc, gmc_link) { SLIST_FOREACH(mc, &cred->gc_mc, gmc_link) {
gss_name_t mc_name; gss_name_t mc_name;
OM_uint32 mc_lifetime; OM_uint32 mc_lifetime;
@@ -118,7 +114,7 @@ gss_inquire_cred(OM_uint32 *minor_status,
gss_name_t mc_name; gss_name_t mc_name;
OM_uint32 mc_lifetime; 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, GSS_C_NO_CREDENTIAL, &mc_name, &mc_lifetime,
cred_usage, NULL); cred_usage, NULL);
if (major_status) if (major_status)
@@ -128,16 +124,16 @@ gss_inquire_cred(OM_uint32 *minor_status,
mn = malloc( mn = malloc(
sizeof(struct _gss_mechanism_name)); sizeof(struct _gss_mechanism_name));
if (!mn) { if (!mn) {
mc->gmc_mech->gm_release_name( m->gm_mech.gm_release_name(
minor_status, &mc_name); minor_status, &mc_name);
continue; continue;
} }
mn->gmn_mech = mc->gmc_mech; mn->gmn_mech = &m->gm_mech;
mn->gmn_mech_oid = mc->gmc_mech_oid; mn->gmn_mech_oid = &m->gm_mech_oid;
mn->gmn_name = mc_name; mn->gmn_name = mc_name;
SLIST_INSERT_HEAD(&name->gn_mn, mn, gmn_link); SLIST_INSERT_HEAD(&name->gn_mn, mn, gmn_link);
} else if (mc_name) { } else if (mc_name) {
mc->gmc_mech->gm_release_name(minor_status, m->gm_mech.gm_release_name(minor_status,
&mc_name); &mc_name);
} }

View File

@@ -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 $ * $FreeBSD: src/lib/libgssapi/gss_inquire_cred_by_mech.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
#include "mech_switch.h"
#include "cred.h"
#include "name.h"
OM_uint32 OM_uint32
gss_inquire_cred_by_mech(OM_uint32 *minor_status, 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) gss_cred_usage_t *cred_usage)
{ {
OM_uint32 major_status; OM_uint32 major_status;
struct _gss_mech_switch *m; gssapi_mech_interface m;
struct _gss_mechanism_cred *mcp; struct _gss_mechanism_cred *mcp;
gss_cred_id_t mc; gss_cred_id_t mc;
gss_name_t mn; gss_name_t mn;
@@ -50,7 +47,7 @@ gss_inquire_cred_by_mech(OM_uint32 *minor_status,
*minor_status = 0; *minor_status = 0;
m = _gss_find_mech_switch(mech_type); m = __gss_get_mechanism(mech_type);
if (!m) if (!m)
return (GSS_S_NO_CRED); return (GSS_S_NO_CRED);

View File

@@ -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 $ * $FreeBSD: src/lib/libgssapi/gss_inquire_mechs_for_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
#include "mech_switch.h"
#include "name.h"
OM_uint32 OM_uint32
gss_inquire_mechs_for_name(OM_uint32 *minor_status, gss_inquire_mechs_for_name(OM_uint32 *minor_status,

View File

@@ -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 $ * $FreeBSD: src/lib/libgssapi/gss_inquire_names_for_mech.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
#include "mech_switch.h"
OM_uint32 OM_uint32
gss_inquire_names_for_mech(OM_uint32 *minor_status, 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) gss_OID_set *name_types)
{ {
OM_uint32 major_status; 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; *minor_status = 0;
if (!m) if (!m)

View File

@@ -26,18 +26,72 @@
* $FreeBSD: src/lib/libgssapi/gss_krb5.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_krb5.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
#include "mech_switch.h" #include <krb5.h>
#include "context.h"
#include "cred.h"
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 OM_uint32
gsskrb5_register_acceptor_identity(const char *identity) gsskrb5_register_acceptor_identity(const char *identity)
{ {
struct _gss_mech_switch *m; gssapi_mech_interface m;
_gss_load_mech(); _gss_load_mech();
SLIST_FOREACH(m, &_gss_mechs, gm_link) { 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_mechanism_cred *mcp;
struct _gss_cred *cred = (struct _gss_cred *) cred_handle; struct _gss_cred *cred = (struct _gss_cred *) cred_handle;
struct _gss_mech_switch *m; gssapi_mech_interface m;
*minor_status = 0; *minor_status = 0;
@@ -74,7 +128,7 @@ gss_krb5_compat_des3_mic(OM_uint32 *minor_status,
gss_ctx_id_t context_handle, int flag) gss_ctx_id_t context_handle, int flag)
{ {
struct _gss_context *ctx = (struct _gss_context *) context_handle; 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; *minor_status = 0;
@@ -84,4 +138,5 @@ gss_krb5_compat_des3_mic(OM_uint32 *minor_status,
return (GSS_S_FAILURE); return (GSS_S_FAILURE);
} }
#endif

View File

@@ -26,22 +26,14 @@
* $FreeBSD: src/lib/libgssapi/gss_mech_switch.c,v 1.2 2006/02/04 09:40:21 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_mech_switch.c,v 1.2 2006/02/04 09:40:21 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <dlfcn.h> RCSID("$Id$");
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mech_switch.h"
#include "utils.h"
#ifndef _PATH_GSS_MECH #ifndef _PATH_GSS_MECH
#define _PATH_GSS_MECH "/etc/gss/mech" #define _PATH_GSS_MECH "/etc/gss/mech"
#endif #endif
struct _gss_mech_switch_list _gss_mechs = struct _gss_mech_switch_list _gss_mechs = { NULL } ;
SLIST_HEAD_INITIALIZER(&_gss_mechs);
gss_OID_set _gss_mech_oids; gss_OID_set _gss_mech_oids;
/* /*
@@ -155,8 +147,8 @@ _gss_string_to_oid(const char* s, gss_OID oid)
#define SYM(name) \ #define SYM(name) \
do { \ do { \
m->gm_ ## name = dlsym(so, "gss_" #name); \ m->gm_mech.gm_ ## name = dlsym(so, "gss_" #name); \
if (!m->gm_ ## name) { \ if (!m->gm_mech.gm_ ## name) { \
fprintf(stderr, "can't find symbol gss_" #name "\n"); \ fprintf(stderr, "can't find symbol gss_" #name "\n"); \
goto bad; \ goto bad; \
} \ } \
@@ -164,13 +156,29 @@ do { \
#define OPTSYM(name) \ #define OPTSYM(name) \
do { \ do { \
m->gm_ ## name = dlsym(so, "gss_" #name); \ m->gm_mech.gm_ ## name = dlsym(so, "gss_" #name); \
} while (0) } 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). * Load the mechanisms file (/etc/gss/mech).
@@ -184,8 +192,6 @@ _gss_load_mech(void)
char *p; char *p;
char *name, *oid, *lib, *kobj; char *name, *oid, *lib, *kobj;
struct _gss_mech_switch *m; struct _gss_mech_switch *m;
int count;
char **pp;
void *so; void *so;
if (SLIST_FIRST(&_gss_mechs)) if (SLIST_FIRST(&_gss_mechs))
@@ -196,13 +202,15 @@ _gss_load_mech(void)
if (major_status) if (major_status)
return; return;
add_builtin(__gss_krb5_initialize());
add_builtin(__gss_spnego_initialize());
fp = fopen(_PATH_GSS_MECH, "r"); fp = fopen(_PATH_GSS_MECH, "r");
if (!fp) { if (!fp) {
perror(_PATH_GSS_MECH); /* perror(_PATH_GSS_MECH); */
return; return;
} }
count = 0;
while (fgets(buf, sizeof(buf), fp)) { while (fgets(buf, sizeof(buf), fp)) {
if (*buf == '#') if (*buf == '#')
continue; continue;
@@ -219,23 +227,23 @@ _gss_load_mech(void)
so = dlopen(lib, RTLD_LOCAL); so = dlopen(lib, RTLD_LOCAL);
if (!so) { if (!so) {
fprintf(stderr, "dlopen: %s\n", dlerror()); /* fprintf(stderr, "dlopen: %s\n", dlerror()); */
continue; continue;
} }
m = malloc(sizeof(struct _gss_mech_switch)); m = malloc(sizeof(*m));
if (!m) if (!m)
break; break;
m->gm_so = so; 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); free(m);
continue; continue;
} }
major_status = gss_add_oid_set_member(&minor_status, 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) { if (major_status) {
free(m->gm_mech_oid.elements); free(m->gm_mech.gm_mech_oid.elements);
free(m); free(m);
continue; continue;
} }
@@ -269,17 +277,14 @@ _gss_load_mech(void)
SYM(inquire_mechs_for_name); SYM(inquire_mechs_for_name);
SYM(canonicalize_name); SYM(canonicalize_name);
SYM(duplicate_name); SYM(duplicate_name);
OPTSYM2(gsskrb5_register_acceptor_identity, OPTSYM(inquire_cred_by_oid);
gm_krb5_register_acceptor_identity); OPTSYM(inquire_sec_context_by_oid);
OPTSYM(krb5_copy_ccache);
OPTSYM(krb5_compat_des3_mic);
SLIST_INSERT_HEAD(&_gss_mechs, m, gm_link); SLIST_INSERT_HEAD(&_gss_mechs, m, gm_link);
count++;
continue; continue;
bad: bad:
free(m->gm_mech_oid.elements); free(m->gm_mech.gm_mech_oid.elements);
free(m); free(m);
dlclose(so); dlclose(so);
continue; continue;
@@ -287,15 +292,15 @@ _gss_load_mech(void)
fclose(fp); fclose(fp);
} }
struct _gss_mech_switch * gssapi_mech_interface
_gss_find_mech_switch(gss_OID mech) __gss_get_mechanism(gss_OID mech)
{ {
struct _gss_mech_switch *m; struct _gss_mech_switch *m;
_gss_load_mech(); _gss_load_mech();
SLIST_FOREACH(m, &_gss_mechs, gm_link) { SLIST_FOREACH(m, &_gss_mechs, gm_link) {
if (_gss_oid_equal(&m->gm_mech_oid, mech)) if (gss_oid_equal(&m->gm_mech.gm_mech_oid, mech))
return m; return &m->gm_mech;
} }
return (0); return NULL;
} }

View File

@@ -26,165 +26,18 @@
* $FreeBSD: src/lib/libgssapi/gss_names.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_names.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
#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;
struct _gss_mechanism_name * struct _gss_mechanism_name *
_gss_find_mn(struct _gss_name *name, gss_OID mech) _gss_find_mn(struct _gss_name *name, gss_OID mech)
{ {
OM_uint32 major_status, minor_status; OM_uint32 major_status, minor_status;
struct _gss_mech_switch *m; gssapi_mech_interface m;
struct _gss_mechanism_name *mn; struct _gss_mechanism_name *mn;
SLIST_FOREACH(mn, &name->gn_mn, gmn_link) { 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; break;
} }
@@ -196,7 +49,7 @@ _gss_find_mn(struct _gss_name *name, gss_OID mech)
if (!name->gn_value.value) if (!name->gn_value.value)
return (0); return (0);
m = _gss_find_mech_switch(mech); m = __gss_get_mechanism(mech);
if (!m) if (!m)
return (0); return (0);
@@ -225,9 +78,8 @@ _gss_find_mn(struct _gss_name *name, gss_OID mech)
* Make a name from an MN. * Make a name from an MN.
*/ */
struct _gss_name * 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_name *name;
struct _gss_mechanism_name *mn; struct _gss_mechanism_name *mn;

View File

@@ -26,10 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_process_context_token.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_process_context_token.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
#include "mech_switch.h"
#include "context.h"
OM_uint32 OM_uint32
gss_process_context_token(OM_uint32 *minor_status, 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) const gss_buffer_t token_buffer)
{ {
struct _gss_context *ctx = (struct _gss_context *) context_handle; 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, return (m->gm_process_context_token(minor_status, ctx->gc_ctx,
token_buffer)); token_buffer));

View File

@@ -26,7 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_release_buffer.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_release_buffer.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
OM_uint32 OM_uint32
gss_release_buffer(OM_uint32 *minor_status, gss_release_buffer(OM_uint32 *minor_status,

View File

@@ -26,12 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_release_cred.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_release_cred.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
#include "mech_switch.h"
#include "cred.h"
OM_uint32 OM_uint32
gss_release_cred(OM_uint32 *minor_status, gss_cred_id_t *cred_handle) gss_release_cred(OM_uint32 *minor_status, gss_cred_id_t *cred_handle)

View File

@@ -26,19 +26,14 @@
* $FreeBSD: src/lib/libgssapi/gss_release_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_release_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
#include "mech_switch.h"
#include "name.h"
OM_uint32 OM_uint32
gss_release_name(OM_uint32 *minor_status, gss_release_name(OM_uint32 *minor_status,
gss_name_t *input_name) gss_name_t *input_name)
{ {
struct _gss_name *name = (struct _gss_name *) *input_name; struct _gss_name *name = (struct _gss_name *) *input_name;
struct _gss_mech_switch *m;
*minor_status = 0; *minor_status = 0;
if (name) { if (name) {

View File

@@ -26,9 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_release_oid_set.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_release_oid_set.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
OM_uint32 OM_uint32
gss_release_oid_set(OM_uint32 *minor_status, gss_release_oid_set(OM_uint32 *minor_status,

View File

@@ -26,7 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_seal.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_seal.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
OM_uint32 OM_uint32
gss_seal(OM_uint32 *minor_status, gss_seal(OM_uint32 *minor_status,

View File

@@ -26,7 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_sign.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_sign.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
OM_uint32 OM_uint32
gss_sign(OM_uint32 *minor_status, gss_sign(OM_uint32 *minor_status,

View File

@@ -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 $ * $FreeBSD: src/lib/libgssapi/gss_test_oid_set_member.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
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);
}
OM_uint32 OM_uint32
gss_test_oid_set_member(OM_uint32 *minor_status, gss_test_oid_set_member(OM_uint32 *minor_status,
@@ -48,7 +39,7 @@ gss_test_oid_set_member(OM_uint32 *minor_status,
*present = 0; *present = 0;
for (i = 0; i < set->count; i++) 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; *present = 1;
*minor_status = 0; *minor_status = 0;

View File

@@ -26,7 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_unseal.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_unseal.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
OM_uint32 OM_uint32
gss_unseal(OM_uint32 *minor_status, gss_unseal(OM_uint32 *minor_status,
@@ -39,5 +40,5 @@ gss_unseal(OM_uint32 *minor_status,
return (gss_unwrap(minor_status, return (gss_unwrap(minor_status,
context_handle, input_message_buffer, context_handle, input_message_buffer,
output_message_buffer, conf_state, qop_state)); output_message_buffer, conf_state, (gss_qop_t *)qop_state));
} }

View File

@@ -26,10 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_unwrap.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_unwrap.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
#include "mech_switch.h"
#include "context.h"
OM_uint32 OM_uint32
gss_unwrap(OM_uint32 *minor_status, gss_unwrap(OM_uint32 *minor_status,
@@ -40,7 +38,7 @@ gss_unwrap(OM_uint32 *minor_status,
gss_qop_t *qop_state) gss_qop_t *qop_state)
{ {
struct _gss_context *ctx = (struct _gss_context *) context_handle; 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, return (m->gm_unwrap(minor_status, ctx->gc_ctx,
input_message_buffer, output_message_buffer, input_message_buffer, output_message_buffer,

View File

@@ -26,21 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_utils.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_utils.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
#include <stdlib.h> RCSID("$Id$");
#include <errno.h>
#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);
}
OM_uint32 OM_uint32
_gss_copy_oid(OM_uint32 *minor_status, _gss_copy_oid(OM_uint32 *minor_status,

View File

@@ -26,7 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_verify.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_verify.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
OM_uint32 OM_uint32
gss_verify(OM_uint32 *minor_status, gss_verify(OM_uint32 *minor_status,
@@ -37,5 +38,6 @@ gss_verify(OM_uint32 *minor_status,
{ {
return (gss_verify_mic(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));
} }

View File

@@ -26,10 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_verify_mic.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_verify_mic.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
#include "mech_switch.h"
#include "context.h"
OM_uint32 OM_uint32
gss_verify_mic(OM_uint32 *minor_status, gss_verify_mic(OM_uint32 *minor_status,
@@ -39,7 +37,7 @@ gss_verify_mic(OM_uint32 *minor_status,
gss_qop_t *qop_state) gss_qop_t *qop_state)
{ {
struct _gss_context *ctx = (struct _gss_context *) context_handle; 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, return (m->gm_verify_mic(minor_status, ctx->gc_ctx,
message_buffer, token_buffer, qop_state)); message_buffer, token_buffer, qop_state));

View File

@@ -26,10 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_wrap.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_wrap.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
#include "mech_switch.h"
#include "context.h"
OM_uint32 OM_uint32
gss_wrap(OM_uint32 *minor_status, gss_wrap(OM_uint32 *minor_status,
@@ -41,7 +39,7 @@ gss_wrap(OM_uint32 *minor_status,
gss_buffer_t output_message_buffer) gss_buffer_t output_message_buffer)
{ {
struct _gss_context *ctx = (struct _gss_context *) context_handle; 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, return (m->gm_wrap(minor_status, ctx->gc_ctx,
conf_req_flag, qop_req, input_message_buffer, conf_req_flag, qop_req, input_message_buffer,

View File

@@ -26,10 +26,8 @@
* $FreeBSD: src/lib/libgssapi/gss_wrap_size_limit.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/gss_wrap_size_limit.c,v 1.1 2005/12/29 14:40:20 dfr Exp $
*/ */
#include <gssapi/gssapi.h> #include "mech_locl.h"
RCSID("$Id$");
#include "mech_switch.h"
#include "context.h"
OM_uint32 OM_uint32
gss_wrap_size_limit(OM_uint32 *minor_status, 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) OM_uint32 *max_input_size)
{ {
struct _gss_context *ctx = (struct _gss_context *) context_handle; 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, return (m->gm_wrap_size_limit(minor_status, ctx->gc_ctx,
conf_req_flag, qop_req, req_output_size, max_input_size)); conf_req_flag, qop_req, req_output_size, max_input_size));

View File

@@ -24,304 +24,20 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* $FreeBSD: src/lib/libgssapi/mech_switch.h,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/mech_switch.h,v 1.1 2005/12/29 14:40:20 dfr Exp $
* $Id$
*/ */
#include <sys/queue.h> #include <sys/queue.h>
#include <gssapi_mech.h>
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 */
);
struct _gss_mech_switch { struct _gss_mech_switch {
SLIST_ENTRY(_gss_mech_switch) gm_link; SLIST_ENTRY(_gss_mech_switch) gm_link;
gss_OID_desc gm_mech_oid; gss_OID_desc gm_mech_oid;
void *gm_so; void *gm_so;
_gss_acquire_cred_t *gm_acquire_cred; gssapi_mech_interface_desc gm_mech;
_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;
}; };
SLIST_HEAD(_gss_mech_switch_list, _gss_mech_switch); SLIST_HEAD(_gss_mech_switch_list, _gss_mech_switch);
extern struct _gss_mech_switch_list _gss_mechs; extern struct _gss_mech_switch_list _gss_mechs;
extern gss_OID_set _gss_mech_oids; extern gss_OID_set _gss_mech_oids;
extern void _gss_load_mech(void); void _gss_load_mech(void);
extern struct _gss_mech_switch *_gss_find_mech_switch(gss_OID);

View File

@@ -24,13 +24,14 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* $FreeBSD: src/lib/libgssapi/name.h,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $FreeBSD: src/lib/libgssapi/name.h,v 1.1 2005/12/29 14:40:20 dfr Exp $
* $Id$
*/ */
#include <sys/queue.h> #include <sys/queue.h>
struct _gss_mechanism_name { struct _gss_mechanism_name {
SLIST_ENTRY(_gss_mechanism_name) gmn_link; 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_OID gmn_mech_oid; /* mechanism oid for MN */
gss_name_t gmn_name; /* underlying MN */ gss_name_t gmn_name; /* underlying MN */
}; };
@@ -45,4 +46,4 @@ struct _gss_name {
extern struct _gss_mechanism_name * extern struct _gss_mechanism_name *
_gss_find_mn(struct _gss_name *name, gss_OID mech); _gss_find_mn(struct _gss_name *name, gss_OID mech);
struct _gss_name * 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);

View File

@@ -24,9 +24,9 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* $FreeBSD: src/lib/libgssapi/utils.h,v 1.1 2005/12/29 14:40:20 dfr Exp $ * $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_oid(OM_uint32 *, const gss_OID, gss_OID);
extern OM_uint32 _gss_copy_buffer(OM_uint32 *minor_status, extern OM_uint32 _gss_copy_buffer(OM_uint32 *minor_status,
const gss_buffer_t from_buf, gss_buffer_t to_buf); const gss_buffer_t from_buf, gss_buffer_t to_buf);