diff -urN krb5-1.2.7/src/lib/gssapi/Makefile.in krb5-1.2.7-mechglue/src/lib/gssapi/Makefile.in --- krb5-1.2.7/src/lib/gssapi/Makefile.in 2000-06-03 02:09:44.000000000 -0400 +++ krb5-1.2.7-mechglue/src/lib/gssapi/Makefile.in 2003-02-10 16:27:44.000000000 -0500 @@ -2,7 +2,7 @@ myfulldir=lib/gssapi mydir=. BUILDTOP=$(REL)$(U)$(S)$(U) -LOCAL_SUBDIRS= generic krb5 +LOCAL_SUBDIRS= generic krb5 mechglue ##DOSLIBNAME=$(OUTPRE)gssapi.lib ##DOSOBJFILELIST=@$(OUTPRE)generic.lst @$(OUTPRE)krb5.lst @@ -12,7 +12,7 @@ MAC_SUBDIRS = generic krb5 -LOCALINCLUDES = -Igeneric -I$(srcdir)/generic -Ikrb5 -I$(srcdir)/krb5 +LOCALINCLUDES = -Igeneric -I$(srcdir)/generic -Ikrb5 -I$(srcdir)/krb5 -Imechglue -I$(srcdir)/mechglue STLIBOBJS=\ gss_libinit.o @@ -25,7 +25,7 @@ LIB=gssapi_krb5 LIBMAJOR=2 LIBMINOR=2 -STOBJLISTS=OBJS.ST generic/OBJS.ST krb5/OBJS.ST +STOBJLISTS=OBJS.ST generic/OBJS.ST krb5/OBJS.ST mechglue/OBJS.ST SHLIB_EXPDEPS=\ $(TOPLIBD)/libkrb5$(SHLIBEXT) \ $(TOPLIBD)/libk5crypto$(SHLIBEXT) \ diff -urN krb5-1.2.7/src/lib/gssapi/configure krb5-1.2.7-mechglue/src/lib/gssapi/configure --- krb5-1.2.7/src/lib/gssapi/configure 2002-11-15 08:11:15.000000000 -0500 +++ krb5-1.2.7-mechglue/src/lib/gssapi/configure 2003-02-10 17:45:04.000000000 -0500 @@ -2748,6 +2748,13 @@ appendlist=$appendlist:$ac_config_fragdir/$i.in done krb5_output_list="$krb5_output_list $x/Makefile:$krb5_pre_in:$x/Makefile.in$appendlist:$krb5_post_in" +x="mechglue" +appendlist='' +for i in libobj +do + appendlist=$appendlist:$ac_config_fragdir/$i.in +done +krb5_output_list="$krb5_output_list $x/Makefile:$krb5_pre_in:$x/Makefile.in$appendlist:$krb5_post_in" trap '' 1 2 15 cat > confcache <<\EOF # This file is a shell script that caches the results of configure diff -urN krb5-1.2.7/src/lib/gssapi/configure.in krb5-1.2.7-mechglue/src/lib/gssapi/configure.in --- krb5-1.2.7/src/lib/gssapi/configure.in 2000-01-24 15:08:42.000000000 -0500 +++ krb5-1.2.7-mechglue/src/lib/gssapi/configure.in 2003-02-10 16:27:44.000000000 -0500 @@ -17,4 +17,5 @@ K5_GEN_MAKEFILE(., lib libobj) K5_GEN_MAKEFILE(generic, libobj) K5_GEN_MAKEFILE(krb5, libobj) +K5_GEN_MAKEFILE(mechglue, libobj) K5_AC_OUTPUT diff -urN krb5-1.2.7/src/lib/gssapi/krb5/Makefile.in krb5-1.2.7-mechglue/src/lib/gssapi/krb5/Makefile.in --- krb5-1.2.7/src/lib/gssapi/krb5/Makefile.in 1999-10-25 21:48:45.000000000 -0400 +++ krb5-1.2.7-mechglue/src/lib/gssapi/krb5/Makefile.in 2003-02-10 16:25:27.000000000 -0500 @@ -44,7 +44,9 @@ $(srcdir)/inq_names.c \ $(srcdir)/k5seal.c \ $(srcdir)/k5unseal.c \ - $(srcdir)/krb5_gss_glue.c \ + $(srcdir)/krb5_gss_mechglue.c \ + $(srcdir)/krb5mech.c \ + $(srcdir)/pname_to_uid.c \ $(srcdir)/process_context_token.c \ $(srcdir)/rel_cred.c \ $(srcdir)/rel_oid.c \ @@ -64,9 +66,6 @@ $(srcdir)/wrap_size_limit.c \ gssapi_err_krb5.c -# $(srcdir)/pname_to_uid.c \ -# $(srcdir)/k5mech.c - OBJS = \ $(OUTPRE)accept_sec_context.$(OBJEXT) \ $(OUTPRE)acquire_cred.$(OBJEXT) \ @@ -92,7 +91,9 @@ $(OUTPRE)inq_names.$(OBJEXT) \ $(OUTPRE)k5seal.$(OBJEXT) \ $(OUTPRE)k5unseal.$(OBJEXT) \ - $(OUTPRE)krb5_gss_glue.$(OBJEXT) \ + $(OUTPRE)krb5_gss_mechglue.$(OBJEXT) \ + $(OUTPRE)krb5mech.$(OBJEXT) \ + $(OUTPRE)pname_to_uid.$(OBJEXT) \ $(OUTPRE)process_context_token.$(OBJEXT) \ $(OUTPRE)rel_cred.$(OBJEXT) \ $(OUTPRE)rel_oid.$(OBJEXT) \ @@ -112,9 +113,6 @@ $(OUTPRE)wrap_size_limit.$(OBJEXT) \ $(OUTPRE)gssapi_err_krb5.$(OBJEXT) -# k5mech.$(OBJEXT) \ -# pname_to_uid.$(OBJEXT) - STLIBOBJS = \ accept_sec_context.o \ acquire_cred.o \ @@ -140,7 +138,9 @@ inq_names.o \ k5seal.o \ k5unseal.o \ - krb5_gss_glue.o \ + krb5_gss_mechglue.o \ + krb5mech.o \ + pname_to_uid.o \ process_context_token.o \ rel_cred.o \ rel_oid.o \ @@ -160,9 +160,6 @@ wrap_size_limit.o \ gssapi_err_krb5.o -# k5mech.o \ -# pname_to_uid.o - HDRS= $(ETHDRS) EHDRDIR=$(BUILDTOP)$(S)include$(S)gssapi diff -urN krb5-1.2.7/src/lib/gssapi/krb5/krb5_gss_mechglue.c krb5-1.2.7-mechglue/src/lib/gssapi/krb5/krb5_gss_mechglue.c --- krb5-1.2.7/src/lib/gssapi/krb5/krb5_gss_mechglue.c 1969-12-31 19:00:00.000000000 -0500 +++ krb5-1.2.7-mechglue/src/lib/gssapi/krb5/krb5_gss_mechglue.c 2003-02-10 16:25:27.000000000 -0500 @@ -0,0 +1,546 @@ +/* ANDROS : derived from the 'real' krb5_gss_glue.c + * + * routines to map from mechglue gss_mechanism prototypes to + * krb5_gss_XXX routines. + * + * NOTE: GSS_WRAP is not included in mechglue/mglueP.h + */ + +#include "gssapiP_krb5.h" + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_accept_sec_context(context, + minor_status, context_handle, verifier_cred_handle, + input_token, input_chan_bindings, src_name, mech_type, + output_token, ret_flags, time_rec, delegated_cred_handle) + void *context; + OM_uint32 FAR *minor_status; + gss_ctx_id_t FAR *context_handle; + gss_cred_id_t verifier_cred_handle; + gss_buffer_t input_token; + gss_channel_bindings_t input_chan_bindings; + gss_name_t FAR *src_name; + gss_OID FAR *mech_type; + gss_buffer_t output_token; + OM_uint32 FAR *ret_flags; + OM_uint32 FAR *time_rec; + gss_cred_id_t FAR *delegated_cred_handle; +{ + return(krb5_gss_accept_sec_context(minor_status, + context_handle, + verifier_cred_handle, + input_token, + input_chan_bindings, + src_name, + mech_type, + output_token, + ret_flags, + time_rec, + delegated_cred_handle)); +} + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_acquire_cred(context, + minor_status, desired_name, time_req, desired_mechs, cred_usage, + output_cred_handle, actual_mechs, time_rec) + void *context; + OM_uint32 FAR *minor_status; + gss_name_t desired_name; + OM_uint32 time_req; + gss_OID_set desired_mechs; + gss_cred_usage_t cred_usage; + gss_cred_id_t FAR *output_cred_handle; + gss_OID_set FAR *actual_mechs; + OM_uint32 FAR *time_rec; +{ + return(krb5_gss_acquire_cred(minor_status, + desired_name, + time_req, + desired_mechs, + cred_usage, + output_cred_handle, + actual_mechs, + time_rec)); +} + +/* V2 */ +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_add_cred(context, + minor_status, input_cred_handle, desired_name, desired_mech, + cred_usage, initiator_time_req, acceptor_time_req, + output_cred_handle, actual_mechs, initiator_time_rec, + acceptor_time_rec) + void *context; + OM_uint32 FAR *minor_status; + gss_cred_id_t input_cred_handle; + gss_name_t desired_name; + gss_OID desired_mech; + gss_cred_usage_t cred_usage; + OM_uint32 initiator_time_req; + OM_uint32 acceptor_time_req; + gss_cred_id_t FAR *output_cred_handle; + gss_OID_set FAR *actual_mechs; + OM_uint32 FAR *initiator_time_rec; + OM_uint32 FAR *acceptor_time_rec; +{ + return(krb5_gss_add_cred(minor_status, input_cred_handle, desired_name, + desired_mech, cred_usage, initiator_time_req, + acceptor_time_req, output_cred_handle, + actual_mechs, initiator_time_rec, + acceptor_time_rec)); +} + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_compare_name(context,minor_status, name1, name2, name_equal) + void *context; + OM_uint32 FAR *minor_status; + gss_name_t name1; + gss_name_t name2; + int FAR *name_equal; +{ + return(krb5_gss_compare_name(minor_status, name1, + name2, name_equal)); +} + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_context_time(context,minor_status, context_handle, time_rec) + void *context; + OM_uint32 FAR *minor_status; + gss_ctx_id_t context_handle; + OM_uint32 FAR *time_rec; +{ + return(krb5_gss_context_time(minor_status, context_handle, + time_rec)); +} + + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_delete_sec_context(context, + minor_status, context_handle, output_token) + void *context; + OM_uint32 FAR *minor_status; + gss_ctx_id_t FAR *context_handle; + gss_buffer_t output_token; +{ + return(krb5_gss_delete_sec_context(minor_status, + context_handle, output_token)); +} + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_display_name(context, + minor_status, input_name, output_name_buffer, output_name_type) + void *context; + OM_uint32 FAR *minor_status; + gss_name_t input_name; + gss_buffer_t output_name_buffer; + gss_OID FAR *output_name_type; +{ + return(krb5_gss_display_name(minor_status, input_name, + output_name_buffer, output_name_type)); +} + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_display_status(context,minor_status, status_value, status_type, + mech_type, message_context, status_string) + void *context; + OM_uint32 FAR *minor_status; + OM_uint32 status_value; + int status_type; + gss_OID mech_type; + OM_uint32 FAR *message_context; + gss_buffer_t status_string; +{ + return(krb5_gss_display_status(minor_status, status_value, + status_type, mech_type, message_context, + status_string)); +} + +/* V2 */ +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_export_sec_context(context, + minor_status, context_handle, interprocess_token) + void *context; + OM_uint32 FAR *minor_status; + gss_ctx_id_t FAR *context_handle; + gss_buffer_t interprocess_token; +{ + return(krb5_gss_export_sec_context(minor_status, + context_handle, + interprocess_token)); +} + + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_import_name(context, + minor_status, input_name_buffer, input_name_type, output_name) + void *context; + OM_uint32 FAR *minor_status; + gss_buffer_t input_name_buffer; + gss_OID input_name_type; + gss_name_t FAR *output_name; +{ + return(krb5_gss_import_name(minor_status, input_name_buffer, + input_name_type, output_name)); +} + +/* V2 */ +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_import_sec_context(context, + minor_status, interprocess_token, context_handle) + void *context; + OM_uint32 FAR *minor_status; + gss_buffer_t interprocess_token; + gss_ctx_id_t FAR *context_handle; +{ + return(krb5_gss_import_sec_context(minor_status, + interprocess_token, + context_handle)); +} + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_indicate_mechs(context,minor_status, mech_set) + void *context; + OM_uint32 FAR *minor_status; + gss_OID_set FAR *mech_set; +{ + return(krb5_gss_indicate_mechs(minor_status, mech_set)); +} + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_init_sec_context(context, + minor_status, claimant_cred_handle, context_handle, + target_name, mech_type, req_flags, time_req, + input_chan_bindings, input_token, actual_mech_type, + output_token, ret_flags, time_rec) + void *context; + OM_uint32 FAR *minor_status; + gss_cred_id_t claimant_cred_handle; + gss_ctx_id_t FAR *context_handle; + gss_name_t target_name; + gss_OID mech_type; + OM_uint32 req_flags; + OM_uint32 time_req; + gss_channel_bindings_t input_chan_bindings; + gss_buffer_t input_token; + gss_OID FAR *actual_mech_type; + gss_buffer_t output_token; + OM_uint32 FAR *ret_flags; + OM_uint32 FAR *time_rec; +{ + return(krb5_gss_init_sec_context(minor_status, + claimant_cred_handle, context_handle, + target_name, mech_type, req_flags, + time_req, input_chan_bindings, input_token, + actual_mech_type, output_token, ret_flags, + time_rec)); +} + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_inquire_context(context, + minor_status, context_handle, initiator_name, acceptor_name, + lifetime_rec, mech_type, ret_flags, + locally_initiated, open) + void *context; + OM_uint32 FAR *minor_status; + gss_ctx_id_t context_handle; + gss_name_t FAR *initiator_name; + gss_name_t FAR *acceptor_name; + OM_uint32 FAR *lifetime_rec; + gss_OID FAR *mech_type; + OM_uint32 FAR *ret_flags; + int FAR *locally_initiated; + int FAR *open; +{ + return(krb5_gss_inquire_context(minor_status, context_handle, + initiator_name, acceptor_name, lifetime_rec, + mech_type, ret_flags, locally_initiated, + open)); +} + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_inquire_cred(context, + minor_status, cred_handle, name, lifetime_ret, + cred_usage, mechanisms) + void *context; + OM_uint32 FAR *minor_status; + gss_cred_id_t cred_handle; + gss_name_t FAR *name; + OM_uint32 FAR *lifetime_ret; + gss_cred_usage_t FAR *cred_usage; + gss_OID_set FAR *mechanisms; +{ + return(krb5_gss_inquire_cred(minor_status, cred_handle, + name, lifetime_ret, cred_usage, mechanisms)); +} + +/* V2 */ +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_inquire_cred_by_mech(context, + minor_status, cred_handle, mech_type, name, + initiator_lifetime, acceptor_lifetime, cred_usage) + void *context; + OM_uint32 FAR *minor_status; + gss_cred_id_t cred_handle; + gss_OID mech_type; + gss_name_t FAR *name; + OM_uint32 FAR *initiator_lifetime; + OM_uint32 FAR *acceptor_lifetime; + gss_cred_usage_t FAR *cred_usage; +{ + return(krb5_gss_inquire_cred_by_mech(minor_status, cred_handle, + mech_type, name, initiator_lifetime, + acceptor_lifetime, cred_usage)); +} + +/* V2 */ +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_inquire_names_for_mech(context,minor_status, mechanism, name_types) + void *context; + OM_uint32 FAR *minor_status; + gss_OID mechanism; + gss_OID_set FAR *name_types; +{ + return(krb5_gss_inquire_names_for_mech(minor_status, + mechanism, + name_types)); +} + +/* V2 */ +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_oid_to_str(minor_status, oid, oid_str) + OM_uint32 FAR *minor_status; + gss_OID oid; + gss_buffer_t oid_str; +{ + return(generic_gss_oid_to_str(minor_status, oid, oid_str)); +} + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_process_context_token(context, + minor_status, context_handle, token_buffer) + void *context; + OM_uint32 FAR *minor_status; + gss_ctx_id_t context_handle; + gss_buffer_t token_buffer; +{ + return(krb5_gss_process_context_token(minor_status, + context_handle, token_buffer)); +} + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_release_cred(context,minor_status, cred_handle) + void *context; + OM_uint32 FAR *minor_status; + gss_cred_id_t FAR *cred_handle; +{ + return(krb5_gss_release_cred(minor_status, cred_handle)); +} + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_release_name(context,minor_status, input_name) + void *context; + OM_uint32 FAR *minor_status; + gss_name_t FAR *input_name; +{ + return(krb5_gss_release_name(minor_status, input_name)); +} + + +/* ANDROS added this function */ +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_internal_release_oid(context,minor_status, oid) + void *context; + OM_uint32 FAR *minor_status; + gss_OID FAR *oid; +{ + return(krb5_gss_release_oid(minor_status, oid)); +} + +/* V2 */ +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_release_oid(context,minor_status, oid) + void *context; + OM_uint32 FAR *minor_status; + gss_OID FAR *oid; +{ + return(krb5_gss_release_oid(minor_status, oid)); +} + +/* V1 only */ +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_seal(context,minor_status, context_handle, conf_req_flag, qop_req, + input_message_buffer, conf_state, output_message_buffer) + void *context; + OM_uint32 FAR *minor_status; + gss_ctx_id_t context_handle; + int conf_req_flag; + int qop_req; + gss_buffer_t input_message_buffer; + int FAR *conf_state; + gss_buffer_t output_message_buffer; +{ + return(krb5_gss_seal(minor_status, context_handle, + conf_req_flag, qop_req, input_message_buffer, + conf_state, output_message_buffer)); +} + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_sign(context,minor_status, context_handle, + qop_req, message_buffer, + message_token) + void *context; + OM_uint32 FAR *minor_status; + gss_ctx_id_t context_handle; + int qop_req; + gss_buffer_t message_buffer; + gss_buffer_t message_token; +{ + return(krb5_gss_sign(minor_status, context_handle, + qop_req, message_buffer, message_token)); +} + +/* V2 */ +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_verify_mic(context,minor_status, context_handle, + message_buffer, token_buffer, qop_state) + void *context; + OM_uint32 FAR *minor_status; + gss_ctx_id_t context_handle; + gss_buffer_t message_buffer; + gss_buffer_t token_buffer; + gss_qop_t FAR *qop_state; +{ + return(krb5_gss_verify_mic(minor_status, context_handle, + message_buffer, token_buffer, qop_state)); +} + +/* V2 */ +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_wrap(context, + minor_status, context_handle, conf_req_flag, qop_req, + input_message_buffer, conf_state, output_message_buffer) + void *context; + OM_uint32 FAR *minor_status; + gss_ctx_id_t context_handle; + int conf_req_flag; + gss_qop_t qop_req; + gss_buffer_t input_message_buffer; + int FAR *conf_state; + gss_buffer_t output_message_buffer; +{ + return(krb5_gss_wrap(minor_status, context_handle, conf_req_flag, qop_req, + input_message_buffer, conf_state, + output_message_buffer)); +} + +/* V2 */ +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_str_to_oid(minor_status, oid_str, oid) + OM_uint32 FAR *minor_status; + gss_buffer_t oid_str; + gss_OID FAR *oid; +{ + return(generic_gss_str_to_oid(minor_status, oid_str, oid)); +} + +/* V2 */ +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_test_oid_set_member(minor_status, member, set, present) + OM_uint32 FAR *minor_status; + gss_OID member; + gss_OID_set set; + int FAR *present; +{ + return(generic_gss_test_oid_set_member(minor_status, member, set, + present)); +} + +/* V1 only */ +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_unseal(context,minor_status, context_handle, input_message_buffer, + output_message_buffer, conf_state, qop_state) + void *context; + OM_uint32 FAR *minor_status; + gss_ctx_id_t context_handle; + gss_buffer_t input_message_buffer; + gss_buffer_t output_message_buffer; + int FAR *conf_state; + int FAR *qop_state; +{ + return(krb5_gss_unseal(minor_status, context_handle, + input_message_buffer, output_message_buffer, + conf_state, qop_state)); +} + +/* V2 */ +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_unwrap(context,minor_status, context_handle, + input_message_buffer, output_message_buffer, conf_state, qop_state) + void *context; + OM_uint32 FAR *minor_status; + gss_ctx_id_t context_handle; + gss_buffer_t input_message_buffer; + gss_buffer_t output_message_buffer; + int FAR *conf_state; + gss_qop_t FAR *qop_state; +{ + return(krb5_gss_unwrap(minor_status, context_handle, input_message_buffer, + output_message_buffer, conf_state, qop_state)); +} + +/* V1 only */ +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_verify(context,minor_status, context_handle, message_buffer, + token_buffer, qop_state) + void *context; + OM_uint32 FAR *minor_status; + gss_ctx_id_t context_handle; + gss_buffer_t message_buffer; + gss_buffer_t token_buffer; + int FAR *qop_state; +{ + return(krb5_gss_verify(minor_status, + context_handle, + message_buffer, + token_buffer, + qop_state)); +} + +/* V2 interface */ +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_wrap_size_limit(context, + minor_status, context_handle, conf_req_flag, + qop_req, req_output_size, max_input_size) + void *context; + OM_uint32 FAR *minor_status; + gss_ctx_id_t context_handle; + int conf_req_flag; + gss_qop_t qop_req; + OM_uint32 req_output_size; + OM_uint32 FAR *max_input_size; +{ + return(krb5_gss_wrap_size_limit(minor_status, context_handle, + conf_req_flag, qop_req, + req_output_size, max_input_size)); +} + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_pname_to_uid(context,pname,name_oid,mech_oid,uid) + void * context; /* context */ + char *pname; /* principal name */ + gss_OID name_oid; /* name_type */ + gss_OID mech_oid; /* mech_type */ + uid_t *uid; /* uid (OUT) */ +{ + return(krb5_pname_to_uid(context, pname, name_oid, mech_oid, uid)); +} + +GSS_DLLIMP OM_uint32 KRB5_CALLCONV +krb5_mech_gss_duplicate_name(context,minor_status, input_name, dest_name) + void * context; /* context */ + OM_uint32 *minor_status; + const gss_name_t input_name; + gss_name_t *dest_name; +{ + return krb5_gss_duplicate_name(minor_status, input_name, dest_name); +} diff -urN krb5-1.2.7/src/lib/gssapi/krb5/krb5mech.c krb5-1.2.7-mechglue/src/lib/gssapi/krb5/krb5mech.c --- krb5-1.2.7/src/lib/gssapi/krb5/krb5mech.c 1969-12-31 19:00:00.000000000 -0500 +++ krb5-1.2.7-mechglue/src/lib/gssapi/krb5/krb5mech.c 2003-02-10 16:25:27.000000000 -0500 @@ -0,0 +1,86 @@ +#include "../mechglue/mglueP.h" +#include "gssapiP_krb5.h" +#include "krb5mech.h" + +/* + * This is the declaration of the mechs_array table for Kerberos V5. + * If the gss_mechanism structure changes, so should this array! I + * told you it was a private interface! + * NOTE: this was the origional mechanism - + * {{5,"\053\005\001\005\002"}, + */ + +static struct gss_config krb5_mech_mechanism = + {{9, "\052\206\110\206\367\022\001\002\002"}, + 0, /* context, to be filled */ + krb5_mech_gss_acquire_cred, + krb5_mech_gss_release_cred, + krb5_mech_gss_init_sec_context, + krb5_mech_gss_accept_sec_context, + krb5_mech_gss_process_context_token, + krb5_mech_gss_delete_sec_context, + krb5_mech_gss_context_time, + krb5_mech_gss_sign, + krb5_mech_gss_verify, + krb5_mech_gss_seal, + krb5_mech_gss_unseal, + krb5_mech_gss_display_status, + krb5_mech_gss_indicate_mechs, + krb5_mech_gss_compare_name, + krb5_mech_gss_display_name, + krb5_mech_gss_import_name, + krb5_mech_gss_release_name, + krb5_mech_gss_inquire_cred, + krb5_mech_gss_add_cred, + krb5_mech_gss_export_sec_context, + krb5_mech_gss_import_sec_context, + krb5_mech_gss_inquire_cred_by_mech, + krb5_mech_gss_inquire_names_for_mech, + krb5_mech_gss_inquire_context, + krb5_mech_gss_internal_release_oid, + krb5_mech_gss_wrap_size_limit, + krb5_mech_pname_to_uid, + krb5_mech_gss_duplicate_name, +}; + + +#if 0 +OM_uint32 +krb5_mech_gss_get_context(void ** context) +{ + if (context == NULL) + return GSS_S_FAILURE; + if (kg_context) { + *context = kg_context; + return (GSS_S_COMPLETE); + } + if (krb5_mech_init_context(&kg_context)) + return GSS_S_FAILURE; + if (krb5_mech_ser_context_init(kg_context) || + krb5_mech_ser_auth_context_init(kg_context) || + krb5_mech_ser_ccache_init(kg_context) || + krb5_mech_ser_rcache_init(kg_context) || + krb5_mech_ser_keytab_init(kg_context) || + kg_ser_context_init(kg_context)) { + krb5_mech_free_context(kg_context); + kg_context = 0; + return (GSS_S_FAILURE); + } + *context = kg_context; + return GSS_S_COMPLETE; +} + +gss_mechanism +krb5_mech_gss_initialize() +{ + + kg_get_context(&(krb5_mech_mechanism.context)); + return (&krb5_mech_mechanism); +} +#endif /*0*/ +/* krb5 code doesn't use the gss_mechanism context */ +gss_mechanism +krb5_gss_initialize() +{ + return (&krb5_mech_mechanism); +} diff -urN krb5-1.2.7/src/lib/gssapi/krb5/krb5mech.h krb5-1.2.7-mechglue/src/lib/gssapi/krb5/krb5mech.h --- krb5-1.2.7/src/lib/gssapi/krb5/krb5mech.h 1969-12-31 19:00:00.000000000 -0500 +++ krb5-1.2.7-mechglue/src/lib/gssapi/krb5/krb5mech.h 2003-02-10 16:25:27.000000000 -0500 @@ -0,0 +1,351 @@ +#ifndef _GSSAPI_KRB5_MECH_H_ +#define _GSSAPI_KRB5_MECH_H_ + +OM_uint32 +krb5_mech_gss_accept_sec_context( + void *context, + OM_uint32 FAR *minor_status, + gss_ctx_id_t FAR *context_handle, + gss_cred_id_t verifier_cred_handle, + gss_buffer_t input_token, + gss_channel_bindings_t input_chan_bindings, + gss_name_t FAR *src_name, + gss_OID FAR *mech_type, + gss_buffer_t output_token, + OM_uint32 FAR *ret_flags, + OM_uint32 FAR *time_rec, + gss_cred_id_t FAR *delegated_cred_handle +); + +OM_uint32 +krb5_mech_gss_acquire_cred( + void *context, + OM_uint32 FAR *minor_status, + gss_name_t desired_name, + OM_uint32 time_req, + gss_OID_set desired_mechs, + gss_cred_usage_t cred_usage, + gss_cred_id_t FAR *output_cred_handle, + gss_OID_set FAR *actual_mechs, + OM_uint32 FAR *time_rec +); + +OM_uint32 +krb5_mech_gss_add_cred( + void *context, + OM_uint32 FAR *minor_status, + gss_cred_id_t input_cred_handle, + gss_name_t desired_name, + gss_OID desired_mech, + gss_cred_usage_t cred_usage, + OM_uint32 initiator_time_req, + OM_uint32 acceptor_time_req, + gss_cred_id_t FAR *output_cred_handle, + gss_OID_set FAR *actual_mechs, + OM_uint32 FAR *initiator_time_rec, + OM_uint32 FAR *acceptor_time_rec +); + +OM_uint32 +krb5_mech_gss_compare_name( + void *context, + OM_uint32 FAR *minor_status, + gss_name_t name1, + gss_name_t name2, + int FAR *name_equal +); + +OM_uint32 +krb5_mech_gss_context_time( + void *context, + OM_uint32 FAR *minor_status, + gss_ctx_id_t context_handle, + OM_uint32 FAR *time_rec +); + +OM_uint32 +krb5_mech_gss_delete_sec_context ( + void *context, + OM_uint32 FAR *minor_status, + gss_ctx_id_t FAR *context_handle, + gss_buffer_t output_token +); + +OM_uint32 +krb5_mech_gss_display_name ( + void *context, + OM_uint32 FAR *minor_status, + gss_name_t input_name, + gss_buffer_t output_name_buffer, + gss_OID FAR *output_name_type +); + +OM_uint32 +krb5_mech_gss_display_status ( + void *context, + OM_uint32 FAR *minor_status, + OM_uint32 status_value, + int status_type, + gss_OID mech_type, + OM_uint32 FAR *message_context, + gss_buffer_t status_string +); + +OM_uint32 +krb5_mech_gss_export_sec_context ( + void *context, + OM_uint32 FAR *minor_status, + gss_ctx_id_t FAR *context_handle, + gss_buffer_t interprocess_token +); + +OM_uint32 +krb5_mech_gss_import_name ( + void *context, + OM_uint32 FAR *minor_status, + gss_buffer_t input_name_buffer, + gss_OID input_name_type, + gss_name_t FAR *output_name +); + +OM_uint32 +krb5_mech_gss_import_sec_context( + void *context, + OM_uint32 FAR *minor_status, + gss_buffer_t interprocess_token, + gss_ctx_id_t FAR *context_handle +); + +OM_uint32 +krb5_mech_gss_indicate_mechs( + void *context, + OM_uint32 FAR *minor_status, + gss_OID_set FAR *mech_set +); + +OM_uint32 +krb5_mech_gss_init_sec_context( + void *context, + OM_uint32 FAR *minor_status, + gss_cred_id_t claimant_cred_handle, + gss_ctx_id_t FAR *context_handle, + gss_name_t target_name, + gss_OID mech_type, + OM_uint32 req_flags, + OM_uint32 time_req, + gss_channel_bindings_t input_chan_bindings, + gss_buffer_t input_token, + gss_OID FAR *actual_mech_type, + gss_buffer_t output_token, + OM_uint32 FAR *ret_flags, + OM_uint32 FAR *time_rec +); + +OM_uint32 +krb5_mech_gss_inquire_context( + void *context, + OM_uint32 FAR *minor_status, + gss_ctx_id_t context_handle, + gss_name_t FAR *initiator_name, + gss_name_t FAR *acceptor_name, + OM_uint32 FAR *lifetime_rec, + gss_OID FAR *mech_type, + OM_uint32 FAR *ret_flags, + int FAR *locally_initiated, + int FAR *open +); + +OM_uint32 +krb5_mech_gss_inquire_cred( + void *context, + OM_uint32 FAR *minor_status, + gss_cred_id_t cred_handle, + gss_name_t FAR *name, + OM_uint32 FAR *lifetime_ret, + gss_cred_usage_t FAR *cred_usage, + gss_OID_set FAR *mechanisms +); + +OM_uint32 +krb5_mech_gss_inquire_cred_by_mech( + void *context, + OM_uint32 FAR *minor_status, + gss_cred_id_t cred_handle, + gss_OID mech_type, + gss_name_t FAR *name, + OM_uint32 FAR *initiator_lifetime, + OM_uint32 FAR *acceptor_lifetime, + gss_cred_usage_t FAR *cred_usage +); + +OM_uint32 +krb5_mech_gss_inquire_names_for_mech( + void *context, + OM_uint32 FAR *minor_status, + gss_OID mechanism, + gss_OID_set FAR *name_types +); + +OM_uint32 +krb5_mech_gss_oid_to_str( + OM_uint32 FAR *minor_status, + gss_OID oid, + gss_buffer_t oid_str +); + +OM_uint32 +krb5_mech_gss_process_context_token( + void *context, + OM_uint32 FAR *minor_status, + gss_ctx_id_t context_handle, + gss_buffer_t token_buffer +); + +OM_uint32 +krb5_mech_gss_release_name( + void *context, + OM_uint32 FAR *minor_status, + gss_name_t FAR *input_name +); + +/* ANDROS added this function */ +OM_uint32 +krb5_mech_gss_internal_release_oid( + void *context, + OM_uint32 FAR *minor_status, + gss_OID FAR *oid +); + +OM_uint32 +krb5_mech_gss_release_oid( + void *context, + OM_uint32 FAR *minor_status, + gss_OID FAR *oid +); + +OM_uint32 +krb5_mech_gss_seal( + void *context, + OM_uint32 FAR *minor_status, + gss_ctx_id_t context_handle, + int conf_req_flag, + int qop_req, + gss_buffer_t input_message_buffer, + int FAR *conf_state, + gss_buffer_t output_message_buffer +); + +OM_uint32 +krb5_mech_gss_sign( + void *context, + OM_uint32 FAR *minor_status, + gss_ctx_id_t context_handle, + int qop_req, + gss_buffer_t message_buffer, + gss_buffer_t message_token +); + +OM_uint32 +krb5_mech_gss_verify_mic( + void *context, + OM_uint32 FAR *minor_status, + gss_ctx_id_t context_handle, + gss_buffer_t message_buffer, + gss_buffer_t token_buffer, + gss_qop_t FAR *qop_state +); + +OM_uint32 +krb5_mech_gss_wrap( + void *context, + OM_uint32 FAR *minor_status, + gss_ctx_id_t context_handle, + int conf_req_flag, + gss_qop_t qop_req, + gss_buffer_t input_message_buffer, + int FAR *conf_state, + gss_buffer_t output_message_buffer +); + +OM_uint32 +krb5_mech_gss_str_to_oid( + OM_uint32 FAR *minor_status, + gss_buffer_t oid_str, + gss_OID FAR *oid +); + +OM_uint32 +krb5_mech_gss_test_oid_set_member( + OM_uint32 FAR *minor_status, + gss_OID member, + gss_OID_set set, + int FAR *present +); + +OM_uint32 +krb5_mech_gss_unseal( + void *context, + OM_uint32 FAR *minor_status, + gss_ctx_id_t context_handle, + gss_buffer_t input_message_buffer, + gss_buffer_t output_message_buffer, + int FAR *conf_state, + int FAR *qop_state +); + +OM_uint32 +krb5_mech_gss_unwrap( + OM_uint32 FAR *minor_status, + gss_ctx_id_t context_handle, + gss_buffer_t input_message_buffer, + gss_buffer_t output_message_buffer, + int FAR *conf_state, + gss_qop_t FAR *qop_state +); + +OM_uint32 +krb5_mech_gss_verify( + void *context, + OM_uint32 FAR *minor_status, + gss_ctx_id_t context_handle, + gss_buffer_t message_buffer, + gss_buffer_t token_buffer, + int FAR *qop_state +); + +OM_uint32 +krb5_mech_gss_wrap_size_limit( + void *context, + OM_uint32 FAR *minor_status, + gss_ctx_id_t context_handle, + int conf_req_flag, + gss_qop_t qop_req, + OM_uint32 req_output_size, + OM_uint32 FAR *max_input_size +); + +OM_uint32 +krb5_mech_gss_release_cred( + void *context, + OM_uint32 FAR *minor_status, + gss_cred_id_t FAR *cred_handle +); + +OM_uint32 +krb5_mech_pname_to_uid( + void *, /* context */ + char *, /* principal name */ + gss_OID, /* name_type */ + gss_OID, /* mech_type */ + uid_t * /* uid (OUT) */ +); + +OM_uint32 +krb5_mech_gss_duplicate_name( + void *, /* context */ + OM_uint32 *, /* minor_status */ + const gss_name_t, /* input_name */ + gss_name_t * /* dest_name */ +); + +#endif /* _GSSAPI_KRB5_MECH_H_ */ Binary files krb5-1.2.7/src/lib/gssapi/libgssapi_krb5.a and krb5-1.2.7-mechglue/src/lib/gssapi/libgssapi_krb5.a differ diff -urN krb5-1.2.7/src/lib/gssapi/mechglue/Makefile.in krb5-1.2.7-mechglue/src/lib/gssapi/mechglue/Makefile.in --- krb5-1.2.7/src/lib/gssapi/mechglue/Makefile.in 1999-10-25 21:48:46.000000000 -0400 +++ krb5-1.2.7-mechglue/src/lib/gssapi/mechglue/Makefile.in 2003-02-10 18:35:46.000000000 -0500 @@ -1,23 +1,13 @@ -thisconfigdir=. +thisconfigdir=./.. myfulldir=lib/gssapi/mechglue -mydir=. +mydir=mechglue BUILDTOP=$(REL)$(U)$(S)$(U)$(S)$(U) LOCALINCLUDES = -I. -I$(srcdir) ##DOSBUILDTOP = ..\..\.. -##DOSLIBNAME=..\$(OUTPRE)gssapi.$(LIBEXT) ##DOS##DLL_EXP_TYPE=GSS -LIBDONE=DONE -LIB_SUBDIRS=. -DEPLIBS= -SHLIB_LDFLAGS= $(LDFLAGS) @SHLIB_RPATH_DIRS@ \ - $(LD_UNRESOLVED_PREFIX)krb5_gss_initialize - - -SHLIB_LIBDIRS= @SHLIB_LIBDIRS@ - SRCS = $(srcdir)/g_acquire_cred.c \ $(srcdir)/g_rel_cred.c \ $(srcdir)/g_init_sec_context.c \ @@ -34,6 +24,7 @@ $(srcdir)/g_dsp_status.c \ $(srcdir)/g_indicate_mechs.c \ $(srcdir)/g_compare_name.c \ + $(srcdir)/g_dup_name.c \ $(srcdir)/g_dsp_name.c \ $(srcdir)/g_imp_name.c \ $(srcdir)/g_rel_name.c \ @@ -66,6 +57,7 @@ $(OUTPRE)g_dsp_status.$(OBJEXT) \ $(OUTPRE)g_indicate_mechs.$(OBJEXT) \ $(OUTPRE)g_compare_name.$(OBJEXT) \ + $(OUTPRE)g_dup_name.$(OBJEXT) \ $(OUTPRE)g_dsp_name.$(OBJEXT) \ $(OUTPRE)g_imp_name.$(OBJEXT) \ $(OUTPRE)g_rel_name.$(OBJEXT) \ @@ -82,40 +74,71 @@ $(OUTPRE)oid_ops.$(OBJEXT) \ $(OUTPRE)g_mechname.$(OBJEXT) +STLIBOBJS = \ + g_accept_sec_context.o \ + g_acquire_cred.o \ + g_compare_name.o \ + g_context_time.o \ + g_delete_sec_context.o \ + g_dup_name.o \ + g_dsp_name.o \ + g_dsp_status.o \ + gen_oids.o \ + g_exp_sec_context.o \ + g_glue.o \ + g_imp_name.o \ + g_imp_sec_context.o \ + g_indicate_mechs.o \ + g_initialize.o \ + g_init_sec_context.o \ + g_inq_context.o \ + g_inq_cred.o \ + g_inq_names.o \ + g_mechname.o \ + g_oid_ops.o \ + g_process_context.o \ + g_rel_buffer.o \ + g_rel_cred.o \ + g_rel_name.o \ + g_rel_oid_set.o \ + g_seal.o \ + g_sign.o \ + gssd_pname_to_uid.o \ + g_unseal.o \ + g_verify.o \ + oid_ops.o + EHDRDIR= $(BUILDTOP)$(S)include$(S)gssapi EXPORTED_HEADERS = mechglue.h -@SHARED_RULE@ +HDRS= $(EHDRDIR)$(S)mechglue.h -all:: all-$(WHAT) +##DOS##LIBOBJS = $(OBJS) -all-unix:: shared includes $(OBJS) +GSSAPI_MECHGLUE_HDR=$(EHDRDIR)$(S)mechglue.h -all-mac:: shared includes $(OBJS) +all-windows:: $(EHDRDIR) $(GSSAPI_KRB5_HDR) $(SRCS) $(HDRS) -all-windows:: includes $(OBJS) - if not exist $(EHDRDIR)\nul mkdir $(EHDRDIR) - copy mechglue.h $(EHDRDIR) +##DOS##$(EHDRDIR): +##DOS## mkdir $(EHDRDIR) -shared: - mkdir shared +$(GSSAPI_MECHGLUE_HDR): mechglue.h + $(CP) mechglue.h $@ -unixmac: +all-unix:: $(SRCS) $(HDRS) includes +all-unix:: all-libobjs -libgssapi.$(STEXT): $(OBJS) - $(RM) $@ - $(ARADD) $@ $(OBJS) - $(RANLIB) $@ - - -#libgssapi.$(LIBEXT): $(OBJS) -# $(ARCHIVE) $@ $(OBJS) -# $(RANLIB) $@ - -clean:: clean-$(WHAT) +includes:: mechglue.h + if cmp $(srcdir)/mechglue.h \ + $(EHDRDIR)$(S)mechglue.h >/dev/null 2>&1; then :; \ + else \ + (set -x; $(RM) $(EHDRDIR)$(S)mechglue.h; \ + $(CP) $(srcdir)/mechglue.h \ + $(EHDRDIR)$(S)mechglue.h) ; \ + fi clean-unix:: - $(RM) shared/* + $(RM) $(EHDRDIR)$(S)mechglue.h clean-mac:: $(RM) shared/* diff -urN krb5-1.2.7/src/lib/gssapi/mechglue/g_accept_sec_context.c krb5-1.2.7-mechglue/src/lib/gssapi/mechglue/g_accept_sec_context.c --- krb5-1.2.7/src/lib/gssapi/mechglue/g_accept_sec_context.c 1997-02-05 21:23:33.000000000 -0500 +++ krb5-1.2.7-mechglue/src/lib/gssapi/mechglue/g_accept_sec_context.c 2003-02-10 16:25:27.000000000 -0500 @@ -165,8 +165,15 @@ * First call the mechanism specific display_name() * then call gss_import_name() to create * the union name struct cast to src_name + * + * NB: src_name is never null, it is a ptr from the + * gss_accept_sec_context caller. internal_name may + * or may not be set by the mechanism. so, don't + * call __gss_convert_name_to_union_name which sets + * the src_name unless the internal name is set + * by the above mech->gss_accept_sec_context. */ - if (src_name != NULL && status == GSS_S_COMPLETE) { + if (internal_name != NULL && status == GSS_S_COMPLETE) { temp_status = __gss_convert_name_to_union_name( &temp_minor_status, mech, internal_name, src_name); if (temp_status != GSS_S_COMPLETE) { diff -urN krb5-1.2.7/src/lib/gssapi/mechglue/g_dup_name.c krb5-1.2.7-mechglue/src/lib/gssapi/mechglue/g_dup_name.c --- krb5-1.2.7/src/lib/gssapi/mechglue/g_dup_name.c 1969-12-31 19:00:00.000000000 -0500 +++ krb5-1.2.7-mechglue/src/lib/gssapi/mechglue/g_dup_name.c 2003-02-10 16:25:27.000000000 -0500 @@ -0,0 +1,138 @@ +/* + * Copyright 1996 by Sun Microsystems, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appears in all copies and + * that both that copyright notice and this permission notice appear in + * supporting documentation, and that the name of Sun Microsystems not be used + * in advertising or publicity pertaining to distribution of the software + * without specific, written prior permission. Sun Microsystems makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + * + * created andros 2.24.01 from g_compare_name.c + */ + +/* + * glue routine for gss_duplicate_name + * + */ + +#include "mglueP.h" +#ifdef HAVE_STDLIB_H +#include +#endif +#include +#include + +#define g_OID_equal(o1,o2) \ + (((o1)->length == (o2)->length) && \ + (memcmp((o1)->elements,(o2)->elements,(int) (o1)->length) == 0)) + +OM_uint32 KRB5_CALLCONV +gss_duplicate_name (minor_status, + in_name, + exp_name) +OM_uint32 * minor_status; +const gss_name_t in_name; +gss_name_t *exp_name; +{ + OM_uint32 tmp,major_status = GSS_S_COMPLETE; + gss_union_name_t union_in_name, union_exp_name; + gss_mechanism mech; + gss_name_t internal_name; + + gss_initialize(); + + /* if exp_name is NULL, simply return */ + if(exp_name == NULL) + return (GSS_S_COMPLETE); + + *(char *)exp_name = 0; + + if (in_name == 0) + return (GSS_S_BAD_NAME); + + union_in_name = (gss_union_name_t) in_name; + + /* + * Create the union name struct that will hold the exported + * name and the name type. + */ + + union_exp_name = (gss_union_name_t) malloc (sizeof(gss_union_name_desc)); + if (!union_exp_name) { + *minor_status = ENOMEM; + return; + } + union_exp_name->mech_type = union_in_name->mech_type; + union_exp_name->mech_name = 0; + union_exp_name->name_type = union_in_name->name_type; + union_exp_name->external_name = 0; + union_exp_name->external_name = + (gss_buffer_t) malloc(sizeof(gss_buffer_desc)); + if (!union_exp_name->external_name) { + *minor_status = ENOMEM; + goto allocation_failure; + } + union_exp_name->external_name->length = union_in_name->external_name->length; + /* we malloc length+1 to stick a NULL on the end, just in case */ + /* Note that this NULL is not included in ->length for a reason! */ + + union_exp_name->external_name->value = + (void *) malloc(union_in_name->external_name->length); + if (!union_exp_name->external_name->value) { + *minor_status = ENOMEM; + goto allocation_failure; + } + memcpy(union_exp_name->external_name->value, + union_in_name->external_name->value, + union_exp_name->external_name->length); + + /* + * Mechanism specific name + */ + + if (union_in_name->mech_type) { + mech = __gss_get_mechanism (union_in_name->mech_type); + if (!mech) + return (GSS_S_BAD_MECH); + if (!mech->gss_duplicate_name) + return (GSS_S_BAD_BINDINGS); + + major_status = mech->gss_duplicate_name(mech->context, minor_status, + union_in_name->mech_name, &union_exp_name->mech_name); + if(major_status != GSS_S_COMPLETE) + return(major_status); + } + *exp_name = union_exp_name; + return(major_status); + +allocation_failure: + if (union_exp_name) { + if (union_exp_name->external_name) { + if (union_exp_name->external_name->value) + free(union_exp_name->external_name->value); + free(union_exp_name->external_name); + } + if (union_exp_name->name_type) + generic_gss_release_oid(&tmp, &union_exp_name->name_type); + if (union_exp_name->mech_name) + __gss_release_internal_name(minor_status, union_exp_name->mech_type, + &union_exp_name->mech_name); + if (union_exp_name->mech_type) + generic_gss_release_oid(&tmp, &union_exp_name->mech_type); + free(union_exp_name); + } +return (major_status); + +} diff -urN krb5-1.2.7/src/lib/gssapi/mechglue/mglueP.h krb5-1.2.7-mechglue/src/lib/gssapi/mechglue/mglueP.h --- krb5-1.2.7/src/lib/gssapi/mechglue/mglueP.h 1996-07-22 16:34:52.000000000 -0400 +++ krb5-1.2.7-mechglue/src/lib/gssapi/mechglue/mglueP.h 2003-02-10 16:25:27.000000000 -0500 @@ -341,7 +341,7 @@ OM_uint32, /* req_output_size */ OM_uint32 * /* max_input_size */ )); - int (*pname_to_uid) + OM_uint32 (*pname_to_uid) NPROTOTYPE(( void *, /* context */ char *, /* pname */ @@ -349,6 +349,13 @@ gss_OID, /* mech type */ uid_t * /* uid */ )); + OM_uint32 (*gss_duplicate_name) + NPROTOTYPE(( + void *, /* context */ + OM_uint32 *, /* minor_status */ + const gss_name_t, /* input_name */ + gss_name_t * /* dest_name */ + )); } *gss_mechanism; Binary files krb5-1.2.7/src/lib/kadm5/unit-test/destroy-test and krb5-1.2.7-mechglue/src/lib/kadm5/unit-test/destroy-test differ Binary files krb5-1.2.7/src/lib/kadm5/unit-test/init-test and krb5-1.2.7-mechglue/src/lib/kadm5/unit-test/init-test differ Binary files krb5-1.2.7/src/lib/kadm5/unit-test/lock-test and krb5-1.2.7-mechglue/src/lib/kadm5/unit-test/lock-test differ Binary files krb5-1.2.7/src/lib/kadm5/unit-test/randkey-test and krb5-1.2.7-mechglue/src/lib/kadm5/unit-test/randkey-test differ Binary files krb5-1.2.7/src/lib/libgssapi_krb5.a and krb5-1.2.7-mechglue/src/lib/libgssapi_krb5.a differ Binary files krb5-1.2.7/src/lib/rpc/unit-test/client and krb5-1.2.7-mechglue/src/lib/rpc/unit-test/client differ Binary files krb5-1.2.7/src/lib/rpc/unit-test/server and krb5-1.2.7-mechglue/src/lib/rpc/unit-test/server differ Binary files krb5-1.2.7/src/slave/kprop and krb5-1.2.7-mechglue/src/slave/kprop differ Binary files krb5-1.2.7/src/slave/kpropd and krb5-1.2.7-mechglue/src/slave/kpropd differ Binary files krb5-1.2.7/src/tests/asn.1/krb5_decode_test and krb5-1.2.7-mechglue/src/tests/asn.1/krb5_decode_test differ Binary files krb5-1.2.7/src/tests/asn.1/krb5_encode_test and krb5-1.2.7-mechglue/src/tests/asn.1/krb5_encode_test differ Binary files krb5-1.2.7/src/tests/asn.1/trval and krb5-1.2.7-mechglue/src/tests/asn.1/trval differ Binary files krb5-1.2.7/src/tests/create/kdb5_mkdums and krb5-1.2.7-mechglue/src/tests/create/kdb5_mkdums differ Binary files krb5-1.2.7/src/tests/gssapi/t_imp_name and krb5-1.2.7-mechglue/src/tests/gssapi/t_imp_name differ Binary files krb5-1.2.7/src/tests/hammer/kdc5_hammer and krb5-1.2.7-mechglue/src/tests/hammer/kdc5_hammer differ Binary files krb5-1.2.7/src/tests/resolve/resolve and krb5-1.2.7-mechglue/src/tests/resolve/resolve differ Binary files krb5-1.2.7/src/tests/verify/kdb5_verify and krb5-1.2.7-mechglue/src/tests/verify/kdb5_verify differ