Path: blob/main/crypto/heimdal/lib/gssapi/mech/gss_display_name.c
34907 views
/*-1* Copyright (c) 2005 Doug Rabson2* All rights reserved.3*4* Redistribution and use in source and binary forms, with or without5* modification, are permitted provided that the following conditions6* are met:7* 1. Redistributions of source code must retain the above copyright8* notice, this list of conditions and the following disclaimer.9* 2. Redistributions in binary form must reproduce the above copyright10* notice, this list of conditions and the following disclaimer in the11* documentation and/or other materials provided with the distribution.12*13* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND14* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE15* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE16* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE17* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL18* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS19* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)20* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT21* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY22* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF23* SUCH DAMAGE.24*25* $FreeBSD: src/lib/libgssapi/gss_display_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $26*/2728#include "mech_locl.h"2930GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL31gss_display_name(OM_uint32 *minor_status,32const gss_name_t input_name,33gss_buffer_t output_name_buffer,34gss_OID *output_name_type)35{36OM_uint32 major_status;37struct _gss_name *name = (struct _gss_name *) input_name;38struct _gss_mechanism_name *mn;3940_mg_buffer_zero(output_name_buffer);41if (output_name_type)42*output_name_type = GSS_C_NO_OID;4344if (name == NULL) {45*minor_status = 0;46return (GSS_S_BAD_NAME);47}4849/*50* If we know it, copy the buffer used to import the name in51* the first place. Otherwise, ask all the MNs in turn if52* they can display the thing.53*/54if (name->gn_value.value) {55output_name_buffer->value = malloc(name->gn_value.length);56if (!output_name_buffer->value) {57*minor_status = ENOMEM;58return (GSS_S_FAILURE);59}60output_name_buffer->length = name->gn_value.length;61memcpy(output_name_buffer->value, name->gn_value.value,62output_name_buffer->length);63if (output_name_type)64*output_name_type = &name->gn_type;6566*minor_status = 0;67return (GSS_S_COMPLETE);68} else {69HEIM_SLIST_FOREACH(mn, &name->gn_mn, gmn_link) {70major_status = mn->gmn_mech->gm_display_name(71minor_status, mn->gmn_name,72output_name_buffer,73output_name_type);74if (major_status == GSS_S_COMPLETE)75return (GSS_S_COMPLETE);76}77}7879*minor_status = 0;80return (GSS_S_FAILURE);81}828384