Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 105657 Details for
Bug 158810
app-crypt/mit-krb5 arbitrary code execution (CVE-2006-614{3|4})
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
krb_cleaned.patch
krb_cleaned.patch (text/plain), 47.75 KB, created by
Sune Kloppenborg Jeppesen (RETIRED)
on 2007-01-06 13:59:12 UTC
(
hide
)
Description:
krb_cleaned.patch
Filename:
MIME Type:
Creator:
Sune Kloppenborg Jeppesen (RETIRED)
Created:
2007-01-06 13:59:12 UTC
Size:
47.75 KB
patch
obsolete
>Index: src/lib/gssapi/mechglue/g_store_cred.c >===================================================================== >*** src/lib/gssapi/mechglue/g_store_cred.c (revision 18858) >--- src/lib/gssapi/mechglue/g_store_cred.c (working copy) >*************** >*** 11,16 **** >--- 11,48 ---- > > #include <mglueP.h> > >+ static OM_uint32 >+ val_store_cred_args( >+ OM_uint32 *minor_status, >+ const gss_cred_id_t input_cred_handle, >+ gss_cred_usage_t cred_usage, >+ const gss_OID desired_mech, >+ OM_uint32 overwrite_cred, >+ OM_uint32 default_cred, >+ gss_OID_set *elements_stored, >+ gss_cred_usage_t *cred_usage_stored) >+ { >+ >+ /* Initialize outputs. */ >+ >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (elements_stored != NULL) >+ *elements_stored = GSS_C_NULL_OID_SET; >+ >+ /* Validate arguments. */ >+ >+ if (minor_status == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (input_cred_handle == GSS_C_NO_CREDENTIAL) >+ return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CRED); >+ >+ return (GSS_S_COMPLETE); >+ } >+ >+ > OM_uint32 gss_store_cred(minor_status, > input_cred_handle, > cred_usage, >*************** >*** 37,52 **** > gss_OID dmech; > int i; > >! /* Start by checking parameters */ >! if (minor_status == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE|GSS_S_NO_CRED); >! *minor_status = 0; > >! if (input_cred_handle == GSS_C_NO_CREDENTIAL) >! return (GSS_S_CALL_INACCESSIBLE_READ); >! >! if (elements_stored != NULL) >! *elements_stored = GSS_C_NULL_OID_SET; > > if (cred_usage_stored != NULL) > *cred_usage_stored = GSS_C_BOTH; /* there's no GSS_C_NEITHER */ >--- 69,87 ---- > gss_OID dmech; > int i; > >! major_status = val_store_cred_args(minor_status, >! input_cred_handle, >! cred_usage, >! desired_mech, >! overwrite_cred, >! default_cred, >! elements_stored, >! cred_usage_stored); >! if (major_status != GSS_S_COMPLETE) >! return (major_status); > >! /* Initial value needed below. */ >! major_status = GSS_S_FAILURE; > > if (cred_usage_stored != NULL) > *cred_usage_stored = GSS_C_BOTH; /* there's no GSS_C_NEITHER */ >Index: src/lib/gssapi/mechglue/g_exp_sec_context.c >===================================================================== >*** src/lib/gssapi/mechglue/g_exp_sec_context.c (revision 18858) >--- src/lib/gssapi/mechglue/g_exp_sec_context.c (working copy) >*************** >*** 34,39 **** >--- 34,71 ---- > #endif > #include <string.h> > >+ static OM_uint32 >+ val_exp_sec_ctx_args( >+ OM_uint32 *minor_status, >+ gss_ctx_id_t *context_handle, >+ gss_buffer_t interprocess_token) >+ { >+ >+ /* Initialize outputs. */ >+ >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (interprocess_token != GSS_C_NO_BUFFER) { >+ interprocess_token->length = 0; >+ interprocess_token->value = NULL; >+ } >+ >+ /* Validate arguments. */ >+ >+ if (minor_status == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (context_handle == NULL || *context_handle == GSS_C_NO_CON= >TEXT) >+ return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT); >+ >+ if (interprocess_token == GSS_C_NO_BUFFER) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ return (GSS_S_COMPLETE); >+ } >+ >+ > OM_uint32 KRB5_CALLCONV > gss_export_sec_context(minor_status, > context_handle, >*************** >*** 50,65 **** > gss_mechanism mech; > gss_buffer_desc token; > char *buf; >- >- if (minor_status == NULL) >- return (GSS_S_CALL_INACCESSIBLE_WRITE); >- *minor_status = 0; >- >- if (context_handle == NULL || *context_handle == GSS_C_NO_C= >ONTEXT) >- return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT); > >! if (interprocess_token == NULL) >! return (GSS_S_CALL_INACCESSIBLE_READ); > > /* > * select the approprate underlying mechanism routine and >--- 82,92 ---- > gss_mechanism mech; > gss_buffer_desc token; > char *buf; > >! status = val_exp_sec_ctx_args(minor_status, >! context_handle, interprocess_token); >! if (status != GSS_S_COMPLETE) >! return (status); > > /* > * select the approprate underlying mechanism routine and >Index: src/lib/gssapi/mechglue/g_canon_name.c >===================================================================== >*** src/lib/gssapi/mechglue/g_canon_name.c (revision 18858) >--- src/lib/gssapi/mechglue/g_canon_name.c (working copy) >*************** >*** 25,30 **** >--- 25,58 ---- > #include <string.h> > #include <errno.h> > >+ static OM_uint32 >+ val_canon_name_args( >+ OM_uint32 *minor_status, >+ const gss_name_t input_name, >+ const gss_OID mech_type, >+ gss_name_t *output_name) >+ { >+ >+ /* Initialize outputs. */ >+ >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (output_name != NULL) >+ *output_name = GSS_C_NO_NAME; >+ >+ /* Validate arguments. */ >+ >+ if (minor_status == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (input_name == GSS_C_NO_NAME || mech_type == GSS_C_NULL_OID) >+ return (GSS_S_CALL_INACCESSIBLE_READ); >+ >+ return (GSS_S_COMPLETE); >+ } >+ >+ > OM_uint32 KRB5_CALLCONV > gss_canonicalize_name(minor_status, > input_name, >*************** >*** 38,54 **** > gss_union_name_t in_union, out_union = NULL, dest_union = NULL; > OM_uint32 major_status = GSS_S_FAILURE; > >! if (minor_status == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); >! >! *minor_status = 0; > >! if (output_name) >! *output_name = 0; >! >! /* check the input parameters */ >! if (input_name == NULL || mech_type == GSS_C_NULL_OID) >! return (GSS_S_CALL_INACCESSIBLE_READ); > > in_union = (gss_union_name_t)input_name; > /* >--- 66,80 ---- > gss_union_name_t in_union, out_union = NULL, dest_union = NULL; > OM_uint32 major_status = GSS_S_FAILURE; > >! major_status = val_canon_name_args(minor_status, >! input_name, >! mech_type, >! output_name); >! if (major_status != GSS_S_COMPLETE) >! return (major_status); > >! /* Initial value needed below. */ >! major_status = GSS_S_FAILURE; > > in_union = (gss_union_name_t)input_name; > /* >Index: src/lib/gssapi/mechglue/g_initialize.c >===================================================================== >*** src/lib/gssapi/mechglue/g_initialize.c (revision 18858) >--- src/lib/gssapi/mechglue/g_initialize.c (working copy) >*************** >*** 142,158 **** > int i, j; > gss_OID curItem; > >! if (!minorStatus) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); >! if (gssint_initialize_library()) >! return GSS_S_FAILURE; > >! *minorStatus = 0; > > >! /* check output parameter */ >! if (mechSet == NULL) > return (GSS_S_CALL_INACCESSIBLE_WRITE); > > if (build_mechSet()) > return GSS_S_FAILURE; >--- 142,161 ---- > int i, j; > gss_OID curItem; > >! /* Initialize outputs. */ > >! if (minorStatus != NULL) >! *minorStatus = 0; > >+ if (mechSet != NULL) >+ *mechSet = GSS_C_NO_OID_SET; > >! /* Validate arguments. */ >! if (minorStatus == NULL || mechSet == NULL) > return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (gssint_initialize_library()) >+ return GSS_S_FAILURE; > > if (build_mechSet()) > return GSS_S_FAILURE; >Index: src/lib/gssapi/mechglue/g_verify.c >===================================================================== >*** src/lib/gssapi/mechglue/g_verify.c (revision 18858) >--- src/lib/gssapi/mechglue/g_verify.c (working copy) >*************** >*** 54,60 **** > if (context_handle == GSS_C_NO_CONTEXT) > return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT); > >! if ((message_buffer == NULL) || GSS_EMPTY_BUFFER(token_buffer)) > return (GSS_S_CALL_INACCESSIBLE_READ); > > /* >--- 54,62 ---- > if (context_handle == GSS_C_NO_CONTEXT) > return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT); > >! if ((message_buffer == GSS_C_NO_BUFFER) || >! GSS_EMPTY_BUFFER(token_buffer)) >! > return (GSS_S_CALL_INACCESSIBLE_READ); > > /* >Index: src/lib/gssapi/mechglue/g_inq_names.c >===================================================================== >*** src/lib/gssapi/mechglue/g_inq_names.c (revision 18858) >--- src/lib/gssapi/mechglue/g_inq_names.c (working copy) >*************** >*** 41,50 **** > { > OM_uint32 status; > gss_mechanism mech; >! > if (minor_status == NULL) > return (GSS_S_CALL_INACCESSIBLE_WRITE); >- *minor_status = 0; > > if (name_types == NULL) > return (GSS_S_CALL_INACCESSIBLE_WRITE); >--- 41,59 ---- > { > OM_uint32 status; > gss_mechanism mech; >! >! /* Initialize outputs. */ >! >! if (minor_status != NULL) >! *minor_status = 0; >! >! if (name_types != NULL) >! *name_types = GSS_C_NO_OID_SET; >! >! /* Validate arguments. */ >! > if (minor_status == NULL) > return (GSS_S_CALL_INACCESSIBLE_WRITE); > > if (name_types == NULL) > return (GSS_S_CALL_INACCESSIBLE_WRITE); >*************** >*** 72,77 **** >--- 81,113 ---- > > return (GSS_S_BAD_MECH); > } >+ >+ static OM_uint32 >+ val_inq_mechs4name_args( >+ OM_uint32 *minor_status, >+ const gss_name_t input_name, >+ gss_OID_set *mech_set) >+ { >+ >+ /* Initialize outputs. */ >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (mech_set != NULL) >+ *mech_set = GSS_C_NO_OID_SET; >+ >+ /* Validate arguments.e >+ */ >+ if (minor_status == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (input_name == GSS_C_NO_NAME) >+ return (GSS_S_BAD_NAME); >+ >+ return (GSS_S_COMPLETE); >+ } >+ >+ > OM_uint32 KRB5_CALLCONV > gss_inquire_mechs_for_name(minor_status, input_name, mech_set) > >*************** >*** 90,101 **** > gss_buffer_desc name_buffer; > int i; > >! if (minor_status == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); >! *minor_status = 0; >! >! if (input_name == NULL) >! return (GSS_S_BAD_NAME); > > status = gss_create_empty_oid_set(minor_status, mech_set); > if (status != GSS_S_COMPLETE) >--- 126,134 ---- > gss_buffer_desc name_buffer; > int i; > >! status = val_inq_mechs4name_args(minor_status, input_name, mech_set= >); >! if (status != GSS_S_COMPLETE) >! return (status); > > status = gss_create_empty_oid_set(minor_status, mech_set); > if (status != GSS_S_COMPLETE) >Index: src/lib/gssapi/mechglue/g_export_name.c >===================================================================== >*** src/lib/gssapi/mechglue/g_export_name.c (revision 18858) >--- src/lib/gssapi/mechglue/g_export_name.c (working copy) >*************** >*** 29,47 **** > { > gss_union_name_t union_name; > > >! if (minor_status) > *minor_status = 0; > >! /* check out parameter */ >! if (!exported_name) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); > >! exported_name->value = NULL; >! exported_name->length = 0; > >! /* check input parameter */ >! if (!input_name) > return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME); > > union_name = (gss_union_name_t)input_name; >--- 29,50 ---- > { > gss_union_name_t union_name; > >+ /* Initialize outputs. */ > >! if (minor_status != NULL) > *minor_status = 0; > >! if (exported_name != GSS_C_NO_BUFFER) { >! exported_name->value = NULL; >! exported_name->length = 0; >! } >! >! /* Validate arguments. */ > >! if (minor_status == NULL || exported_name == GSS_C_NO_BUFFER) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); > >! if (input_name == GSS_C_NO_NAME) > return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME); > > union_name = (gss_union_name_t)input_name; >Index: src/lib/gssapi/mechglue/g_process_context.c >===================================================================== >*** src/lib/gssapi/mechglue/g_process_context.c (revision 18858) >--- src/lib/gssapi/mechglue/g_process_context.c (working copy) >*************** >*** 49,54 **** >--- 49,57 ---- > if (context_handle == GSS_C_NO_CONTEXT) > return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT); > >+ if (token_buffer == GSS_C_NO_BUFFER) >+ return (GSS_S_CALL_INACCESSIBLE_READ); >+ > if (GSS_EMPTY_BUFFER(token_buffer)) > return (GSS_S_CALL_INACCESSIBLE_READ); > >Index: src/lib/gssapi/mechglue/g_imp_sec_context.c >===================================================================== >*** src/lib/gssapi/mechglue/g_imp_sec_context.c (revision 18858) >--- src/lib/gssapi/mechglue/g_imp_sec_context.c (working copy) >*************** >*** 34,39 **** >--- 34,71 ---- > #endif > #include <string.h> > >+ static OM_uint32 >+ val_imp_sec_ctx_args( >+ OM_uint32 *minor_status, >+ gss_buffer_t interprocess_token, >+ gss_ctx_id_t *context_handle) >+ { >+ >+ /* Initialize outputs. */ >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (context_handle != NULL) >+ *context_handle = GSS_C_NO_CONTEXT; >+ >+ /* Validate arguments. */ >+ >+ if (minor_status == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (context_handle == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (interprocess_token == GSS_C_NO_BUFFER) >+ return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_DEFECTIVE_TOKEN); >+ >+ if (GSS_EMPTY_BUFFER(interprocess_token)) >+ return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_DEFECTIVE_TOKEN); >+ >+ return (GSS_S_COMPLETE); >+ } >+ >+ > OM_uint32 KRB5_CALLCONV > gss_import_sec_context(minor_status, > interprocess_token, >*************** >*** 50,67 **** > gss_union_ctx_id_t ctx; > gss_buffer_desc token; > gss_mechanism mech; >- >- if (minor_status == NULL) >- return (GSS_S_CALL_INACCESSIBLE_WRITE); >- *minor_status = 0; >- >- if (context_handle == NULL) >- return (GSS_S_CALL_INACCESSIBLE_WRITE | GSS_S_NO_CONTEXT); >- *context_handle = GSS_C_NO_CONTEXT; > >! if (GSS_EMPTY_BUFFER(interprocess_token)) >! return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_DEFECTIVE_TOKEN); > > status = GSS_S_FAILURE; > > ctx = (gss_union_ctx_id_t) malloc(sizeof(gss_union_ctx_id_desc)); >--- 82,94 ---- > gss_union_ctx_id_t ctx; > gss_buffer_desc token; > gss_mechanism mech; > >! status = val_imp_sec_ctx_args(minor_status, >! interprocess_token, context_handle); >! if (status != GSS_S_COMPLETE) >! return (status); > >+ /* Initial value needed below. */ > status = GSS_S_FAILURE; > > ctx = (gss_union_ctx_id_t) malloc(sizeof(gss_union_ctx_id_desc)); >Index: src/lib/gssapi/mechglue/g_seal.c >===================================================================== >*** src/lib/gssapi/mechglue/g_seal.c (revision 18858) >--- src/lib/gssapi/mechglue/g_seal.c (working copy) >*************** >*** 28,33 **** >--- 28,72 ---- > > #include "mglueP.h" > >+ static OM_uint32 >+ val_seal_args( >+ OM_uint32 *minor_status, >+ gss_ctx_id_t context_handle, >+ int conf_req_flag, >+ int qop_req, >+ gss_buffer_t input_message_buffer, >+ int *conf_state, >+ gss_buffer_t output_message_buffer) >+ { >+ >+ /* Initialize outputs. */ >+ >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (output_message_buffer != GSS_C_NO_BUFFER) { >+ output_message_buffer->length = 0; >+ output_message_buffer->value = NULL; >+ } >+ >+ /* Validate arguments. */ >+ >+ if (minor_status == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (context_handle == GSS_C_NO_CONTEXT) >+ return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT); >+ >+ if (input_message_buffer == GSS_C_NO_BUFFER) >+ return (GSS_S_CALL_INACCESSIBLE_READ); >+ >+ if (output_message_buffer == GSS_C_NO_BUFFER) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ return (GSS_S_COMPLETE); >+ } >+ >+ > OM_uint32 KRB5_CALLCONV > gss_seal (minor_status, > context_handle, >*************** >*** 51,68 **** > gss_union_ctx_id_t ctx; > gss_mechanism mech; > >! if (minor_status == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); >! *minor_status = 0; >! >! if (context_handle == GSS_C_NO_CONTEXT) >! return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT); >! >! if (input_message_buffer == NULL) >! return (GSS_S_CALL_INACCESSIBLE_READ); >! >! if (output_message_buffer == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); > > /* > * select the approprate underlying mechanism routine and >--- 90,101 ---- > gss_union_ctx_id_t ctx; > gss_mechanism mech; > >! status = val_seal_args(minor_status, context_handle, >! conf_req_flag, qop_req, >! input_message_buffer, conf_state, >! output_message_buffer); >! if (status != GSS_S_COMPLETE) >! return (status); > > /* > * select the approprate underlying mechanism routine and >Index: src/lib/gssapi/mechglue/g_acquire_cred.c >===================================================================== >*** src/lib/gssapi/mechglue/g_acquire_cred.c (revision 18858) >--- src/lib/gssapi/mechglue/g_acquire_cred.c (working copy) >*************** >*** 71,76 **** >--- 71,113 ---- > return actual_mechs; > } > >+ static OM_uint32 >+ val_acq_cred_args( >+ OM_uint32 *minor_status, >+ gss_name_t desired_name, >+ OM_uint32 time_req, >+ gss_OID_set desired_mechs, >+ int cred_usage, >+ gss_cred_id_t *output_cred_handle, >+ gss_OID_set *actual_mechs, >+ OM_uint32 *time_rec) >+ { >+ >+ /* Initialize outputs. */ >+ >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (output_cred_handle != NULL) >+ *output_cred_handle = GSS_C_NO_CREDENTIAL; >+ >+ if (actual_mechs != NULL) >+ *actual_mechs = GSS_C_NULL_OID_SET; >+ >+ if (time_rec != NULL) >+ *time_rec = 0; >+ >+ /* Validate arguments. */ >+ >+ if (minor_status == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (output_cred_handle == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ return (GSS_S_COMPLETE); >+ } >+ > > OM_uint32 KRB5_CALLCONV > gss_acquire_cred(minor_status, >*************** >*** 101,122 **** > int i; > gss_union_cred_t creds; > >! /* start by checking parameters */ >! if (!minor_status) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); >! *minor_status = 0; >! >! if (!output_cred_handle) >! return (GSS_S_CALL_INACCESSIBLE_WRITE | GSS_S_NO_CRED); >! >! *output_cred_handle = GSS_C_NO_CREDENTIAL; >! >! /* Set output parameters to NULL for now */ >! if (actual_mechs) >! *actual_mechs = GSS_C_NULL_OID_SET; > >! if (time_rec) >! *time_rec = 0; > > /* > * if desired_mechs equals GSS_C_NULL_OID_SET, then pick an >--- 138,156 ---- > int i; > gss_union_cred_t creds; > >! major = val_acq_cred_args(minor_status, >! desired_name, >! time_req, >! desired_mechs, >! cred_usage, >! output_cred_handle, >! actual_mechs, >! time_rec); >! if (major != GSS_S_COMPLETE) >! return (major); > >! /* Initial value needed below. */ >! major = GSS_S_FAILURE; > > /* > * if desired_mechs equals GSS_C_NULL_OID_SET, then pick an >*************** >*** 208,213 **** >--- 242,293 ---- > return (GSS_S_COMPLETE); > } > >+ static OM_uint32 >+ val_add_cred_args( >+ OM_uint32 *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 *output_cred_handle, >+ gss_OID_set *actual_mechs, >+ OM_uint32 *initiator_time_rec, >+ OM_uint32 *acceptor_time_rec) >+ { >+ >+ /* Initialize outputs. */ >+ >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (output_cred_handle != NULL) >+ *output_cred_handle = GSS_C_NO_CREDENTIAL; >+ >+ if (actual_mechs != NULL) >+ *actual_mechs = GSS_C_NO_OID_SET; >+ >+ if (acceptor_time_rec != NULL) >+ *acceptor_time_rec = 0; >+ >+ if (initiator_time_rec != NULL) >+ *initiator_time_rec = 0; >+ >+ /* Validate arguments. */ >+ >+ if (minor_status == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (input_cred_handle == GSS_C_NO_CREDENTIAL && >+ output_cred_handle == NULL) >+ >+ return (GSS_S_CALL_INACCESSIBLE_WRITE | GSS_S_NO_CRED); >+ >+ return (GSS_S_COMPLETE); >+ } >+ >+ > /* V2 KRB5_CALLCONV */ > OM_uint32 KRB5_CALLCONV > gss_add_cred(minor_status, input_cred_handle, >*************** >*** 238,263 **** > gss_OID new_mechs_array = NULL; > gss_cred_id_t * new_cred_array = NULL; > >! /* check input parameters */ >! if (minor_status == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); >! *minor_status = 0; >! >! if (input_cred_handle == GSS_C_NO_CREDENTIAL && >! output_cred_handle == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE | GSS_S_NO_CRED); >! >! if (output_cred_handle) >! *output_cred_handle = GSS_C_NO_CREDENTIAL; >! >! if (actual_mechs) >! *actual_mechs = NULL; >! >! if (acceptor_time_rec) >! *acceptor_time_rec = 0; >! >! if (initiator_time_rec) >! *initiator_time_rec = 0; > > mech = gssint_get_mechanism(desired_mech); > if (!mech) >--- 318,336 ---- > gss_OID new_mechs_array = NULL; > gss_cred_id_t * new_cred_array = NULL; > >! status = val_add_cred_args(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); >! if (status != GSS_S_COMPLETE) >! return (status); > > mech = gssint_get_mechanism(desired_mech); > if (!mech) >Index: src/lib/gssapi/mechglue/g_dsp_name.c >===================================================================== >*** src/lib/gssapi/mechglue/g_dsp_name.c (revision 18858) >--- src/lib/gssapi/mechglue/g_dsp_name.c (working copy) >*************** >*** 34,39 **** >--- 34,75 ---- > #endif > #include <string.h> > >+ static OM_uint32 >+ val_dsp_name_args( >+ OM_uint32 *minor_status, >+ gss_name_t input_name, >+ gss_buffer_t output_name_buffer, >+ gss_OID *output_name_type) >+ { >+ >+ /* Initialize outputs. */ >+ >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (output_name_buffer != GSS_C_NO_BUFFER) { >+ output_name_buffer->length = 0; >+ output_name_buffer->value = NULL; >+ } >+ >+ if (output_name_type != NULL) >+ *output_name_type = GSS_C_NO_OID; >+ >+ /* Validate arguments. */ >+ >+ if (minor_status == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (output_name_buffer == GSS_C_NO_BUFFER) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (input_name == GSS_C_NO_NAME) >+ return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME); >+ >+ return (GSS_S_COMPLETE); >+ } >+ >+ > OM_uint32 KRB5_CALLCONV > gss_display_name (minor_status, > input_name, >*************** >*** 48,66 **** > { > OM_uint32 major_status; > gss_union_name_t union_name; >- >- if (minor_status == NULL) >- return (GSS_S_CALL_INACCESSIBLE_WRITE); >- *minor_status = 0; >- >- if (input_name == 0) >- return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME); >- >- if (output_name_buffer == NULL) >- return (GSS_S_CALL_INACCESSIBLE_WRITE); > >! if (output_name_type) >! *output_name_type = NULL; > > union_name = (gss_union_name_t) input_name; > >--- 84,94 ---- > { > OM_uint32 major_status; > gss_union_name_t union_name; > >! major_status = val_dsp_name_args(minor_status, input_name, >! output_name_buffer, output_name_type); >! if (major_status != GSS_S_COMPLETE) >! return (major_status); > > union_name = (gss_union_name_t) input_name; > >Index: src/lib/gssapi/mechglue/g_unseal.c >===================================================================== >*** src/lib/gssapi/mechglue/g_unseal.c (revision 18858) >--- src/lib/gssapi/mechglue/g_unseal.c (working copy) >*************** >*** 49,69 **** > gss_union_ctx_id_t ctx; > gss_mechanism mech; > > if (minor_status == NULL) > return (GSS_S_CALL_INACCESSIBLE_WRITE); >- *minor_status = 0; > > if (context_handle == GSS_C_NO_CONTEXT) > return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT); > >! if (GSS_EMPTY_BUFFER(input_message_buffer)) > return (GSS_S_CALL_INACCESSIBLE_READ); > >! if (output_message_buffer == NULL) > return (GSS_S_CALL_INACCESSIBLE_WRITE); >- >- output_message_buffer->length = 0; >- output_message_buffer->value = NULL; > > /* > * select the approprate underlying mechanism routine and >--- 49,75 ---- > gss_union_ctx_id_t ctx; > gss_mechanism mech; > >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (output_message_buffer != GSS_C_NO_BUFFER) { >+ output_message_buffer->length = 0; >+ output_message_buffer->value = NULL; >+ } >+ > if (minor_status == NULL) > return (GSS_S_CALL_INACCESSIBLE_WRITE); > > if (context_handle == GSS_C_NO_CONTEXT) > return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT); > >! if (input_message_buffer == GSS_C_NO_BUFFER || >! GSS_EMPTY_BUFFER(input_message_buffer)) >! > return (GSS_S_CALL_INACCESSIBLE_READ); > >! if (output_message_buffer == GSS_C_NO_BUFFER) > return (GSS_S_CALL_INACCESSIBLE_WRITE); > > /* > * select the approprate underlying mechanism routine and >Index: src/lib/gssapi/mechglue/g_dup_name.c >===================================================================== >*** src/lib/gssapi/mechglue/g_dup_name.c (revision 18858) >--- src/lib/gssapi/mechglue/g_dup_name.c (working copy) >*************** >*** 19,24 **** >--- 19,55 ---- > #include <string.h> > #include <errno.h> > >+ static OM_uint32 >+ val_dup_name_args( >+ OM_uint32 *minor_status, >+ const gss_name_t src_name, >+ gss_name_t *dest_name) >+ { >+ >+ /* Initialize outputs. */ >+ >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (dest_name != NULL) >+ *dest_name = GSS_C_NO_NAME; >+ >+ /* Validate arguments. */ >+ >+ if (minor_status == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ /* if output_name is NULL, simply return */ >+ if (dest_name == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (src_name == GSS_C_NO_NAME) >+ return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME); >+ >+ return (GSS_S_COMPLETE); >+ } >+ >+ > OM_uint32 KRB5_CALLCONV > gss_duplicate_name(minor_status, > src_name, >*************** >*** 30,49 **** > gss_union_name_t src_union, dest_union; > OM_uint32 major_status = GSS_S_FAILURE; > >! >! if (!minor_status) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); >! >! *minor_status = 0; >! >! /* if output_name is NULL, simply return */ >! if (dest_name == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE | GSS_S_BAD_NAME); >! >! *dest_name = 0; >! >! if (src_name == NULL) >! return (GSS_S_CALL_INACCESSIBLE_READ); > > src_union = (gss_union_name_t)src_name; > >--- 61,69 ---- > gss_union_name_t src_union, dest_union; > OM_uint32 major_status = GSS_S_FAILURE; > >! major_status = val_dup_name_args(minor_status, src_name, dest_name); >! if (major_status != GSS_S_COMPLETE) >! return (major_status); > > src_union = (gss_union_name_t)src_name; > >Index: src/lib/gssapi/mechglue/g_dsp_status.c >===================================================================== >*** src/lib/gssapi/mechglue/g_dsp_status.c (revision 18858) >--- src/lib/gssapi/mechglue/g_dsp_status.c (working copy) >*************** >*** 54,70 **** > gss_OID mech_type = (gss_OID) req_mech_type; > gss_mechanism mech; > >! /* check the input parameters */ >! if (!minor_status) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); > >! *minor_status = 0; > >! if (!message_context || status_string == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); > >! status_string->length = 0; >! status_string->value = NULL; > > /* we handle major status codes, and the mechs do the minor */ > if (status_type == GSS_C_GSS_CODE) >--- 54,72 ---- > gss_OID mech_type = (gss_OID) req_mech_type; > gss_mechanism mech; > >! if (minor_status != NULL) >! *minor_status = 0; > >! if (status_string != GSS_C_NO_BUFFER) { >! status_string->length = 0; >! status_string->value = NULL; >! } > >! if (minor_status == NULL || >! message_context == NULL || >! status_string == GSS_C_NO_BUFFER) > >! return (GSS_S_CALL_INACCESSIBLE_WRITE); > > /* we handle major status codes, and the mechs do the minor */ > if (status_type == GSS_C_GSS_CODE) >Index: src/lib/gssapi/mechglue/g_inq_context.c >===================================================================== >*** src/lib/gssapi/mechglue/g_inq_context.c (revision 18858) >--- src/lib/gssapi/mechglue/g_inq_context.c (working copy) >*************** >*** 31,36 **** >--- 31,75 ---- > #include <stdlib.h> > #endif > >+ static OM_uint32 >+ val_inq_ctx_args( >+ OM_uint32 *minor_status, >+ 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) >+ { >+ >+ /* Initialize outputs. */ >+ >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (src_name != NULL) >+ *src_name = GSS_C_NO_NAME; >+ >+ if (targ_name != NULL) >+ *targ_name = GSS_C_NO_NAME; >+ >+ if (mech_type != NULL) >+ *mech_type = GSS_C_NO_OID; >+ >+ /* Validate arguments. */ >+ >+ if (minor_status == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (context_handle == GSS_C_NO_CONTEXT) >+ return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT); >+ >+ return (GSS_S_COMPLETE); >+ } >+ >+ > /* Last argument new for V2 */ > OM_uint32 KRB5_CALLCONV > gss_inquire_context( >*************** >*** 60,85 **** > gss_mechanism mech; > OM_uint32 status, temp_minor; > gss_name_t localTargName = NULL, localSourceName = NULL; >- >- if (!minor_status) >- return (GSS_S_CALL_INACCESSIBLE_WRITE); > >! *minor_status = 0; >! >! /* if the context_handle is Null, return NO_CONTEXT error */ >! if (context_handle == GSS_C_NO_CONTEXT) >! return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT); > >- /* set all output value to NULL */ >- if (src_name) >- *src_name = NULL; >- >- if (targ_name) >- *targ_name = NULL; >- >- if (mech_type) >- *mech_type = NULL; >- > /* > * select the approprate underlying mechanism routine and > * call it. >--- 99,114 ---- > gss_mechanism mech; > OM_uint32 status, temp_minor; > gss_name_t localTargName = NULL, localSourceName = NULL; > >! status = val_inq_ctx_args(minor_status, >! context_handle, >! src_name, targ_name, >! lifetime_rec, >! mech_type, ctx_flags, >! locally_initiated, open); >! if (status != GSS_S_COMPLETE) >! return (status); > > /* > * select the approprate underlying mechanism routine and > * call it. >Index: src/lib/gssapi/mechglue/g_accept_sec_context.c >===================================================================== >*** src/lib/gssapi/mechglue/g_accept_sec_context.c (revision 18858) >--- src/lib/gssapi/mechglue/g_accept_sec_context.c (working copy) >*************** >*** 33,38 **** >--- 33,90 ---- > #include <string.h> > #include <errno.h> > >+ static OM_uint32 >+ val_acc_sec_ctx_args( >+ OM_uint32 *minor_status, >+ gss_ctx_id_t *context_handle, >+ gss_cred_id_t verifier_cred_handle, >+ gss_buffer_t input_token_buffer, >+ 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 *d_cred) >+ { >+ >+ /* Initialize outputs. */ >+ >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (src_name != NULL) >+ *src_name = GSS_C_NO_NAME; >+ >+ if (mech_type != NULL) >+ *mech_type = GSS_C_NO_OID; >+ >+ if (output_token != GSS_C_NO_BUFFER) { >+ output_token->length = 0; >+ output_token->value = NULL; >+ } >+ >+ if (d_cred != NULL) >+ *d_cred = GSS_C_NO_CREDENTIAL; >+ >+ /* Validate arguments. */ >+ >+ if (minor_status == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (context_handle == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (input_token_buffer == GSS_C_NO_BUFFER) >+ return (GSS_S_CALL_INACCESSIBLE_READ); >+ >+ if (output_token == GSS_C_NO_BUFFER) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ return (GSS_S_COMPLETE); >+ } >+ >+ > OM_uint32 KRB5_CALLCONV > gss_accept_sec_context (minor_status, > context_handle, >*************** >*** 69,94 **** > gss_OID_desc token_mech_type_desc; > gss_OID token_mech_type = &token_mech_type_desc; > gss_mechanism mech; >- >- /* check parameters first */ >- if (minor_status == NULL) >- return (GSS_S_CALL_INACCESSIBLE_WRITE); >- *minor_status = 0; >- >- if (context_handle == NULL || output_token == NULL) >- return (GSS_S_CALL_INACCESSIBLE_WRITE); >- >- /* clear optional fields */ >- output_token->value = NULL; >- output_token->length = 0; >- if (src_name) >- *src_name = NULL; > >! if (mech_type) >! *mech_type = NULL; > >- if (d_cred) >- *d_cred = NULL; > /* > * if context_handle is GSS_C_NO_CONTEXT, allocate a union context > * descriptor to hold the mech type information as well as the >--- 121,141 ---- > gss_OID_desc token_mech_type_desc; > gss_OID token_mech_type = &token_mech_type_desc; > gss_mechanism mech; > >! status = val_acc_sec_ctx_args(minor_status, >! context_handle, >! verifier_cred_handle, >! input_token_buffer, >! input_chan_bindings, >! src_name, >! mech_type, >! output_token, >! ret_flags, >! time_rec, >! d_cred); >! if (status != GSS_S_COMPLETE) >! return (status); > > /* > * if context_handle is GSS_C_NO_CONTEXT, allocate a union context > * descriptor to hold the mech type information as well as the >Index: src/lib/gssapi/mechglue/g_sign.c >===================================================================== >*** src/lib/gssapi/mechglue/g_sign.c (revision 18858) >--- src/lib/gssapi/mechglue/g_sign.c (working copy) >*************** >*** 28,33 **** >--- 28,70 ---- > > #include "mglueP.h" > >+ static OM_uint32 >+ val_sign_args( >+ OM_uint32 *minor_status, >+ gss_ctx_id_t context_handle, >+ int qop_req, >+ gss_buffer_t message_buffer, >+ gss_buffer_t msg_token) >+ { >+ >+ /* Initialize outputs. */ >+ >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (msg_token != GSS_C_NO_BUFFER) { >+ msg_token->value = NULL; >+ msg_token->length = 0; >+ } >+ >+ /* Validate arguments. */ >+ >+ if (minor_status == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (context_handle == GSS_C_NO_CONTEXT) >+ return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT); >+ >+ if (message_buffer == GSS_C_NO_BUFFER) >+ return (GSS_S_CALL_INACCESSIBLE_READ); >+ >+ if (msg_token == GSS_C_NO_BUFFER) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ return (GSS_S_COMPLETE); >+ } >+ >+ > OM_uint32 KRB5_CALLCONV > gss_sign (minor_status, > context_handle, >*************** >*** 46,66 **** > gss_union_ctx_id_t ctx; > gss_mechanism mech; > >! if (minor_status == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); >! *minor_status = 0; >! >! if (context_handle == GSS_C_NO_CONTEXT) >! return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT); >! >! if (message_buffer == NULL) >! return (GSS_S_CALL_INACCESSIBLE_READ); >! >! if (msg_token == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); > >- msg_token->value = NULL; >- msg_token->length = 0; > /* > * select the approprate underlying mechanism routine and > * call it. >--- 83,93 ---- > gss_union_ctx_id_t ctx; > gss_mechanism mech; > >! status = val_sign_args(minor_status, context_handle, >! qop_req, message_buffer, msg_token); >! if (status != GSS_S_COMPLETE) >! return (status); > > /* > * select the approprate underlying mechanism routine and > * call it. >Index: src/lib/gssapi/mechglue/g_delete_sec_context.c >===================================================================== >*** src/lib/gssapi/mechglue/g_delete_sec_context.c (revision 18858) >--- src/lib/gssapi/mechglue/g_delete_sec_context.c (working copy) >*************** >*** 32,37 **** >--- 32,66 ---- > #include <stdlib.h> > #endif > >+ static OM_uint32 >+ val_del_sec_ctx_args( >+ OM_uint32 *minor_status, >+ gss_ctx_id_t *context_handle, >+ gss_buffer_t output_token) >+ { >+ >+ /* Initialize outputs. */ >+ >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (output_token != GSS_C_NO_BUFFER) { >+ output_token->length = 0; >+ output_token->value = NULL; >+ } >+ >+ /* Validate arguments. */ >+ >+ if (minor_status == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (context_handle == NULL || *context_handle == GSS_C_NO_CON= >TEXT) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE | GSS_S_NO_CONTEXT); >+ >+ return (GSS_S_COMPLETE); >+ } >+ >+ > OM_uint32 KRB5_CALLCONV > gss_delete_sec_context (minor_status, > context_handle, >*************** >*** 45,62 **** > OM_uint32 status; > gss_union_ctx_id_t ctx; > gss_mechanism mech; >- >- if (minor_status == NULL) >- return (GSS_S_CALL_INACCESSIBLE_WRITE); >- >- if (output_token != GSS_C_NO_BUFFER) { >- output_token->length = 0; >- output_token->value = NULL; >- } > >! /* if the context_handle is Null, return NO_CONTEXT error */ >! if(context_handle == NULL || *context_handle == GSS_C_NO_CONT= >EXT) >! return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT); > > /* > * select the approprate underlying mechanism routine and >--- 74,83 ---- > OM_uint32 status; > gss_union_ctx_id_t ctx; > gss_mechanism mech; > >! status = val_del_sec_ctx_args(minor_status, context_handle, output_= >token); >! if (status != GSS_S_COMPLETE) >! return (status); > > /* > * select the approprate underlying mechanism routine and >Index: src/lib/gssapi/mechglue/g_init_sec_context.c >===================================================================== >*** src/lib/gssapi/mechglue/g_init_sec_context.c (revision 18858) >--- src/lib/gssapi/mechglue/g_init_sec_context.c (working copy) >*************** >*** 33,38 **** >--- 33,86 ---- > #endif > #include <string.h> > >+ static OM_uint32 >+ val_init_sec_ctx_args( >+ OM_uint32 *minor_status, >+ gss_cred_id_t claimant_cred_handle, >+ gss_ctx_id_t *context_handle, >+ gss_name_t target_name, >+ gss_OID req_mech_type, >+ OM_uint32 req_flags, >+ OM_uint32 time_req, >+ gss_channel_bindings_t input_chan_bindings, >+ gss_buffer_t input_token, >+ gss_OID *actual_mech_type, >+ gss_buffer_t output_token, >+ OM_uint32 *ret_flags, >+ OM_uint32 *time_rec) >+ { >+ >+ /* Initialize outputs. */ >+ >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (actual_mech_type != NULL) >+ *actual_mech_type = GSS_C_NO_OID; >+ >+ if (output_token != GSS_C_NO_BUFFER) { >+ output_token->length = 0; >+ output_token->value = NULL; >+ } >+ >+ /* Validate arguments. */ >+ >+ if (minor_status == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (context_handle == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE | GSS_S_NO_CONTEXT); >+ >+ if (target_name == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME); >+ >+ if (output_token == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ return (GSS_S_COMPLETE); >+ } >+ >+ > OM_uint32 KRB5_CALLCONV > gss_init_sec_context (minor_status, > claimant_cred_handle, >*************** >*** 72,101 **** > gss_mechanism mech; > gss_cred_id_t input_cred_handle; > >! if (minor_status == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); >! *minor_status = 0; >! output_token->length = 0; >! output_token->value = NULL; >! >! /* clear output values */ >! if (actual_mech_type) >! *actual_mech_type = NULL; >! >! if (context_handle == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE | GSS_S_NO_CONTEXT); >! >! union_name = (gss_union_name_t) target_name; >! >! if (target_name == NULL) >! return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME); >! >! if (output_token == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); >! >! output_token->value = NULL; >! output_token->length = 0; >! > > if (req_mech_type) > mech_type = (gss_OID)req_mech_type; >--- 120,140 ---- > gss_mechanism mech; > gss_cred_id_t input_cred_handle; > >! status = val_init_sec_ctx_args(minor_status, >! claimant_cred_handle, >! context_handle, >! target_name, >! req_mech_type, >! req_flags, >! time_req, >! input_chan_bindings, >! input_token, >! actual_mech_type, >! output_token, >! ret_flags, >! time_rec); >! if (status != GSS_S_COMPLETE) >! return (status); > > if (req_mech_type) > mech_type = (gss_OID)req_mech_type; >Index: src/lib/gssapi/mechglue/g_inq_cred.c >===================================================================== >*** src/lib/gssapi/mechglue/g_inq_cred.c (revision 18858) >--- src/lib/gssapi/mechglue/g_inq_cred.c (working copy) >*************** >*** 55,71 **** > gss_mechanism mech; > gss_name_t internal_name; > int i; >- >- /* check parms and set to defaults */ >- if (minor_status == NULL) >- return (GSS_S_CALL_INACCESSIBLE_WRITE); >- *minor_status = 0; > >! if (name) >! *name = NULL; > >! if (mechanisms) >! *mechanisms = NULL; > > if (cred_handle == GSS_C_NO_CREDENTIAL) { > /* >--- 55,75 ---- > gss_mechanism mech; > gss_name_t internal_name; > int i; > >! /* Initialize outputs. */ >! >! if (minor_status != NULL) >! *minor_status = 0; >! >! if (name != NULL) >! *name = GSS_C_NO_NAME; >! >! if (mechanisms != NULL) >! *mechanisms = GSS_C_NO_OID_SET; > >! /* Validate arguments. */ >! if (minor_status == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); > > if (cred_handle == GSS_C_NO_CREDENTIAL) { > /* >*************** >*** 216,221 **** >--- 220,233 ---- > OM_uint32 status, temp_minor_status; > gss_name_t internal_name; > >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (name != NULL) >+ *name = GSS_C_NO_NAME; >+ >+ if (minor_status == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); > > mech = gssint_get_mechanism (mech_type); > if (!mech) >Index: src/lib/gssapi/mechglue/g_imp_name.c >===================================================================== >*** src/lib/gssapi/mechglue/g_imp_name.c (revision 18858) >--- src/lib/gssapi/mechglue/g_imp_name.c (working copy) >*************** >*** 38,43 **** >--- 38,77 ---- > /* local function to import GSS_C_EXPORT_NAME names */ > static OM_uint32 importExportName(OM_uint32 *, gss_union_name_t); > >+ static OM_uint32 >+ val_imp_name_args( >+ OM_uint32 *minor_status, >+ gss_buffer_t input_name_buffer, >+ gss_OID input_name_type, >+ gss_name_t *output_name) >+ { >+ >+ /* Initialize outputs. */ >+ >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ if (output_name != NULL) >+ *output_name = GSS_C_NO_NAME; >+ >+ /* Validate arguments. */ >+ >+ if (minor_status == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (output_name == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ if (input_name_buffer == GSS_C_NO_BUFFER) >+ return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME); >+ >+ if (GSS_EMPTY_BUFFER(input_name_buffer)) >+ return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME); >+ >+ return (GSS_S_COMPLETE); >+ } >+ >+ > OM_uint32 KRB5_CALLCONV > gss_import_name(minor_status, > input_name_buffer, >*************** >*** 53,74 **** > gss_union_name_t union_name; > OM_uint32 tmp, major_status = GSS_S_FAILURE; > >! /* check output parameters */ >! if (!minor_status) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); >! >! *minor_status = 0; >! >! if (output_name == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); >! >! *output_name = 0; >! >! if (input_name_buffer == GSS_C_NO_BUFFER) >! return (GSS_S_BAD_NAME); >! >! if (GSS_EMPTY_BUFFER(input_name_buffer)) >! return (GSS_S_BAD_NAME); > > /* > * First create the union name struct that will hold the external >--- 87,97 ---- > gss_union_name_t union_name; > OM_uint32 tmp, major_status = GSS_S_FAILURE; > >! major_status = val_imp_name_args(minor_status, >! input_name_buffer, input_name_type, >! output_name); >! if (major_status != GSS_S_COMPLETE) >! return (major_status); > > /* > * First create the union name struct that will hold the external >Index: src/lib/gssapi/mechglue/g_compare_name.c >===================================================================== >*** src/lib/gssapi/mechglue/g_compare_name.c (revision 18858) >--- src/lib/gssapi/mechglue/g_compare_name.c (working copy) >*************** >*** 33,38 **** >--- 33,63 ---- > #endif > #include <string.h> > >+ static OM_uint32 >+ val_comp_name_args( >+ OM_uint32 *minor_status, >+ gss_name_t name1, >+ gss_name_t name2, >+ int *name_equal) >+ { >+ >+ /* Initialize outputs. */ >+ >+ if (minor_status != NULL) >+ *minor_status = 0; >+ >+ /* Validate arguments. */ >+ >+ if (name1 == GSS_C_NO_NAME || name2 == GSS_C_NO_NAME) >+ return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME); >+ >+ if (name_equal == NULL) >+ return (GSS_S_CALL_INACCESSIBLE_WRITE); >+ >+ return (GSS_S_COMPLETE); >+ } >+ >+ > OM_uint32 KRB5_CALLCONV > gss_compare_name (minor_status, > name1, >*************** >*** 50,64 **** > gss_mechanism mech; > gss_name_t internal_name; > >! if (minor_status == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); >! *minor_status = 0; >! >! if (name1 == 0 || name2 == 0) >! return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME); >! >! if (name_equal == NULL) >! return (GSS_S_CALL_INACCESSIBLE_WRITE); > > union_name1 = (gss_union_name_t) name1; > union_name2 = (gss_union_name_t) name2; >--- 75,84 ---- > gss_mechanism mech; > gss_name_t internal_name; > >! major_status = val_comp_name_args(minor_status, >! name1, name2, name_equal); >! if (major_status != GSS_S_COMPLETE) >! return (major_status); > > union_name1 = (gss_union_name_t) name1; > union_name2 = (gss_union_name_t) name2; >Index: src/lib/gssapi/mechglue/oid_ops.c >===================================================================== >*** src/lib/gssapi/mechglue/oid_ops.c (revision 18858) >--- src/lib/gssapi/mechglue/oid_ops.c (working copy) >*************** >*** 49,55 **** > if (minor_status) > *minor_status = 0; > >! if (*oid == GSS_C_NO_OID) > return(GSS_S_COMPLETE); > > /* >--- 49,55 ---- > if (minor_status) > *minor_status = 0; > >! if (oid == NULL || *oid == GSS_C_NO_OID) > return(GSS_S_COMPLETE); > > /* >*************** >*** 227,238 **** > unsigned char *cp; > char *bp; > >! *minor_status = 0; > > if (oid == NULL || oid->length == 0 || oid->elements == N= >ULL) > return (GSS_S_CALL_INACCESSIBLE_READ); > >! if (oid_str == NULL) > return (GSS_S_CALL_INACCESSIBLE_WRITE); > > /* Decoded according to krb5/gssapi_krb5.c */ >--- 227,244 ---- > unsigned char *cp; > char *bp; > >! if (minor_status != NULL) >! *minor_status = 0; >! >! if (oid_str != GSS_C_NO_BUFFER) { >! oid_str->length = 0; >! oid_str->value = NULL; >! } > > if (oid == NULL || oid->length == 0 || oid->elements == N= >ULL) > return (GSS_S_CALL_INACCESSIBLE_READ); > >! if (oid_str == GSS_C_NO_BUFFER) > return (GSS_S_CALL_INACCESSIBLE_WRITE); > > /* Decoded according to krb5/gssapi_krb5.c */ >*************** >*** 307,313 **** > int index; > unsigned char *op; > >! *minor_status = 0; > > if (GSS_EMPTY_BUFFER(oid_str)) > return (GSS_S_CALL_INACCESSIBLE_READ); >--- 313,323 ---- > int index; > unsigned char *op; > >! if (minor_status != NULL) >! *minor_status = 0; >! >! if (oid != NULL) >! *oid = GSS_C_NO_OID; > > if (GSS_EMPTY_BUFFER(oid_str)) > return (GSS_S_CALL_INACCESSIBLE_READ); >*************** >*** 458,473 **** > OM_uint32 major = GSS_S_COMPLETE; > OM_uint32 index; > >! if (minor_status) > *minor_status = 0; > >! if (oidset == NULL) > return (GSS_S_CALL_INACCESSIBLE_READ); > > if (new_oidset == NULL) > return (GSS_S_CALL_INACCESSIBLE_WRITE); >- >- *new_oidset = NULL; > > if ((copy = (gss_OID_set_desc *) calloc(1, sizeof (*copy))) == = >NULL) { > major = GSS_S_FAILURE; >--- 468,484 ---- > OM_uint32 major = GSS_S_COMPLETE; > OM_uint32 index; > >! if (minor_status != NULL) > *minor_status = 0; > >! if (new_oidset != NULL) >! *new_oidset = GSS_C_NO_OID_SET; >! >! if (oidset == GSS_C_NO_OID_SET) > return (GSS_S_CALL_INACCESSIBLE_READ); > > if (new_oidset == NULL) > return (GSS_S_CALL_INACCESSIBLE_WRITE); > > if ((copy = (gss_OID_set_desc *) calloc(1, sizeof (*copy))) == = >NULL) { > major = GSS_S_FAILURE; >Index: src/kadmin/server/ovsec_kadmd.c >===================================================================== >*** src/kadmin/server/ovsec_kadmd.c (revision 18858) >--- src/kadmin/server/ovsec_kadmd.c (working copy) >*************** >*** 993,998 **** >--- 993,1003 ---- > int i; > const char *procname; > >+ client.length = 0; >+ client.value = NULL; >+ server.length = 0; >+ server.value = NULL; >+ > (void) gss_display_name(&minor, client_name, &client, &gss_type); > (void) gss_display_name(&minor, server_name, &server, &gss_type); > if (client.value == NULL) > >--=-=-=--
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 158810
: 105657