a9e6df4
Index: src/lib/gssapi/mechglue/g_store_cred.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_store_cred.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_store_cred.c	(working copy)
a9e6df4
***************
a9e6df4
*** 11,16 ****
a9e6df4
--- 11,48 ----
a9e6df4
  
a9e6df4
  #include <mglueP.h>
a9e6df4
  
a9e6df4
+ static OM_uint32
a9e6df4
+ val_store_cred_args(
a9e6df4
+ 	OM_uint32 *minor_status,
a9e6df4
+ 	const gss_cred_id_t input_cred_handle,
a9e6df4
+ 	gss_cred_usage_t cred_usage,
a9e6df4
+ 	const gss_OID desired_mech,
a9e6df4
+ 	OM_uint32 overwrite_cred,
a9e6df4
+ 	OM_uint32 default_cred,
a9e6df4
+ 	gss_OID_set *elements_stored,
a9e6df4
+ 	gss_cred_usage_t *cred_usage_stored)
a9e6df4
+ {
a9e6df4
+ 
a9e6df4
+ 	/* Initialize outputs. */
a9e6df4
+ 
a9e6df4
+ 	if (minor_status != NULL)
a9e6df4
+ 		*minor_status = 0;
a9e6df4
+ 
a9e6df4
+ 	if (elements_stored != NULL)
a9e6df4
+ 		*elements_stored = GSS_C_NULL_OID_SET;
a9e6df4
+ 
a9e6df4
+ 	/* Validate arguments. */
a9e6df4
+ 
a9e6df4
+ 	if (minor_status == NULL)
a9e6df4
+ 		return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+ 	if (input_cred_handle == GSS_C_NO_CREDENTIAL)
a9e6df4
+ 		return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CRED);
a9e6df4
+ 
a9e6df4
+ 	return (GSS_S_COMPLETE);
a9e6df4
+ }
a9e6df4
+ 
a9e6df4
+ 
a9e6df4
  OM_uint32 gss_store_cred(minor_status,
a9e6df4
  			input_cred_handle,
a9e6df4
  			cred_usage,
a9e6df4
***************
a9e6df4
*** 37,52 ****
a9e6df4
  	gss_OID			dmech;
a9e6df4
  	int			i;
a9e6df4
  
a9e6df4
! 	/* Start by checking parameters */
a9e6df4
! 	if (minor_status == NULL)
a9e6df4
! 		return (GSS_S_CALL_INACCESSIBLE_WRITE|GSS_S_NO_CRED);
a9e6df4
! 	*minor_status = 0;
a9e6df4
  
a9e6df4
! 	if (input_cred_handle == GSS_C_NO_CREDENTIAL)
a9e6df4
! 		return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
! 
a9e6df4
! 	if (elements_stored != NULL)
a9e6df4
! 		*elements_stored = GSS_C_NULL_OID_SET;
a9e6df4
  
a9e6df4
  	if (cred_usage_stored != NULL)
a9e6df4
  		*cred_usage_stored = GSS_C_BOTH; /* there's no GSS_C_NEITHER */
a9e6df4
--- 69,87 ----
a9e6df4
  	gss_OID			dmech;
a9e6df4
  	int			i;
a9e6df4
  
a9e6df4
! 	major_status = val_store_cred_args(minor_status,
a9e6df4
! 					   input_cred_handle,
a9e6df4
! 					   cred_usage,
a9e6df4
! 					   desired_mech,
a9e6df4
! 					   overwrite_cred,
a9e6df4
! 					   default_cred,
a9e6df4
! 					   elements_stored,
a9e6df4
! 					   cred_usage_stored);
a9e6df4
! 	if (major_status != GSS_S_COMPLETE)
a9e6df4
! 		return (major_status);
a9e6df4
  
a9e6df4
! 	/* Initial value needed below. */
a9e6df4
! 	major_status = GSS_S_FAILURE;
a9e6df4
  
a9e6df4
  	if (cred_usage_stored != NULL)
a9e6df4
  		*cred_usage_stored = GSS_C_BOTH; /* there's no GSS_C_NEITHER */
a9e6df4
Index: src/lib/gssapi/mechglue/g_exp_sec_context.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_exp_sec_context.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_exp_sec_context.c	(working copy)
a9e6df4
***************
a9e6df4
*** 34,39 ****
a9e6df4
--- 34,71 ----
a9e6df4
  #endif
a9e6df4
  #include <string.h>
a9e6df4
  
a9e6df4
+ static OM_uint32
a9e6df4
+ val_exp_sec_ctx_args(
a9e6df4
+     OM_uint32 *minor_status,
a9e6df4
+     gss_ctx_id_t *context_handle,
a9e6df4
+     gss_buffer_t interprocess_token)
a9e6df4
+ {
a9e6df4
+ 
a9e6df4
+     /* Initialize outputs. */
a9e6df4
+ 
a9e6df4
+     if (minor_status != NULL)
a9e6df4
+ 	*minor_status = 0;
a9e6df4
+ 
a9e6df4
+     if (interprocess_token != GSS_C_NO_BUFFER) {
a9e6df4
+ 	interprocess_token->length = 0;
a9e6df4
+ 	interprocess_token->value = NULL;
a9e6df4
+     }
a9e6df4
+ 
a9e6df4
+     /* Validate arguments. */
a9e6df4
+ 
a9e6df4
+     if (minor_status == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     if (context_handle == NULL || *context_handle == GSS_C_NO_CONTEXT)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT);
a9e6df4
+ 
a9e6df4
+     if (interprocess_token == GSS_C_NO_BUFFER)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     return (GSS_S_COMPLETE);
a9e6df4
+ }
a9e6df4
+ 
a9e6df4
+ 
a9e6df4
  OM_uint32 KRB5_CALLCONV
a9e6df4
  gss_export_sec_context(minor_status,
a9e6df4
                         context_handle,
a9e6df4
***************
a9e6df4
*** 50,65 ****
a9e6df4
      gss_mechanism	mech;
a9e6df4
      gss_buffer_desc	token;
a9e6df4
      char		*buf;
a9e6df4
-     
a9e6df4
-     if (minor_status == NULL)
a9e6df4
- 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
-     *minor_status = 0;
a9e6df4
- 
a9e6df4
-     if (context_handle == NULL || *context_handle == GSS_C_NO_CONTEXT)
a9e6df4
- 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT);
a9e6df4
  
a9e6df4
!     if (interprocess_token == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
  
a9e6df4
      /*
a9e6df4
       * select the approprate underlying mechanism routine and
a9e6df4
--- 82,92 ----
a9e6df4
      gss_mechanism	mech;
a9e6df4
      gss_buffer_desc	token;
a9e6df4
      char		*buf;
a9e6df4
  
a9e6df4
!     status = val_exp_sec_ctx_args(minor_status,
a9e6df4
! 				  context_handle, interprocess_token);
a9e6df4
!     if (status != GSS_S_COMPLETE)
a9e6df4
! 	return (status);
a9e6df4
  
a9e6df4
      /*
a9e6df4
       * select the approprate underlying mechanism routine and
a9e6df4
Index: src/lib/gssapi/mechglue/g_canon_name.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_canon_name.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_canon_name.c	(working copy)
a9e6df4
***************
a9e6df4
*** 25,30 ****
a9e6df4
--- 25,58 ----
a9e6df4
  #include <string.h>
a9e6df4
  #include <errno.h>
a9e6df4
  
a9e6df4
+ static OM_uint32
a9e6df4
+ val_canon_name_args(
a9e6df4
+ 	OM_uint32 *minor_status,
a9e6df4
+ 	const gss_name_t input_name,
a9e6df4
+ 	const gss_OID mech_type,
a9e6df4
+ 	gss_name_t *output_name)
a9e6df4
+ {
a9e6df4
+ 
a9e6df4
+ 	/* Initialize outputs. */
a9e6df4
+ 
a9e6df4
+ 	if (minor_status != NULL)
a9e6df4
+ 		*minor_status = 0;
a9e6df4
+ 
a9e6df4
+ 	if (output_name != NULL)
a9e6df4
+ 		*output_name = GSS_C_NO_NAME;
a9e6df4
+ 
a9e6df4
+ 	/* Validate arguments. */
a9e6df4
+ 
a9e6df4
+ 	if (minor_status == NULL)
a9e6df4
+ 		return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+ 	if (input_name == GSS_C_NO_NAME || mech_type == GSS_C_NULL_OID)
a9e6df4
+ 		return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
+ 
a9e6df4
+ 	return (GSS_S_COMPLETE);
a9e6df4
+ }
a9e6df4
+ 
a9e6df4
+ 
a9e6df4
  OM_uint32 KRB5_CALLCONV
a9e6df4
  gss_canonicalize_name(minor_status,
a9e6df4
  				input_name,
a9e6df4
***************
a9e6df4
*** 38,54 ****
a9e6df4
  	gss_union_name_t in_union, out_union = NULL, dest_union = NULL;
a9e6df4
  	OM_uint32 major_status = GSS_S_FAILURE;
a9e6df4
  
a9e6df4
! 	if (minor_status == NULL)
a9e6df4
! 		return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
! 
a9e6df4
! 	*minor_status = 0;
a9e6df4
  
a9e6df4
! 	if (output_name)
a9e6df4
! 		*output_name = 0;
a9e6df4
! 
a9e6df4
! 	/* check the input parameters */
a9e6df4
! 	if (input_name == NULL || mech_type == GSS_C_NULL_OID)
a9e6df4
! 		return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
  
a9e6df4
  	in_union = (gss_union_name_t)input_name;
a9e6df4
  	/*
a9e6df4
--- 66,80 ----
a9e6df4
  	gss_union_name_t in_union, out_union = NULL, dest_union = NULL;
a9e6df4
  	OM_uint32 major_status = GSS_S_FAILURE;
a9e6df4
  
a9e6df4
! 	major_status = val_canon_name_args(minor_status,
a9e6df4
! 					   input_name,
a9e6df4
! 					   mech_type,
a9e6df4
! 					   output_name);
a9e6df4
! 	if (major_status != GSS_S_COMPLETE)
a9e6df4
! 		return (major_status);
a9e6df4
  
a9e6df4
! 	/* Initial value needed below. */
a9e6df4
! 	major_status = GSS_S_FAILURE;
a9e6df4
  
a9e6df4
  	in_union = (gss_union_name_t)input_name;
a9e6df4
  	/*
a9e6df4
Index: src/lib/gssapi/mechglue/g_initialize.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_initialize.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_initialize.c	(working copy)
a9e6df4
***************
a9e6df4
*** 142,158 ****
a9e6df4
  	int i, j;
a9e6df4
  	gss_OID curItem;
a9e6df4
  
a9e6df4
! 	if (!minorStatus)
a9e6df4
! 		return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
! 	if (gssint_initialize_library())
a9e6df4
! 		return GSS_S_FAILURE;
a9e6df4
  
a9e6df4
! 	*minorStatus = 0;
a9e6df4
  
a9e6df4
  
a9e6df4
! 	/* check output parameter */
a9e6df4
! 	if (mechSet == NULL)
a9e6df4
  		return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
  	if (build_mechSet())
a9e6df4
  		return GSS_S_FAILURE;
a9e6df4
--- 142,161 ----
a9e6df4
  	int i, j;
a9e6df4
  	gss_OID curItem;
a9e6df4
  
a9e6df4
! 	/* Initialize outputs. */
a9e6df4
  
a9e6df4
! 	if (minorStatus != NULL)
a9e6df4
! 		*minorStatus = 0;
a9e6df4
  
a9e6df4
+ 	if (mechSet != NULL)
a9e6df4
+ 		*mechSet = GSS_C_NO_OID_SET;
a9e6df4
  
a9e6df4
! 	/* Validate arguments. */
a9e6df4
! 	if (minorStatus == NULL || mechSet == NULL)
a9e6df4
  		return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+ 	if (gssint_initialize_library())
a9e6df4
+ 		return GSS_S_FAILURE;
a9e6df4
  
a9e6df4
  	if (build_mechSet())
a9e6df4
  		return GSS_S_FAILURE;
a9e6df4
Index: src/lib/gssapi/mechglue/g_verify.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_verify.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_verify.c	(working copy)
a9e6df4
***************
a9e6df4
*** 54,60 ****
a9e6df4
      if (context_handle == GSS_C_NO_CONTEXT)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT);
a9e6df4
  
a9e6df4
!     if ((message_buffer == NULL) || GSS_EMPTY_BUFFER(token_buffer))
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
  
a9e6df4
      /*
a9e6df4
--- 54,62 ----
a9e6df4
      if (context_handle == GSS_C_NO_CONTEXT)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT);
a9e6df4
  
a9e6df4
!     if ((message_buffer == GSS_C_NO_BUFFER) ||
a9e6df4
! 	GSS_EMPTY_BUFFER(token_buffer))
a9e6df4
! 
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
  
a9e6df4
      /*
a9e6df4
Index: src/lib/gssapi/mechglue/g_inq_names.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_inq_names.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_inq_names.c	(working copy)
a9e6df4
***************
a9e6df4
*** 41,50 ****
a9e6df4
  {
a9e6df4
      OM_uint32		status;
a9e6df4
      gss_mechanism	mech;
a9e6df4
!     
a9e6df4
      if (minor_status == NULL)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
-     *minor_status = 0;
a9e6df4
  
a9e6df4
      if (name_types == NULL)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
--- 41,59 ----
a9e6df4
  {
a9e6df4
      OM_uint32		status;
a9e6df4
      gss_mechanism	mech;
a9e6df4
! 
a9e6df4
!     /* Initialize outputs. */
a9e6df4
! 
a9e6df4
!     if (minor_status != NULL)
a9e6df4
! 	*minor_status = 0;
a9e6df4
! 
a9e6df4
!     if (name_types != NULL)
a9e6df4
! 	*name_types = GSS_C_NO_OID_SET;
a9e6df4
! 
a9e6df4
!     /* Validate arguments. */
a9e6df4
! 
a9e6df4
      if (minor_status == NULL)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
      if (name_types == NULL)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
***************
a9e6df4
*** 72,77 ****
a9e6df4
--- 81,113 ----
a9e6df4
      
a9e6df4
      return (GSS_S_BAD_MECH);
a9e6df4
  }
a9e6df4
+ 
a9e6df4
+ static OM_uint32
a9e6df4
+ val_inq_mechs4name_args(
a9e6df4
+     OM_uint32 *minor_status,
a9e6df4
+     const gss_name_t input_name,
a9e6df4
+     gss_OID_set *mech_set)
a9e6df4
+ {
a9e6df4
+ 
a9e6df4
+     /* Initialize outputs. */
a9e6df4
+     if (minor_status != NULL)
a9e6df4
+ 	*minor_status = 0;
a9e6df4
+ 
a9e6df4
+     if (mech_set != NULL)
a9e6df4
+ 	*mech_set = GSS_C_NO_OID_SET;
a9e6df4
+ 
a9e6df4
+     /* Validate arguments.e
a9e6df4
+  */
a9e6df4
+     if (minor_status == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     if (input_name == GSS_C_NO_NAME)
a9e6df4
+ 	return (GSS_S_BAD_NAME);
a9e6df4
+ 
a9e6df4
+     return (GSS_S_COMPLETE);
a9e6df4
+ }
a9e6df4
+ 
a9e6df4
+ 
a9e6df4
  OM_uint32 KRB5_CALLCONV
a9e6df4
  gss_inquire_mechs_for_name(minor_status, input_name, mech_set)
a9e6df4
  
a9e6df4
***************
a9e6df4
*** 90,101 ****
a9e6df4
      gss_buffer_desc		name_buffer;
a9e6df4
      int			i;
a9e6df4
  
a9e6df4
!     if (minor_status == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
!     *minor_status = 0;
a9e6df4
! 
a9e6df4
!     if (input_name == NULL)
a9e6df4
! 	return (GSS_S_BAD_NAME);
a9e6df4
  
a9e6df4
      status = gss_create_empty_oid_set(minor_status, mech_set);
a9e6df4
      if (status != GSS_S_COMPLETE)
a9e6df4
--- 126,134 ----
a9e6df4
      gss_buffer_desc		name_buffer;
a9e6df4
      int			i;
a9e6df4
  
a9e6df4
!     status = val_inq_mechs4name_args(minor_status, input_name, mech_set);
a9e6df4
!     if (status != GSS_S_COMPLETE)
a9e6df4
! 	return (status);
a9e6df4
  
a9e6df4
      status = gss_create_empty_oid_set(minor_status, mech_set);
a9e6df4
      if (status != GSS_S_COMPLETE)
a9e6df4
Index: src/lib/gssapi/mechglue/g_export_name.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_export_name.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_export_name.c	(working copy)
a9e6df4
***************
a9e6df4
*** 29,47 ****
a9e6df4
  {
a9e6df4
  	gss_union_name_t		union_name;
a9e6df4
  
a9e6df4
  
a9e6df4
! 	if (minor_status)
a9e6df4
  		*minor_status = 0;
a9e6df4
  
a9e6df4
! 	/* check out parameter */
a9e6df4
! 	if (!exported_name)
a9e6df4
! 		return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
! 	exported_name->value = NULL;
a9e6df4
! 	exported_name->length = 0;
a9e6df4
  
a9e6df4
! 	/* check input parameter */
a9e6df4
! 	if (!input_name)
a9e6df4
  		return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME);
a9e6df4
  
a9e6df4
  	union_name = (gss_union_name_t)input_name;
a9e6df4
--- 29,50 ----
a9e6df4
  {
a9e6df4
  	gss_union_name_t		union_name;
a9e6df4
  
a9e6df4
+ 	/* Initialize outputs. */
a9e6df4
  
a9e6df4
! 	if (minor_status != NULL)
a9e6df4
  		*minor_status = 0;
a9e6df4
  
a9e6df4
! 	if (exported_name != GSS_C_NO_BUFFER) {
a9e6df4
! 		exported_name->value = NULL;
a9e6df4
! 		exported_name->length = 0;
a9e6df4
! 	}
a9e6df4
! 
a9e6df4
! 	/* Validate arguments. */
a9e6df4
  
a9e6df4
! 	if (minor_status == NULL || exported_name == GSS_C_NO_BUFFER)
a9e6df4
! 		return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
! 	if (input_name == GSS_C_NO_NAME)
a9e6df4
  		return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME);
a9e6df4
  
a9e6df4
  	union_name = (gss_union_name_t)input_name;
a9e6df4
Index: src/lib/gssapi/mechglue/g_process_context.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_process_context.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_process_context.c	(working copy)
a9e6df4
***************
a9e6df4
*** 49,54 ****
a9e6df4
--- 49,57 ----
a9e6df4
      if (context_handle == GSS_C_NO_CONTEXT)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT);
a9e6df4
  
a9e6df4
+     if (token_buffer == GSS_C_NO_BUFFER)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
+ 
a9e6df4
      if (GSS_EMPTY_BUFFER(token_buffer))
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
  
a9e6df4
Index: src/lib/gssapi/mechglue/g_imp_sec_context.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_imp_sec_context.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_imp_sec_context.c	(working copy)
a9e6df4
***************
a9e6df4
*** 34,39 ****
a9e6df4
--- 34,71 ----
a9e6df4
  #endif
a9e6df4
  #include <string.h>
a9e6df4
  
a9e6df4
+ static OM_uint32
a9e6df4
+ val_imp_sec_ctx_args(
a9e6df4
+     OM_uint32 *minor_status,
a9e6df4
+     gss_buffer_t interprocess_token,
a9e6df4
+     gss_ctx_id_t *context_handle)
a9e6df4
+ {
a9e6df4
+ 
a9e6df4
+     /* Initialize outputs. */
a9e6df4
+     if (minor_status != NULL)
a9e6df4
+ 	*minor_status = 0;
a9e6df4
+ 
a9e6df4
+     if (context_handle != NULL)
a9e6df4
+ 	*context_handle = GSS_C_NO_CONTEXT;
a9e6df4
+ 
a9e6df4
+     /* Validate arguments. */
a9e6df4
+ 
a9e6df4
+     if (minor_status == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     if (context_handle == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     if (interprocess_token == GSS_C_NO_BUFFER)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_DEFECTIVE_TOKEN);
a9e6df4
+ 
a9e6df4
+     if (GSS_EMPTY_BUFFER(interprocess_token))
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_DEFECTIVE_TOKEN);
a9e6df4
+ 
a9e6df4
+     return (GSS_S_COMPLETE);
a9e6df4
+ }
a9e6df4
+ 
a9e6df4
+ 
a9e6df4
  OM_uint32 KRB5_CALLCONV
a9e6df4
  gss_import_sec_context(minor_status,
a9e6df4
                         interprocess_token,
a9e6df4
***************
a9e6df4
*** 50,67 ****
a9e6df4
      gss_union_ctx_id_t	ctx;
a9e6df4
      gss_buffer_desc	token;
a9e6df4
      gss_mechanism	mech;
a9e6df4
-     
a9e6df4
-     if (minor_status == NULL)
a9e6df4
- 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
-     *minor_status = 0;
a9e6df4
-     
a9e6df4
-     if (context_handle == NULL)
a9e6df4
- 	return (GSS_S_CALL_INACCESSIBLE_WRITE | GSS_S_NO_CONTEXT);
a9e6df4
-     *context_handle = GSS_C_NO_CONTEXT;
a9e6df4
  
a9e6df4
!     if (GSS_EMPTY_BUFFER(interprocess_token))
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_DEFECTIVE_TOKEN);
a9e6df4
  
a9e6df4
      status = GSS_S_FAILURE;
a9e6df4
  
a9e6df4
      ctx = (gss_union_ctx_id_t) malloc(sizeof(gss_union_ctx_id_desc));
a9e6df4
--- 82,94 ----
a9e6df4
      gss_union_ctx_id_t	ctx;
a9e6df4
      gss_buffer_desc	token;
a9e6df4
      gss_mechanism	mech;
a9e6df4
  
a9e6df4
!     status = val_imp_sec_ctx_args(minor_status,
a9e6df4
! 				  interprocess_token, context_handle);
a9e6df4
!     if (status != GSS_S_COMPLETE)
a9e6df4
! 	return (status);
a9e6df4
  
a9e6df4
+     /* Initial value needed below. */
a9e6df4
      status = GSS_S_FAILURE;
a9e6df4
  
a9e6df4
      ctx = (gss_union_ctx_id_t) malloc(sizeof(gss_union_ctx_id_desc));
a9e6df4
Index: src/lib/gssapi/mechglue/g_seal.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_seal.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_seal.c	(working copy)
a9e6df4
***************
a9e6df4
*** 28,33 ****
a9e6df4
--- 28,72 ----
a9e6df4
  
a9e6df4
  #include "mglueP.h"
a9e6df4
  
a9e6df4
+ static OM_uint32
a9e6df4
+ val_seal_args(
a9e6df4
+     OM_uint32 *minor_status,
a9e6df4
+     gss_ctx_id_t context_handle,
a9e6df4
+     int conf_req_flag,
a9e6df4
+     int qop_req,
a9e6df4
+     gss_buffer_t input_message_buffer,
a9e6df4
+     int *conf_state,
a9e6df4
+     gss_buffer_t output_message_buffer)
a9e6df4
+ {
a9e6df4
+ 
a9e6df4
+     /* Initialize outputs. */
a9e6df4
+ 
a9e6df4
+     if (minor_status != NULL)
a9e6df4
+ 	*minor_status = 0;
a9e6df4
+ 
a9e6df4
+     if (output_message_buffer != GSS_C_NO_BUFFER) {
a9e6df4
+ 	output_message_buffer->length = 0;
a9e6df4
+ 	output_message_buffer->value = NULL;
a9e6df4
+     }
a9e6df4
+ 
a9e6df4
+     /* Validate arguments. */
a9e6df4
+ 
a9e6df4
+     if (minor_status == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     if (context_handle == GSS_C_NO_CONTEXT)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT);
a9e6df4
+ 
a9e6df4
+     if (input_message_buffer == GSS_C_NO_BUFFER)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
+ 
a9e6df4
+     if (output_message_buffer == GSS_C_NO_BUFFER)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     return (GSS_S_COMPLETE);
a9e6df4
+ }
a9e6df4
+ 
a9e6df4
+ 
a9e6df4
  OM_uint32 KRB5_CALLCONV
a9e6df4
  gss_seal (minor_status,
a9e6df4
            context_handle,
a9e6df4
***************
a9e6df4
*** 51,68 ****
a9e6df4
      gss_union_ctx_id_t	ctx;
a9e6df4
      gss_mechanism	mech;
a9e6df4
  
a9e6df4
!     if (minor_status == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
!     *minor_status = 0;
a9e6df4
! 
a9e6df4
!     if (context_handle == GSS_C_NO_CONTEXT)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT);
a9e6df4
! 
a9e6df4
!     if (input_message_buffer == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
! 
a9e6df4
!     if (output_message_buffer == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
      /*
a9e6df4
       * select the approprate underlying mechanism routine and
a9e6df4
--- 90,101 ----
a9e6df4
      gss_union_ctx_id_t	ctx;
a9e6df4
      gss_mechanism	mech;
a9e6df4
  
a9e6df4
!     status = val_seal_args(minor_status, context_handle,
a9e6df4
! 			   conf_req_flag, qop_req,
a9e6df4
! 			   input_message_buffer, conf_state,
a9e6df4
! 			   output_message_buffer);
a9e6df4
!     if (status != GSS_S_COMPLETE)
a9e6df4
! 	return (status);
a9e6df4
  
a9e6df4
      /*
a9e6df4
       * select the approprate underlying mechanism routine and
a9e6df4
Index: src/lib/gssapi/mechglue/g_acquire_cred.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_acquire_cred.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_acquire_cred.c	(working copy)
a9e6df4
***************
a9e6df4
*** 71,76 ****
a9e6df4
--- 71,113 ----
a9e6df4
      return actual_mechs;
a9e6df4
  }
a9e6df4
  
a9e6df4
+ static OM_uint32
a9e6df4
+ val_acq_cred_args(
a9e6df4
+     OM_uint32 *minor_status,
a9e6df4
+     gss_name_t desired_name,
a9e6df4
+     OM_uint32 time_req,
a9e6df4
+     gss_OID_set desired_mechs,
a9e6df4
+     int cred_usage,
a9e6df4
+     gss_cred_id_t *output_cred_handle,
a9e6df4
+     gss_OID_set *actual_mechs,
a9e6df4
+     OM_uint32 *time_rec)
a9e6df4
+ {
a9e6df4
+ 
a9e6df4
+     /* Initialize outputs. */
a9e6df4
+ 
a9e6df4
+     if (minor_status != NULL)
a9e6df4
+ 	*minor_status = 0;
a9e6df4
+ 
a9e6df4
+     if (output_cred_handle != NULL)
a9e6df4
+ 	*output_cred_handle = GSS_C_NO_CREDENTIAL;
a9e6df4
+ 
a9e6df4
+     if (actual_mechs != NULL)
a9e6df4
+ 	*actual_mechs = GSS_C_NULL_OID_SET;
a9e6df4
+ 
a9e6df4
+     if (time_rec != NULL)
a9e6df4
+ 	*time_rec = 0;
a9e6df4
+ 
a9e6df4
+     /* Validate arguments. */
a9e6df4
+ 
a9e6df4
+     if (minor_status == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     if (output_cred_handle == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     return (GSS_S_COMPLETE);
a9e6df4
+ }
a9e6df4
+ 
a9e6df4
  
a9e6df4
  OM_uint32 KRB5_CALLCONV
a9e6df4
  gss_acquire_cred(minor_status,
a9e6df4
***************
a9e6df4
*** 101,122 ****
a9e6df4
      int i;
a9e6df4
      gss_union_cred_t creds;
a9e6df4
  
a9e6df4
!     /* start by checking parameters */
a9e6df4
!     if (!minor_status)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
!     *minor_status = 0;
a9e6df4
!     
a9e6df4
!     if (!output_cred_handle)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE | GSS_S_NO_CRED);
a9e6df4
! 
a9e6df4
!     *output_cred_handle = GSS_C_NO_CREDENTIAL;
a9e6df4
! 
a9e6df4
!     /* Set output parameters to NULL for now */
a9e6df4
!     if (actual_mechs)
a9e6df4
! 	*actual_mechs = GSS_C_NULL_OID_SET;
a9e6df4
  
a9e6df4
!     if (time_rec)
a9e6df4
! 	*time_rec = 0;
a9e6df4
  
a9e6df4
      /*
a9e6df4
       * if desired_mechs equals GSS_C_NULL_OID_SET, then pick an
a9e6df4
--- 138,156 ----
a9e6df4
      int i;
a9e6df4
      gss_union_cred_t creds;
a9e6df4
  
a9e6df4
!     major = val_acq_cred_args(minor_status,
a9e6df4
! 			      desired_name,
a9e6df4
! 			      time_req,
a9e6df4
! 			      desired_mechs,
a9e6df4
! 			      cred_usage,
a9e6df4
! 			      output_cred_handle,
a9e6df4
! 			      actual_mechs,
a9e6df4
! 			      time_rec);
a9e6df4
!     if (major != GSS_S_COMPLETE)
a9e6df4
! 	return (major);
a9e6df4
  
a9e6df4
!     /* Initial value needed below. */
a9e6df4
!     major = GSS_S_FAILURE;
a9e6df4
  
a9e6df4
      /*
a9e6df4
       * if desired_mechs equals GSS_C_NULL_OID_SET, then pick an
a9e6df4
***************
a9e6df4
*** 208,213 ****
a9e6df4
--- 242,293 ----
a9e6df4
      return (GSS_S_COMPLETE);
a9e6df4
  }
a9e6df4
  
a9e6df4
+ static OM_uint32
a9e6df4
+ val_add_cred_args(
a9e6df4
+     OM_uint32 *minor_status,
a9e6df4
+     gss_cred_id_t input_cred_handle,
a9e6df4
+     gss_name_t desired_name,
a9e6df4
+     gss_OID desired_mech,
a9e6df4
+     gss_cred_usage_t cred_usage,
a9e6df4
+     OM_uint32 initiator_time_req,
a9e6df4
+     OM_uint32 acceptor_time_req,
a9e6df4
+     gss_cred_id_t *output_cred_handle,
a9e6df4
+     gss_OID_set *actual_mechs,
a9e6df4
+     OM_uint32 *initiator_time_rec,
a9e6df4
+     OM_uint32 *acceptor_time_rec)
a9e6df4
+ {
a9e6df4
+ 
a9e6df4
+     /* Initialize outputs. */
a9e6df4
+ 
a9e6df4
+     if (minor_status != NULL)
a9e6df4
+ 	*minor_status = 0;
a9e6df4
+ 
a9e6df4
+     if (output_cred_handle != NULL)
a9e6df4
+ 	*output_cred_handle = GSS_C_NO_CREDENTIAL;
a9e6df4
+ 
a9e6df4
+     if (actual_mechs != NULL)
a9e6df4
+ 	*actual_mechs = GSS_C_NO_OID_SET;
a9e6df4
+ 
a9e6df4
+     if (acceptor_time_rec != NULL)
a9e6df4
+ 	*acceptor_time_rec = 0;
a9e6df4
+ 
a9e6df4
+     if (initiator_time_rec != NULL)
a9e6df4
+ 	*initiator_time_rec = 0;
a9e6df4
+ 
a9e6df4
+     /* Validate arguments. */
a9e6df4
+ 
a9e6df4
+     if (minor_status == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     if (input_cred_handle == GSS_C_NO_CREDENTIAL &&
a9e6df4
+ 	output_cred_handle == NULL)
a9e6df4
+ 
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE | GSS_S_NO_CRED);
a9e6df4
+ 
a9e6df4
+     return (GSS_S_COMPLETE);
a9e6df4
+ }
a9e6df4
+ 
a9e6df4
+ 
a9e6df4
  /* V2 KRB5_CALLCONV */
a9e6df4
  OM_uint32 KRB5_CALLCONV
a9e6df4
  gss_add_cred(minor_status, input_cred_handle,
a9e6df4
***************
a9e6df4
*** 238,263 ****
a9e6df4
      gss_OID		new_mechs_array = NULL;
a9e6df4
      gss_cred_id_t *	new_cred_array = NULL;
a9e6df4
  
a9e6df4
!     /* check input parameters */
a9e6df4
!     if (minor_status == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
!     *minor_status = 0;
a9e6df4
! 
a9e6df4
!     if (input_cred_handle == GSS_C_NO_CREDENTIAL &&
a9e6df4
! 	output_cred_handle == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE | GSS_S_NO_CRED);
a9e6df4
! 
a9e6df4
!     if (output_cred_handle)
a9e6df4
! 	*output_cred_handle = GSS_C_NO_CREDENTIAL;
a9e6df4
! 
a9e6df4
!     if (actual_mechs)
a9e6df4
! 	*actual_mechs = NULL;
a9e6df4
! 
a9e6df4
!     if (acceptor_time_rec)
a9e6df4
! 	*acceptor_time_rec = 0;
a9e6df4
! 
a9e6df4
!     if (initiator_time_rec)
a9e6df4
! 	*initiator_time_rec = 0;
a9e6df4
  
a9e6df4
      mech = gssint_get_mechanism(desired_mech);
a9e6df4
      if (!mech)
a9e6df4
--- 318,336 ----
a9e6df4
      gss_OID		new_mechs_array = NULL;
a9e6df4
      gss_cred_id_t *	new_cred_array = NULL;
a9e6df4
  
a9e6df4
!     status = val_add_cred_args(minor_status,
a9e6df4
! 			       input_cred_handle,
a9e6df4
! 			       desired_name,
a9e6df4
! 			       desired_mech,
a9e6df4
! 			       cred_usage,
a9e6df4
! 			       initiator_time_req,
a9e6df4
! 			       acceptor_time_req,
a9e6df4
! 			       output_cred_handle,
a9e6df4
! 			       actual_mechs,
a9e6df4
! 			       initiator_time_rec,
a9e6df4
! 			       acceptor_time_rec);
a9e6df4
!     if (status != GSS_S_COMPLETE)
a9e6df4
! 	return (status);
a9e6df4
  
a9e6df4
      mech = gssint_get_mechanism(desired_mech);
a9e6df4
      if (!mech)
a9e6df4
Index: src/lib/gssapi/mechglue/g_dsp_name.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_dsp_name.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_dsp_name.c	(working copy)
a9e6df4
***************
a9e6df4
*** 34,39 ****
a9e6df4
--- 34,75 ----
a9e6df4
  #endif
a9e6df4
  #include <string.h>
a9e6df4
  
a9e6df4
+ static OM_uint32
a9e6df4
+ val_dsp_name_args(
a9e6df4
+     OM_uint32 *minor_status,
a9e6df4
+     gss_name_t input_name,
a9e6df4
+     gss_buffer_t output_name_buffer,
a9e6df4
+     gss_OID *output_name_type)
a9e6df4
+ {
a9e6df4
+ 
a9e6df4
+     /* Initialize outputs. */
a9e6df4
+ 
a9e6df4
+     if (minor_status != NULL)
a9e6df4
+ 	*minor_status = 0;
a9e6df4
+ 
a9e6df4
+     if (output_name_buffer != GSS_C_NO_BUFFER) {
a9e6df4
+ 	output_name_buffer->length = 0;
a9e6df4
+ 	output_name_buffer->value = NULL;
a9e6df4
+     }
a9e6df4
+ 
a9e6df4
+     if (output_name_type != NULL)
a9e6df4
+ 	*output_name_type = GSS_C_NO_OID;
a9e6df4
+ 
a9e6df4
+     /* Validate arguments. */
a9e6df4
+ 
a9e6df4
+     if (minor_status == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     if (output_name_buffer == GSS_C_NO_BUFFER)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     if (input_name == GSS_C_NO_NAME)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME);
a9e6df4
+ 
a9e6df4
+     return (GSS_S_COMPLETE);
a9e6df4
+ }
a9e6df4
+ 
a9e6df4
+ 
a9e6df4
  OM_uint32 KRB5_CALLCONV
a9e6df4
  gss_display_name (minor_status,
a9e6df4
                    input_name,
a9e6df4
***************
a9e6df4
*** 48,66 ****
a9e6df4
  {
a9e6df4
      OM_uint32		major_status;
a9e6df4
      gss_union_name_t	union_name;
a9e6df4
-     
a9e6df4
-     if (minor_status == NULL)
a9e6df4
- 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
-     *minor_status = 0;
a9e6df4
- 
a9e6df4
-     if (input_name == 0)
a9e6df4
- 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME);
a9e6df4
- 
a9e6df4
-     if (output_name_buffer == NULL)
a9e6df4
- 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
!     if (output_name_type)
a9e6df4
! 	*output_name_type = NULL;
a9e6df4
  
a9e6df4
      union_name = (gss_union_name_t) input_name;
a9e6df4
  
a9e6df4
--- 84,94 ----
a9e6df4
  {
a9e6df4
      OM_uint32		major_status;
a9e6df4
      gss_union_name_t	union_name;
a9e6df4
  
a9e6df4
!     major_status = val_dsp_name_args(minor_status, input_name,
a9e6df4
! 				     output_name_buffer, output_name_type);
a9e6df4
!     if (major_status != GSS_S_COMPLETE)
a9e6df4
! 	return (major_status);
a9e6df4
  
a9e6df4
      union_name = (gss_union_name_t) input_name;
a9e6df4
  
a9e6df4
Index: src/lib/gssapi/mechglue/g_unseal.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_unseal.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_unseal.c	(working copy)
a9e6df4
***************
a9e6df4
*** 49,69 ****
a9e6df4
      gss_union_ctx_id_t	ctx;
a9e6df4
      gss_mechanism	mech;
a9e6df4
  
a9e6df4
      if (minor_status == NULL)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
-     *minor_status = 0;
a9e6df4
  
a9e6df4
      if (context_handle == GSS_C_NO_CONTEXT)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT);
a9e6df4
  
a9e6df4
!     if (GSS_EMPTY_BUFFER(input_message_buffer))
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
  
a9e6df4
!     if (output_message_buffer == NULL)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
- 
a9e6df4
-     output_message_buffer->length = 0;
a9e6df4
-     output_message_buffer->value = NULL;
a9e6df4
  
a9e6df4
      /*
a9e6df4
       * select the approprate underlying mechanism routine and
a9e6df4
--- 49,75 ----
a9e6df4
      gss_union_ctx_id_t	ctx;
a9e6df4
      gss_mechanism	mech;
a9e6df4
  
a9e6df4
+     if (minor_status != NULL)
a9e6df4
+ 	*minor_status = 0;
a9e6df4
+ 
a9e6df4
+     if (output_message_buffer != GSS_C_NO_BUFFER) {
a9e6df4
+ 	output_message_buffer->length = 0;
a9e6df4
+ 	output_message_buffer->value = NULL;
a9e6df4
+     }
a9e6df4
+ 
a9e6df4
      if (minor_status == NULL)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
      if (context_handle == GSS_C_NO_CONTEXT)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT);
a9e6df4
  
a9e6df4
!     if (input_message_buffer == GSS_C_NO_BUFFER ||
a9e6df4
! 	GSS_EMPTY_BUFFER(input_message_buffer))
a9e6df4
! 
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
  
a9e6df4
!     if (output_message_buffer == GSS_C_NO_BUFFER)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
      /*
a9e6df4
       * select the approprate underlying mechanism routine and
a9e6df4
Index: src/lib/gssapi/mechglue/g_dup_name.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_dup_name.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_dup_name.c	(working copy)
a9e6df4
***************
a9e6df4
*** 19,24 ****
a9e6df4
--- 19,55 ----
a9e6df4
  #include <string.h>
a9e6df4
  #include <errno.h>
a9e6df4
  
a9e6df4
+ static OM_uint32
a9e6df4
+ val_dup_name_args(
a9e6df4
+ 	OM_uint32 *minor_status,
a9e6df4
+ 	const gss_name_t src_name,
a9e6df4
+ 	gss_name_t *dest_name)
a9e6df4
+ {
a9e6df4
+ 
a9e6df4
+ 	/* Initialize outputs. */
a9e6df4
+ 
a9e6df4
+ 	if (minor_status != NULL)
a9e6df4
+ 		*minor_status = 0;
a9e6df4
+ 
a9e6df4
+ 	if (dest_name != NULL)
a9e6df4
+ 		*dest_name = GSS_C_NO_NAME;
a9e6df4
+ 
a9e6df4
+ 	/* Validate arguments. */
a9e6df4
+ 
a9e6df4
+ 	if (minor_status == NULL)
a9e6df4
+ 		return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+ 	/* if output_name is NULL, simply return */
a9e6df4
+ 	if (dest_name == NULL)
a9e6df4
+ 		return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+ 	if (src_name == GSS_C_NO_NAME)
a9e6df4
+ 		return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME);
a9e6df4
+ 
a9e6df4
+ 	return (GSS_S_COMPLETE);
a9e6df4
+ }
a9e6df4
+ 
a9e6df4
+ 
a9e6df4
  OM_uint32 KRB5_CALLCONV
a9e6df4
  gss_duplicate_name(minor_status,
a9e6df4
  		src_name,
a9e6df4
***************
a9e6df4
*** 30,49 ****
a9e6df4
  		gss_union_name_t src_union, dest_union;
a9e6df4
  		OM_uint32 major_status = GSS_S_FAILURE;
a9e6df4
  
a9e6df4
! 
a9e6df4
! 	if (!minor_status)
a9e6df4
! 		return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
! 
a9e6df4
! 	*minor_status = 0;
a9e6df4
! 
a9e6df4
! 	/* if output_name is NULL, simply return */
a9e6df4
! 	if (dest_name == NULL)
a9e6df4
! 		return (GSS_S_CALL_INACCESSIBLE_WRITE | GSS_S_BAD_NAME);
a9e6df4
! 
a9e6df4
! 	*dest_name = 0;
a9e6df4
! 
a9e6df4
! 	if (src_name == NULL)
a9e6df4
! 		return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
  
a9e6df4
  	src_union = (gss_union_name_t)src_name;
a9e6df4
  
a9e6df4
--- 61,69 ----
a9e6df4
  		gss_union_name_t src_union, dest_union;
a9e6df4
  		OM_uint32 major_status = GSS_S_FAILURE;
a9e6df4
  
a9e6df4
! 	major_status = val_dup_name_args(minor_status, src_name, dest_name);
a9e6df4
! 	if (major_status != GSS_S_COMPLETE)
a9e6df4
! 		return (major_status);
a9e6df4
  
a9e6df4
  	src_union = (gss_union_name_t)src_name;
a9e6df4
  
a9e6df4
Index: src/lib/gssapi/mechglue/g_dsp_status.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_dsp_status.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_dsp_status.c	(working copy)
a9e6df4
***************
a9e6df4
*** 54,70 ****
a9e6df4
      gss_OID		mech_type = (gss_OID) req_mech_type;
a9e6df4
      gss_mechanism	mech;
a9e6df4
  
a9e6df4
!     /* check the input parameters */
a9e6df4
!     if (!minor_status)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
!     *minor_status = 0;
a9e6df4
  
a9e6df4
!     if (!message_context || status_string == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
!     status_string->length = 0;
a9e6df4
!     status_string->value = NULL;
a9e6df4
  
a9e6df4
      /* we handle major status codes, and the mechs do the minor */
a9e6df4
      if (status_type == GSS_C_GSS_CODE)
a9e6df4
--- 54,72 ----
a9e6df4
      gss_OID		mech_type = (gss_OID) req_mech_type;
a9e6df4
      gss_mechanism	mech;
a9e6df4
  
a9e6df4
!     if (minor_status != NULL)
a9e6df4
! 	*minor_status = 0;
a9e6df4
  
a9e6df4
!     if (status_string != GSS_C_NO_BUFFER) {
a9e6df4
! 	status_string->length = 0;
a9e6df4
! 	status_string->value = NULL;
a9e6df4
!     }
a9e6df4
  
a9e6df4
!     if (minor_status == NULL ||
a9e6df4
! 	message_context == NULL ||
a9e6df4
! 	status_string == GSS_C_NO_BUFFER)
a9e6df4
  
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
      /* we handle major status codes, and the mechs do the minor */
a9e6df4
      if (status_type == GSS_C_GSS_CODE)
a9e6df4
Index: src/lib/gssapi/mechglue/g_inq_context.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_inq_context.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_inq_context.c	(working copy)
a9e6df4
***************
a9e6df4
*** 31,36 ****
a9e6df4
--- 31,75 ----
a9e6df4
  #include <stdlib.h>
a9e6df4
  #endif
a9e6df4
  
a9e6df4
+ static OM_uint32
a9e6df4
+ val_inq_ctx_args(
a9e6df4
+     OM_uint32 *minor_status,
a9e6df4
+     gss_ctx_id_t context_handle,
a9e6df4
+     gss_name_t *src_name,
a9e6df4
+     gss_name_t *targ_name,
a9e6df4
+     OM_uint32 *lifetime_rec,
a9e6df4
+     gss_OID *mech_type,
a9e6df4
+     OM_uint32 *ctx_flags,
a9e6df4
+     int *locally_initiated,
a9e6df4
+     int *open)
a9e6df4
+ {
a9e6df4
+ 
a9e6df4
+     /* Initialize outputs. */
a9e6df4
+ 
a9e6df4
+     if (minor_status != NULL)
a9e6df4
+ 	*minor_status = 0;
a9e6df4
+ 
a9e6df4
+     if (src_name != NULL)
a9e6df4
+ 	*src_name = GSS_C_NO_NAME;
a9e6df4
+ 
a9e6df4
+     if (targ_name != NULL)
a9e6df4
+ 	*targ_name = GSS_C_NO_NAME;
a9e6df4
+ 
a9e6df4
+     if (mech_type != NULL)
a9e6df4
+ 	*mech_type = GSS_C_NO_OID;
a9e6df4
+ 
a9e6df4
+     /* Validate arguments. */
a9e6df4
+ 
a9e6df4
+     if (minor_status == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     if (context_handle == GSS_C_NO_CONTEXT)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT);
a9e6df4
+ 
a9e6df4
+     return (GSS_S_COMPLETE);
a9e6df4
+ }
a9e6df4
+ 
a9e6df4
+ 
a9e6df4
  /* Last argument new for V2 */
a9e6df4
  OM_uint32 KRB5_CALLCONV
a9e6df4
  gss_inquire_context(
a9e6df4
***************
a9e6df4
*** 60,85 ****
a9e6df4
      gss_mechanism	mech;
a9e6df4
      OM_uint32		status, temp_minor;
a9e6df4
      gss_name_t localTargName = NULL, localSourceName = NULL;
a9e6df4
-     
a9e6df4
-     if (!minor_status)
a9e6df4
- 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
!     *minor_status = 0;
a9e6df4
!     
a9e6df4
!     /* if the context_handle is Null, return NO_CONTEXT error */
a9e6df4
!     if (context_handle == GSS_C_NO_CONTEXT)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT);
a9e6df4
  
a9e6df4
-     /* set all output value to NULL */
a9e6df4
-     if (src_name)
a9e6df4
- 	*src_name = NULL;
a9e6df4
- 
a9e6df4
-     if (targ_name)
a9e6df4
- 	*targ_name = NULL;
a9e6df4
- 
a9e6df4
-     if (mech_type)
a9e6df4
- 	*mech_type = NULL;
a9e6df4
-     
a9e6df4
      /*
a9e6df4
       * select the approprate underlying mechanism routine and
a9e6df4
       * call it.
a9e6df4
--- 99,114 ----
a9e6df4
      gss_mechanism	mech;
a9e6df4
      OM_uint32		status, temp_minor;
a9e6df4
      gss_name_t localTargName = NULL, localSourceName = NULL;
a9e6df4
  
a9e6df4
!     status = val_inq_ctx_args(minor_status,
a9e6df4
! 			      context_handle,
a9e6df4
! 			      src_name, targ_name,
a9e6df4
! 			      lifetime_rec,
a9e6df4
! 			      mech_type, ctx_flags,
a9e6df4
! 			      locally_initiated, open);
a9e6df4
!     if (status != GSS_S_COMPLETE)
a9e6df4
! 	return (status);
a9e6df4
  
a9e6df4
      /*
a9e6df4
       * select the approprate underlying mechanism routine and
a9e6df4
       * call it.
a9e6df4
Index: src/lib/gssapi/mechglue/g_accept_sec_context.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_accept_sec_context.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_accept_sec_context.c	(working copy)
a9e6df4
***************
a9e6df4
*** 33,38 ****
a9e6df4
--- 33,90 ----
a9e6df4
  #include <string.h>
a9e6df4
  #include <errno.h>
a9e6df4
  
a9e6df4
+ static OM_uint32
a9e6df4
+ val_acc_sec_ctx_args(
a9e6df4
+     OM_uint32 *minor_status,
a9e6df4
+     gss_ctx_id_t *context_handle,
a9e6df4
+     gss_cred_id_t verifier_cred_handle,
a9e6df4
+     gss_buffer_t input_token_buffer,
a9e6df4
+     gss_channel_bindings_t input_chan_bindings,
a9e6df4
+     gss_name_t *src_name,
a9e6df4
+     gss_OID *mech_type,
a9e6df4
+     gss_buffer_t output_token,
a9e6df4
+     OM_uint32 *ret_flags,
a9e6df4
+     OM_uint32 *time_rec,
a9e6df4
+     gss_cred_id_t *d_cred)
a9e6df4
+ {
a9e6df4
+ 
a9e6df4
+     /* Initialize outputs. */
a9e6df4
+ 
a9e6df4
+     if (minor_status != NULL)
a9e6df4
+ 	*minor_status = 0;
a9e6df4
+ 
a9e6df4
+     if (src_name != NULL)
a9e6df4
+ 	*src_name = GSS_C_NO_NAME;
a9e6df4
+ 
a9e6df4
+     if (mech_type != NULL)
a9e6df4
+ 	*mech_type = GSS_C_NO_OID;
a9e6df4
+ 
a9e6df4
+     if (output_token != GSS_C_NO_BUFFER) {
a9e6df4
+ 	output_token->length = 0;
a9e6df4
+ 	output_token->value = NULL;
a9e6df4
+     }
a9e6df4
+ 
a9e6df4
+     if (d_cred != NULL)
a9e6df4
+ 	*d_cred = GSS_C_NO_CREDENTIAL;
a9e6df4
+ 
a9e6df4
+     /* Validate arguments. */
a9e6df4
+ 
a9e6df4
+     if (minor_status == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     if (context_handle == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     if (input_token_buffer == GSS_C_NO_BUFFER)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
+ 
a9e6df4
+     if (output_token == GSS_C_NO_BUFFER)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     return (GSS_S_COMPLETE);
a9e6df4
+ }
a9e6df4
+ 
a9e6df4
+ 
a9e6df4
  OM_uint32 KRB5_CALLCONV
a9e6df4
  gss_accept_sec_context (minor_status,
a9e6df4
                          context_handle,
a9e6df4
***************
a9e6df4
*** 69,94 ****
a9e6df4
      gss_OID_desc	token_mech_type_desc;
a9e6df4
      gss_OID		token_mech_type = &token_mech_type_desc;
a9e6df4
      gss_mechanism	mech;
a9e6df4
-     
a9e6df4
-     /* check parameters first */
a9e6df4
-     if (minor_status == NULL)
a9e6df4
- 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
-     *minor_status = 0;
a9e6df4
-  
a9e6df4
-     if (context_handle == NULL || output_token == NULL)
a9e6df4
- 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
-  
a9e6df4
-     /* clear optional fields */
a9e6df4
-     output_token->value = NULL;
a9e6df4
-     output_token->length = 0;
a9e6df4
-     if (src_name)
a9e6df4
- 	*src_name = NULL;
a9e6df4
  
a9e6df4
!     if (mech_type)
a9e6df4
! 	*mech_type = NULL;
a9e6df4
  
a9e6df4
-     if (d_cred)
a9e6df4
- 	*d_cred = NULL;
a9e6df4
      /*
a9e6df4
       * if context_handle is GSS_C_NO_CONTEXT, allocate a union context
a9e6df4
       * descriptor to hold the mech type information as well as the
a9e6df4
--- 121,141 ----
a9e6df4
      gss_OID_desc	token_mech_type_desc;
a9e6df4
      gss_OID		token_mech_type = &token_mech_type_desc;
a9e6df4
      gss_mechanism	mech;
a9e6df4
  
a9e6df4
!     status = val_acc_sec_ctx_args(minor_status,
a9e6df4
! 				  context_handle,
a9e6df4
! 				  verifier_cred_handle,
a9e6df4
! 				  input_token_buffer,
a9e6df4
! 				  input_chan_bindings,
a9e6df4
! 				  src_name,
a9e6df4
! 				  mech_type,
a9e6df4
! 				  output_token,
a9e6df4
! 				  ret_flags,
a9e6df4
! 				  time_rec,
a9e6df4
! 				  d_cred);
a9e6df4
!     if (status != GSS_S_COMPLETE)
a9e6df4
! 	return (status);
a9e6df4
  
a9e6df4
      /*
a9e6df4
       * if context_handle is GSS_C_NO_CONTEXT, allocate a union context
a9e6df4
       * descriptor to hold the mech type information as well as the
a9e6df4
Index: src/lib/gssapi/mechglue/g_sign.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_sign.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_sign.c	(working copy)
a9e6df4
***************
a9e6df4
*** 28,33 ****
a9e6df4
--- 28,70 ----
a9e6df4
  
a9e6df4
  #include "mglueP.h"
a9e6df4
  
a9e6df4
+ static OM_uint32
a9e6df4
+ val_sign_args(
a9e6df4
+     OM_uint32 *minor_status,
a9e6df4
+     gss_ctx_id_t context_handle,
a9e6df4
+     int qop_req,
a9e6df4
+     gss_buffer_t message_buffer,
a9e6df4
+     gss_buffer_t msg_token)
a9e6df4
+ {
a9e6df4
+ 
a9e6df4
+     /* Initialize outputs. */
a9e6df4
+ 
a9e6df4
+     if (minor_status != NULL)
a9e6df4
+ 	*minor_status = 0;
a9e6df4
+ 
a9e6df4
+     if (msg_token != GSS_C_NO_BUFFER) {
a9e6df4
+ 	msg_token->value = NULL;
a9e6df4
+ 	msg_token->length = 0;
a9e6df4
+     }
a9e6df4
+ 
a9e6df4
+     /* Validate arguments. */
a9e6df4
+ 
a9e6df4
+     if (minor_status == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     if (context_handle == GSS_C_NO_CONTEXT)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT);
a9e6df4
+ 
a9e6df4
+     if (message_buffer == GSS_C_NO_BUFFER)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
+ 
a9e6df4
+     if (msg_token == GSS_C_NO_BUFFER)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     return (GSS_S_COMPLETE);
a9e6df4
+ }
a9e6df4
+ 
a9e6df4
+ 
a9e6df4
  OM_uint32 KRB5_CALLCONV
a9e6df4
  gss_sign (minor_status,
a9e6df4
            context_handle,
a9e6df4
***************
a9e6df4
*** 46,66 ****
a9e6df4
      gss_union_ctx_id_t	ctx;
a9e6df4
      gss_mechanism	mech;
a9e6df4
  
a9e6df4
!     if (minor_status == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
!     *minor_status = 0;
a9e6df4
! 
a9e6df4
!     if (context_handle == GSS_C_NO_CONTEXT)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT);
a9e6df4
! 
a9e6df4
!     if (message_buffer == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
! 
a9e6df4
!     if (msg_token == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
-     msg_token->value = NULL;
a9e6df4
-     msg_token->length = 0;
a9e6df4
      /*
a9e6df4
       * select the approprate underlying mechanism routine and
a9e6df4
       * call it.
a9e6df4
--- 83,93 ----
a9e6df4
      gss_union_ctx_id_t	ctx;
a9e6df4
      gss_mechanism	mech;
a9e6df4
  
a9e6df4
!     status = val_sign_args(minor_status, context_handle,
a9e6df4
! 			   qop_req, message_buffer, msg_token);
a9e6df4
!     if (status != GSS_S_COMPLETE)
a9e6df4
! 	return (status);
a9e6df4
  
a9e6df4
      /*
a9e6df4
       * select the approprate underlying mechanism routine and
a9e6df4
       * call it.
a9e6df4
Index: src/lib/gssapi/mechglue/g_delete_sec_context.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_delete_sec_context.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_delete_sec_context.c	(working copy)
a9e6df4
***************
a9e6df4
*** 32,37 ****
a9e6df4
--- 32,66 ----
a9e6df4
  #include <stdlib.h>
a9e6df4
  #endif
a9e6df4
  
a9e6df4
+ static OM_uint32
a9e6df4
+ val_del_sec_ctx_args(
a9e6df4
+     OM_uint32 *minor_status,
a9e6df4
+     gss_ctx_id_t *context_handle,
a9e6df4
+     gss_buffer_t output_token)
a9e6df4
+ {
a9e6df4
+ 
a9e6df4
+     /* Initialize outputs. */
a9e6df4
+ 
a9e6df4
+     if (minor_status != NULL)
a9e6df4
+ 	*minor_status = 0;
a9e6df4
+ 
a9e6df4
+     if (output_token != GSS_C_NO_BUFFER) {
a9e6df4
+ 	output_token->length = 0;
a9e6df4
+ 	output_token->value = NULL;
a9e6df4
+     }
a9e6df4
+ 
a9e6df4
+     /* Validate arguments. */
a9e6df4
+ 
a9e6df4
+     if (minor_status == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     if (context_handle == NULL || *context_handle == GSS_C_NO_CONTEXT)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE | GSS_S_NO_CONTEXT);
a9e6df4
+ 
a9e6df4
+     return (GSS_S_COMPLETE);
a9e6df4
+ }
a9e6df4
+ 
a9e6df4
+ 
a9e6df4
  OM_uint32 KRB5_CALLCONV 
a9e6df4
  gss_delete_sec_context (minor_status,
a9e6df4
                          context_handle,
a9e6df4
***************
a9e6df4
*** 45,62 ****
a9e6df4
      OM_uint32		status;
a9e6df4
      gss_union_ctx_id_t	ctx;
a9e6df4
      gss_mechanism	mech;
a9e6df4
-     
a9e6df4
-     if (minor_status == NULL)
a9e6df4
- 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
- 
a9e6df4
-     if (output_token != GSS_C_NO_BUFFER) {
a9e6df4
- 	output_token->length = 0;
a9e6df4
- 	output_token->value = NULL;
a9e6df4
-     }
a9e6df4
  
a9e6df4
!     /* if the context_handle is Null, return NO_CONTEXT error */
a9e6df4
!     if(context_handle == NULL || *context_handle == GSS_C_NO_CONTEXT)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT);
a9e6df4
  
a9e6df4
      /*
a9e6df4
       * select the approprate underlying mechanism routine and
a9e6df4
--- 74,83 ----
a9e6df4
      OM_uint32		status;
a9e6df4
      gss_union_ctx_id_t	ctx;
a9e6df4
      gss_mechanism	mech;
a9e6df4
  
a9e6df4
!     status = val_del_sec_ctx_args(minor_status, context_handle, output_token);
a9e6df4
!     if (status != GSS_S_COMPLETE)
a9e6df4
! 	return (status);
a9e6df4
  
a9e6df4
      /*
a9e6df4
       * select the approprate underlying mechanism routine and
a9e6df4
Index: src/lib/gssapi/mechglue/g_init_sec_context.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_init_sec_context.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_init_sec_context.c	(working copy)
a9e6df4
***************
a9e6df4
*** 33,38 ****
a9e6df4
--- 33,86 ----
a9e6df4
  #endif
a9e6df4
  #include <string.h>
a9e6df4
  
a9e6df4
+ static OM_uint32
a9e6df4
+ val_init_sec_ctx_args(
a9e6df4
+     OM_uint32 *minor_status,
a9e6df4
+     gss_cred_id_t claimant_cred_handle,
a9e6df4
+     gss_ctx_id_t *context_handle,
a9e6df4
+     gss_name_t target_name,
a9e6df4
+     gss_OID req_mech_type,
a9e6df4
+     OM_uint32 req_flags,
a9e6df4
+     OM_uint32 time_req,
a9e6df4
+     gss_channel_bindings_t input_chan_bindings,
a9e6df4
+     gss_buffer_t input_token,
a9e6df4
+     gss_OID *actual_mech_type,
a9e6df4
+     gss_buffer_t output_token,
a9e6df4
+     OM_uint32 *ret_flags,
a9e6df4
+     OM_uint32 *time_rec)
a9e6df4
+ {
a9e6df4
+ 
a9e6df4
+     /* Initialize outputs. */
a9e6df4
+ 
a9e6df4
+     if (minor_status != NULL)
a9e6df4
+ 	*minor_status = 0;
a9e6df4
+ 
a9e6df4
+     if (actual_mech_type != NULL)
a9e6df4
+ 	*actual_mech_type = GSS_C_NO_OID;
a9e6df4
+ 
a9e6df4
+     if (output_token != GSS_C_NO_BUFFER) {
a9e6df4
+ 	output_token->length = 0;
a9e6df4
+ 	output_token->value = NULL;
a9e6df4
+     }
a9e6df4
+ 
a9e6df4
+     /* Validate arguments. */
a9e6df4
+ 
a9e6df4
+     if (minor_status == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     if (context_handle == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE | GSS_S_NO_CONTEXT);
a9e6df4
+ 
a9e6df4
+     if (target_name == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME);
a9e6df4
+ 
a9e6df4
+     if (output_token == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     return (GSS_S_COMPLETE);
a9e6df4
+ }
a9e6df4
+ 
a9e6df4
+ 
a9e6df4
  OM_uint32 KRB5_CALLCONV
a9e6df4
  gss_init_sec_context (minor_status,
a9e6df4
                        claimant_cred_handle,
a9e6df4
***************
a9e6df4
*** 72,101 ****
a9e6df4
      gss_mechanism	mech;
a9e6df4
      gss_cred_id_t	input_cred_handle;
a9e6df4
  
a9e6df4
!     if (minor_status == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
!     *minor_status = 0;
a9e6df4
!     output_token->length = 0;
a9e6df4
!     output_token->value = NULL;
a9e6df4
! 
a9e6df4
!     /* clear output values */
a9e6df4
!     if (actual_mech_type)
a9e6df4
! 	*actual_mech_type = NULL;
a9e6df4
! 
a9e6df4
!     if (context_handle == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE | GSS_S_NO_CONTEXT);
a9e6df4
! 
a9e6df4
!     union_name = (gss_union_name_t) target_name;
a9e6df4
! 
a9e6df4
!     if (target_name == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME);
a9e6df4
! 
a9e6df4
!     if (output_token == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
! 
a9e6df4
!     output_token->value = NULL;
a9e6df4
!     output_token->length = 0;
a9e6df4
! 
a9e6df4
  
a9e6df4
      if (req_mech_type)
a9e6df4
  	mech_type = (gss_OID)req_mech_type;
a9e6df4
--- 120,140 ----
a9e6df4
      gss_mechanism	mech;
a9e6df4
      gss_cred_id_t	input_cred_handle;
a9e6df4
  
a9e6df4
!     status = val_init_sec_ctx_args(minor_status,
a9e6df4
! 				   claimant_cred_handle,
a9e6df4
! 				   context_handle,
a9e6df4
! 				   target_name,
a9e6df4
! 				   req_mech_type,
a9e6df4
! 				   req_flags,
a9e6df4
! 				   time_req,
a9e6df4
! 				   input_chan_bindings,
a9e6df4
! 				   input_token,
a9e6df4
! 				   actual_mech_type,
a9e6df4
! 				   output_token,
a9e6df4
! 				   ret_flags,
a9e6df4
! 				   time_rec);
a9e6df4
!     if (status != GSS_S_COMPLETE)
a9e6df4
! 	return (status);
a9e6df4
  
a9e6df4
      if (req_mech_type)
a9e6df4
  	mech_type = (gss_OID)req_mech_type;
a9e6df4
Index: src/lib/gssapi/mechglue/g_inq_cred.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_inq_cred.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_inq_cred.c	(working copy)
a9e6df4
***************
a9e6df4
*** 55,71 ****
a9e6df4
      gss_mechanism	mech;
a9e6df4
      gss_name_t		internal_name;
a9e6df4
      int			i;
a9e6df4
-     
a9e6df4
-     /* check parms and set to defaults */
a9e6df4
-     if (minor_status == NULL)
a9e6df4
- 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
-     *minor_status = 0;
a9e6df4
  
a9e6df4
!     if (name)
a9e6df4
! 	*name = NULL;
a9e6df4
  
a9e6df4
!     if (mechanisms)
a9e6df4
! 	*mechanisms = NULL;
a9e6df4
  
a9e6df4
      if (cred_handle == GSS_C_NO_CREDENTIAL) {
a9e6df4
  	/*
a9e6df4
--- 55,75 ----
a9e6df4
      gss_mechanism	mech;
a9e6df4
      gss_name_t		internal_name;
a9e6df4
      int			i;
a9e6df4
  
a9e6df4
!     /* Initialize outputs. */
a9e6df4
! 
a9e6df4
!     if (minor_status != NULL)
a9e6df4
! 	*minor_status = 0;
a9e6df4
! 
a9e6df4
!     if (name != NULL)
a9e6df4
! 	*name = GSS_C_NO_NAME;
a9e6df4
! 
a9e6df4
!     if (mechanisms != NULL)
a9e6df4
! 	*mechanisms = GSS_C_NO_OID_SET;
a9e6df4
  
a9e6df4
!     /* Validate arguments. */
a9e6df4
!     if (minor_status == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
      if (cred_handle == GSS_C_NO_CREDENTIAL) {
a9e6df4
  	/*
a9e6df4
***************
a9e6df4
*** 216,221 ****
a9e6df4
--- 220,233 ----
a9e6df4
      OM_uint32		status, temp_minor_status;
a9e6df4
      gss_name_t		internal_name;
a9e6df4
  
a9e6df4
+     if (minor_status != NULL)
a9e6df4
+ 	*minor_status = 0;
a9e6df4
+ 
a9e6df4
+     if (name != NULL)
a9e6df4
+ 	*name = GSS_C_NO_NAME;
a9e6df4
+ 
a9e6df4
+     if (minor_status == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
      mech = gssint_get_mechanism (mech_type);
a9e6df4
      if (!mech)
a9e6df4
Index: src/lib/gssapi/mechglue/g_imp_name.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_imp_name.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_imp_name.c	(working copy)
a9e6df4
***************
a9e6df4
*** 38,43 ****
a9e6df4
--- 38,77 ----
a9e6df4
  /* local function to import GSS_C_EXPORT_NAME names */
a9e6df4
  static OM_uint32 importExportName(OM_uint32 *, gss_union_name_t);
a9e6df4
  
a9e6df4
+ static OM_uint32
a9e6df4
+ val_imp_name_args(
a9e6df4
+     OM_uint32 *minor_status,
a9e6df4
+     gss_buffer_t input_name_buffer,
a9e6df4
+     gss_OID input_name_type,
a9e6df4
+     gss_name_t *output_name)
a9e6df4
+ {
a9e6df4
+ 
a9e6df4
+     /* Initialize outputs. */
a9e6df4
+ 
a9e6df4
+     if (minor_status != NULL)
a9e6df4
+ 	*minor_status = 0;
a9e6df4
+ 
a9e6df4
+     if (output_name != NULL)
a9e6df4
+ 	*output_name = GSS_C_NO_NAME;
a9e6df4
+ 
a9e6df4
+     /* Validate arguments. */
a9e6df4
+ 
a9e6df4
+     if (minor_status == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     if (output_name == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     if (input_name_buffer == GSS_C_NO_BUFFER)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME);
a9e6df4
+ 
a9e6df4
+     if (GSS_EMPTY_BUFFER(input_name_buffer))
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME);
a9e6df4
+ 
a9e6df4
+     return (GSS_S_COMPLETE);
a9e6df4
+ }
a9e6df4
+ 
a9e6df4
+ 
a9e6df4
  OM_uint32 KRB5_CALLCONV
a9e6df4
  gss_import_name(minor_status,
a9e6df4
                  input_name_buffer,
a9e6df4
***************
a9e6df4
*** 53,74 ****
a9e6df4
      gss_union_name_t	union_name;
a9e6df4
      OM_uint32		tmp, major_status = GSS_S_FAILURE;
a9e6df4
  
a9e6df4
!     /* check output parameters */
a9e6df4
!     if (!minor_status)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
! 
a9e6df4
!     *minor_status = 0;
a9e6df4
! 
a9e6df4
!     if (output_name == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
! 
a9e6df4
!     *output_name = 0;
a9e6df4
! 
a9e6df4
!     if (input_name_buffer == GSS_C_NO_BUFFER)
a9e6df4
! 	return (GSS_S_BAD_NAME);
a9e6df4
! 
a9e6df4
!     if (GSS_EMPTY_BUFFER(input_name_buffer))
a9e6df4
! 	return (GSS_S_BAD_NAME);
a9e6df4
  
a9e6df4
      /*
a9e6df4
       * First create the union name struct that will hold the external
a9e6df4
--- 87,97 ----
a9e6df4
      gss_union_name_t	union_name;
a9e6df4
      OM_uint32		tmp, major_status = GSS_S_FAILURE;
a9e6df4
  
a9e6df4
!     major_status = val_imp_name_args(minor_status,
a9e6df4
! 				     input_name_buffer, input_name_type,
a9e6df4
! 				     output_name);
a9e6df4
!     if (major_status != GSS_S_COMPLETE)
a9e6df4
! 	return (major_status);
a9e6df4
  
a9e6df4
      /*
a9e6df4
       * First create the union name struct that will hold the external
a9e6df4
Index: src/lib/gssapi/mechglue/g_compare_name.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/g_compare_name.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/g_compare_name.c	(working copy)
a9e6df4
***************
a9e6df4
*** 33,38 ****
a9e6df4
--- 33,63 ----
a9e6df4
  #endif
a9e6df4
  #include <string.h>
a9e6df4
  
a9e6df4
+ static OM_uint32
a9e6df4
+ val_comp_name_args(
a9e6df4
+     OM_uint32 *minor_status,
a9e6df4
+     gss_name_t name1,
a9e6df4
+     gss_name_t name2,
a9e6df4
+     int *name_equal)
a9e6df4
+ {
a9e6df4
+ 
a9e6df4
+     /* Initialize outputs. */
a9e6df4
+ 
a9e6df4
+     if (minor_status != NULL)
a9e6df4
+ 	*minor_status = 0;
a9e6df4
+ 
a9e6df4
+     /* Validate arguments. */
a9e6df4
+ 
a9e6df4
+     if (name1 == GSS_C_NO_NAME || name2 == GSS_C_NO_NAME)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME);
a9e6df4
+ 
a9e6df4
+     if (name_equal == NULL)
a9e6df4
+ 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
+ 
a9e6df4
+     return (GSS_S_COMPLETE);
a9e6df4
+ }
a9e6df4
+ 
a9e6df4
+ 
a9e6df4
  OM_uint32 KRB5_CALLCONV
a9e6df4
  gss_compare_name (minor_status,
a9e6df4
                    name1,
a9e6df4
***************
a9e6df4
*** 50,64 ****
a9e6df4
      gss_mechanism	mech;
a9e6df4
      gss_name_t		internal_name;
a9e6df4
      
a9e6df4
!     if (minor_status == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
!     *minor_status = 0;
a9e6df4
! 
a9e6df4
!     if (name1 == 0 || name2 == 0)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME);
a9e6df4
! 
a9e6df4
!     if (name_equal == NULL)
a9e6df4
! 	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
      union_name1 = (gss_union_name_t) name1;
a9e6df4
      union_name2 = (gss_union_name_t) name2;
a9e6df4
--- 75,84 ----
a9e6df4
      gss_mechanism	mech;
a9e6df4
      gss_name_t		internal_name;
a9e6df4
      
a9e6df4
!     major_status = val_comp_name_args(minor_status,
a9e6df4
! 				      name1, name2, name_equal);
a9e6df4
!     if (major_status != GSS_S_COMPLETE)
a9e6df4
! 	return (major_status);
a9e6df4
  
a9e6df4
      union_name1 = (gss_union_name_t) name1;
a9e6df4
      union_name2 = (gss_union_name_t) name2;
a9e6df4
Index: src/lib/gssapi/mechglue/oid_ops.c
a9e6df4
===================================================================
a9e6df4
*** src/lib/gssapi/mechglue/oid_ops.c	(revision 18858)
a9e6df4
--- src/lib/gssapi/mechglue/oid_ops.c	(working copy)
a9e6df4
***************
a9e6df4
*** 49,55 ****
a9e6df4
      if (minor_status)
a9e6df4
  	*minor_status = 0;
a9e6df4
  
a9e6df4
!     if (*oid == GSS_C_NO_OID)
a9e6df4
  	return(GSS_S_COMPLETE);
a9e6df4
  
a9e6df4
      /*
a9e6df4
--- 49,55 ----
a9e6df4
      if (minor_status)
a9e6df4
  	*minor_status = 0;
a9e6df4
  
a9e6df4
!     if (oid == NULL || *oid == GSS_C_NO_OID)
a9e6df4
  	return(GSS_S_COMPLETE);
a9e6df4
  
a9e6df4
      /*
a9e6df4
***************
a9e6df4
*** 227,238 ****
a9e6df4
      unsigned char	*cp;
a9e6df4
      char		*bp;
a9e6df4
  
a9e6df4
!     *minor_status = 0;
a9e6df4
  
a9e6df4
      if (oid == NULL || oid->length == 0 || oid->elements == NULL)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
  
a9e6df4
!     if (oid_str == NULL)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
      /* Decoded according to krb5/gssapi_krb5.c */
a9e6df4
--- 227,244 ----
a9e6df4
      unsigned char	*cp;
a9e6df4
      char		*bp;
a9e6df4
  
a9e6df4
!     if (minor_status != NULL)
a9e6df4
! 	*minor_status = 0;
a9e6df4
! 
a9e6df4
!     if (oid_str != GSS_C_NO_BUFFER) {
a9e6df4
! 	oid_str->length = 0;
a9e6df4
! 	oid_str->value = NULL;
a9e6df4
!     }
a9e6df4
  
a9e6df4
      if (oid == NULL || oid->length == 0 || oid->elements == NULL)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
  
a9e6df4
!     if (oid_str == GSS_C_NO_BUFFER)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
      /* Decoded according to krb5/gssapi_krb5.c */
a9e6df4
***************
a9e6df4
*** 307,313 ****
a9e6df4
      int		index;
a9e6df4
      unsigned char *op;
a9e6df4
  
a9e6df4
!     *minor_status = 0;
a9e6df4
  
a9e6df4
      if (GSS_EMPTY_BUFFER(oid_str))
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
--- 313,323 ----
a9e6df4
      int		index;
a9e6df4
      unsigned char *op;
a9e6df4
  
a9e6df4
!     if (minor_status != NULL)
a9e6df4
! 	*minor_status = 0;
a9e6df4
! 
a9e6df4
!     if (oid != NULL)
a9e6df4
! 	*oid = GSS_C_NO_OID;
a9e6df4
  
a9e6df4
      if (GSS_EMPTY_BUFFER(oid_str))
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
***************
a9e6df4
*** 458,473 ****
a9e6df4
      OM_uint32 major = GSS_S_COMPLETE;
a9e6df4
      OM_uint32 index;
a9e6df4
  
a9e6df4
!     if (minor_status)
a9e6df4
  	*minor_status = 0;
a9e6df4
  
a9e6df4
!     if (oidset == NULL)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
  
a9e6df4
      if (new_oidset == NULL)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
- 
a9e6df4
-     *new_oidset = NULL;
a9e6df4
  
a9e6df4
      if ((copy = (gss_OID_set_desc *) calloc(1, sizeof (*copy))) == NULL) {
a9e6df4
  	major = GSS_S_FAILURE;
a9e6df4
--- 468,484 ----
a9e6df4
      OM_uint32 major = GSS_S_COMPLETE;
a9e6df4
      OM_uint32 index;
a9e6df4
  
a9e6df4
!     if (minor_status != NULL)
a9e6df4
  	*minor_status = 0;
a9e6df4
  
a9e6df4
!     if (new_oidset != NULL)
a9e6df4
! 	*new_oidset = GSS_C_NO_OID_SET;
a9e6df4
! 
a9e6df4
!     if (oidset == GSS_C_NO_OID_SET)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_READ);
a9e6df4
  
a9e6df4
      if (new_oidset == NULL)
a9e6df4
  	return (GSS_S_CALL_INACCESSIBLE_WRITE);
a9e6df4
  
a9e6df4
      if ((copy = (gss_OID_set_desc *) calloc(1, sizeof (*copy))) == NULL) {
a9e6df4
  	major = GSS_S_FAILURE;
a9e6df4
Index: src/kadmin/server/ovsec_kadmd.c
a9e6df4
===================================================================
a9e6df4
*** src/kadmin/server/ovsec_kadmd.c	(revision 18858)
a9e6df4
--- src/kadmin/server/ovsec_kadmd.c	(working copy)
a9e6df4
***************
a9e6df4
*** 993,998 ****
a9e6df4
--- 993,1003 ----
a9e6df4
       int i;
a9e6df4
       const char *procname;
a9e6df4
  
a9e6df4
+      client.length = 0;
a9e6df4
+      client.value = NULL;
a9e6df4
+      server.length = 0;
a9e6df4
+      server.value = NULL;
a9e6df4
+ 
a9e6df4
       (void) gss_display_name(&minor, client_name, &client, &gss_type);
a9e6df4
       (void) gss_display_name(&minor, server_name, &server, &gss_type);
a9e6df4
       if (client.value == NULL)