Path: blob/main/crypto/krb5/src/lib/gssapi/mechglue/g_dsp_name.c
39586 views
/* #pragma ident "@(#)g_dsp_name.c 1.13 04/02/23 SMI" */1/*2* Copyright 1996 by Sun Microsystems, Inc.3*4* Permission to use, copy, modify, distribute, and sell this software5* and its documentation for any purpose is hereby granted without fee,6* provided that the above copyright notice appears in all copies and7* that both that copyright notice and this permission notice appear in8* supporting documentation, and that the name of Sun Microsystems not be used9* in advertising or publicity pertaining to distribution of the software10* without specific, written prior permission. Sun Microsystems makes no11* representations about the suitability of this software for any12* purpose. It is provided "as is" without express or implied warranty.13*14* SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,15* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO16* EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR17* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF18* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR19* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR20* PERFORMANCE OF THIS SOFTWARE.21*/2223/*24* glue routine for gss_display_name()25*26*/2728#include "mglueP.h"29#include <stdio.h>30#ifdef HAVE_STDLIB_H31#include <stdlib.h>32#endif33#include <string.h>3435static OM_uint3236val_dsp_name_args(37OM_uint32 *minor_status,38gss_name_t input_name,39gss_buffer_t output_name_buffer,40gss_OID *output_name_type)41{4243/* Initialize outputs. */4445if (minor_status != NULL)46*minor_status = 0;4748if (output_name_buffer != GSS_C_NO_BUFFER) {49output_name_buffer->length = 0;50output_name_buffer->value = NULL;51}5253if (output_name_type != NULL)54*output_name_type = GSS_C_NO_OID;5556/* Validate arguments. */5758if (minor_status == NULL)59return (GSS_S_CALL_INACCESSIBLE_WRITE);6061if (output_name_buffer == GSS_C_NO_BUFFER)62return (GSS_S_CALL_INACCESSIBLE_WRITE);6364if (input_name == GSS_C_NO_NAME)65return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME);6667return (GSS_S_COMPLETE);68}697071OM_uint32 KRB5_CALLCONV72gss_display_name(OM_uint32 *minor_status, gss_name_t input_name,73gss_buffer_t output_name_buffer, gss_OID *output_name_type)74{75OM_uint32 major_status;76gss_union_name_t union_name;7778major_status = val_dsp_name_args(minor_status, input_name,79output_name_buffer, output_name_type);80if (major_status != GSS_S_COMPLETE)81return (major_status);8283union_name = (gss_union_name_t) input_name;8485if (union_name->mech_type) {86/*87* OK, we have a mechanism-specific name; let's use it!88*/89return (gssint_display_internal_name(minor_status,90union_name->mech_type,91union_name->mech_name,92output_name_buffer,93output_name_type));94}9596if ((output_name_buffer->value =97gssalloc_malloc(union_name->external_name->length + 1)) == NULL)98return (GSS_S_FAILURE);99output_name_buffer->length = union_name->external_name->length;100(void) memcpy(output_name_buffer->value,101union_name->external_name->value,102union_name->external_name->length);103((char *)output_name_buffer->value)[output_name_buffer->length] = '\0';104105if (output_name_type != NULL)106*output_name_type = union_name->name_type;107108return(GSS_S_COMPLETE);109}110111112